You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ke...@apache.org on 2004/07/17 02:06:38 UTC

svn commit: rev 22985 - in incubator/beehive: . controls controls/drt controls/drt/controls controls/drt/controls/org controls/drt/controls/org/apache controls/drt/controls/org/apache/beehive controls/drt/controls/org/apache/beehive/controls controls/drt/controls/org/apache/beehive/controls/test controls/drt/controls/org/apache/beehive/controls/test/basic controls/drt/controls/org/apache/beehive/controls/test/checker controls/drt/controls/org/apache/beehive/controls/test/composition controls/drt/controls/org/apache/beehive/controls/test/context controls/drt/controls/org/apache/beehive/controls/test/properties controls/drt/controls/org/apache/beehive/controls/test/util controls/drt/tests controls/drt/tests/org controls/drt/tests/org/apache controls/drt/tests/org/apache/beehive controls/drt/tests/org/apache/beehive/controls controls/drt/tests/org/apache/beehive/controls/test controls/drt/tests/org/apache/beehive/controls/test/context controls/drt/tests/org/apache/beehive/controls/test/properties controls/drt/tests/org/apache/beehive/controls/test/util controls/src controls/src/api controls/src/api/org controls/src/api/org/apache controls/src/api/org/apache/beehive controls/src/api/org/apache/beehive/controls controls/src/api/org/apache/beehive/controls/api controls/src/api/org/apache/beehive/controls/api/bean controls/src/api/org/apache/beehive/controls/api/context controls/src/api/org/apache/beehive/controls/api/events controls/src/api/org/apache/beehive/controls/api/properties controls/src/runtime controls/src/runtime/META-INF controls/src/runtime/META-INF/services controls/src/runtime/org controls/src/runtime/org/apache controls/src/runtime/org/apache/beehive controls/src/runtime/org/apache/beehive/controls controls/src/runtime/org/apache/beehive/controls/runtime controls/src/runtime/org/apache/beehive/controls/runtime/bean controls/src/runtime/org/apache/beehive/controls/runtime/generator controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect controls/src/runtime/org/apache/beehive/controls/runtime/servlet controls/test controls/test/src controls/test/src/controls controls/test/src/controls/org controls/test/src/controls/org/apache controls/test/src/controls/org/apache/beehive controls/test/src/controls/org/apache/beehive/controls controls/test/src/controls/org/apache/beehive/controls/test controls/test/src/controls/org/apache/beehive/controls/test/controls controls/test/src/controls/org/apache/beehive/controls/test/controls/basic controls/test/src/controls/org/apache/beehive/controls/test/controls/composition controls/test/src/controls/org/apache/beehive/controls/test/controls/context controls/test/src/controls/org/apache/beehive/controls/test/controls/instantiate controls/test/src/controls/org/apache/beehive/controls/test/controls/properties controls/test/src/controls/org/apache/beehive/controls/test/controls/util controls/test/src/driver controls/test/src/driver/org controls/test/src/driver/org/apache controls/test/src/driver/org/apache/beehive controls/test/src/driver/org/apache/beehive/controls controls/test/src/driver/org/apache/beehive/controls/test controls/test/src/driver/org/apache/beehive/controls/test/driver controls/test/src/driver/org/apache/beehive/controls/test/driver/context controls/test/src/driver/org/apache/beehive/controls/test/driver/instantiate controls/test/src/driver/org/apache/beehive/controls/test/driver/property controls/test/src/junit controls/test/src/junit/org controls/test/src/junit/org/apache controls/test/src/junit/org/apache/beehive controls/test/src/junit/org/apache/beehive/controls controls/test/src/junit/org/apache/beehive/controls/test controls/test/src/junit/org/apache/beehive/controls/test/java controls/test/src/junit/org/apache/beehive/controls/test/java/context controls/test/src/junit/org/apache/beehive/controls/test/java/instantiate controls/test/src/junit/org/apache/beehive/controls/test/java/property controls/test/tools controls/test/tools/lib external external/ant external/junit external/log4j external/tomcat external/velocity external/xmlbeans netui netui/ant netui/external netui/external/struts netui/external/tomcat netui/external/tomcat/4x netui/external/xdoclet netui/src netui/src/bootstrap netui/src/bootstrap/org netui/src/bootstrap/org/apache netui/src/bootstrap/org/apache/beehive netui/src/bootstrap/org/apache/beehive/netui netui/src/bootstrap/org/apache/beehive/netui/tools netui/src/bootstrap/org/apache/beehive/netui/tools/ant netui/src/bootstrap/org/apache/beehive/netui/tools/tld netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet netui/src/bootstrap/org/apache/beehive/netui/tools/tldx netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/xdoclet netui/src/compiler netui/src/compiler/META-INF netui/src/compiler/META-INF/services netui/src/compiler/org netui/src/compiler/org/apache netui/src/compiler/org/apache/beehive netui/src/compiler/org/apache/beehive/netui netui/src/compiler/org/apache/beehive/netui/annotations netui/src/compiler/org/apache/beehive/netui/compiler netui/src/compiler/org/apache/beehive/netui/compiler/apt netui/src/compiler/org/apache/beehive/netui/compiler/genmodel netui/src/compiler/org/apache/beehive/netui/compiler/grammar netui/src/compiler/org/apache/beehive/netui/compiler/model netui/src/compiler/org/apache/beehive/netui/compiler/model/validation netui/src/compiler/org/apache/beehive/netui/pageflow netui/src/compiler/org/apache/beehive/netui/pageflow/annotations netui/src/compiler/schema netui/src/compiler/schema/struts-config netui/src/compiler/schema/struts-validator netui/src/javascript netui/src/javascript/tagshtml netui/src/pageflow netui/src/pageflow/org netui/src/pageflow/org/apache netui/src/pageflow/org/apache/beehive netui/src/pageflow/org/apache/beehive/netui netui/src/pageflow/org/apache/beehive/netui/pageflow netui/src/pageflow/org/apache/beehive/netui/pageflow/annotations netui/src/pageflow/org/apache/beehive/netui/pageflow/config netui/src/pageflow/org/apache/beehive/netui/pageflow/handler netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor netui/src/pageflow/org/apache/beehive/netui/pageflow/internal netui/src/pageflow/org/apache/beehive/netui/pageflow/util netui/src/pageflow/org/apache/beehive/netui/pageflow/validation netui/src/pageflow/org/apache/beehive/netui/script netui/src/pageflow/org/apache/beehive/netui/script/common netui/src/pageflow/org/apache/beehive/netui/script/el netui/src/pageflow/org/apache/beehive/netui/script/el/parser netui/src/pageflow/org/apache/beehive/netui/script/el/tokens netui/src/pageflow/org/apache/beehive/netui/script/el/util netui/src/pageflow/schema netui/src/scoping netui/src/scoping/org netui/src/scoping/org/apache netui/src/scoping/org/apache/beehive netui/src/scoping/org/apache/beehive/netui netui/src/scoping/org/apache/beehive/netui/pageflow netui/src/scoping/org/apache/beehive/netui/pageflow/scoping netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal netui/src/tags-databinding netui/src/tags-databinding/org netui/src/tags-databinding/org/apache netui/src/tags-databinding/org/apache/beehive netui/src/tags-databinding/org/apache/beehive/netui netui/src/tags-databinding/org/apache/beehive/netui/databinding netui/src/tags-databinding/org/apache/beehive/netui/databinding/script netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/common netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/el netui/src/tags-databinding/org/apache/beehive/netui/tags netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/style netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/bundle netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/style netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/message netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/pageinput netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/pad netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/script netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/xml netui/src/tags-datagrid netui/src/tags-datagrid/org netui/src/tags-datagrid/org/apache netui/src/tags-datagrid/org/apache/beehive netui/src/tags-datagrid/org/apache/beehive/netui netui/src/tags-datagrid/org/apache/beehive/netui/datagrid netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/util netui/src/tags-datagrid/org/apache/beehive/netui/tags netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid netui/src/tags-html netui/src/tags-html/org netui/src/tags-html/org/apache netui/src/tags-html/org/apache/beehive netui/src/tags-html/org/apache/beehive/netui netui/src/tags-html/org/apache/beehive/netui/tags netui/src/tags-html/org/apache/beehive/netui/tags/html netui/src/tags-html/org/apache/beehive/netui/tags/html/images netui/src/tags-html/org/apache/beehive/netui/tags/naming netui/src/tags-html/org/apache/beehive/netui/tags/rendering netui/src/tags-html/org/apache/beehive/netui/tags/tree netui/src/tags-template netui/src/tags-template/org netui/src/tags-template/org/apache netui/src/tags-template/org/apache/beehive netui/src/tags-template/org/apache/beehive/netui netui/src/tags-template/org/apache/beehive/netui/tags netui/src/tags-template/org/apache/beehive/netui/tags/template netui/src/tomcat-common netui/src/tomcat-common/4x netui/src/tomcat-common/4x/org netui/src/tomcat-common/4x/org/apache netui/src/tomcat-common/4x/org/apache/beehive netui/src/tomcat-common/4x/org/apache/beehive/netui netui/src/tomcat-common/4x/org/apache/beehive/netui/tomcat netui/src/tomcat-server netui/src/tomcat-server/4x netui/src/tomcat-server/4x/org netui/src/tomcat-server/4x/org/apache netui/src/tomcat-server/4x/org/apache/beehive netui/src/tomcat-server/4x/org/apache/beehive/netui netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat netui/src/tomcat-webapp netui/src/tomcat-webapp/4x netui/src/tomcat-webapp/4x/org netui/src/tomcat-webapp/4x/org/apache netui/src/tomcat-webapp/4x/org/apache/beehive netui/src/tomcat-webapp/4x/org/apache/beehive/netui netui/src/tomcat-webapp/4x/org/apache/beehive/netui/tomcat netui/src/util netui/src/util/org netui/src/util/org/apache netui/src/util/org/apache/beehive netui/src/util/org/apache/beehive/netui netui/src/util/org/apache/beehive/netui/util netui/src/util/org/apache/beehive/netui/util/cache netui/src/util/org/apache/beehive/netui/util/classloader netui/src/util/org/apache/beehive/netui/util/config netui/src/util/org/apache/beehive/netui/util/exception netui/src/util/org/apache/beehive/netui/util/iterator netui/src/util/org/apache/beehive/netui/util/logging netui/src/util/org/apache/beehive/netui/util/tags netui/src/util/org/apache/beehive/netui/util/type netui/src/util/schema netui/src/webapp-template netui/src/webapp-template/config netui/src/webapp-template/datagrid netui/src/webapp-template/dd netui/src/webapp-template/dd/generic netui/src/webapp-template/dd/tomcat netui/src/webapp-template/default netui/test netui/test/ant netui/test/ant/junitStyles netui/test/conf netui/test/external netui/test/src netui/test/src/fauxServlet netui/test/src/fauxServlet/org netui/test/src/fauxServlet/org/apache netui/test/src/fauxServlet/org/apache/beehive netui/test/src/fauxServlet/org/apache/beehive/netui netui/test/src/fauxServlet/org/apache/beehive/netui/test netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet netui/test/src/junitTests netui/test/src/junitTests/com netui/test/src/junitTests/com/bea netui/test/src/junitTests/com/bea/netuix netui/test/src/junitTests/com/bea/netuix/servlets netui/test/src/junitTests/com/bea/netuix/servlets/script netui/test/src/junitTests/org netui/test/src/junitTests/org/apache netui/test/src/junitTests/org/apache/beehive netui/test/src/junitTests/org/apache/beehive/netui netui/test/src/junitTests/org/apache/beehive/netui/test netui/test/src/junitTests/org/apache/beehive/netui/test/databinding netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/expression netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata netui/test/src/junitTests/org/apache/beehive/netui/test/script netui/test/src/junitTests/org/apache/beehive/netui/test/script/el netui/test/src/junitTests/org/apache/beehive/netui/test/tools netui/test/src/junitTests/org/apache/beehive/netui/test/util netui/test/src/junitTests/org/apache/beehive/netui/test/util/config netui/test/src/junitTests/org/apache/beehive/netui/test/util/iterator netui/test/src/junitTests/org/apache/beehive/netui/test/util/type netui/test/src/junitTests/org/apache/beehive/netui/util netui/test/src/junitTests/org/apache/beehive/netui/util/config netui/test/src/testBeans netui/test/src/testBeans/org netui/test/src/testBeans/org/apache netui/test/src/testBeans/org/apache/beehive netui/test/src/testBeans/org/apache/beehive/netui netui/test/src/testBeans/org/apache/beehive/netui/test netui/test/src/testBeans/org/apache/beehive/netui/test/beans netui/test/src/testRecorder netui/test/src/testRecorder/jsp netui/test/src/testRecorder/org netui/test/src/testRecorder/org/apache netui/test/src/testRecorder/org/apache/beehive netui/test/src/testRecorder/org/apache/beehive/netui netui/test/src/testRecorder/org/apache/beehive/netui/tools netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/ant netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/util netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans netui/test/src/testRecorder/schema netui/test/src/testRecorderQA netui/test/src/testRecorderQA/data netui/test/src/testRecorderQA/org netui/test/src/testRecorderQA/org/apache netui/test/src/testRecorderQA/org/apache/beehive netui/test/src/testRecorderQA/org/apache/beehive/netui netui/test/src/testRecorderQA/org/apache/beehive/netui/tools netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa netui/test/src/tools netui/test/src/tools/org netui/test/src/tools/org/apache netui/test/src/tools/org/apache/beehive netui/test/src/tools/org/apache/beehive/netui netui/test/src/tools/org/apache/beehive/netui/tools netui/test/src/tools/org/apache/beehive/netui/tools/ant netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit netui/test/webapps netui/test/webapps/drt netui/test/webapps/drt/coreWeb netui/test/webapps/drt/coreWeb/WEB-INF netui/test/webapps/drt/coreWeb/WEB-INF/interOp netui/test/webapps/drt/coreWeb/WEB-INF/schemas netui/test/webapps/drt/coreWeb/WEB-INF/src netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/callMethod netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/type netui/test/webapps/drt/coreWeb/WEB-INF/src/error netui/test/webapps/drt/coreWeb/WEB-INF/src/errors netui/test/webapps/drt/coreWeb/WEB-INF/src/exceptions netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1 netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2 netui/test/webapps/drt/coreWeb/WEB-INF/src/global netui/test/webapps/drt/coreWeb/WEB-INF/src/interOp netui/test/webapps/drt/coreWeb/WEB-INF/src/interOp/test1 netui/test/webapps/drt/coreWeb/WEB-INF/src/jpfScopedForms netui/test/webapps/drt/coreWeb/WEB-INF/src/jpfScopedForms/test55 netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/webinfSrc netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856 netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/struts netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13 netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal netui/test/webapps/drt/coreWeb/WEB-INF/src/models netui/test/webapps/drt/coreWeb/WEB-INF/src/moduleConfigLocator netui/test/webapps/drt/coreWeb/WEB-INF/src/org netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test/databinding netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test/databinding/beans netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowUtils netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test12 netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test23 netui/test/webapps/drt/coreWeb/WEB-INF/src/properties netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/resources netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/struts netui/test/webapps/drt/coreWeb/WEB-INF/src/qaUtil netui/test/webapps/drt/coreWeb/WEB-INF/src/resources netui/test/webapps/drt/coreWeb/WEB-INF/src/returnTo netui/test/webapps/drt/coreWeb/WEB-INF/src/returnTo/test63 netui/test/webapps/drt/coreWeb/WEB-INF/src/returnToTest netui/test/webapps/drt/coreWeb/WEB-INF/src/shared netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test4 netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test7 netui/test/webapps/drt/coreWeb/WEB-INF/src/util netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test54 netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test56 netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test57 netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test58 netui/test/webapps/drt/coreWeb/WEB-INF/src/validation netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/basic netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/validator netui/test/webapps/drt/coreWeb/WEB-INF/src/xml netui/test/webapps/drt/coreWeb/bugs netui/test/webapps/drt/coreWeb/bugs/b13789 netui/test/webapps/drt/coreWeb/bugs/b13797 netui/test/webapps/drt/coreWeb/bugs/b13803 netui/test/webapps/drt/coreWeb/bugs/b13881 netui/test/webapps/drt/coreWeb/bugs/b14259 netui/test/webapps/drt/coreWeb/bugs/b14386 netui/test/webapps/drt/coreWeb/bugs/b14683 netui/test/webapps/drt/coreWeb/bugs/b14754 netui/test/webapps/drt/coreWeb/bugs/b14764 netui/test/webapps/drt/coreWeb/bugs/b14781 netui/test/webapps/drt/coreWeb/bugs/b14787 netui/test/webapps/drt/coreWeb/bugs/b14826 netui/test/webapps/drt/coreWeb/bugs/b15095 netui/test/webapps/drt/coreWeb/bugs/b15174 netui/test/webapps/drt/coreWeb/bugs/b15175 netui/test/webapps/drt/coreWeb/bugs/b15234 netui/test/webapps/drt/coreWeb/bugs/b15392 netui/test/webapps/drt/coreWeb/bugs/b15392/nesting netui/test/webapps/drt/coreWeb/bugs/b15430 netui/test/webapps/drt/coreWeb/bugs/b15454 netui/test/webapps/drt/coreWeb/bugs/b15574 netui/test/webapps/drt/coreWeb/bugs/b15590 netui/test/webapps/drt/coreWeb/bugs/b15642 netui/test/webapps/drt/coreWeb/bugs/b15964 netui/test/webapps/drt/coreWeb/bugs/b16092 netui/test/webapps/drt/coreWeb/bugs/b16451 netui/test/webapps/drt/coreWeb/bugs/b17287 netui/test/webapps/drt/coreWeb/bugs/b17461 netui/test/webapps/drt/coreWeb/bugs/b18025 netui/test/webapps/drt/coreWeb/bugs/b18067 netui/test/webapps/drt/coreWeb/bugs/b18068 netui/test/webapps/drt/coreWeb/bugs/b22957 netui/test/webapps/drt/coreWeb/bugs/b24356 netui/test/webapps/drt/coreWeb/bugs/b27852 netui/test/webapps/drt/coreWeb/bugs/b28133 netui/test/webapps/drt/coreWeb/bugs/b28160 netui/test/webapps/drt/coreWeb/bugs/b28421 netui/test/webapps/drt/coreWeb/bugs/b28633 netui/test/webapps/drt/coreWeb/bugs/b28774 netui/test/webapps/drt/coreWeb/bugs/b28774/bug1 netui/test/webapps/drt/coreWeb/bugs/b28774/bug2 netui/test/webapps/drt/coreWeb/bugs/b28775 netui/test/webapps/drt/coreWeb/bugs/b28775/bug1 netui/test/webapps/drt/coreWeb/bugs/b30458 netui/test/webapps/drt/coreWeb/bugs/b33322 netui/test/webapps/drt/coreWeb/bugs/b33704 netui/test/webapps/drt/coreWeb/bugs/b33807 netui/test/webapps/drt/coreWeb/bugs/b34059 netui/test/webapps/drt/coreWeb/bugs/b34263 netui/test/webapps/drt/coreWeb/bugs/b34566 netui/test/webapps/drt/coreWeb/bugs/b34998 netui/test/webapps/drt/coreWeb/bugs/b35037 netui/test/webapps/drt/coreWeb/bugs/b35037b netui/test/webapps/drt/coreWeb/bugs/b35084 netui/test/webapps/drt/coreWeb/bugs/b35084b netui/test/webapps/drt/coreWeb/bugs/b35094 netui/test/webapps/drt/coreWeb/bugs/b35261 netui/test/webapps/drt/coreWeb/bugs/b35261/nest netui/test/webapps/drt/coreWeb/bugs/b36628 netui/test/webapps/drt/coreWeb/bugs/b36628b netui/test/webapps/drt/coreWeb/bugs/b36628b/foo netui/test/webapps/drt/coreWeb/bugs/b37240 netui/test/webapps/drt/coreWeb/bugs/b37374 netui/test/webapps/drt/coreWeb/bugs/b37913 netui/test/webapps/drt/coreWeb/bugs/b38182 netui/test/webapps/drt/coreWeb/bugs/b38183 netui/test/webapps/drt/coreWeb/bugs/b38184 netui/test/webapps/drt/coreWeb/bugs/b39363 netui/test/webapps/drt/coreWeb/bugs/b39434 netui/test/webapps/drt/coreWeb/bugs/b39552 netui/test/webapps/drt/coreWeb/bugs/b39820 netui/test/webapps/drt/coreWeb/bugs/b40031 netui/test/webapps/drt/coreWeb/bugs/b40596 netui/test/webapps/drt/coreWeb/bugs/b40862 netui/test/webapps/drt/coreWeb/bugs/b40999 netui/test/webapps/drt/coreWeb/bugs/b41391 netui/test/webapps/drt/coreWeb/bugs/b42065 netui/test/webapps/drt/coreWeb/bugs/b42486 netui/test/webapps/drt/coreWeb/bugs/b42558 netui/test/webapps/drt/coreWeb/bugs/b43011 netui/test/webapps/drt/coreWeb/bugs/cr121496 netui/test/webapps/drt/coreWeb/bugs/cr124972 netui/test/webapps/drt/coreWeb/bugs/cr132760 netui/test/webapps/drt/coreWeb/bugs/cr137279 netui/test/webapps/drt/coreWeb/bugs/cr176508 netui/test/webapps/drt/coreWeb/bugs/cr180865 netui/test/webapps/drt/coreWeb/bugs/cr183774 netui/test/webapps/drt/coreWeb/checkboxDemo netui/test/webapps/drt/coreWeb/controlTests netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow netui/test/webapps/drt/coreWeb/controlTests/getData netui/test/webapps/drt/coreWeb/databinding netui/test/webapps/drt/coreWeb/databinding/anybean netui/test/webapps/drt/coreWeb/databinding/bundle netui/test/webapps/drt/coreWeb/databinding/bundle/basic netui/test/webapps/drt/coreWeb/databinding/bundle/basicerror netui/test/webapps/drt/coreWeb/databinding/bundle/basicnojpf netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundle netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundleerror netui/test/webapps/drt/coreWeb/databinding/bundle/struts netui/test/webapps/drt/coreWeb/databinding/callMethod netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow netui/test/webapps/drt/coreWeb/databinding/callMethod/choiceMethod netui/test/webapps/drt/coreWeb/databinding/callMethod/overloading netui/test/webapps/drt/coreWeb/databinding/callMethod/returnNull netui/test/webapps/drt/coreWeb/databinding/cellRepeater netui/test/webapps/drt/coreWeb/databinding/cellrepeatererror netui/test/webapps/drt/coreWeb/databinding/controls netui/test/webapps/drt/coreWeb/databinding/controls/methodTest netui/test/webapps/drt/coreWeb/databinding/datagrid netui/test/webapps/drt/coreWeb/databinding/datagrid/basic netui/test/webapps/drt/coreWeb/databinding/datagrid/resources netui/test/webapps/drt/coreWeb/databinding/datagrid/resources/image netui/test/webapps/drt/coreWeb/databinding/datagrid/site netui/test/webapps/drt/coreWeb/databinding/datagrid/site/css netui/test/webapps/drt/coreWeb/databinding/datagrid/util netui/test/webapps/drt/coreWeb/databinding/expressions netui/test/webapps/drt/coreWeb/databinding/globalApp netui/test/webapps/drt/coreWeb/databinding/globalApp/nojpf netui/test/webapps/drt/coreWeb/databinding/jstl netui/test/webapps/drt/coreWeb/databinding/message netui/test/webapps/drt/coreWeb/databinding/repeater netui/test/webapps/drt/coreWeb/databinding/repeater/booleanChoice netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures netui/test/webapps/drt/coreWeb/databinding/repeater/nested netui/test/webapps/drt/coreWeb/databinding/repeater/pad netui/test/webapps/drt/coreWeb/databinding/repeater/simple netui/test/webapps/drt/coreWeb/databinding/simplerepeater netui/test/webapps/drt/coreWeb/databinding/typeConverter netui/test/webapps/drt/coreWeb/databinding/xmlBeans netui/test/webapps/drt/coreWeb/databinding/xmlBeans/serialize netui/test/webapps/drt/coreWeb/demo netui/test/webapps/drt/coreWeb/demo/images netui/test/webapps/drt/coreWeb/directFormTest netui/test/webapps/drt/coreWeb/errors netui/test/webapps/drt/coreWeb/errors/anchorError netui/test/webapps/drt/coreWeb/errors/cellRepeaterError netui/test/webapps/drt/coreWeb/errors/expression netui/test/webapps/drt/coreWeb/errors/forward netui/test/webapps/drt/coreWeb/errors/htmlExpression netui/test/webapps/drt/coreWeb/errors/multipleDatasource netui/test/webapps/drt/coreWeb/errors/radioButtonError netui/test/webapps/drt/coreWeb/errors/repeaterErrors netui/test/webapps/drt/coreWeb/errors/repeaterPadError netui/test/webapps/drt/coreWeb/errors/tagImage netui/test/webapps/drt/coreWeb/errors/tagImageHtml netui/test/webapps/drt/coreWeb/errors/unhandledException netui/test/webapps/drt/coreWeb/except netui/test/webapps/drt/coreWeb/formBean netui/test/webapps/drt/coreWeb/formBean/test1 netui/test/webapps/drt/coreWeb/formBean/test2 netui/test/webapps/drt/coreWeb/formBeanRePost netui/test/webapps/drt/coreWeb/formBeanRePost/test52 netui/test/webapps/drt/coreWeb/formBeanRePost/test53 netui/test/webapps/drt/coreWeb/formTest netui/test/webapps/drt/coreWeb/global netui/test/webapps/drt/coreWeb/globalJpfs netui/test/webapps/drt/coreWeb/globalJpfs/nestReturn netui/test/webapps/drt/coreWeb/i18n netui/test/webapps/drt/coreWeb/i18n/localeOverride netui/test/webapps/drt/coreWeb/images netui/test/webapps/drt/coreWeb/index netui/test/webapps/drt/coreWeb/interOp netui/test/webapps/drt/coreWeb/interOp/test1 netui/test/webapps/drt/coreWeb/interOp/test1/Controller1 netui/test/webapps/drt/coreWeb/interOp/test1/Controller2 netui/test/webapps/drt/coreWeb/interOp/test1/Struts1 netui/test/webapps/drt/coreWeb/interOp/test2 netui/test/webapps/drt/coreWeb/interOp/test2/Controller1 netui/test/webapps/drt/coreWeb/interOp/test2/Struts1 netui/test/webapps/drt/coreWeb/interOp/test3 netui/test/webapps/drt/coreWeb/interOp/test3/Controller1 netui/test/webapps/drt/coreWeb/interOp/test3/Struts1 netui/test/webapps/drt/coreWeb/interOp/test4 netui/test/webapps/drt/coreWeb/interOp/test4/Controller1 netui/test/webapps/drt/coreWeb/interOp/test4/Controller2 netui/test/webapps/drt/coreWeb/interOp/test4/Struts1 netui/test/webapps/drt/coreWeb/interOp/test5 netui/test/webapps/drt/coreWeb/interOp/test5/Controller1 netui/test/webapps/drt/coreWeb/interOp/test5/Controller2 netui/test/webapps/drt/coreWeb/interOp/test5/Struts1 netui/test/webapps/drt/coreWeb/javascript netui/test/webapps/drt/coreWeb/javascript/jsAllScript netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml netui/test/webapps/drt/coreWeb/javascript/jsFind netui/test/webapps/drt/coreWeb/javascript/jsNoContainers netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId netui/test/webapps/drt/coreWeb/jpfScopedForms netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7 netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf1 netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf2 netui/test/webapps/drt/coreWeb/jpfScopedForms/test49 netui/test/webapps/drt/coreWeb/jpfScopedForms/test50 netui/test/webapps/drt/coreWeb/jpfScopedForms/test51 netui/test/webapps/drt/coreWeb/jpfScopedForms/test55 netui/test/webapps/drt/coreWeb/jpfScopedForms/test59 netui/test/webapps/drt/coreWeb/jpfSecurity netui/test/webapps/drt/coreWeb/jpfSecurity/test1 netui/test/webapps/drt/coreWeb/jpfSecurity/test2 netui/test/webapps/drt/coreWeb/jpfSecurity/test3 netui/test/webapps/drt/coreWeb/jpfSecurity/test60 netui/test/webapps/drt/coreWeb/legacy netui/test/webapps/drt/coreWeb/legacy/html netui/test/webapps/drt/coreWeb/legacy/imageAnchor netui/test/webapps/drt/coreWeb/miniTests netui/test/webapps/drt/coreWeb/miniTests/actionChaining netui/test/webapps/drt/coreWeb/miniTests/anchorFormPosting netui/test/webapps/drt/coreWeb/miniTests/anchorPosting netui/test/webapps/drt/coreWeb/miniTests/appState netui/test/webapps/drt/coreWeb/miniTests/appStatePass netui/test/webapps/drt/coreWeb/miniTests/appStatePass/nested netui/test/webapps/drt/coreWeb/miniTests/attrBinding netui/test/webapps/drt/coreWeb/miniTests/beginForm netui/test/webapps/drt/coreWeb/miniTests/beginForm/nesting netui/test/webapps/drt/coreWeb/miniTests/binding netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/doubleNested netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/other netui/test/webapps/drt/coreWeb/miniTests/buttonSubmit netui/test/webapps/drt/coreWeb/miniTests/cellRepeater netui/test/webapps/drt/coreWeb/miniTests/choiceRepeater netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/nothing netui/test/webapps/drt/coreWeb/miniTests/defaultValues netui/test/webapps/drt/coreWeb/miniTests/defaultValuesDirect netui/test/webapps/drt/coreWeb/miniTests/exceptHier netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage netui/test/webapps/drt/coreWeb/miniTests/formValid netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot netui/test/webapps/drt/coreWeb/miniTests/forwardToAction netui/test/webapps/drt/coreWeb/miniTests/globalAction netui/test/webapps/drt/coreWeb/miniTests/globalActionForm netui/test/webapps/drt/coreWeb/miniTests/globalForwards netui/test/webapps/drt/coreWeb/miniTests/interceptors netui/test/webapps/drt/coreWeb/miniTests/interceptors/nested netui/test/webapps/drt/coreWeb/miniTests/lifecycle netui/test/webapps/drt/coreWeb/miniTests/lifecycleExceptions netui/test/webapps/drt/coreWeb/miniTests/linkNav netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator netui/test/webapps/drt/coreWeb/miniTests/multiForms netui/test/webapps/drt/coreWeb/miniTests/multipartRequest netui/test/webapps/drt/coreWeb/miniTests/multipleForms netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest1 netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest2 netui/test/webapps/drt/coreWeb/miniTests/nesting netui/test/webapps/drt/coreWeb/miniTests/nesting/nested netui/test/webapps/drt/coreWeb/miniTests/nestingRepeater netui/test/webapps/drt/coreWeb/miniTests/nestingScope netui/test/webapps/drt/coreWeb/miniTests/nestingScope/scopeSub netui/test/webapps/drt/coreWeb/miniTests/nonNormalizedPath netui/test/webapps/drt/coreWeb/miniTests/overloadedActions netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/nested netui/test/webapps/drt/coreWeb/miniTests/padRepeater netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/another netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/nested netui/test/webapps/drt/coreWeb/miniTests/pageScope netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeOne netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeTwo netui/test/webapps/drt/coreWeb/miniTests/readonlyAction netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/nested netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/delegate netui/test/webapps/drt/coreWeb/miniTests/returnToPage netui/test/webapps/drt/coreWeb/miniTests/returnToPage/nested netui/test/webapps/drt/coreWeb/miniTests/roles netui/test/webapps/drt/coreWeb/miniTests/upload netui/test/webapps/drt/coreWeb/miniTests/urlBinding netui/test/webapps/drt/coreWeb/miniTests/validation netui/test/webapps/drt/coreWeb/miniTests/webinfSrc netui/test/webapps/drt/coreWeb/miscJpf netui/test/webapps/drt/coreWeb/miscJpf/bug21124 netui/test/webapps/drt/coreWeb/miscJpf/bug26856 netui/test/webapps/drt/coreWeb/miscJpf/bug26990 netui/test/webapps/drt/coreWeb/miscJpf/bug27848 netui/test/webapps/drt/coreWeb/miscJpf/bug30303 netui/test/webapps/drt/coreWeb/miscJpf/bug30448 netui/test/webapps/drt/coreWeb/miscJpf/bug30448/subJpf netui/test/webapps/drt/coreWeb/miscJpf/bug37949 netui/test/webapps/drt/coreWeb/miscJpf/bug38484 netui/test/webapps/drt/coreWeb/miscJpf/bug39028 netui/test/webapps/drt/coreWeb/miscJpf/bug40284 netui/test/webapps/drt/coreWeb/miscJpf/bug40380 netui/test/webapps/drt/coreWeb/miscJpf/bug40854 netui/test/webapps/drt/coreWeb/miscJpf/bug40862 netui/test/webapps/drt/coreWeb/miscJpf/bug41007 netui/test/webapps/drt/coreWeb/miscJpf/bug41007/subJpf netui/test/webapps/drt/coreWeb/miscJpf/bug42486 netui/test/webapps/drt/coreWeb/miscJpf/bug42846 netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfA netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfB netui/test/webapps/drt/coreWeb/miscJpf/test13 netui/test/webapps/drt/coreWeb/mockportal netui/test/webapps/drt/coreWeb/mockportal/listenTo netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToA netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB netui/test/webapps/drt/coreWeb/pageFlowCore netui/test/webapps/drt/coreWeb/pageFlowCore/anyBeanOverload netui/test/webapps/drt/coreWeb/pageFlowCore/anybean netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nested netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions netui/test/webapps/drt/coreWeb/pageFlowCore/forwards netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1 netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2 netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3 netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nullflow netui/test/webapps/drt/coreWeb/pageFlowCore/pfErrors netui/test/webapps/drt/coreWeb/pageFlowCore/pfGlobalApp netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageFlow netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput netui/test/webapps/drt/coreWeb/pageFlowCore/pfPrevious netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/nested netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/b netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nav netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nonSingleton netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/singleton netui/test/webapps/drt/coreWeb/pageFlowCore/restoreQueryString netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nested netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/nested netui/test/webapps/drt/coreWeb/pageInput netui/test/webapps/drt/coreWeb/pageInput/test1 netui/test/webapps/drt/coreWeb/pageInput/test10 netui/test/webapps/drt/coreWeb/pageInput/test10/sub1 netui/test/webapps/drt/coreWeb/pageInput/test11 netui/test/webapps/drt/coreWeb/pageInput/test12 netui/test/webapps/drt/coreWeb/pageInput/test14 netui/test/webapps/drt/coreWeb/pageInput/test16 netui/test/webapps/drt/coreWeb/pageInput/test17 netui/test/webapps/drt/coreWeb/pageInput/test18 netui/test/webapps/drt/coreWeb/pageInput/test19 netui/test/webapps/drt/coreWeb/pageInput/test20 netui/test/webapps/drt/coreWeb/pageInput/test21 netui/test/webapps/drt/coreWeb/pageInput/test22 netui/test/webapps/drt/coreWeb/pageInput/test23 netui/test/webapps/drt/coreWeb/pageInput/test24 netui/test/webapps/drt/coreWeb/pageInput/test25 netui/test/webapps/drt/coreWeb/pageInput/test26 netui/test/webapps/drt/coreWeb/pageInput/test29 netui/test/webapps/drt/coreWeb/pageInput/test3 netui/test/webapps/drt/coreWeb/pageInput/test4 netui/test/webapps/drt/coreWeb/pageInput/test5 netui/test/webapps/drt/coreWeb/pageInput/test6 netui/test/webapps/drt/coreWeb/pageInput/test7 netui/test/webapps/drt/coreWeb/pageInput/test8 netui/test/webapps/drt/coreWeb/pageInput/test9 netui/test/webapps/drt/coreWeb/resources netui/test/webapps/drt/coreWeb/resources/css netui/test/webapps/drt/coreWeb/resources/images netui/test/webapps/drt/coreWeb/resources/javascript netui/test/webapps/drt/coreWeb/resources/jsp netui/test/webapps/drt/coreWeb/results netui/test/webapps/drt/coreWeb/returnTo netui/test/webapps/drt/coreWeb/returnTo/test28 netui/test/webapps/drt/coreWeb/returnTo/test30 netui/test/webapps/drt/coreWeb/returnTo/test31 netui/test/webapps/drt/coreWeb/returnTo/test32 netui/test/webapps/drt/coreWeb/returnTo/test32/sub1 netui/test/webapps/drt/coreWeb/returnTo/test33 netui/test/webapps/drt/coreWeb/returnTo/test34 netui/test/webapps/drt/coreWeb/returnTo/test35 netui/test/webapps/drt/coreWeb/returnTo/test36 netui/test/webapps/drt/coreWeb/returnTo/test37 netui/test/webapps/drt/coreWeb/returnTo/test39 netui/test/webapps/drt/coreWeb/returnTo/test40 netui/test/webapps/drt/coreWeb/returnTo/test41 netui/test/webapps/drt/coreWeb/returnTo/test41/sub1 netui/test/webapps/drt/coreWeb/returnTo/test42 netui/test/webapps/drt/coreWeb/returnTo/test44 netui/test/webapps/drt/coreWeb/returnTo/test44/sub1 netui/test/webapps/drt/coreWeb/returnTo/test45 netui/test/webapps/drt/coreWeb/returnTo/test46 netui/test/webapps/drt/coreWeb/returnTo/test47 netui/test/webapps/drt/coreWeb/returnTo/test48 netui/test/webapps/drt/coreWeb/returnTo/test63 netui/test/webapps/drt/coreWeb/richTree netui/test/webapps/drt/coreWeb/scopedJpf netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf2 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/subJpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf2 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/subJpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf2 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/subJpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf2 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/subJpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf1 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf2 netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/subJpf1 netui/test/webapps/drt/coreWeb/security netui/test/webapps/drt/coreWeb/singletonJpf netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf1 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf2 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf1 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf2 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/subJpf1 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf1 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf2 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/subJpf1 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf1 netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf2 netui/test/webapps/drt/coreWeb/site netui/test/webapps/drt/coreWeb/strutsMerge netui/test/webapps/drt/coreWeb/strutsMerge/test2 netui/test/webapps/drt/coreWeb/strutsMerge/test3 netui/test/webapps/drt/coreWeb/strutsMerge/test4 netui/test/webapps/drt/coreWeb/strutsMerge/test6 netui/test/webapps/drt/coreWeb/strutsMerge/test62 netui/test/webapps/drt/coreWeb/strutsMerge/test7 netui/test/webapps/drt/coreWeb/strutsMerge/test8 netui/test/webapps/drt/coreWeb/tags netui/test/webapps/drt/coreWeb/tags/RepeatCheck netui/test/webapps/drt/coreWeb/tags/RepeatCheckOptionError netui/test/webapps/drt/coreWeb/tags/RepeatRadio netui/test/webapps/drt/coreWeb/tags/RepeatRadioOptionError netui/test/webapps/drt/coreWeb/tags/accesskey netui/test/webapps/drt/coreWeb/tags/accesskeyGroup netui/test/webapps/drt/coreWeb/tags/anchor netui/test/webapps/drt/coreWeb/tags/anchorActions netui/test/webapps/drt/coreWeb/tags/attributeTester netui/test/webapps/drt/coreWeb/tags/bindingUpdateErrors netui/test/webapps/drt/coreWeb/tags/bundle netui/test/webapps/drt/coreWeb/tags/buttonSubmitTagId netui/test/webapps/drt/coreWeb/tags/content netui/test/webapps/drt/coreWeb/tags/dateConverter netui/test/webapps/drt/coreWeb/tags/dateFormatString netui/test/webapps/drt/coreWeb/tags/disable netui/test/webapps/drt/coreWeb/tags/disableBinding netui/test/webapps/drt/coreWeb/tags/disableImageButton netui/test/webapps/drt/coreWeb/tags/errors netui/test/webapps/drt/coreWeb/tags/except netui/test/webapps/drt/coreWeb/tags/formatSelect netui/test/webapps/drt/coreWeb/tags/formatTags netui/test/webapps/drt/coreWeb/tags/hidden netui/test/webapps/drt/coreWeb/tags/imageAnchorActions netui/test/webapps/drt/coreWeb/tags/iteratorTests netui/test/webapps/drt/coreWeb/tags/labelDefaultValues netui/test/webapps/drt/coreWeb/tags/labelDefaults netui/test/webapps/drt/coreWeb/tags/labelLiteral netui/test/webapps/drt/coreWeb/tags/labelStyles netui/test/webapps/drt/coreWeb/tags/message netui/test/webapps/drt/coreWeb/tags/multiSelect netui/test/webapps/drt/coreWeb/tags/multiTree netui/test/webapps/drt/coreWeb/tags/nullableSelect netui/test/webapps/drt/coreWeb/tags/onTest netui/test/webapps/drt/coreWeb/tags/paramEncoding netui/test/webapps/drt/coreWeb/tags/paramMulti netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS netui/test/webapps/drt/coreWeb/tags/repeatSelect netui/test/webapps/drt/coreWeb/tags/repeatSelectTypeError netui/test/webapps/drt/coreWeb/tags/rewriteNameVar netui/test/webapps/drt/coreWeb/tags/rewriteTags netui/test/webapps/drt/coreWeb/tags/rtexpTagId netui/test/webapps/drt/coreWeb/tags/runtimeErrors netui/test/webapps/drt/coreWeb/tags/secureLinks netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure netui/test/webapps/drt/coreWeb/tags/secureLinks/secure netui/test/webapps/drt/coreWeb/tags/select netui/test/webapps/drt/coreWeb/tags/sessionBean netui/test/webapps/drt/coreWeb/tags/style netui/test/webapps/drt/coreWeb/tags/styleClass netui/test/webapps/drt/coreWeb/tags/styleOptions netui/test/webapps/drt/coreWeb/tags/tagIds netui/test/webapps/drt/coreWeb/tags/tagIteration netui/test/webapps/drt/coreWeb/tags/tagSizeBinding netui/test/webapps/drt/coreWeb/tags/tree netui/test/webapps/drt/coreWeb/tags/treeExprErrors netui/test/webapps/drt/coreWeb/tags/treeImages netui/test/webapps/drt/coreWeb/tags/treeNodeLabel netui/test/webapps/drt/coreWeb/tags/treeNodeTest netui/test/webapps/drt/coreWeb/tags/treeThree netui/test/webapps/drt/coreWeb/tags/treeTwo netui/test/webapps/drt/coreWeb/template netui/test/webapps/drt/coreWeb/template/divPanel netui/test/webapps/drt/coreWeb/template/divPanelTree netui/test/webapps/drt/coreWeb/template/tempErrors netui/test/webapps/drt/coreWeb/template/tempException netui/test/webapps/drt/coreWeb/template/tempNegate netui/test/webapps/drt/coreWeb/template/tempNest netui/test/webapps/drt/coreWeb/template/tempRelative netui/test/webapps/drt/coreWeb/template/tempRelative/image netui/test/webapps/drt/coreWeb/template/tempRelative/sub netui/test/webapps/drt/coreWeb/template/tempTest1 netui/test/webapps/drt/coreWeb/template/tempTest2 netui/test/webapps/drt/coreWeb/template/tempTest3 netui/test/webapps/drt/coreWeb/template/tempVisibility netui/test/webapps/drt/coreWeb/template/visible netui/test/webapps/drt/coreWeb/template/visibleError netui/test/webapps/drt/coreWeb/testRecorder netui/test/webapps/drt/coreWeb/tree netui/test/webapps/drt/coreWeb/tree/treeAttribute netui/test/webapps/drt/coreWeb/tree/treeAttributeBits netui/test/webapps/drt/coreWeb/tree/treeAutoErrors netui/test/webapps/drt/coreWeb/tree/treeClient netui/test/webapps/drt/coreWeb/tree/treeClientSubmit netui/test/webapps/drt/coreWeb/tree/treeMultiAttr netui/test/webapps/drt/coreWeb/tree/treeSelect netui/test/webapps/drt/coreWeb/tree/treeSelectDeprecated netui/test/webapps/drt/coreWeb/valFwdErr netui/test/webapps/drt/coreWeb/valFwdErr/test54 netui/test/webapps/drt/coreWeb/valFwdErr/test56 netui/test/webapps/drt/coreWeb/valFwdErr/test57 netui/test/webapps/drt/coreWeb/valFwdErr/test57/sub1 netui/test/webapps/drt/coreWeb/valFwdErr/test58 netui/test/webapps/drt/coreWeb/validation netui/test/webapps/drt/coreWeb/validation/basicValidation netui/test/webapps/drt/coreWeb/validation/strutsValidator netui/test/webapps/drt/coreWeb/xhtml netui/test/webapps/drt/coreWeb/xhtml/image netui/test/webapps/drt/testRecorder netui/test/webapps/drt/testRecorder/config netui/test/webapps/drt/testRecorder/tests netui/test/webapps/jsf netui/test/webapps/jsf/jsfWeb netui/test/webapps/jsf/jsfWeb/WEB-INF netui/test/webapps/jsf/jsfWeb/WEB-INF/src netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke netui/test/webapps/jsf/jsfWeb/faces netui/test/webapps/jsf/jsfWeb/faces/facesSmoke netui/test/webapps/jsf/testRecorder netui/test/webapps/jsf/testRecorder/config netui/test/webapps/jsf/testRecorder/tests netui/test/webapps/testRecorder-test netui/test/webapps/testRecorder-test/testRecorder netui/test/webapps/testRecorder-test/testRecorder-test netui/test/webapps/testRecorder-test/testRecorder-test/WEB-INF netui/test/webapps/testRecorder-test/testRecorder/config netui/test/webapps/testRecorder-test/testRecorder/tests netui/test/webapps/urlTemplates netui/test/webapps/urlTemplates/testRecorder netui/test/webapps/urlTemplates/testRecorder/config netui/test/webapps/urlTemplates/testRecorder/tests netui/test/webapps/urlTemplates/urlTemplates netui/test/webapps/urlTemplates/urlTemplates/WEB-INF netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/src netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/src/global netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates netui/test/webapps/webappBuild-test netui/test/webapps/webappBuild-test/webappBuild-test netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/schemas netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org/acme netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org/acme/beans netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/testdata netui/test/webapps/webappBuild-test/webappBuild-test/controls netui/test/webapps/webappBuild-test/webappBuild-test/controls/hello netui/test/webapps/webappBuild-test/webappBuild-test/jpfSmoke test test/ant test/conf tools tools/peanut tools/peanut/src tools/peanut/src/org tools/peanut/src/org/apache tools/peanut/src/org/apache/beehive tools/peanut/src/org/apache/beehive/peanut tools/peanut/src/org/apache/beehive/peanut/junit tools/peanut/src/org/apache/beehive/peanut/result tools/peanut/src/org/apache/beehive/peanut/result/logger tools/peanut/src/org/apache/beehive/peanut/util

Author: kentam
Date: Fri Jul 16 17:06:19 2004
New Revision: 22985

Added:
   incubator/beehive/BUILDING.txt   (contents, props changed)
   incubator/beehive/DEVELOPING.txt   (contents, props changed)
   incubator/beehive/beehive.properties   (contents, props changed)
   incubator/beehive/beehiveEnv.cmd   (contents, props changed)
   incubator/beehive/beehiveEnv.sh   (contents, props changed)
   incubator/beehive/build.xml   (contents, props changed)
   incubator/beehive/controls/
   incubator/beehive/controls/LICENSE.TXT
   incubator/beehive/controls/build.xml   (contents, props changed)
   incubator/beehive/controls/drt/
   incubator/beehive/controls/drt/build.xml   (contents, props changed)
   incubator/beehive/controls/drt/controls/
   incubator/beehive/controls/drt/controls/org/
   incubator/beehive/controls/drt/controls/org/apache/
   incubator/beehive/controls/drt/controls/org/apache/beehive/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Event.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/EventImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Hello.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/HelloImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/InnerOperExtend.jcx   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/InnerOperationImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperExcept.jcx   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperExtend.jcx   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Operation.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperationImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Outer.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloChecked.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloCheckedExtend.jcx   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloCheckedImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloChecker.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/Composer.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/ComposerImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/Nested.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/NestedImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/context/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/context/BaseContext.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/context/BaseContextImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/NestProps.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/NestPropsImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/Props.java   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/PropsExtension.jcx   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/PropsImpl.jcs   (contents, props changed)
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/util/
   incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/util/TestContext.java   (contents, props changed)
   incubator/beehive/controls/drt/tests/
   incubator/beehive/controls/drt/tests/org/
   incubator/beehive/controls/drt/tests/org/apache/
   incubator/beehive/controls/drt/tests/org/apache/beehive/
   incubator/beehive/controls/drt/tests/org/apache/beehive/controls/
   incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/
   incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/context/
   incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/context/ContextTest.java   (contents, props changed)
   incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/properties/
   incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/properties/PropTest.java   (contents, props changed)
   incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/util/
   incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/util/TestBeanContext.java   (contents, props changed)
   incubator/beehive/controls/src/
   incubator/beehive/controls/src/api/
   incubator/beehive/controls/src/api/org/
   incubator/beehive/controls/src/api/org/apache/
   incubator/beehive/controls/src/api/org/apache/beehive/
   incubator/beehive/controls/src/api/org/apache/beehive/controls/
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/ControlException.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/Control.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlBean.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlChecker.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlExtension.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlImplementation.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlInterface.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/DefaultControlChecker.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/Extensible.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/Context.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/ResourceContext.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/Client.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/EventHandler.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/EventSet.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/AnnotatedElementMap.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/BaseMap.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/BeanPropertyMap.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertyKey.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertyMap.java   (contents, props changed)
   incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertySet.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/
   incubator/beehive/controls/src/runtime/META-INF/
   incubator/beehive/controls/src/runtime/META-INF/services/
   incubator/beehive/controls/src/runtime/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
   incubator/beehive/controls/src/runtime/org/
   incubator/beehive/controls/src/runtime/org/apache/
   incubator/beehive/controls/src/runtime/org/apache/beehive/
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/BeanListener.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBeanContext.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlContainerContext.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlHandle.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlInitializer.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/InvokeListener.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/PropertySetProxy.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ResourceContextImpl.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptTask.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/CodeGenerationException.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/CodeGenerator.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ContextField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEvent.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEventHandler.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEventSet.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlImpl.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInitializer.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInitializer.vm   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInterface.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlOperation.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlProperty.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlPropertySet.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/EventAdaptor.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/EventField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenClass.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenMethod.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GeneratorOutput.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/IndentingWriter.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/SimpleFiler.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/VelocityGenerator.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptAnnotationHelper.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptClientField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptContextField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlImplementation.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlInterface.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEvent.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEventHandler.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEventSet.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptFieldHelper.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptMethodHelper.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptOperation.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptProperty.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptPropertySet.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlAnnotationProcessor.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlAnnotationProcessorFactory.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlClientAnnotationProcessor.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlClientAnnotationProcessorFactory.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/TwoPhaseAnnotationProcessor.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/strings.properties   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ClassUtils.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/FieldHelper.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/MethodHelper.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectClientField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectContextField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlField.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlImpl.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlInterface.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEvent.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEventHandler.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEventSet.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectOperation.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectProperty.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectPropertySet.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ControlFilter.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/HttpRequestService.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/HttpResponseService.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletBeanContext.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletContextService.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletRequestService.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletResponseService.java   (contents, props changed)
   incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletServiceProvider.java   (contents, props changed)
   incubator/beehive/controls/test/
   incubator/beehive/controls/test/build.xml   (contents, props changed)
   incubator/beehive/controls/test/src/
   incubator/beehive/controls/test/src/controls/
   incubator/beehive/controls/test/src/controls/org/
   incubator/beehive/controls/test/src/controls/org/apache/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Event.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/EventImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Hello.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/HelloImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperExcept.jcx   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperExtend.jcx   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Operation.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperationImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/Composer.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/ComposerImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/Nested.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/NestedImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/context/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/context/BaseContext.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/context/BaseContextImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/instantiate/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/instantiate/HelloControl.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/instantiate/HelloControlImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/NestProps.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/NestPropsImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/Props.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/PropsExtension.jcx   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/PropsImpl.jcs   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/util/
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/util/TestBeanContext.java   (contents, props changed)
   incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/util/TestContext.java   (contents, props changed)
   incubator/beehive/controls/test/src/driver/
   incubator/beehive/controls/test/src/driver/org/
   incubator/beehive/controls/test/src/driver/org/apache/
   incubator/beehive/controls/test/src/driver/org/apache/beehive/
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/context/
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/context/DriveBaseContextBean.java   (contents, props changed)
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/instantiate/
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/instantiate/DriveHelloControl.java   (contents, props changed)
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/property/
   incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java   (contents, props changed)
   incubator/beehive/controls/test/src/junit/
   incubator/beehive/controls/test/src/junit/org/
   incubator/beehive/controls/test/src/junit/org/apache/
   incubator/beehive/controls/test/src/junit/org/apache/beehive/
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/root.xml   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/context/
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/context/ContextTest.java   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/context/test.xml   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/instantiate/
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/instantiate/TestInstantiate.java   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/instantiate/test.xml   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/property/
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/property/PropTest.java   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/root.xml   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/root.xml   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/beehive/root.xml   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/apache/root.xml   (contents, props changed)
   incubator/beehive/controls/test/src/junit/org/root.xml   (contents, props changed)
   incubator/beehive/controls/test/src/junit/root.xml   (contents, props changed)
   incubator/beehive/controls/test/tools/
   incubator/beehive/controls/test/tools/lib/
   incubator/beehive/controls/test/tools/lib/milton.jar   (contents, props changed)
   incubator/beehive/external/
   incubator/beehive/external/ant/
   incubator/beehive/external/ant/apache-ant-1.6.1-bin.tar   (contents, props changed)
   incubator/beehive/external/ant/apache-ant-1.6.1-bin.zip   (contents, props changed)
   incubator/beehive/external/junit/
   incubator/beehive/external/junit/cpl-v10.html   (contents, props changed)
   incubator/beehive/external/junit/junit.jar   (contents, props changed)
   incubator/beehive/external/log4j/
   incubator/beehive/external/log4j/jakarta-log4j-1.2.8.zip   (contents, props changed)
   incubator/beehive/external/tomcat/
   incubator/beehive/external/tomcat/jakarta-tomcat-5.0.25.zip   (contents, props changed)
   incubator/beehive/external/velocity/
   incubator/beehive/external/velocity/velocity-1.4.jar   (contents, props changed)
   incubator/beehive/external/velocity/velocity-dep-1.4.jar   (contents, props changed)
   incubator/beehive/external/xmlbeans/
   incubator/beehive/external/xmlbeans/apache-xbean.jar   (contents, props changed)
   incubator/beehive/netui/
   incubator/beehive/netui/ant/
   incubator/beehive/netui/ant/bootstrap.properties   (contents, props changed)
   incubator/beehive/netui/ant/build.xml   (contents, props changed)
   incubator/beehive/netui/ant/buildModules.xml   (contents, props changed)
   incubator/beehive/netui/ant/common.properties   (contents, props changed)
   incubator/beehive/netui/ant/user.properties   (contents, props changed)
   incubator/beehive/netui/ant/webappTemplate.xml   (contents, props changed)
   incubator/beehive/netui/ant/xmlBean.xml   (contents, props changed)
   incubator/beehive/netui/build.xml   (contents, props changed)
   incubator/beehive/netui/external/
   incubator/beehive/netui/external/struts/
   incubator/beehive/netui/external/struts/LICENSE
   incubator/beehive/netui/external/struts/commons-beanutils.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-collections.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-dbcp.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-digester.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-fileupload.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-lang.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-logging.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-pool.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-resources.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-services.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/commons-validator.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/jakarta-oro.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/jdbc2_0-stdext.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/struts-bean.tld   (contents, props changed)
   incubator/beehive/netui/external/struts/struts-config_1_0.dtd   (contents, props changed)
   incubator/beehive/netui/external/struts/struts-config_1_1.dtd   (contents, props changed)
   incubator/beehive/netui/external/struts/struts-html.tld   (contents, props changed)
   incubator/beehive/netui/external/struts/struts-logic.tld   (contents, props changed)
   incubator/beehive/netui/external/struts/struts-nested.tld   (contents, props changed)
   incubator/beehive/netui/external/struts/struts-template.tld   (contents, props changed)
   incubator/beehive/netui/external/struts/struts-tiles.tld   (contents, props changed)
   incubator/beehive/netui/external/struts/struts.jar   (contents, props changed)
   incubator/beehive/netui/external/struts/tiles-config.dtd   (contents, props changed)
   incubator/beehive/netui/external/struts/tiles-config_1_1.dtd   (contents, props changed)
   incubator/beehive/netui/external/struts/validator-rules.xml   (contents, props changed)
   incubator/beehive/netui/external/struts/version.txt   (contents, props changed)
   incubator/beehive/netui/external/struts/web-app_2_2.dtd   (contents, props changed)
   incubator/beehive/netui/external/struts/web-app_2_3.dtd   (contents, props changed)
   incubator/beehive/netui/external/tomcat/
   incubator/beehive/netui/external/tomcat/4x/
   incubator/beehive/netui/external/tomcat/4x/catalina.jar   (contents, props changed)
   incubator/beehive/netui/external/tomcat/4x/servlet.jar   (contents, props changed)
   incubator/beehive/netui/external/tomcat/4x/tomcat-coyote.jar   (contents, props changed)
   incubator/beehive/netui/external/xdoclet/
   incubator/beehive/netui/external/xdoclet/xdoclet-1.2b4.jar   (contents, props changed)
   incubator/beehive/netui/external/xdoclet/xdoclet-web-module-1.2b4.jar   (contents, props changed)
   incubator/beehive/netui/external/xdoclet/xjavadoc-1.0.jar   (contents, props changed)
   incubator/beehive/netui/local-build.xml   (contents, props changed)
   incubator/beehive/netui/src/
   incubator/beehive/netui/src/bootstrap/
   incubator/beehive/netui/src/bootstrap/build.xml   (contents, props changed)
   incubator/beehive/netui/src/bootstrap/org/
   incubator/beehive/netui/src/bootstrap/org/apache/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/NetUITldTagsHandler.java   (contents, props changed)
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/ant/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/ant/BuildModules.java   (contents, props changed)
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/JspTaglibSubTask.java   (contents, props changed)
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/tld.xdt
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/TldxConfigTagsHandler.java   (contents, props changed)
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/TldxSubTask.java   (contents, props changed)
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/xdoclet/
   incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/xdoclet/tldx.xdt
   incubator/beehive/netui/src/bootstrap/xdoclet-xml.xdt
   incubator/beehive/netui/src/compiler/
   incubator/beehive/netui/src/compiler/META-INF/
   incubator/beehive/netui/src/compiler/META-INF/services/
   incubator/beehive/netui/src/compiler/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
   incubator/beehive/netui/src/compiler/build.xml   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/
   incubator/beehive/netui/src/compiler/org/apache/
   incubator/beehive/netui/src/compiler/org/apache/beehive/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/annotations/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/AnnotationGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/AnnotationMemberType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/BaseChecker.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/CompilerUtils.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/Diagnostics.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerChecker.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerGenerator.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerInfo.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FormBeanChecker.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/JpfLanguageConstants.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowGenerator.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/RuntimeVersionChecker.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/SharedFlowChecker.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/SharedFlowGenerator.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/apt/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessor.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessorFactory.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/DefaultValidatorRuleFactory.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenActionModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenActionOutputModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenExceptionModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenForwardModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenMessageResourcesModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenSimpleActionModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/ValidatorRuleFactory.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ActionGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/CatchGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/EnumType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ExceptionHandlerGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ForwardGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/JavaIdentifierType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MemberFieldType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MemberMethodType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MessageKeyType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MessageResourcesGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/SimpleActionGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/TypeNameType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/UniqueValueType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateRangeGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationBeanGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationFieldGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationLocaleRulesGrammar.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WritableFieldType.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ActionModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ActionOutputModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ExceptionContainer.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ExceptionModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/FormBeanModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ForwardContainer.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ForwardModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/MessageResourcesModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/NoWebInfDirectoryException.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/StrutsApp.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/StrutsElementSupport.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/LocaleSet.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatableEntity.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatableField.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidationModel.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorConstants.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorRule.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorRuleRange.java   (contents, props changed)
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/pageflow/
   incubator/beehive/netui/src/compiler/org/apache/beehive/netui/pageflow/annotations/
   incubator/beehive/netui/src/compiler/schema/
   incubator/beehive/netui/src/compiler/schema/struts-config/
   incubator/beehive/netui/src/compiler/schema/struts-config/config.xsdconfig   (contents, props changed)
   incubator/beehive/netui/src/compiler/schema/struts-config/struts-config_1_1.xsd   (contents, props changed)
   incubator/beehive/netui/src/compiler/schema/struts-validator/
   incubator/beehive/netui/src/compiler/schema/struts-validator/config.xsdconfig   (contents, props changed)
   incubator/beehive/netui/src/compiler/schema/struts-validator/struts-validator_1_1.xsd   (contents, props changed)
   incubator/beehive/netui/src/javascript/
   incubator/beehive/netui/src/javascript/tagshtml/
   incubator/beehive/netui/src/javascript/tagshtml/netui-tree.js   (contents, props changed)
   incubator/beehive/netui/src/pageflow/
   incubator/beehive/netui/src/pageflow/build.xml   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/
   incubator/beehive/netui/src/pageflow/org/apache/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionNotFoundException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionResolver.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionResult.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynaFormData.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/EmptyNestingStackException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowControllerFactory.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FormData.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/GlobalApp.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalActionOutputException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalOutputFormException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalOutputFormTypeException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalPageInputException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalRedirectOutputFormException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/InfiniteReturnToActionException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/LoginExpiredException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MismatchedActionOutputException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MismatchedPageInputException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MissingActionOutputException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MissingPageInputException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MultipartRequestUtils.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoCurrentPageFlowException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoMatchingActionMethodException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoPreviousActionException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoPreviousPageException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NotLoggedInException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowConstants.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowFileFilter.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowJspFilter.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PreviousActionInfo.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PreviousPageInfo.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestParameterHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestVariables.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ServerAdapter.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/StrutsModule.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/StrutsModuleFactory.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/UnfulfilledRolesException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/UnresolvableForwardException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/Validatable.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/annotations/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/annotations/Jpf.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionForward.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionMapping.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowControllerConfig.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowExceptionConfig.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ExceptionsHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ForwardRedirectHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/Handler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/LoginHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ReloadableClassHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptor.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChain.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChainConfig.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorConfig.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorsConfig.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/OriginalForward.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ActionResultImpl.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AnyBeanActionForm.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/BindingUpdateError.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedPageFlowInfo.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultServerAdapter.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalConstants.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ResponseOutputException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ReturnToException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/XmlBeanActionForm.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DOMUtils.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DefaultURLRewriter.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/PageflowTagUtils.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/TemplateHelper.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/URLRewriter.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/URLRewriterService.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/UrlTemplateDescriptor.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/validation/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/validation/defaultMessages.properties   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/Expression.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEngineFactory.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluationException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionUpdateException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/IllegalExpressionException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/RuntimeExpressionException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/AbstractScriptableMap.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ContextFactory.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/DataAccessProviderBean.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/DataAccessProviderStack.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/IDataAccessProvider.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectBean.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ScriptablePageInput.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIEL.jj   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParser.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParserConstants.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParserTokenManager.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/ParseException.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/SimpleCharStream.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/Token.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/TokenMgrError.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ArrayIndexToken.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ContextToken.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/IdentifierToken.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/MapKeyToken.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/AbstractAttributeMap.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ApplicationAttributeMap.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/BindingContext.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/PageContextAttributeMap.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestParameterMap.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java   (contents, props changed)
   incubator/beehive/netui/src/pageflow/schema/
   incubator/beehive/netui/src/pageflow/schema/Webapp23.xsd   (contents, props changed)
   incubator/beehive/netui/src/pageflow/schema/config.xsdconfig   (contents, props changed)
   incubator/beehive/netui/src/scoping/
   incubator/beehive/netui/src/scoping/build.xml   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/
   incubator/beehive/netui/src/scoping/org/apache/
   incubator/beehive/netui/src/scoping/org/apache/beehive/
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedRequest.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedResponse.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedServletUtils.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/AttributeContainer.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ParseUtils.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedAttributeContainer.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedRequestDispatcher.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedRequestImpl.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedResponseImpl.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedServletConfig.java   (contents, props changed)
   incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedSession.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/
   incubator/beehive/netui/src/tags-databinding/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/
   incubator/beehive/netui/src/tags-databinding/org/apache/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/common/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/el/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/el/BundleVariableResolver.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/el/ContainerVariableResolver.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/StructuredBaseTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/style/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/style/AbstractStyleBean.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/bundle/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/bundle/DeclareBundle.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/CellRepeater.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/style/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/style/CellRepeaterStyleBean.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/AbstractCallMethod.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/CallMethod.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/CallPageFlow.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/MethodParameter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/ObjectNotFoundException.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/message/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/message/Message.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/message/MessageArg.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/pageinput/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/pageinput/DeclarePageInput.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/Repeater.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterComponent.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterFooter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterHeader.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterItem.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/pad/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/pad/Pad.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/pad/PadContext.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/script/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/script/GetData.java   (contents, props changed)
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/xml/
   incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/xml/SerializeXML.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/
   incubator/beehive/netui/src/tags-datagrid/README.txt   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/
   incubator/beehive/netui/src/tags-datagrid/org/apache/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/ColumnModel.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/DataGridModel.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/IFilter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/ISort.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/PagerModel.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/StylePolicy.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/AnchorColumnModel.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultFilter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultSort.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultStylePolicy.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/EmptyStylePolicy.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/ImageColumnModel.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/LegacyStylePolicy.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/FilterService.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/IllegalFilterException.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/PagerService.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/SortService.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/util/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/util/AttributeHelper.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/AbstractColumn.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/AnchorColumn.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/Columns.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/DataGrid.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/ImageColumn.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/LiteralColumn.java   (contents, props changed)
   incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/Parameter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/
   incubator/beehive/netui/src/tags-html/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/
   incubator/beehive/netui/src/tags-html/org/apache/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractBaseTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractPageError.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/DataSourceTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/DefaultableDataSourceTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/ErrorReporter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/EvalErrorInfo.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/HtmlUtils.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IAttributeConsumer.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlAccessable.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlAttrs.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlCore.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlEvents.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlI18n.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlIdWriter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/OptionsDataSourceTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/ScriptReporter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/TagErrorInfo.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Attribute.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Base.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/BindingUpdateErrors.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Body.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Button.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBox.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBoxGroup.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBoxOption.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Content.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Error.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ErrorBaseTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Errors.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Exceptions.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FileUpload.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormLabel.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatDate.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatNumber.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatString.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Formattable.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Html.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlBaseTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlConstants.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlDataSourceTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlDefaultableDataSourceTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlFocusBaseTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlGroupBaseTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlOptionsDataSourceTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Image.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageButton.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/JavaScriptUtils.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Label.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/LabelBase.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Parameter.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ParameterMap.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RadioButtonGroup.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RadioButtonOption.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RewriteName.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RewriteURL.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptContainer.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptHeader.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Select.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/SelectOption.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextArea.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextBox.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/URLParams.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/folder_16_pad.gif   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/handledownlast.gif   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/handledownmiddle.gif   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/handlerightlast.gif   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/handlerightmiddle.gif   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/linelastnode.gif   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/linemiddlenode.gif   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/linevertical.gif   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/javaScript.properties   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/package.html   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/FormDataNameInterceptor.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/IndexedNameInterceptor.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/NameInterceptor.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/PrefixNameInterceptor.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/package.html   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/package.html   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractAttributeState.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractHtmlState.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractTagState.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AnchorTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/BaseTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/BodyTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/CaptionTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/ConstantRendering.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/DivTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/FormTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/HtmlTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/ImageTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputBooleanTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputFileTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputHiddenTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputImageTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputSubmitTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputTextTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/LabelTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/OptionTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/SelectTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/SpanTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TableTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TagHtmlBase.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TagRenderingBase.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TdTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TextAreaTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TrTag.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/AttributeRenderer.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/InheritableState.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeContent.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHelpers.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHtmlAttribute.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHtmlAttributeInfo.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeItem.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeLabel.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreePropertyOverride.java   (contents, props changed)
   incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/
   incubator/beehive/netui/src/tags-template/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/
   incubator/beehive/netui/src/tags-template/org/apache/
   incubator/beehive/netui/src/tags-template/org/apache/beehive/
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Attribute.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/DivPanel.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/IncludeSection.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Section.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/SetAttribute.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Template.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/TemplateConstants.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Visible.java   (contents, props changed)
   incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/package.html   (contents, props changed)
   incubator/beehive/netui/src/tomcat-common/
   incubator/beehive/netui/src/tomcat-common/4x/
   incubator/beehive/netui/src/tomcat-common/4x/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tomcat-common/4x/org/
   incubator/beehive/netui/src/tomcat-common/4x/org/apache/
   incubator/beehive/netui/src/tomcat-common/4x/org/apache/beehive/
   incubator/beehive/netui/src/tomcat-common/4x/org/apache/beehive/netui/
   incubator/beehive/netui/src/tomcat-common/4x/org/apache/beehive/netui/tomcat/
   incubator/beehive/netui/src/tomcat-common/4x/org/apache/beehive/netui/tomcat/PageflowHelper.java   (contents, props changed)
   incubator/beehive/netui/src/tomcat-common/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tomcat-server/
   incubator/beehive/netui/src/tomcat-server/4x/
   incubator/beehive/netui/src/tomcat-server/4x/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tomcat-server/4x/org/
   incubator/beehive/netui/src/tomcat-server/4x/org/apache/
   incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/
   incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/
   incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/
   incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/PageflowHelperImpl.java   (contents, props changed)
   incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/PageflowValve.java   (contents, props changed)
   incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/mbeans-descriptors.xml   (contents, props changed)
   incubator/beehive/netui/src/tomcat-server/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tomcat-webapp/
   incubator/beehive/netui/src/tomcat-webapp/4x/
   incubator/beehive/netui/src/tomcat-webapp/4x/build.xml   (contents, props changed)
   incubator/beehive/netui/src/tomcat-webapp/4x/org/
   incubator/beehive/netui/src/tomcat-webapp/4x/org/apache/
   incubator/beehive/netui/src/tomcat-webapp/4x/org/apache/beehive/
   incubator/beehive/netui/src/tomcat-webapp/4x/org/apache/beehive/netui/
   incubator/beehive/netui/src/tomcat-webapp/4x/org/apache/beehive/netui/tomcat/
   incubator/beehive/netui/src/tomcat-webapp/4x/org/apache/beehive/netui/tomcat/TomcatServerAdapter.java   (contents, props changed)
   incubator/beehive/netui/src/tomcat-webapp/build.xml   (contents, props changed)
   incubator/beehive/netui/src/util/
   incubator/beehive/netui/src/util/build.xml   (contents, props changed)
   incubator/beehive/netui/src/util/org/
   incubator/beehive/netui/src/util/org/apache/
   incubator/beehive/netui/src/util/org/apache/beehive/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/Bundle.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/FileUtils.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/HtmlExceptionFormatter.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/ParamHelper.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/ServletUtils.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/TemplateHelper.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/ClassLevelCache.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/MethodCache.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/PropertyCache.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/ServletContextCache.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/classloader/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/classloader/BouncyClassLoader.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/config/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/config/ConfigInitializationException.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/config/ConfigUtil.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedIllegalArgumentException.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedIllegalStateException.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedUnsupportedOperationException.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/ArrayIterator.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/AtomicObjectIterator.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/EmptyIterator.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactory.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactoryException.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/MapIterator.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/ResultSetIterator.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/Logger.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/StrutsLogFactory.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/StrutsLogger.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/netui.properties   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/tags/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/tags/GroupOption.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConversionException.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConverter.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConverterNotFoundException.java   (contents, props changed)
   incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeUtils.java   (contents, props changed)
   incubator/beehive/netui/src/util/schema/
   incubator/beehive/netui/src/util/schema/config.xsdconfig   (contents, props changed)
   incubator/beehive/netui/src/util/schema/netui-config.xsd   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/
   incubator/beehive/netui/src/webapp-template/config/
   incubator/beehive/netui/src/webapp-template/config/netui-config-default.xml   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/config/netui-config.xml   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/datagrid/
   incubator/beehive/netui/src/webapp-template/datagrid/_filter.js   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/datagrid/_grid.js   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/datagrid/arrow_down.png   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/datagrid/arrow_off.png   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/datagrid/arrow_up.png   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/datagrid/filter.gif   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/datagrid/filter.jsp   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/datagrid/noFilter.gif   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/dd/
   incubator/beehive/netui/src/webapp-template/dd/generic/
   incubator/beehive/netui/src/webapp-template/dd/generic/web.xml   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/dd/tomcat/
   incubator/beehive/netui/src/webapp-template/default/
   incubator/beehive/netui/src/webapp-template/default/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/default/Global.app   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/default/error.jsp   (contents, props changed)
   incubator/beehive/netui/src/webapp-template/default/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/
   incubator/beehive/netui/test/ant/
   incubator/beehive/netui/test/ant/build.xml   (contents, props changed)
   incubator/beehive/netui/test/ant/buildWebapp.xml   (contents, props changed)
   incubator/beehive/netui/test/ant/junit.xml   (contents, props changed)
   incubator/beehive/netui/test/ant/junitDrt.properties   (contents, props changed)
   incubator/beehive/netui/test/ant/junitReport.xml   (contents, props changed)
   incubator/beehive/netui/test/ant/junitStyles/
   incubator/beehive/netui/test/ant/junitStyles/junit-noframes.xsl
   incubator/beehive/netui/test/ant/test.properties   (contents, props changed)
   incubator/beehive/netui/test/ant/testRecorder.xml   (contents, props changed)
   incubator/beehive/netui/test/ant/testRecorderJunit.properties   (contents, props changed)
   incubator/beehive/netui/test/conf/
   incubator/beehive/netui/test/conf/junitLogCfg.xml   (contents, props changed)
   incubator/beehive/netui/test/conf/junitLogCfgVerbose.xml   (contents, props changed)
   incubator/beehive/netui/test/external/
   incubator/beehive/netui/test/external/commons-httpclient-2.0.jar   (contents, props changed)
   incubator/beehive/netui/test/external/xalan-241.jar   (contents, props changed)
   incubator/beehive/netui/test/src/
   incubator/beehive/netui/test/src/fauxServlet/
   incubator/beehive/netui/test/src/fauxServlet/build.xml   (contents, props changed)
   incubator/beehive/netui/test/src/fauxServlet/org/
   incubator/beehive/netui/test/src/fauxServlet/org/apache/
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/FauxPageContext.java   (contents, props changed)
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/HttpServletRequestHandler.java   (contents, props changed)
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/HttpServletResponseHandler.java   (contents, props changed)
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/ServletFactory.java   (contents, props changed)
   incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/ServletHandler.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/
   incubator/beehive/netui/test/src/junitTests/build.xml   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/com/
   incubator/beehive/netui/test/src/junitTests/com/bea/
   incubator/beehive/netui/test/src/junitTests/com/bea/netuix/
   incubator/beehive/netui/test/src/junitTests/com/bea/netuix/servlets/
   incubator/beehive/netui/test/src/junitTests/com/bea/netuix/servlets/script/
   incubator/beehive/netui/test/src/junitTests/com/bea/netuix/servlets/script/PortalVariableResolver.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/
   incubator/beehive/netui/test/src/junitTests/org/apache/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/expression/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/expression/IndexedNameTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle1.properties   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle1_de.properties   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle2.properties   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTestError.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ParsedExpressionTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ProcessPopulateTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELAccessTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELBundleScriptTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionObjectTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELParsedExpressionTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/tools/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/tools/AssertHelper.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/config/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/config/ConfigTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/iterator/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/iterator/IteratorFactoryTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/type/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/type/TypeUtilsTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/util/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/util/config/
   incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/util/config/ConfigUtil.java   (contents, props changed)
   incubator/beehive/netui/test/src/testBeans/
   incubator/beehive/netui/test/src/testBeans/build.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testBeans/org/
   incubator/beehive/netui/test/src/testBeans/org/apache/
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/BarJavaBean.java   (contents, props changed)
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/ComplexTypeActionForm.java   (contents, props changed)
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/FooJavaBean.java   (contents, props changed)
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/IProduct.java   (contents, props changed)
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/Product.java   (contents, props changed)
   incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/SimpleTypeActionForm.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/
   incubator/beehive/netui/test/src/testRecorder/build.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/
   incubator/beehive/netui/test/src/testRecorder/jsp/admin.inc   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/admin.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/forward.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/forward2.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/playback.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/record.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/redirect.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/sessionInfo.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/startRecord.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/status.inc   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/status.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/test.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/testInfo.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/jsp/testRecord.jsp   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/
   incubator/beehive/netui/test/src/testRecorder/org/apache/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/MasterTestRecorderJUnitTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/PlaybackException.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/PlaybackExecutor.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/TestRecorderJUnitTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/ant/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/AbstractDiffEngine.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DefaultFilterData.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DiffEngine.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DiffEngineFactory.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/FilterData.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/LineDiffEngine.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/ResponseWrapper.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/TestRecorderFilter.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/TestRecorderServlet.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/AbstractServerAdapter.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/DefaultServerAdapter.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/ServerAdapter.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/ServerAdapterUtils.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/WeblogicServerAdapter.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/PlaybackSession.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/PlaybackSessionImpl.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/RecordSession.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/RecordSessionImpl.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/Session.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/SessionFailedException.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/SessionImpl.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/State.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Constants.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/DiffFailedException.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Logger.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/NVPair.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/PlaybackSessionBean.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/RecordSessionBean.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Reporter.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/RequestData.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/ResponseData.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/SessionBean.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/SessionXMLException.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/TestResults.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Util.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Categories.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Category.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Config.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/ConfigException.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/RuntimeConfigException.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/ServerConfig.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/TestDefinition.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/TestDefinitions.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/WebappConfig.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Webapps.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/util/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/util/StringHelper.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/
   incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/XMLHelper.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/schema/
   incubator/beehive/netui/test/src/testRecorder/schema/testRecorderDefaultConfig.xsd   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/schema/testRecorderDiffSession.xsd   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/schema/testRecorderSession.xsd   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/schema/testRecorderTests.xsd   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorder/schema/testRecorderWebapps.xsd   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/
   incubator/beehive/netui/test/src/testRecorderQA/build.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/
   incubator/beehive/netui/test/src/testRecorderQA/data/config1.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/config2.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/config3.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/session1.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/test1.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/test2.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/test3.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/testRecorder-config.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/testRecorder-webapp.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/data/webapp1.xml   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/org/
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/PropertiesHelper.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/SchemaTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/SessionSchemaTest.java   (contents, props changed)
   incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/TRTestCase.java   (contents, props changed)
   incubator/beehive/netui/test/src/tools/
   incubator/beehive/netui/test/src/tools/build.xml   (contents, props changed)
   incubator/beehive/netui/test/src/tools/org/
   incubator/beehive/netui/test/src/tools/org/apache/
   incubator/beehive/netui/test/src/tools/org/apache/beehive/
   incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/
   incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/
   incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/
   incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/
   incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JUnitTask.java   (contents, props changed)
   incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JUnitTestFilter.java   (contents, props changed)
   incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JarClassLoader.java   (contents, props changed)
   incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/PropertyFileTestFilter.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/
   incubator/beehive/netui/test/webapps/drt/
   incubator/beehive/netui/test/webapps/drt/build.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/interOp/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/interOp/struts-config-tests.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/CustomerProfile.xsd   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/CustomerProfileConfig.xsdconfig   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/catalog.xsd   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/portfolio.xsd   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/SimpleJavaBean.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/callMethod/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/callMethod/CallMethodType.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/type/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/type/Person.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/error/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/error/Errors.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/error/Text.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/Messages1.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/Messages2.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/RootMessages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/exceptions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/exceptions/Messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/FormBeanTest1Form1.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Struts1.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Struts2.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/struts-config-formBean.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/FormBeanTest2Form1.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts1.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts2.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts3.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts4.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/struts-config-formBean.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/Global.app   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/b36628.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/interOp/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/interOp/test1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/interOp/test1/Struts1.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/jpfScopedForms/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/jpfScopedForms/test55/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/jpfScopedForms/test55/messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/log4j.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/webinfSrc/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/webinfSrc/WebinfSrcController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/webinfSrc/merge.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/bundle1.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/bundle2.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/struts/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/struts/NamedStrutsMessages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/struts/StrutsMessages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/LoadStruts.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/SubmitAction.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/SubmitForm.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/bld.bat
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/readme.txt   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/struts-config-test13.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/test13.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/tomcat-struts-config-test13.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortalTag.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortalUrlRewriter.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortletTag.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/models/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/models/UserInfo.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/moduleConfigLocator/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/moduleConfigLocator/Locator1.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/moduleConfigLocator/Locator2.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test/databinding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test/databinding/beans/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test/databinding/beans/b40682.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowUtils/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowUtils/ValidationMessages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test12/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test12/messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test23/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test23/messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/bundle1.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/bundle1_de.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/grid.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/netui-typeconverter.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/resources/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/resources/bundle2.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/resources/strangeName.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/struts/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/struts/NamedStrutsMessages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/struts/StrutsMessages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/qaUtil/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/qaUtil/PageLogger.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/resources/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/resources/application.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnTo/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnTo/test63/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnTo/test63/messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnToTest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnToTest/Messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassA.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassB.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassC.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassD.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassE.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassF.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassG.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassH.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassI.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassJ.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassK.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/FormA.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/QaTrace.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test4/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test4/Form2.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test7/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test7/Form1.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test7/Struts1.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/util/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/util/SerializableTestClass.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test54/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test54/messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test56/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test56/messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test57/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test57/messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test58/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test58/messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/basic/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/basic/Messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/validator/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/validator/Messages.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/CustomerProfile.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/CustomerProfile_SerializeXML.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/bikeCatalog.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/portfolio.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-bean.tld   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-html.tld   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-logic.tld   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/strutsValidator-merge-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/strutsValidator-validation.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/tiles-defs.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/tomcat-web.xml
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/validator-rules.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/web.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Page1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Page1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Page1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13881/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13881/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13881/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/ErrorPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14386/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14683/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14683/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14683/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14754/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14754/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14754/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14764/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14764/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14764/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14781/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14781/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14781/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14787/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14787/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14787/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14826/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14826/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14826/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15095/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15095/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15095/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15174/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15174/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15174/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15175/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15175/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15175/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/myForward.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/nesting/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/nesting/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/nesting/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15430/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15430/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15430/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15454/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15454/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15454/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15574/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15574/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15574/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15590/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15590/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15590/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15642/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15642/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15642/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15964/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15964/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15964/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16092/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16092/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16092/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16451/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16451/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16451/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17287/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17287/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17287/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17461/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17461/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17461/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18025/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18025/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18025/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18067/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18067/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18067/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18068/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18068/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18068/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b22957/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b22957/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b22957/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b24356/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b27852/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28133/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28160/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/defaultContent.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28633/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28633/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug1/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug1/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug2/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug2/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/defaultContent.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/defaultContent.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b30458/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b30458/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b30458/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33322/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33322/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33322/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33704/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33704/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33704/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33807/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33807/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33807/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34059/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34263/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34263/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34263/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34566/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34566/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34566/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/foo.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037b/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037b/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037b/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/done.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/lastName.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/done.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/lastName.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35094/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35094/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35094/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/nest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/nest/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/nest/nestController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/error2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/error2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/foo/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/foo/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37240/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37240/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37240/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37913/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37913/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37913/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38183/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38183/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38183/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38184/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38184/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38184/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39363/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39363/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39363/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39434/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39434/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39434/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39552/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39552/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39552/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/sample.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/sampleResult.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40596/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40596/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40862/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40862/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40862/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/page2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b41391/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b41391/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b41391/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42065/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42065/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42065/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42486/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42486/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42486/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42558/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42558/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42558/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b43011/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b43011/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b43011/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr124972/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr124972/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr124972/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr132760/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr132760/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr132760/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr137279/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr137279/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr137279/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr176508/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr176508/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr176508/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr180865/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr180865/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr180865/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr183774/
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr183774/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr183774/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/checkboxDemo/
   incubator/beehive/netui/test/webapps/drt/coreWeb/checkboxDemo/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/checkboxDemo/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/
   incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/
   incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/Controller.jpf.disabled
   incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/getData/
   incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/getData/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/getData/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/updateAnyBean.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basic/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basic/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basic/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicerror/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicerror/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicerror/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicnojpf/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicnojpf/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundle/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundle/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundle/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundleerror/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundleerror/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundleerror/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/struts/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/struts/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/struts/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/variousMethods.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/simpleTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/sumTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/choiceMethod/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/overloading/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/overloading/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/overloading/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/returnNull/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/returnNull/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/returnNull/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/cellRepeater/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/cellRepeater/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/cellrepeatererror/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/cellrepeatererror/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/controls/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/controls/methodTest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/controls/methodTest/MethodTest.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/controls/methodTest/MethodTestImpl.jcs   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/actionTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/anchorParams.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/formatting.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/group.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/image.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/resources/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/resources/image/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/site/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/site/css/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/site/css/default.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/site/template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/bikeCatalogXmlBean.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/portfolioXmlBean.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/sortFilterPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/expressions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/expressions/simple.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/globalApp/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/globalApp/nojpf/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/globalApp/nojpf/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/jstl/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/jstl/smoke.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/message/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/message/message.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/booleanChoice/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/arrayRepeater.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/listRepeater.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/repeaterBody.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/vectorRepeater.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/nested/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/pad/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/pad/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/pad/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/simple/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/simple/defaultText.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/simple/ignoreNulls.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/simplerepeater/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/simplerepeater/simpleRepeater.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/typeConverter/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/typeConverter/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/typeConverter/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/xmlBeans/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/xmlBeans/serialize/
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/xmlBeans/serialize/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/xmlBeans/serialize/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/Demo.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/DemoHeader.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/DemoResults.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/default.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/images/
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/images/_.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/demo/images/launch.jpg   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/directFormTest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/directFormTest/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/directFormTest/formTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/anchorError/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/anchorError/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/anchorError/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/cellRepeaterError/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/cellRepeaterError/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/cellRepeaterError/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/expression/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/expression/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/expression/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/forward/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/forward/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/forward/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/htmlExpression/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/htmlExpression/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/htmlExpression/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/multipleDatasource/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/multipleDatasource/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/multipleDatasource/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/radioButtonError/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/radioButtonError/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/radioButtonError/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterErrors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterErrors/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterErrors/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterPadError/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterPadError/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterPadError/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImage/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImage/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImage/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImageHtml/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImageHtml/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImageHtml/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/unhandledException/
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/unhandledException/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/errors/unhandledException/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/except/
   incubator/beehive/netui/test/webapps/drt/coreWeb/except/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/except/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/except/ErrorPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formTest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/formTest/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/formTest/formTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/global/
   incubator/beehive/netui/test/webapps/drt/coreWeb/globalJpfs/
   incubator/beehive/netui/test/webapps/drt/coreWeb/globalJpfs/nestReturn/
   incubator/beehive/netui/test/webapps/drt/coreWeb/globalJpfs/nestReturn/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/globalJpfs/nestReturn/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/i18n/
   incubator/beehive/netui/test/webapps/drt/coreWeb/i18n/localeOverride/
   incubator/beehive/netui/test/webapps/drt/coreWeb/i18n/localeOverride/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/i18n/localeOverride/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/images/
   incubator/beehive/netui/test/webapps/drt/coreWeb/index/
   incubator/beehive/netui/test/webapps/drt/coreWeb/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/index/Beehive.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/index/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/index/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/index/linkDown.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/index/linkOver.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/index/style.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Controller1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Controller1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Controller2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Controller2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Done.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Start.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Struts1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Struts1/Struts1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/TestHeader.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Controller1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Controller1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Controller1/Jpf1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Done.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Start.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Struts1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Struts1/Struts1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/TestHeader.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Controller1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Controller1/JpfNestable.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Done.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Start.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Struts1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Struts1/Struts1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/TestHeader.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Controller1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Controller1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Controller2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Controller2/JpfNestable.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Done.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Start.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Struts1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Struts1/Struts1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/TestHeader.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Controller1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Controller1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Controller2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Controller2/JpfNestable.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Done.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Start.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Struts1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Struts1/Struts1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Struts1/Struts2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/TestHeader.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsFind/
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsFind/JsFind.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsFind/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfErrorForwardIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfFormRePostIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfPageInputIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfReturnToIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp4.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedFormsIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedJpfIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurityIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSingletonIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/legacy/
   incubator/beehive/netui/test/webapps/drt/coreWeb/legacy/html/
   incubator/beehive/netui/test/webapps/drt/coreWeb/legacy/imageAnchor/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/ActionChainingController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/result.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorFormPosting/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorFormPosting/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorFormPosting/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorPosting/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorPosting/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorPosting/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appState/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appState/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appState/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/nested/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/nested/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/attrBinding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/attrBinding/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/attrBinding/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/nesting/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/nesting/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/nesting/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/binding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/binding/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/binding/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/StatefulController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/NestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/doubleNested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/doubleNested/DoubleNestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/doubleNested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/other/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/other/OtherController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/other/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/buttonSubmit/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/buttonSubmit/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/buttonSubmit/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/cellRepeater/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/cellRepeater/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/cellRepeater/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/choiceRepeater/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/Ctrl.java.disabled
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/CtrlImpl.jcs.disabled
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/nothing/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/setN.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/testController.jpf.disabled
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValues/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValues/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValues/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValuesDirect/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValuesDirect/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValuesDirect/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHier/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHier/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHier/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/baseHandler.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/globalHandler.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/localSubHandler.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/sub2Handler.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/merge-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/ForwardToActionController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/result.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalAction/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalAction/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalAction/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalActionForm/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalActionForm/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalActionForm/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Page1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/InterceptorsController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/intercepted.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nested/NestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nestedDone.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/neverGetHere.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycle/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycle/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycle/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycleExceptions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycleExceptions/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycleExceptions/lifecycleExceptionsController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/linkNav/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/linkNav/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/linkNav/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator1-foo.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator2-bar.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multiForms/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multiForms/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multiForms/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/MockPortal.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/input.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/multipartRequestController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/output.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/someOtherPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipleForms/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipleForms/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipleForms/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest1/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest1/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest2/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest2/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/nested/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/nested/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingRepeater/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingRepeater/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingRepeater/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/scopeSub/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/scopeSub/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/scopeSub/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nonNormalizedPath/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nonNormalizedPath/NonNormalizedPathController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nonNormalizedPath/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/nested/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/page1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/padRepeater/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/padRepeater/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/padRepeater/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/another/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/another/anotherController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/another/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/nested/nestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/security.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/validation.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeOne/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeOne/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeOne/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeTwo/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeTwo/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeTwo/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/nested/nestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/readonlyActionController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/ReturnToExceptionsController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/delegate/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/delegate/DelegateController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/nested/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/nested/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/login.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/rolesController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/MockPortal.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/uploadController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/urlBinding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/urlBinding/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/urlBinding/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/validation/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/validation/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/validation/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/webinfSrc/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/webinfSrc/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Ctrl.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/CtrlImpl.jcs   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/subJpf/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/subJpf/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/subJpf/SubJsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/subJpf/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/subJpf/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/subJpf/SubJsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfA/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfA/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfA/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfB/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfB/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfB/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/test13/
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/test13/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/test13/submit.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/MockPortal.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/ListenToPortal.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToA/
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToA/aController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToA/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/bController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/handled.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anyBeanOverload/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anyBeanOverload/AnyBeanOverloadController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anyBeanOverload/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/AnyBeanController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nested/NestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nestingResult.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/result.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/submit.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/start.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/TestControl.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/TestControlImpl.jcs   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/history.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/page1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nullflow/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nullflow/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/page1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfErrors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfErrors/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfErrors/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfGlobalApp/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfGlobalApp/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfGlobalApp/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageFlow/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageFlow/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageFlow/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/PageInputController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/lots.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPrevious/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPrevious/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPrevious/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input1_single.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input2_single.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/inputSessionScope.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/inputSessionScope_single.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/merge-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/pfScopeFormController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/FlowA.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/nested/NestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/b/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/b/FlowB.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/b/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/frames.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/pfScopingController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/windows.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/AnotherNonSingletonController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/frames.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nav/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nav/NavController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nav/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nonSingleton/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nonSingleton/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/pfSingletonController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/singleton/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/singleton/SingletonController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/singleton/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/restoreQueryString/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/restoreQueryString/RestoreQueryStringController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/restoreQueryString/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/inputPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nested/nestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nextPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/testActionPage1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToTestController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/sub1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/sub1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/sub1/SubJsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp4.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp10.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp11.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp12.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp4.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp5.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp6.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp7.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp8.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp9.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/include1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/include2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp10.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp11.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp12.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp13.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp4.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp5.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp6.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp7.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp8.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp9.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp4.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/css/
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/css/style.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/back.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/bar-background.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/cancel.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/delete.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/details.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/edit.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/folder_16_pad.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/goButton.jpg   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/grid.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/handledownlast.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/handledownmiddle.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/handlerightlast.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/handlerightmiddle.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/insert.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/linelastnode.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/linemiddlenode.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/linevertical.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/spacer.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/update.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/weblogic-img-lt.jpg   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/weblogic-img-rt.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/javascript/
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/javascript/netui-tree.js   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/done.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/grid_template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/header.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/qaPageSnap.jspf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/qaTraceResults.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/results/
   incubator/beehive/netui/test/webapps/drt/coreWeb/results/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/results/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/sub1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/sub1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/sub1/SubJsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test33/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test33/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test33/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/sub1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/sub1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/sub1/SubJsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/alien.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseClient.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseTree.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseTreeTwo.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/clientContent.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/clientContentAnchor.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/content.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/contentAnchor.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/cool.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/cr180331.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/cr182056.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/disabled.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/emptyFrame.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/emptyTree.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/href.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/ninja.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/nullAction.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/omg.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/override.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/overrideTwo.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/partialClient.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/selectStyles.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/style.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeBinding.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeFrame.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeHtml.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeHtmlTwo.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeStyle.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/writeTreeError.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/JspTest1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/MainFrame.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf1/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf2/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/subJpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/subJpf1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/subJpf1/SubJsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/JpfTest2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/JspTest2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/MainFrame.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/subJpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/subJpf1/SubJsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/JpfTest3.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/JspTest3a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/MainFrame.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/subJpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/subJpf1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/subJpf1/SubJsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/JpfTest4.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/JspTest4a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/MainFrame.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/subJpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/subJpf1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/subJpf1/SubJsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/JpfTest5.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/JspTest5a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/MainFrame.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/subJpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/subJpf1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/subJpf1/SubJsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/security/
   incubator/beehive/netui/test/webapps/drt/coreWeb/security/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/security/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/security/page2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/JpfTest10.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/JspTest10a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/JpfTest6.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/JspTest6a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/subJpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/subJpf1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/subJpf1/SubJsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/JpfTest8.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/JspTest8a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/subJpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/subJpf1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/subJpf1/SubJsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/JpfTest9.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/JspTest9a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf1/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf1/Jsp1a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf2/Jpf2.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf2/Jsp2a.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/site/
   incubator/beehive/netui/test/webapps/drt/coreWeb/site/SiteTemplate.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/site/style.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsFormBeanIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsInteropIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/merge-jpf-struts-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMergeIndex.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheckOptionError/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheckOptionError/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheckOptionError/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadioOptionError/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadioOptionError/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadioOptionError/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/folder.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/page2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/page2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/myForward.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/attributeTester/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/bindingUpdateErrors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/bindingUpdateErrors/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/bindingUpdateErrors/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/bundle/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/buttonSubmitTagId/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/buttonSubmitTagId/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/buttonSubmitTagId/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/content/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/content/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/content/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/showResults.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateFormatString/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateFormatString/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateFormatString/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors4.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errorsController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/ErrorPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatSelect/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatSelect/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatSelect/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatTags/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatTags/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatTags/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/hidden/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/hidden/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/hidden/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/iteratorTests/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/iteratorTests/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/iteratorTests/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaultValues/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaultValues/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaultValues/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaults/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaults/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaults/begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelLiteral/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelLiteral/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelLiteral/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelStyles/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelStyles/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelStyles/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/message/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/message/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/message/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/multiSelect/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/multiSelect/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/multiSelect/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/multiTree/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/nullableSelect/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/nullableSelect/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/nullableSelect/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/onTest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/onTest/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/onTest/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramEncoding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramEncoding/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramEncoding/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/dumpBoxes.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/Results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelectTypeError/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelectTypeError/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelectTypeError/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteNameVar/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteNameVar/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteNameVar/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteTags/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteTags/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteTags/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rtexpTagId/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rtexpTagId/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rtexpTagId/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/next.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/linkToSecureController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/secure.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/secure/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/secure/image.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/secure/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/select/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/select/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/select/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/style/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/style/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/style/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleClass/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleClass/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleClass/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleOptions/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleOptions/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleOptions/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/results.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIteration/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIteration/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIteration/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/form.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/formErrors.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/imageErrors.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tree/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeExprErrors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/folder_16_pad.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/handledownlast.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/handledownmiddle.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/handlerightlast.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/handlerightmiddle.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/launch.jpg   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/linelastnode.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/linemiddlenode.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/linevertical.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeNodeLabel/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeNodeTest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeThree/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeTwo/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanel/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanel/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanel/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanelTree/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanelTree/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanelTree/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempErrors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempException/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempException/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempException/Test.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNegate/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNegate/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNegate/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/Test.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/contentTemplate.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/leftDef.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/rightDef.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Test.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/image/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/noActions.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/sub/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/sub/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/sub/Test.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest1/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest1/Test.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest2/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest2/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest2/Test.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest3/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest3/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest3/Test.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Begin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Template.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/admin.inc   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/admin.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/forward.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/forward2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/playback.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/record.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/redirect.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/sessionInfo.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/startRecord.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/status.inc   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/status.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/test.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/testInfo.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/testRecord.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute4.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute5.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute6.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute7.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute8.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/style.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttributeBits/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttributeBits/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttributeBits/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAutoErrors/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeClient/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeClientSubmit/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute4.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute5.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/style.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeSelect/
   incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeSelectDeprecated/
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/sub1/
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/sub1/SubJpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/sub1/SubJsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jpf1.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp1.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp2.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp3.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/StartTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/basicValidationController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/formPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/success.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/formPage.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/strutsValidatorController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/success.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/validation/validationController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/anchorTargets.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/anchorTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/checkboxResults.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/checkboxTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/formLabelResults.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/formLabelTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/Anieyes.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/activepython.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/activepythonroll.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/back.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/backRoll.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/imageResults.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/imageTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/labelTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/radioResults.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/radioTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/selectResults.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/selectTest.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/
   incubator/beehive/netui/test/webapps/drt/testRecorder/config/
   incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-webapp.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Accesskey.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AccesskeyGroup.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ActionChaining.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ActionInterceptors.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Anchor.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorActions.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorFormPosting.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorPosting.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBean.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBeanBinding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBeanOverload.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AppState.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AppStatePass.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AttrBinding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13789.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13797.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13803.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13881.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14259.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14683.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14754.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14764.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14781.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14787.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14826.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14999.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15095.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15174.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15175.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15234.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15392.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15430.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15454.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15574.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15590.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15642.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15964.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B16092.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B16451.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B17287.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B17461.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18025.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18067.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18068.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B22957.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28421.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28633.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28774.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28775.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B30458.xml
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33322.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33704.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33807.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B34263.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B34998.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35037.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35037b.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35084.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35084b.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35094.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B36628.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B36628b.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B37240.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B37374.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38182.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38183.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38184.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39363.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39434.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39552.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39820.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40031.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40596.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40862.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40999.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B41391.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42065.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42486.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42558.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B43011.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BeginForm.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Binding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BindingUpdateErrors.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BreakoutNesting.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest21124.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest26856.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest26990.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest27848.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest30303.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest37949.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest39028.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest40862.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest41007.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest42486.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasic.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasicError.xml
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasicNoJpf.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleDeclareBundleTag.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleDeclareBundleTagError.xml
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleStrutsBinding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ButtonSubmit.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ButtonSubmitTagId.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodMethodTest.xml
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodReturnNull.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodTagTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallPageFlow.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallPageFlowWithOverloading.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallingPageFlow.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeater.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeater2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeaterError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeaterError2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CheckboxDemo.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ChoiceRepeater.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ClientTable.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Content.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ConversationalControls.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Cr121496.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Cr124972.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CustomTypeConverterTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DataGridSmokeTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DateConverter.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DateFormatString.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DefaultValues.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DefaultValuesDirect.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DirectFormTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Disable.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DisableBinding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DisableImageButton.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DivPanel.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DivPanelTree.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ErrorTags.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Except.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ExceptHier.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ExceptHierPage.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Expression.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormBeanRePostTest52.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormBeanRePostTest53.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormValid.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormValidAnnot.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormatSelect.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormatTags.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Forward.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ForwardToAction.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GetData.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalAction.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalAppNoJPFBinding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalForwards.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Hidden.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/HtmlExpression.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ImageAnchorActions.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/IteratorTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest49.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest51.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest55.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest59.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsAllScript.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsAllScriptHtml.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsFind.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsNoContainers.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Jsp20ElSmokeTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelDefaultValues.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelDefaults.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelLiteral.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelStyles.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Lifecycle.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LifecycleExceptions.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LinkNav.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LocaleOverrideTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Message.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MessageTagTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MiscJpfTest13.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MockPortal.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MockPortalListenTo.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ModuleConfigLocator.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultiForms.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultiSelect.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultipleDatasource.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultipleForms.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestedFormReturn.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Nesting.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestingRepeater.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestingScope.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NonNormalizedPath.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NullableSelect.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/OnTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/OverloadedActions.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PadRepeater.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageFlowUtils.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest1.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest10.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest12.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest14.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest18.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest19.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest20.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest21.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest22.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest23.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest24.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest25.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest26.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest29.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest3.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest5.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest6.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest7.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest8.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest9.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageScope.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ParamEncoding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ParamMulti.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfErrors.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfExceptions.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfForwards.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfGlobalApp.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfLifecycle.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfPageFlow.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfPrevious.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfReturnTo.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfScopeForm.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfScoping.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfSingleton.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PostOnForward.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PrimitiveOptionsDS.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RadioButtonError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReadonlyAction.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatCheck.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatCheckOptionError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatRadio.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatRadioOptionError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatSelect.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatSelectTypeError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterChoiceMethod.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterChoiceMethodBooleanTypes.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterDataStructures.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterDefaultText.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterErrors.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterIgnoreNulls.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterNested.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterPad.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterPadError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RestoreQueryString.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToExceptions.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest28.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest30.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest31.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest32.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest33.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest34.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest35.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest36.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest37.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest39.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest40.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest41.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest42.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest44.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest45.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest46.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest47.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest48.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest63.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RewriteNameVar.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RewriteTags.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeBindingError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeClientContent.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeClientContentAnchor.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeContent.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeContentAnchor.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeDisabled.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeDynamicBaseTree.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeEmptyTree.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeHref.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeInvalidLayout.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeLongLabels.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeOverride.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeOverrideTwo.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeRunAtClient.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeSelectionStyle.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeStaticBaseTree.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeHtml.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeHtmlTwo.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeStyle.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeWriteTreeError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Roles.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RtexpTagId.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RuntimeErrors.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ScopedJpfTest1.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SecureLinks.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Security.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Select.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SerializeXMLTag.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SessionBean.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SimpleExpressionTest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsFormBeanTest1.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsFormBeanTest2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest1.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest3.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest4.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest5.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest3.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest4.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest6.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest62.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest6Error.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest7.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest8.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Style.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StyleClass.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StyleOptions.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagIds.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagImage.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagImageHtml.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagIteration.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagSizeBinding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempException.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempNegate.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempNest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempRelative.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest1.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest3.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempVisibility.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute1.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute3.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute4.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute5.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute6.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute7.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute8.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttributeBits.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr1.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr3.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr4.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr5.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UnhandledException.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UrlBinding.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UrlTemplates.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest54.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest56.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest57.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest58.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Validate.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Validation2.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Visible.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/VisibleError.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/WebinfSrc.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlAnchor.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlCheckBox.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlFormLabel.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlImage.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlLabel.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlRadio.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlSelect.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/b34566.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/b37913.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr132760.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr137279.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr176508.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr180865.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr183774.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/demo.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/jsScriptScopeId.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/pfPageInput.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/drt/testRecorder/tests/simplerepeater.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/
   incubator/beehive/netui/test/webapps/jsf/build.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/ActionListen.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Backing.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/CustomRenderBacking.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/TestValidator.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Text.properties   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/ValueChangeListen.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/web.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Anchors.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Bundle.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Convert.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/DataTable.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/FormOne.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/FormTwo.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Image.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Panels.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/godzilla.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/styles.css   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/update.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/
   incubator/beehive/netui/test/webapps/jsf/testRecorder/config/
   incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-tests.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-webapp.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeAnchors.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeBundle.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeConversions.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeDataTable.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormOne.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormTwo.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeImage.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokePanel.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/testRecorder-test/
   incubator/beehive/netui/test/webapps/testRecorder-test/build.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder-test/
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder-test/WEB-INF/
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder-test/WEB-INF/web.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder-test/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-tests.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-webapp.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/tests/
   incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/tests/smoketest.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/
   incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/
   incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/
   incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-tests.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-webapp.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/tests/
   incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/tests/UrlTemplates.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/Controller.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/src/
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/src/global/
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/src/global/Global.app   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/url-template-config.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/web.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/dataStructure.jspf   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/error.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/page.jspf   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/image.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/secure.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/secureImage.gif   (contents, props changed)
   incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/testUrlTemplatesController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/
   incubator/beehive/netui/test/webapps/webappBuild-test/build.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/schemas/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/schemas/portfolio.xsd   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/log4j.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org/acme/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org/acme/beans/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org/acme/beans/ProductBean.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/testdata/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/testdata/portfolio.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/web.xml   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/controls/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/controls/hello/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/controls/hello/HelloWorld.java   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/controls/hello/HelloWorldImpl.jcs   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/jpfSmoke/
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/jpfSmoke/JpfSmokeController.jpf   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/jpfSmoke/index.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/usecontrol.jsp   (contents, props changed)
   incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/usexmlbean.jsp   (contents, props changed)
   incubator/beehive/test/
   incubator/beehive/test/ant/
   incubator/beehive/test/ant/buildWebapp.xml   (contents, props changed)
   incubator/beehive/test/ant/runTomcat.xml   (contents, props changed)
   incubator/beehive/test/conf/
   incubator/beehive/test/conf/tomcat-users.xml   (contents, props changed)
   incubator/beehive/tools/
   incubator/beehive/tools/peanut/
   incubator/beehive/tools/peanut/build.xml   (contents, props changed)
   incubator/beehive/tools/peanut/junit.jar   (contents, props changed)
   incubator/beehive/tools/peanut/peanut-root.xml   (contents, props changed)
   incubator/beehive/tools/peanut/src/
   incubator/beehive/tools/peanut/src/org/
   incubator/beehive/tools/peanut/src/org/apache/
   incubator/beehive/tools/peanut/src/org/apache/beehive/
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/Debug.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/NestedRuntimeException.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/PeanutTask.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestAbortedException.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestException.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestMetadataTask.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestSuiteCallTask.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestSuiteTask.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestTask.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/JUnitExecTask.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/JUnitRunner.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/NestedJUnitInitializationRuntimeException.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/TestResult.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/TestResultBean.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/Logger.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/ResultLogger.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/SimpleLogger.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/AntUtils.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/CaseInsensitiveStringKey.java   (contents, props changed)
   incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/PeanutUtils.java   (contents, props changed)
Log:
Initial submission of Beehive code.  See BUILDING.txt and DEVELOPMENT.txt for help building and developing in the codebase.



Added: incubator/beehive/BUILDING.txt
==============================================================================
--- (empty file)
+++ incubator/beehive/BUILDING.txt	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+Welcome to Beehive
+==================
+
+To build Beehive, you should have JDK 1.5 b2 installed with the JAVA_HOME
+environment variable defined to point to this JDK.  The JDK is available
+here:
+
+    <path>
+
+Set the BEEHIVE_HOME environment variable to point to your root beehive/
+directory.
+
+In addition, you'll need to install Ant in <beehive-root>/installed/ from 
+the installer in <beehive-root>/external/ant/apache-ant-1.6.1-bin.(zip|tar). 
+The end result will be a directory here:
+
+  <beehive-root>/installed/apache-ant-1.6.1/...
+
+In the following examples, '$>' is your propmpt, so if you see '$>ant', 
+type 'ant' (without the quotes) and press [enter].
+
+To initialize the Beehive build environment, run beehiveEnv for your platform:
+
+Windows:
+
+    $>beehiveEnv.cmd
+
+UNIX:
+    $>beehiveEnv.sh
+
+Because Beehive depends on a set of external software, these dependencies need
+to be installed before a build can be successful.  You will need a network
+connection for this step because jsr173_api.jar needs to be downloaded over a 
+network.  To install the external dependnecies, run:
+
+    $>ant bootstrap
+
+which will unzip Log4J and Tomcat installers.  
+
+To build Beehive, run:
+
+    $>ant clean deploy
+
+
+
+

Added: incubator/beehive/DEVELOPING.txt
==============================================================================
--- (empty file)
+++ incubator/beehive/DEVELOPING.txt	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+Developing in Beehive
+=====================
+
+<under construction>
+
+BEFORE COMMITTING A FILE IN SVN:
+Every text file must have the svn:eol-style property set to 'native'.  This
+causes ends-of-line to be translated to the correct format for the local
+operating system when files are checked out (e.g., LF on linux, CR/LF on
+Windows).  You can do this on a per-file basis using the 'svn propset' command:
+     svn propset svn:eol-style native <file path>
+
+An easier way to ensure that all added files have the right properties set is
+to use the "auto-props" feature in the SVN client configuration file.  The
+location of this file varies depending on the operating system (see
+http://svnbook.red-bean.com/svnbook/book.html#svn-ch-7-sect-1); on linux it's
+at ~/.subversion/config, and on Windows it's typically in 
+"%SYSROOT%\Documents and Settings\<user name>\Application Data\Subversion".
+Add (uncomment) the following line under the "[miscellany]" section:
+    enable-auto-props = yes
+
+Then, add (uncomment) an "[auto-props]" section with a list of file extensions
+that will automatically trigger the svn:eol-style=native property:
+    [auto-props]
+    *.txt = svn:eol-style=native
+    *.java = svn:eol-style=native
+    *.jj = svn:eol-style=native
+    *.xml = svn:eol-style=native
+    *.xsd = svn:eol-style=native
+    *.xsdconfig = svn:eol-style=native
+    *.dtd = svn:eol-style=native
+    *.properties = svn:eol-style=native
+    *.jcs = svn:eol-style=native
+    *.jcx = svn:eol-style=native
+    *.jpf = svn:eol-style=native
+    *.jpfs = svn:eol-style=native
+    Global.app = svn:eol-style=native
+    *.jsp* = svn:eol-style=native
+    *.jspx = svn:eol-style=native
+    *.jspf = svn:eol-style=native
+    *.jsf = svn:eol-style=native
+    *.jsfb = svn:eol-style=native
+    *.faces = svn:eol-style=native
+    *.tld = svn:eol-style=native
+    *.tldx = svn:eol-style=native
+    *.tag = svn:eol-style=native
+    *.tagf = svn:eol-style=native
+    *.html = svn:eol-style=native
+    *.css = svn:eol-style=native
+    *.js = svn:eol-style=native
+    *.inc = svn:eol-style=native
+    *.sh = svn:eol-style=native;svn:executable
+    *.cmd = svn:eol-style=native
+    *.pl = svn:eol-style=native
+    *.py = svn:eol-style=native

Added: incubator/beehive/beehive.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/beehive.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+#
+#
+# Beehive build properties.
+#
+# These are defined in a properties file because they are referenced
+# throughout the rest of the Beehive build by the sub-projects.
+#
+#
+beehive.dir=${os.BEEHIVE_HOME}
+
+beehive.test.dir=${beehive.dir}/test
+beehive.external.dir=${beehive.dir}/external
+beehive.installed.dir=${beehive.dir}/installed
+
+controls.jar=${beehive.dir}/controls/build/jars/controls.jar
+netui-compiler.jar=${beehive.dir}/netui/build/lib/beehive-netui-compiler.jar
+
+tomcat.dir=${os.CATALINA_HOME}
+ant.dir=${os.ANT_HOME}
+log4j.dir=${beehive.installed.dir}/jakarta-log4j-1.2.8
+
+ant.jar=${ant.dir}/lib/ant.jar
+
+#
+# While still in the Workshop source tree, these reference
+# JARs that are statically checked-in.
+#
+# Once at Apache, these will switch to referencing JARs
+# that are installed in the build (or by Maven) from
+# the various installers.
+#
+log4j.jar=${log4j.dir}/dist/lib/log4j-1.2.8.jar
+servlet24.jar=${tomcat.dir}/common/lib/servlet-api.jar
+jsp20.jar=${tomcat.dir}/common/lib//jsp-api.jar
+jsr173.jar=${beehive.installed.dir}/jsr173/jsr173_1.0_api.jar
+junit.jar=${beehive.external.dir}/junit/junit.jar
+velocity14.jar=${beehive.external.dir}/velocity/velocity-1.4.jar
+velocitydep14.jar=${beehive.external.dir}/velocity/velocity-dep-1.4.jar
+tools.jar=${os.JAVA_HOME}/lib/tools.jar
+
+xbean.jar=${beehive.external.dir}/xmlbeans/apache-xbean.jar
+
+#
+# These are build files that are shared among the 
+# projects in Beehive for interacting with a Tomcat
+# instance.
+#
+runTomcat.ant=${beehive.test.dir}/ant/runTomcat.xml
+buildWebapp.ant=${beehive.test.dir}/ant/buildWebapp.xml
+

Added: incubator/beehive/beehiveEnv.cmd
==============================================================================
--- (empty file)
+++ incubator/beehive/beehiveEnv.cmd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+@ECHO OFF
+
+REM
+REM Set the Beehive shell environment
+REM
+REM
+REM In order to build, define BEEHIVE_HOME and JAVA_HOME
+REM in your shell.  Then, run the Beehive environment script.
+REM
+
+set ANT_HOME=%BEEHIVE_HOME%\installed\apache-ant-1.6.1
+set CATALINA_HOME=%BEEHIVE_HOME%\installed\jakarta-tomcat-5.0.25
+
+set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%PATH%
\ No newline at end of file

Added: incubator/beehive/beehiveEnv.sh
==============================================================================
--- (empty file)
+++ incubator/beehive/beehiveEnv.sh	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+#
+# Shell script to initialize the Beehive 
+# build environment.  
+#
+# In order to build, define BEEHIVE_HOME and JAVA_HOME
+# in your shell.  Then, run the Beehive environment script.
+#
+
+export CATALINA_HOME=$BEEHIVE_HOME/installed/jakarta-tomcat-5.0.25
+export ANT_HOME=$BEEHIVE_HOME/installed/apache-ant-1.6.1
+
+export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
\ No newline at end of file

Added: incubator/beehive/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,161 @@
+<?xml version="1.0"?>
+
+<!-- 
+    Beehive build file.
+-->
+<project name="Beehive Build" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="beehive.properties"/>
+
+    <!-- Local properties used to specify the installers and the directories into which they should be installed -->
+    <property name="tomcat.installer" location="${beehive.external.dir}/tomcat/jakarta-tomcat-5.0.25.zip"/>
+    <property name="log4j.installer" location="${beehive.external.dir}/log4j/jakarta-log4j-1.2.8.zip"/>
+    <property name="ant.installer" location="${beehive.external.dir}/ant/apache-ant-1.6.1-bin.zip"/>
+    <property name="jsr173.installer" location="${beehive.external.dir}/xmlbeans/jsr173_api.jar"/>
+
+    <target name="bootstrap" description="Install external dependencies to the installed/ directory">
+        <antcall target="install.deps"/>
+        <ant dir="test/ant" antfile="runTomcat.xml" target="reset.config"/>
+
+        <!-- 
+             in order to run JUnit tests that use the <junit> Ant task, 
+             the junit.jar file needs to be available in $ANT_HOME/lib 
+          -->
+        <copy file="${junit.jar}" todir="${os.ANT_HOME}/lib"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!--                                               -->
+    <!-- Build targets                                 -->
+    <!--                                               -->
+    <!-- ============================================= -->
+    <target name="clean" description="Clean Beehive">
+        <ant dir="controls" target="clean" inheritAll="false"/>
+        <ant dir="netui" target="clean" inheritAll="false"/>
+    </target>
+
+    <target name="deploy" description="Deploy Beehive">
+        <ant dir="controls" target="build" inheritAll="false"/>
+        <ant dir="netui" target="deploy" inheritAll="false"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!--                                               -->
+    <!-- Test targets                                  -->
+    <!--                                               -->
+    <!-- ============================================= -->
+    <target name="drt" description="Run the Beehive DRT suite">
+        <antcall target="controls.drt"/>
+        <antcall target="netui.drt"/>
+    </target>
+
+    <target name="controls.drt" description="Run the Beehive/Controls DRT suite">
+        <ant dir="controls" target="drt" inheritAll="false"/>
+    </target>
+
+    <target name="netui.drt" description="Run the Beehive/NetUI DRT suite">
+        <ant dir="netui" antfile="build.xml" target="drt" inheritAll="false"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!--                                               -->
+    <!-- Installation targets.  These are used to      -->
+    <!-- install external products that Beehive        -->
+    <!-- depends on to build or test.                  -->
+    <!--                                               -->
+    <!-- ============================================= -->
+    <target name="install.deps" description="Ensure that the external dependencies (Tomcat, etc) have been installed locally">
+        <antcall target="ensure.ant"/>
+        <antcall target="ensure.tomcat"/>
+        <antcall target="ensure.log4j"/>
+        <antcall target="ensure.jsr173"/>
+    </target>
+
+    <target name="uninstall.deps" description="Uninstall the external dependencies">
+        <delete dir="${beehive.installed.dir}"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!--                                               -->
+    <!-- Tomcat                                        -->
+    <!--                                               -->
+    <!-- ============================================= -->
+    <target name="ensure.tomcat">
+        <echo>Ensuring Tomcat present in directory: ${beehive.installed.dir}</echo>
+        <available file="${tomcat.dir}" type="dir" property="tomcat.present"/>
+        <echo>tomcat.present: ${tomcat.present}</echo>
+        <antcall target="unzip.tomcat"/>
+    </target>
+
+    <target name="unzip.tomcat" unless="tomcat.present">
+        <echo>Unzipping Tomcat to directory: ${beehive.installed.dir} from installer ${tomcat.installer}</echo>
+        <unzip src="${tomcat.installer}" dest="${beehive.installed.dir}"/>
+        
+        <chmod dir="${tomcat.dir}/bin" perm="755" includes="**/*.sh"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!--                                               -->
+    <!-- Log4J                                         -->
+    <!--                                               -->
+    <!-- ============================================= -->
+    <target name="ensure.log4j">
+        <echo>Ensuring Log4J present in directory: ${beehive.installed.dir}</echo>
+        <available file="${log4j.dir}" type="dir" property="log4j.present"/>
+        <echo>log4j.present: ${log4j.present}</echo>
+        <antcall target="unzip.log4j"/>
+    </target>
+
+    <target name="unzip.log4j" unless="log4j.present">
+        <echo>Unzipping Log4J to directory: ${beehive.installed.dir} from installer ${log4j.installer}</echo>
+        <unzip src="${log4j.installer}" dest="${beehive.installed.dir}"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!--                                               -->
+    <!-- Ant                                           -->
+    <!--                                               -->
+    <!-- ============================================= -->
+    <target name="ensure.ant">
+        <echo>Ensuring Ant present in directory: ${beehive.installed.dir}</echo>
+        <available file="${ant.dir}" type="dir" property="ant.present"/>
+        <echo>ant.present: ${ant.present}</echo>
+        <antcall target="unzip.ant"/>
+    </target>
+
+    <target name="unzip.ant" unless="ant.present">
+        <echo>Unzipping Ant to directory: ${beehive.installed.dir} from installer ${ant.installer}</echo>
+        <unzip src="${ant.installer}" dest="${beehive.installed.dir}"/>
+
+        <chmod dir="${beehive.installed.dir}/apache-ant-1.6.1/bin" perm="755" includes="**/*.sh"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!--                                               -->
+    <!-- JSR 173 == this is required by XMLBeans and   -->
+    <!-- needs to be downloaded from the net.          -->
+    <!--                                               -->
+    <!-- ============================================= -->
+    <target name="ensure.jsr173">
+        <echo>Ensuring Ant present in directory: ${beehive.installed.dir}</echo>
+        <available file="${jsr173.jar}" type="file" property="jsr173.present"/>
+        <echo>jsr173.present: ${jsr173.present}</echo>
+        <antcall target="get.jsr173"/>
+    </target>
+
+    <target name="get.jsr173" unless="jsr173.present">
+        <mkdir dir="${beehive.external.dir}/xmlbeans"/>
+        <get dest="${jsr173.installer}" src="http://workshop.bea.com/xmlbeans/jsr173v1/jsr173.jar"
+             verbose="true" usetimestamp="true" ignoreerrors="false"/>
+
+        <unzip src="${jsr173.installer}" dest="${beehive.installed.dir}/jsr173"/>
+    </target>
+
+    <target name="usage" description="Print the usage for this build.xml">
+        <java fork="no" classname="org.apache.tools.ant.Main">
+            <arg line="-projecthelp"/>
+        </java>
+    </target>
+
+</project>

Added: incubator/beehive/controls/LICENSE.TXT
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/LICENSE.TXT	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

Added: incubator/beehive/controls/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,258 @@
+<!--
+   B E A   S Y S T E M S
+   Copyright 2001-2004  BEA Systems, Inc.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+   
+       http://www.apache.org/licenses/LICENSE-2.0
+   
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+  
+   $Header:$
+ -->
+
+<project name="controls" default="usage" basedir=".">
+
+  <property environment="os"/>
+  <property file="../beehive.properties"/>
+
+  <!-- THE CONTROL BUILD REQUIRES JDK1.5.  ATTEMPTS TO BUILD ON JDK1.4 WILL BE A NOOP -->
+  <condition property="isJDK15">
+    <equals arg1="${ant.java.version}" arg2="1.5"/>
+  </condition>
+
+  <property name="build.dir" value="build"/>
+  <property name="classes.dir" value="${build.dir}/classes" />
+  <property name="jars.dir" value="${build.dir}/jars"/>
+  <property name="docs.dir" value="${build.dir}/docs"/>
+
+  <property name="api.dir" value="src/api"/>
+  <property name="api.classes" value="${classes.dir}/api"/>
+
+  <property name="runtime.dir" value="src/runtime"/>
+  <property name="runtime.classes" value="${classes.dir}/runtime"/>
+
+  <property name="controls.jar" value="${jars.dir}/controls.jar"/>
+
+  <path id="api.classpath">
+  </path>
+
+  <path id="runtime.classpath">
+    <pathelement location="${ant.jar}"/>
+    <pathelement location="${servlet24.jar}"/>
+    <pathelement location="${tools.jar}"/>
+    <pathelement location="${velocity14.jar}"/>
+    <pathelement location="${velocitydep14.jar}"/>
+    <pathelement location="${api.classes}"/>
+    <path id="${api.classpath}"/>
+  </path>
+
+  <condition property="controls.os" value="windows" >
+     <os family="windows" />
+  </condition>
+  <condition property="controls.os" value="unix" >
+     <os family="unix" />
+  </condition>
+
+  <!-- ==================================================================== -->
+  <!-- usage - output usage   -->
+  <!-- ==================================================================== -->
+  <target name="usage">
+    <echo message="" />
+    <echo message="" />
+    <echo message="Controls Build file" />
+    <echo message="================================================================" />
+    <echo message="|                          Usage                               |" />
+    <echo message="================================================================" />
+    <echo message="" />
+    <echo message="----------------------------------------------------------------" />
+    <echo message="|                      Standard Targets                        |" />
+    <echo message="----------------------------------------------------------------" />
+    <echo message="build       - build java classes and jar files" />
+    <echo message="clean       - remove build files" />
+    <echo message="deploy      - does nothing for this project" />
+    <echo message="redeploy    - do an &quot;clean&quot;, &quot;, &quot;build&quot; and &quot;deploy&quot;." />
+    <echo message="docs        - build the java docs" />
+    <echo message="drt         - runs the DRT (developer regression test)" />
+    <echo message="" />
+    <echo message="----------------------------------------------------------------" />
+    <echo message="|                  Project-Specific Targets                    |" />
+    <echo message="----------------------------------------------------------------" />
+    <echo message="dirs        - Creates the output directories of the build."/>
+    <echo message="classes     - Compiles the source code of the project."/>
+    <echo message="================================================================" />
+    <echo message="|      NOTE: THE CONTROL PROJECT ONLY BUILDS ON JDK1.5          |" />
+    <echo message="================================================================" />
+    <echo message="" />
+    <echo message="" />
+   </target>
+
+  <!-- ==================================================================== -->
+  <!-- Creates the output directories of the build. -->
+  <!-- ==================================================================== -->
+  <target name="dirs">
+    <mkdir dir="${api.classes}"/>
+    <mkdir dir="${runtime.classes}"/>
+    <mkdir dir="${jars.dir}"/>
+    <mkdir dir="${docs.dir}"/>
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- Compiles the source code of the project. -->
+  <!-- ==================================================================== -->
+  <target name="classes" depends="dirs" if="isJDK15">
+   
+    <!-- Build the API classes -->
+    <javac destdir="${api.classes}" classpathref="api.classpath" source="1.5" debug="on" >
+      <src path="${api.dir}"/>
+    </javac>
+
+    <!-- Build the runtime classes -->
+    <javac destdir="${runtime.classes}" classpathref="runtime.classpath" source="1.5" debug="on">
+      <src path="${runtime.dir}"/>
+    </javac>
+
+    <!-- Copy template files into the build -->
+    <copy todir="${runtime.classes}" overwrite="true" >
+      <fileset dir="${runtime.dir}" includes="**/*.template,**/*.vm,META-INF/**" />
+    </copy>
+
+    <!-- Copy property files into the build -->
+    <copy todir="${runtime.classes}" overwrite="true" >
+      <fileset dir="${runtime.dir}" includes="**/*.properties" />
+    </copy>
+
+
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- Jars up the classes, libraries, and resources. -->
+  <!-- ==================================================================== -->
+  <target name="build" depends="classes" if="isJDK15">
+    <echo message="--------------------------------------------------" />
+    <echo message="|      controls build starting                    |" />
+    <echo message="--------------------------------------------------" />
+
+    <jar jarfile="${controls.jar}" >
+        <fileset dir="${api.classes}" />
+        <fileset dir="${runtime.classes}" />
+    </jar>
+
+    <echo message="--------------------------------------------------" />
+    <echo message="|      controls build ending                      |" />
+    <echo message="--------------------------------------------------" />
+  </target>
+
+
+  <!-- ==================================================================== -->
+  <!-- build_all.  build this project and all inter-project dependencies    -->
+  <!-- ==================================================================== -->
+  <target name="build_all">
+    <antcall target="build"/>
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- clean  -->
+  <!-- ==================================================================== -->
+  <target name="clean">
+    <delete dir="${build.dir}"/>
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- clean_all  -->
+  <!-- ==================================================================== -->
+  <target name="clean_all">
+    <antcall target="clean"/>
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- redeploy  -->
+  <!-- ==================================================================== -->
+  <target name="redeploy">
+    <antcall target="clean"/>
+    <antcall target="build"/>
+    <antcall target="deploy"/>
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- redeploy_all  -->
+  <!-- ==================================================================== -->
+  <target name="redeploy_all">
+    <antcall target="clean_all"/>
+    <antcall target="build_all"/>
+    <antcall target="deploy_all"/>
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- deploy -->
+  <!-- ==================================================================== -->
+  <target name="deploy" depends="build"  if="isJDK15">
+    <echo message="--------------------------------------------------" />
+    <echo message="|       controls deploy starting                 |" />
+    <echo message="--------------------------------------------------" />
+
+    <!-- Copy build output to client locations (lib dir of servers etc) -->
+
+    <echo message="--------------------------------------------------" />
+    <echo message="|       controls deploy ending                   |" />
+    <echo message="--------------------------------------------------" />
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- deploy_all -->
+  <!-- ==================================================================== -->
+  <target name="deploy_all" >
+    <antcall target="deploy"/>
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- minprod -->
+  <!-- ==================================================================== -->
+  <target name = "minprod">
+    <echo message="--------------------------------------------------" />
+    <echo message="|       controls minprod starting                 |" />
+    <echo message="--------------------------------------------------" />
+
+    <antcall target="deploy" />
+
+    <echo message="--------------------------------------------------" />
+    <echo message="|       controls minprod completed                |" />
+    <echo message="--------------------------------------------------" />
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- docs -->
+  <!-- ==================================================================== -->
+  <target name="docs" if="isJDK15">
+    <javadoc
+        destdir="${docs.dir}"
+        maxmemory="256M"
+        windowtitle="Controls Documentation"
+        doctitle="Java Controls"
+        version="true"
+        author="false"
+        use="true"
+        additionalparam="-breakiterator -noqualifier all"
+        useexternalfile="true"
+        classpathref="runtime.classpath"
+        source="1.5">
+        <packageset dir="${api.dir}" defaultexcludes="yes">
+          <include name="org/apache/beehive/controls/**/*" />
+        </packageset>
+    </javadoc>
+  </target>
+
+  <!-- ==================================================================== -->
+  <!-- drt -->
+  <!-- ==================================================================== -->
+  <target name="drt" depends="deploy">
+    <ant dir="./drt" target="drt" inheritAll="false"/>
+  </target>
+
+</project>

Added: incubator/beehive/controls/drt/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+<?xml version="1.0" ?>
+
+<project name="controlsdrt" default="usage">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+
+    <taskdef name="apt" classname="org.apache.beehive.controls.runtime.generator.AptTask" 
+             classpath="../build/jars/controls.jar" onerror="report" />
+
+    <!-- New V9 DRT Domain specific properties -->
+    <property name="test.root" location="${basedir}"/>
+    <property name="tests.src" location="${test.root}/tests"/>
+    <property name="controls.src" location="${test.root}/controls"/>
+    <property name="build.dir" location="${test.root}/build"/>
+    <property name="build.classes" location="${build.dir}/classes"/>
+    <property name="build.beans" location="${build.dir}/classes/beans"/>
+    <property name="build.tests" location="${build.dir}/classes/tests"/>
+    <property name="build.beansrc" location="${build.dir}/beansrc"/>
+    <property name="build.jars" location="${build.dir}/jars"/>
+    <property name="drt.logs" location="${test.root}/logs"/>
+    <condition property="drt.os" value="windows" >
+       <os family="windows" />
+    </condition>
+    <condition property="drt.os" value="unix" >
+       <os family="unix" />
+    </condition>
+
+    <!-- =================================================================== -->
+    <!-- Usage - print the usage -->
+    <!-- ==================================================================== -->
+    <target name="usage">
+        <echo message=""/>
+        <echo message=""/>
+        <echo message="Controls DRT Build file"/>
+        <echo message="================================================================"/>
+        <echo message="|                          Usage                               |"/>
+        <echo message="================================================================"/>
+        <echo message="----------------------------------------------------------------"/>
+        <echo message="|                      Standard Targets                        |"/>
+        <echo message="----------------------------------------------------------------"/>
+        <echo message="clean                - Delete the junit classes."/>
+        <echo message="build                - build the junit classes."/>
+        <echo message="----------------------------------------------------------------"/>
+    </target>
+
+    <path id="drt.classpath">
+        <pathelement location="${junit.jar}"/>
+        <pathelement location="${tools.jar}"/>
+        <pathelement location="${velocity14.jar}"/>
+        <pathelement location="${velocitydep14.jar}"/>
+        <pathelement path="../build/jars/controls.jar"/>
+        <pathelement path="${build.beans}"/>
+    </path>
+
+    <target name="clean">
+        <delete dir="${build.dir}"/>
+        <delete dir="${drt.logs}"/>
+        <delete file="velocity.log"/>
+    </target>
+
+    <target name="dirs">
+        <mkdir dir="${build.classes}" />
+        <mkdir dir="${build.beans}" />
+        <mkdir dir="${build.tests}" />
+        <mkdir dir="${build.beansrc}" />
+        <mkdir dir="${build.jars}" />
+        <mkdir dir="${drt.logs}" />
+    </target>
+
+    <target name="build" depends="dirs">
+        <ant target="build-beans" />
+        <ant target="build-tests" />
+    </target>
+
+    <target name="build-beans" depends="dirs">
+        <!-- Build checkers first so they can be dynamically loaded
+        during build of control extensions.  Checkers may dep on public interfaces,
+        which we need to make sure get pulled in by apt -->
+        <apt srcdir="${controls.src}" destdir="${build.beans}" gendir="${build.beansrc}"
+             classpathref="drt.classpath" >
+            <include name="**/checker/*.java"/>
+        </apt>
+        <apt srcdir="${controls.src}" destdir="${build.beans}" gendir="${build.beansrc}"
+             classpathref="drt.classpath" 
+             srcExtensions="*.java,*.jcx,*.jcs" >
+        </apt>
+        <jar destfile="${build.jars}/drtbeans.jar"  basedir="${build.beans}" />
+    </target>
+
+    <target name="build-tests">
+        <!-- Build the test source directory -->
+        <javac srcdir="${tests.src}"
+            destdir="${build.tests}"
+            classpathref="drt.classpath"
+            debug="on"
+            optimize="on"
+            verbose="false"
+            failonerror="true"
+            />
+    </target>
+
+    <target name="run-drt">
+
+        <echo message="** junit logfiles written to ${drt.logs} **" />
+        <junit haltonerror="off" printsummary="on" tempdir="${build.dir}" >
+            <classpath>
+                <pathelement location="${build.beans}" />
+                <pathelement location="${build.tests}" />
+                <pathelement path="../build/jars/controls.jar"/>
+            </classpath>
+
+            <formatter type="plain" />
+
+            <batchtest fork="off" filtertrace="off" todir="${drt.logs}" >
+                <fileset dir="tests">
+                    <include name="**/*.java" />
+                    <exclude name="**/util/**.java" />
+                </fileset>
+            </batchtest>
+        </junit>
+
+    </target>
+
+    <target name="drt" >
+        <echo message="--------------------------------------------------" />
+        <echo message="|       controls drt starting                    |" />
+        <echo message="--------------------------------------------------" />
+
+        <antcall target="clean" />
+        <antcall target="build-beans" />
+        <antcall target="build-tests" />
+        <antcall target="run-drt" />
+
+        <echo message="--------------------------------------------------" />
+        <echo message="|       controls drt ending                      |" />
+        <echo message="--------------------------------------------------" />
+    </target>
+
+</project>

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Event.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Event.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+package org.apache.beehive.controls.test.basic;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.events.EventSet;
+
+/**
+ * This is a basic control that tests event support code generation and runtime behavior
+ * for ControlBeans.
+ * <p>
+ * There is not currently a DRT test cases that exercises this control, but having it here
+ * will at least exercise callback event handling codegen paths.
+ */
+@ControlInterface
+public interface Event
+{
+    @EventSet
+    public interface EventSet1
+    {
+        public void set1Method1();
+        public int set1Method2();
+        public boolean set1OverloadedMethod();
+        public boolean set1OverloadedMethod(int anArg);
+    }
+
+    @EventSet
+    public interface EventSet2
+    {
+        public void set2Method1();
+        public int set2Method2();
+        public boolean set2OverloadedMethod();
+        public boolean set2OverloadedMethod(int anArg);
+    }
+
+    public void testEvents();
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/EventImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/EventImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+package org.apache.beehive.controls.test.basic;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.events.Client;
+
+@ControlImplementation
+public class EventImpl implements Event
+{
+    @Client Event.EventSet1 eventSet1;
+    @Client Event.EventSet2 eventSet2;
+
+    public void testEvents() 
+    {
+        eventSet1.set1Method1();
+
+        eventSet2.set2Method2();
+    }
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Hello.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Hello.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.test.basic;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlInterface
+public interface Hello
+{ 
+    //
+    // A simple enumerated type used to customize the greeting by gender
+    //
+    public enum GenderType
+    {
+        NEUTRAL, MALE, FEMALE
+    }
+
+    public @interface Gender
+    {
+        GenderType value();
+    }
+
+    /**
+     * Declare a simple PropertySet, that allows the salutation used by the custom
+     * control to be customized.
+     */
+    @PropertySet
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    @Retention(RetentionPolicy.RUNTIME)
+    public @interface Greeting
+    {
+        String salutation() default "Hello";
+        Gender gender() default @Gender(GenderType.NEUTRAL);
+    }
+
+    java.lang.String hello(java.lang.String name);
+
+    java.lang.String lastVisitor();
+
+    int visitorCount();
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/HelloImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/HelloImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.test.basic;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+
+@ControlImplementation
+public class HelloImpl implements Hello, Extensible
+{ 
+    public String _lastVisitor = "<none>";
+    int _visitorCount = 0;
+
+    public String hello(String name)
+    {
+        _lastVisitor = name;
+        _visitorCount++;
+        return "Hello, " + name;
+    }
+
+    public String lastVisitor()
+    {
+        return _lastVisitor;
+    }
+
+    public int visitorCount()
+    {
+        return _visitorCount;
+    }
+
+    /**
+     * Implements the Extensible.invoke interface when a JCX-declared method is called
+     */
+    public Object invoke(Method method, Object [] args) throws Throwable
+    {
+        //
+        // To Be Implemented
+        //
+        return null; 
+    }
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/InnerOperExtend.jcx
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/InnerOperExtend.jcx	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+package org.apache.beehive.controls.test.basic;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+
+/**
+ * This tests extension of an inner control interface
+ * <p>
+ */
+@ControlExtension
+public interface InnerOperExtend extends Outer.InnerOperation
+{
+    public void voidExtOperation();
+    public int  intExtOperation(int intArg);
+    public int [] intArrayExtOperation(int [] intArrayArg);
+    public int [][] intMultiArrayExtOperation(int [][] intMultiArrayArg);
+    public Integer integerExtOperation(Integer integerArg);
+    public Integer [] integerArrayExtOperation(Integer [] integerArrayArg);
+    public Integer [][] integerMultiArrayExtOperation(Integer [][] integerMultiArrayArg);
+    public Object [] multiArgsExtOperation(int intArg, Integer integerArg, String stringArg);
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/InnerOperationImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/InnerOperationImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+package org.apache.beehive.controls.test.basic;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.events.Client;
+
+@ControlImplementation
+public class InnerOperationImpl implements Outer.InnerOperation, Extensible
+{
+    public void voidOperation() {};
+    public int  intOperation(int intArg) { return intArg; }
+    public LocalArg localArgOperation(LocalArg localArg) { return localArg; }
+
+    /**
+     * Implements the Extensible.invoke interface when a JCX-declared method is called
+     */
+    public Object invoke(Method method, Object [] args) throws Throwable
+    {
+        // If the argument is an exception, throw it
+        if (args[0] instanceof Throwable)
+            throw (Throwable)args[0];
+
+        // otherwise, just echo it back, following the pattern above.
+        if (args.length == 1)
+        {
+            return args[0];
+        } 
+        else
+        {
+            return args;
+        }
+    }
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperExcept.jcx
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperExcept.jcx	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+package org.apache.beehive.controls.test.basic;
+
+import java.io.IOException;
+import org.apache.beehive.controls.api.bean.ControlExtension;
+
+/**
+ * This is a test extension that declares operations throwing different types of exceptions
+ * <p>
+ */
+@ControlExtension
+public interface OperExcept extends Operation
+{
+    public class LocalException extends Exception
+    {
+        LocalException(String message) { super(message); }
+    }
+
+    public void noException(Exception toThrow);
+    public void baseException(Exception toThrow) throws Exception;
+    public void runtimeException(Exception toThrow) throws RuntimeException;
+    public void multiException(Exception toThrow) throws IllegalAccessException, IOException;
+    public void localException(Exception toThrow) throws LocalException;
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperExtend.jcx
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperExtend.jcx	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+package org.apache.beehive.controls.test.basic;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+
+/**
+ * This is a test extension that declares operations of various types
+ * <p>
+ */
+@ControlExtension
+public interface OperExtend extends Operation
+{
+    public void voidExtOperation();
+    public int  intExtOperation(int intArg);
+    public int [] intArrayExtOperation(int [] intArrayArg);
+    public int [][] intMultiArrayExtOperation(int [][] intMultiArrayArg);
+    public Integer integerExtOperation(Integer integerArg);
+    public Integer [] integerArrayExtOperation(Integer [] integerArrayArg);
+    public Integer [][] integerMultiArrayExtOperation(Integer [][] integerMultiArrayArg);
+    public Object [] multiArgsExtOperation(int intArg, Integer integerArg, String stringArg);
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Operation.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Operation.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+package org.apache.beehive.controls.test.basic;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+/**
+ * This is a test interface that declares operations of various types
+ * <p>
+ */
+@ControlInterface
+public interface Operation
+{
+    public class LocalArg
+    {
+        int intArg;
+        String stringArg;
+    }
+
+    public void voidOperation();
+    public int  intOperation(int intArg);
+    public int [] intArrayOperation(int [] intArrayArg);
+    public int [][] intMultiArrayOperation(int [][] intMultiArrayArg);
+    public Integer integerOperation(Integer integerArg);
+    public Integer [] integerArrayOperation(Integer [] integerArrayArg);
+    public Integer [][] integerMultiArrayOperation(Integer [][] integerMultiArrayArg);
+    public Object [] multiArgsOperation(int intArg, Integer integerArg, String stringArg);
+    public LocalArg localArgOperation(LocalArg localArg);
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperationImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/OperationImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+package org.apache.beehive.controls.test.basic;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.events.Client;
+
+@ControlImplementation
+public class OperationImpl implements Operation, Extensible
+{
+    public void voidOperation() {};
+    public int  intOperation(int intArg) { return intArg; }
+    public int [] intArrayOperation(int [] intArrayArg) { return intArrayArg; }
+    public int [][] intMultiArrayOperation(int [][] intMultiArrayArg) { return intMultiArrayArg; }
+    public Integer integerOperation(Integer integerArg) { return integerArg; }
+    public Integer [] integerArrayOperation(Integer [] integerArrayArg) { return integerArrayArg; }
+    public Integer [][] integerMultiArrayOperation(Integer [][] integerMultiArrayArg) { return integerMultiArrayArg; }
+    public Object [] multiArgsOperation(int intArg, Integer integerArg, String stringArg)
+    {
+        return new Object [] { intArg, integerArg, stringArg };
+    }
+    public LocalArg localArgOperation(LocalArg localArg) { return localArg; }
+
+    /**
+     * Implements the Extensible.invoke interface when a JCX-declared method is called
+     */
+    public Object invoke(Method method, Object [] args) throws Throwable
+    {
+        // If the argument is an exception, throw it
+        if (args[0] instanceof Throwable)
+            throw (Throwable)args[0];
+
+        // otherwise, just echo it back, following the pattern above.
+        if (args.length == 1)
+        {
+            return args[0];
+        } 
+        else
+        {
+            return args;
+        }
+    }
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Outer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/basic/Outer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+package org.apache.beehive.controls.test.basic;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+/**
+ * This tests usage of nested/inner interfaces as control interfaces
+ * <p>
+ */
+public class Outer
+{
+    @ControlInterface
+    public interface InnerOperation
+    {
+        public class LocalArg
+        {
+            int intArg;
+            String stringArg;
+        }
+
+        public void voidOperation();
+        public int  intOperation(int intArg);
+        public LocalArg localArgOperation(LocalArg localArg);
+    }
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloChecked.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloChecked.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.test.checker;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlInterface( checkerClass=HelloChecker.class )
+public interface HelloChecked
+{ 
+    //
+    // A simple enumerated type used to customize the greeting by gender
+    //
+    public enum GenderType
+    {
+        NEUTRAL, MALE, FEMALE
+    }
+
+    public @interface Gender
+    {
+        GenderType value();
+    }
+
+    /**
+     * Declare a simple PropertySet, that allows the salutation used by the custom
+     * control to be customized.
+     */
+    @PropertySet
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    @Retention(RetentionPolicy.RUNTIME)
+    public @interface Greeting
+    {
+        String salutation() default "Hello";
+        Gender gender() default @Gender(GenderType.NEUTRAL);
+    }
+
+    java.lang.String hello(java.lang.String name);
+
+    java.lang.String lastVisitor();
+
+    int visitorCount();
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloCheckedExtend.jcx
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloCheckedExtend.jcx	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+package org.apache.beehive.controls.test.checker;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+
+/**
+ * This is a test extension that declares operations of various types
+ * <p>
+ */
+@ControlExtension
+public interface HelloCheckedExtend extends HelloChecked
+{
+    public void voidExtOperation();
+}
+

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloCheckedImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloCheckedImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.test.checker;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+
+@ControlImplementation
+public class HelloCheckedImpl implements HelloChecked, Extensible
+{ 
+    public String _lastVisitor = "<none>";
+    int _visitorCount = 0;
+
+    public String hello(String name)
+    {
+        _lastVisitor = name;
+        _visitorCount++;
+        return "Hello, " + name;
+    }
+
+    public String lastVisitor()
+    {
+        return _lastVisitor;
+    }
+
+    public int visitorCount()
+    {
+        return _visitorCount;
+    }
+
+    /**
+     * Implements the Extensible.invoke interface when a JCX-declared method is called
+     */
+    public Object invoke(Method method, Object [] args)
+    {
+        //
+        // To Be Implemented
+        //
+        return null; 
+    }
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/checker/HelloChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+package org.apache.beehive.controls.test.checker;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.FieldDeclaration;
+
+import org.apache.beehive.controls.api.bean.ControlChecker;
+
+public class HelloChecker implements ControlChecker
+{
+    public void check(Declaration decl, AnnotationProcessorEnvironment env)
+    {
+        // Just refer to the public interface in some way to test
+        // this kind of dep.
+        HelloChecked.GenderType gt = HelloChecked.GenderType.NEUTRAL;
+
+        if ( decl instanceof TypeDeclaration )
+        {
+            env.getMessager().printNotice(decl.getPosition(),
+                    "HelloChecker: found type decl=" + decl);
+        }
+        else if ( decl instanceof FieldDeclaration )
+        {
+            env.getMessager().printNotice(decl.getPosition(),
+                    "HelloChecker: found field decl=" + decl);
+        }
+        else
+        {
+            env.getMessager().printNotice(decl.getPosition(),
+                    "HelloChecker: found decl=" + decl);
+        }
+    }
+}
+

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/Composer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/Composer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+package org.apache.beehive.controls.test.composition;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * A simple control that tests control composition
+ */
+@ControlInterface
+public interface Composer
+{ 
+    //
+    // Returns a propertySet value for a simple nested control
+    //
+    public Annotation getControlPropertySet(Class propertySet);
+
+    //
+    // Returns a propertySet value for an extension nested control
+    //
+    public Annotation getExtensionControlPropertySet(Class propertySet);
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/ComposerImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/ComposerImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,112 @@
+package org.apache.beehive.controls.test.composition;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.events.EventHandler;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+import org.apache.beehive.controls.test.properties.Props;
+import org.apache.beehive.controls.test.properties.PropsExtension;
+
+@ControlImplementation
+public class ComposerImpl implements Composer
+{ 
+    static final long serialVersionUID = 1L;
+
+    @Control 
+    @Props.SimpleProps(simpleString="A field annotation value")
+    Props propControl;
+
+    @Control 
+    @PropsExtension.SimpleProps(simpleString="A different field annotation value")
+    private PropsExtension propExtControl;
+
+    @Nested.Index(1)
+    private @Control Nested nested1;
+
+    @Nested.Index(2)
+    /* package */@Control Nested nested2;
+
+    @Nested.Index(3)
+    protected @Control Nested nested3;
+
+    @Nested.Index(4)
+    public @Control Nested nested4;
+
+    /**
+     * Provides a simple test API to externally query the PropertySet values on a
+     * nested control.
+     */
+    public Annotation getControlPropertySet(Class propertySet)
+    {
+        return propControl.getControlPropertySet(propertySet);
+    }
+
+    public Annotation getExtensionControlPropertySet(Class propertySet)
+    {
+        return propExtControl.getControlPropertySet(propertySet);
+    }
+
+    //
+    // Define various event handlers for the nested controls
+    //
+    @EventHandler(field="nested1", eventSet=Nested.Return.class, eventName="returnVoid")
+    public void nested1ReturnVoid() { return; }
+
+    @EventHandler(field="nested1", eventSet=Nested.Return.class, eventName="returnString")
+    public String nested1ReturnString() { return "Hello"; }
+
+    @EventHandler(field="nested1", eventSet=Nested.Return.class, eventName="returnInt")
+    public int nested1ReturnInt() { return 21; }
+
+    @EventHandler(field="nested2", eventSet=Nested.Args.class, eventName="argsInt")
+    public int nested2ArgsInt(int value) { return value; } 
+
+    @EventHandler(field="nested2", eventSet=Nested.Args.class, eventName="argsString")
+    public String nested2ArgsString(String value) { return value; }
+
+    @EventHandler(field="nested2", eventSet=Nested.Args.class, eventName="argsMultiple")
+    public Object [] nested2ArgsMultiple(int val1, String val2) {return new Object[] {val1,val2};}
+
+    @EventHandler(field="nested3", eventSet=Nested.Except.class, eventName="exceptIO")
+    public void nested3ExceptIO() throws java.io.IOException
+    {
+        throw new java.io.IOException("Ouch");
+    }
+
+    @EventHandler(field="nested3", eventSet=Nested.Except.class, eventName="exceptRuntime")
+    public void nested3ExceptRuntime() throws java.lang.RuntimeException
+    {
+        throw new RuntimeException("Crash");
+    }
+
+    @EventHandler(field="nested3", eventSet=Nested.Except.class, eventName="exceptLocal")
+    public void nested3ExceptLocal() throws Nested.LocalException
+    {
+        throw new Nested.LocalException("Bang");
+    }
+
+    @EventHandler(field="nested3", eventSet=Nested.Except.class, eventName="exceptMultiple")
+    public void exceptMultiple() throws java.io.IOException, RuntimeException
+    {
+        throw new java.io.IOException("Play nice!");
+    }
+
+    @EventHandler(field="nested4", eventSet=Nested.Return.class, eventName="returnInt")
+    public int nested4ReturnInt() { return 99; }
+
+    @EventHandler(field="nested4", eventSet=Nested.Args.class, eventName="argsString")
+    public String nested4ArgsString(String value) { return value; }
+
+    @EventHandler(field="nested4", eventSet=Nested.Except.class, eventName="exceptLocal")
+    public void nested4ExceptLocal() throws Nested.LocalException
+    {
+        throw new Nested.LocalException("Bang");
+    }
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/Nested.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/Nested.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+package org.apache.beehive.controls.test.composition;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.events.EventSet;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlInterface
+public interface Nested
+{ 
+    @PropertySet
+    @Target( {ElementType.TYPE, ElementType.FIELD} )
+    @Retention(RetentionPolicy.RUNTIME)
+    public @interface Index
+    {
+        int value();
+    }
+
+    @EventSet
+    public interface Return
+    { 
+        void returnVoid();
+        String returnString();
+        int returnInt();
+    }
+
+    @EventSet
+    public interface Args
+    { 
+        public int argsInt(int value);
+        public String argsString(String value);
+        public Object [] argsMultiple(int val1, String val2);
+    }
+
+    public class LocalException extends Exception
+    {
+        LocalException(String msg) { super(msg); }
+        LocalException(String msg, Throwable t) { super(msg,t); }
+    }
+    
+    @EventSet
+    public interface Except
+    { 
+        void exceptIO() throws java.io.IOException;
+        void exceptRuntime() throws java.lang.RuntimeException;
+        void exceptLocal() throws LocalException;
+        void exceptMultiple() throws java.io.IOException, RuntimeException;
+    }
+
+    public void fireEvent(String eventSet, String eventName);
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/NestedImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/composition/NestedImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+package org.apache.beehive.controls.test.composition;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.events.Client;
+
+@ControlImplementation
+public class NestedImpl implements Nested
+{ 
+    @Client Return  returnClient;
+    @Client Args    argsClient;
+    @Client Except  exceptClient;
+
+    public void fireEvent(String set, String name)
+    {
+    }
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/context/BaseContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/context/BaseContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+package org.apache.beehive.controls.test.context;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlInterface
+public interface BaseContext
+{ 
+    java.lang.String hello(java.lang.String name);
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/context/BaseContextImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/context/BaseContextImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.test.context;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.context.ControlBeanContext.LifeCycle;
+import org.apache.beehive.controls.api.context.ResourceContext;
+import org.apache.beehive.controls.api.context.ResourceContext.ResourceEvents;
+import org.apache.beehive.controls.api.events.EventHandler;
+
+import org.apache.beehive.controls.test.util.TestContext;
+
+@ControlImplementation
+public class BaseContextImpl implements BaseContext
+{ 
+    @Context ControlBeanContext context;
+    @Context ResourceContext resourceContext;
+    @Context TestContext testContext;
+
+    public String hello(String name)
+    {
+        testContext.addEvent("BaseContextImpl.hello " + name);
+        return "Hello, " + name;
+    }
+    
+    @EventHandler (field="context", eventSet=LifeCycle.class, eventName="onCreate")
+    public void onCreate() 
+    {
+        testContext.addEvent("BaseContextImpl.onCreate");
+    }
+
+    @EventHandler (field="resourceContext", eventSet=ResourceEvents.class, eventName="onAcquire")
+    /* package */ void onAcquire() 
+    {
+        testContext.addEvent("BaseContextImpl.onAcquire");
+    }
+
+    @EventHandler (field="resourceContext", eventSet=ResourceEvents.class, eventName="onRelease")
+    protected void onRelease()
+    {
+        testContext.addEvent("BaseContextImpl.onRelease");
+    }
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/NestProps.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/NestProps.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+package org.apache.beehive.controls.test.properties;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * A simple control that nests the Props control, for nested property testing.
+ */
+@ControlInterface
+public interface NestProps
+{ 
+    //
+    // Returns a propertySet value for a simple nested control
+    //
+    public Annotation getControlPropertySet(Class propertySet);
+
+    //
+    // Returns a propertySet value for an extension nested control
+    //
+    public Annotation getExtensionControlPropertySet(Class propertySet);
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/NestPropsImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/NestPropsImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+package org.apache.beehive.controls.test.properties;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlImplementation
+public class NestPropsImpl implements NestProps
+{ 
+    static final long serialVersionUID = 1L;
+
+    @Control 
+    @Props.SimpleProps(simpleString="A field annotation value")
+    Props propControl;
+
+    @Control 
+    @PropsExtension.ArrayProps(arrayString={"One","Two","Three"})
+    private PropsExtension propExtControl;
+
+    /**
+     * Provides a simple test API to externally query the PropertySet values on a
+     * nested control.
+     */
+    public Annotation getControlPropertySet(Class propertySet)
+    {
+        return propControl.getControlPropertySet(propertySet);
+    }
+
+    public Annotation getExtensionControlPropertySet(Class propertySet)
+    {
+        return propExtControl.getControlPropertySet(propertySet);
+    }
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/Props.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/Props.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+package org.apache.beehive.controls.test.properties;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * A simple control that can be used for property testing of basic primitive properties,
+ * as well as nested an array property types.
+ */
+@ControlInterface
+public interface Props
+{ 
+    //
+    // A simple enumeration used to test enum annotations
+    //
+    public enum SimpleEnum { ChoiceA, ChoiceB, ChoiceC; }
+
+    //
+    // Define static final constants for SimpleProps defaults
+    //
+    static final int INT_DEFAULT = 87; 
+    static final String STRING_DEFAULT = "Hello";
+    static final Class CLASS_DEFAULT = java.lang.Object.class;
+    static final SimpleEnum ENUM_DEFAULT = SimpleEnum.ChoiceA;
+
+    //
+    //
+    // Define a PropertySet that tests simple types
+    //
+    @PropertySet
+    @Retention(RetentionPolicy.RUNTIME) 
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    public @interface SimpleProps
+    {
+        int simpleInt() default INT_DEFAULT;
+        String simpleString() default STRING_DEFAULT;
+        Class simpleClass() default java.lang.Object.class;
+        SimpleEnum simpleEnum() default SimpleEnum.ChoiceA;
+    }
+
+    //
+    // Define static final constants for ArrayProps defaults
+    //
+    static final int [] ARRAY_INT_DEFAULT = {99, 33, 66, 22};
+    static final String [] ARRAY_STRING_DEFAULT = {"How", "are", "you", ",", "today", "?"};
+    static final Class [] ARRAY_CLASS_DEFAULT = {java.util.HashMap.class, java.util.Iterator.class};
+    static final SimpleEnum [] ARRAY_ENUM_DEFAULT = { SimpleEnum.ChoiceB, SimpleEnum.ChoiceC };
+
+    //
+    // Define a PropertySet that tests array types
+    //
+    @PropertySet
+    @Retention(RetentionPolicy.RUNTIME) 
+    @Target( {ElementType.TYPE, ElementType.FIELD} )
+    public @interface ArrayProps
+    {
+        int [] arrayInt() default {99, 33, 66, 22};
+        String [] arrayString() default {"How", "are", "you", ",", "today", "?"}; 
+        Class [] arrayClass() default {java.util.HashMap.class, java.util.Iterator.class};
+        SimpleEnum [] arrayEnum() default { SimpleEnum.ChoiceB, SimpleEnum.ChoiceC };
+    }
+
+    //
+    // Define static final constants for SimpleProps defaults
+    //
+    static final int ANNOT_INT_DEFAULT = 9999999; 
+    static final String ANNOT_STRING_DEFAULT = "Hola";
+    static final Class ANNOT_CLASS_DEFAULT = java.beans.Beans.class;
+    static final SimpleEnum ANNOT_ENUM_DEFAULT = SimpleEnum.ChoiceC;
+
+    //
+    // Define a PropertySet that tests properties that are themselves annotation types
+    //
+    @PropertySet
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    public @interface TestAnnot
+    {
+        SimpleProps simpleAnnot()
+            default @SimpleProps(
+                simpleInt = ANNOT_INT_DEFAULT,
+                simpleString = ANNOT_STRING_DEFAULT,
+                simpleClass =  java.beans.Beans.class,
+                simpleEnum = SimpleEnum.ChoiceC);
+        ArrayProps arrayAnnot();
+    }
+
+    //
+    // Define property keys to enable access to test members in a PropertyMap
+    //
+    public Annotation getControlPropertySet(Class propertySet);
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/PropsExtension.jcx
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/PropsExtension.jcx	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+package org.apache.beehive.controls.test.properties;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+
+import org.apache.beehive.controls.api.properties.PropertyKey;
+
+/**
+ * Defines a new extension interface that derives from Props
+ */
+@ControlExtension
+@Props.SimpleProps(simpleInt=3)   // matches INT_PRIM_VALUE below
+public interface PropsExtension extends Props
+{
+    // the class annotation value set above
+    public static int SIMPLE_INT_VALUE = 3;
+
+    // the method annotation vales set below
+    public static Class SIMPLE_CLASS_VALUE1 = java.beans.Beans.class;
+    public static Class SIMPLE_CLASS_VALUE2 = org.apache.beehive.controls.api.bean.ControlBean.class;
+    @SimpleProps (simpleClass=java.beans.Beans.class)
+    public Object getPropertySetOnMethod1(Class propertySet);
+
+    @SimpleProps (simpleClass=org.apache.beehive.controls.api.bean.ControlBean.class)
+    public Object getPropertySetOnMethod2(Class propertySet);
+}

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/PropsImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/properties/PropsImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.test.properties;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlImplementation
+public class PropsImpl implements Props, Extensible
+{ 
+    static final long serialVersionUID = 1L;
+
+    @Context
+    ControlBeanContext context;
+
+    /**
+     * Provides a simple test API to externally query the control instance PropertySet values 
+     * returned by ControlBeanContext APIs
+     */
+    public Annotation getControlPropertySet(Class propertySet)
+    {
+        return context.getControlPropertySet(propertySet);
+    }
+
+    /**
+     * This implementation of Extensible.invoke allows the testing of annotations found
+     * on JCX methods
+     */
+    public Object invoke(Method m, Object [] args) throws Throwable
+    {
+        if (!(args[0] instanceof Class) || 
+            !(((Class)args[0]).isAnnotationPresent(PropertySet.class)))
+            throw new IllegalArgumentException("Arg 0 must be an PropertySet interface!");
+
+        return context.getMethodPropertySet(m, (Class)args[0]);
+    }
+} 

Added: incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/util/TestContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/controls/org/apache/beehive/controls/test/util/TestContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+package org.apache.beehive.controls.test.util;
+
+import java.util.Collection;
+
+/**
+ * The TestContext is contextual service interface that is part of the basic test harness
+ * It is implemented by the TestBeanContext class
+ */
+public interface TestContext 
+{
+    public void addEvent(String event);
+
+    public void resetEvents();
+
+    public String [] getEvents();
+}

Added: incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/context/ContextTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/context/ContextTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,142 @@
+package org.apache.beehive.controls.test.context;
+
+import java.beans.Beans;
+
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.properties.BeanPropertyMap;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+
+import junit.framework.TestCase;
+
+import org.apache.beehive.controls.test.util.TestBeanContext;
+
+import org.apache.beehive.controls.test.context.BaseContextBean;
+
+public class ContextTest extends TestCase                                     
+{
+    public ContextTest( String s ) { super( s ); }
+
+    public void setUp() { }
+
+    /**
+     * Returns a new TestBeanContext to act as a container for control testing.
+     */
+    private TestBeanContext createTestBeanContext() throws Exception
+    {
+        return new TestBeanContext();
+    } 
+
+    private void checkEvents(String [] expectResults, String [] actualResults) throws Exception
+    {
+        if (expectResults.length != actualResults.length)
+        {
+            throw new Exception("Expected " + expectResults.length + " events, received " +
+                                actualResults.length + " events");
+        }
+
+        for (int i = 0; i < expectResults.length; i++)
+        {
+            if (!expectResults[i].equals(actualResults[i]))
+            {
+                throw new Exception("Event # " + i + " expected: [" + expectResults[i] + 
+                                    "],actual [" + actualResults[i] + "]");
+            }
+        }
+    }
+
+    /**
+     * Creates a new ControlBean instance based upon the specified class name
+     */
+    private ControlBean createTestBean(String beanClassName) throws Exception
+    {
+        return (ControlBean)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
+                                              beanClassName);
+    }
+
+    /**
+     * Test basic Context events for Controls
+     */
+    public void testContextEventSingle() throws Exception
+    {
+        //
+        // Create and start a new ControlBean test context
+        //
+        TestBeanContext testContext = createTestBeanContext();
+        testContext.beginContext();
+        try
+        {
+            BaseContextBean contextBean = (BaseContextBean)createTestBean("org.apache.beehive.controls.test.context.BaseContextBean");
+
+            testContext.resetEvents();
+            contextBean.hello("kyle");
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+        checkEvents(testContext.getEvents(),
+                    new String [] { "BaseContextImpl.onCreate", "BaseContextImpl.onAcquire",
+                                    "BaseContextImpl.hello kyle", "BaseContextImpl.onRelease" });
+    }
+
+    /**
+     * Test basic Context events for Controls for multiple invocations in the same context
+     */
+    public void testContextEventMultiple() throws Exception
+    {
+        //
+        // Create and start a new ControlBean test context
+        //
+        TestBeanContext testContext = createTestBeanContext();
+        testContext.beginContext();
+        try
+        {
+            BaseContextBean contextBean = (BaseContextBean)createTestBean("org.apache.beehive.controls.test.context.BaseContextBean");
+
+            testContext.resetEvents();
+            contextBean.hello("ken");
+            contextBean.hello("mike");
+            contextBean.hello("lawrence");
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+        checkEvents(testContext.getEvents(),
+                    new String [] { "BaseContextImpl.onCreate", "BaseContextImpl.onAcquire",
+                                    "BaseContextImpl.hello ken", "BaseContextImpl.hello mike", 
+                                    "BaseContextImpl.hello lawrence", "BaseContextImpl.onRelease" });
+    }
+
+    /**
+     * Test basic Context events for Controls, for multiple controls used in the same context
+     */
+    public void testContextEventParallel() throws Exception
+    {
+        //
+        // Create and start a new ControlBean test context
+        //
+        TestBeanContext testContext = createTestBeanContext();
+        testContext.beginContext();
+        try
+        {
+            BaseContextBean contextBean1 = (BaseContextBean)createTestBean("org.apache.beehive.controls.test.context.BaseContextBean");
+            BaseContextBean contextBean2 = (BaseContextBean)createTestBean("org.apache.beehive.controls.test.context.BaseContextBean");
+
+            testContext.resetEvents();
+            contextBean1.hello("kyle");
+            contextBean2.hello("ken");
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+        checkEvents(testContext.getEvents(),
+                    new String [] { "BaseContextImpl.onCreate", "BaseContextImpl.onAcquire",
+                                    "BaseContextImpl.hello kyle", 
+                                    "BaseContextImpl.onCreate", "BaseContextImpl.onAcquire",
+                                    "BaseContextImpl.hello ken", 
+                                    "BaseContextImpl.onRelease", "BaseContextImpl.onRelease" });
+    }
+}

Added: incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/properties/PropTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/properties/PropTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,296 @@
+package org.apache.beehive.controls.test.properties;
+
+import java.beans.Beans;
+
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.properties.BeanPropertyMap;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+
+import junit.framework.TestCase;
+
+import org.apache.beehive.controls.test.util.TestBeanContext;
+
+import org.apache.beehive.controls.test.properties.Props;
+import org.apache.beehive.controls.test.properties.Props.ArrayProps;
+import org.apache.beehive.controls.test.properties.Props.SimpleEnum;
+import org.apache.beehive.controls.test.properties.Props.SimpleProps;
+import org.apache.beehive.controls.test.properties.Props.TestAnnot;
+import org.apache.beehive.controls.test.properties.PropsBean;
+import org.apache.beehive.controls.test.properties.PropsExtension;
+import org.apache.beehive.controls.test.properties.PropsExtensionBean;
+import org.apache.beehive.controls.test.properties.NestPropsBean;
+
+public class PropTest extends TestCase                                     
+{
+    public PropTest( String s ) { super( s ); }
+
+    public void setUp() { }
+
+    /**
+     * Returns a new TestBeanContext to act as a container for control testing.
+     */
+    private TestBeanContext createTestBeanContext() throws Exception
+    {
+        return new TestBeanContext();
+    } 
+
+    /**
+     * Creates a new ControlBean instance based upon the specified class name
+     */
+    private ControlBean createTestBean(String beanClassName) throws Exception
+    {
+        return (ControlBean)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
+                                              beanClassName);
+    }
+
+    /**
+     * Basic test: setting/reading property values by a control client
+     */
+    public void testClientAccess() throws Exception
+    {
+        PropsBean propBean = (PropsBean)createTestBean("org.apache.beehive.controls.test.properties.PropsBean");
+
+        //*************************************************************************************
+        // All of the tests below have the following basic structure:
+        //      1. get the initial property value and check that it matches the default
+        //      2. set the property value
+        //      3. get the property value and check that it matches the set value
+        //*************************************************************************************
+
+        //
+        // int property test
+        //
+        int simpleInt = propBean.getSimpleInt();
+        if (simpleInt != Props.INT_DEFAULT)
+            throw new Exception("bad default for int:" + simpleInt);
+        propBean.setSimpleInt(237);
+        simpleInt = propBean.getSimpleInt();
+        if (simpleInt != 237)
+            throw new Exception("bad get value for int:" + simpleInt);
+
+        //
+        // String property test
+        //
+        String simpleString = propBean.getSimpleString();
+        if (simpleString == null || !simpleString.equals(Props.STRING_DEFAULT))
+            throw new Exception("bad default for String:" + simpleString);
+        String testSimpleString = new String("howdy");
+        propBean.setSimpleString(testSimpleString);
+        simpleString = propBean.getSimpleString();
+        if (!simpleString.equals(testSimpleString))
+            throw new Exception("bad get value for String:" + simpleString);
+
+        //
+        // Class property test
+        //
+        Class simpleClass = propBean.getSimpleClass();
+        if (simpleClass == null || !simpleClass.equals(Props.CLASS_DEFAULT))
+            throw new Exception("bad default for Class:" + simpleClass);
+        Class testSimpleClass = java.util.Vector.class;
+        propBean.setSimpleClass(testSimpleClass);
+        simpleClass = propBean.getSimpleClass();
+        if (!simpleClass.equals(testSimpleClass))
+            throw new Exception("bad get value for Class:" + simpleClass);
+
+        //
+        // Enum property test
+        //
+        SimpleEnum simpleEnum = propBean.getSimpleEnum();
+        if (simpleEnum == null || !simpleEnum.equals(Props.ENUM_DEFAULT))
+            throw new Exception("bad default for enum:" + simpleEnum);
+        SimpleEnum testSimpleEnum = SimpleEnum.ChoiceB;
+        propBean.setSimpleEnum(testSimpleEnum);
+        simpleEnum = propBean.getSimpleEnum();
+        if (!simpleEnum.equals(testSimpleEnum))
+            throw new Exception("bad get value for enum:" + simpleEnum);
+
+        //
+        // int [] property test
+        //
+        int [] arrayInt = propBean.getArrayInt();
+        if (arrayInt == null || arrayInt.length != Props.ARRAY_INT_DEFAULT.length)
+            throw new Exception("bad default for int:" + arrayInt);
+        for (int i = 0; i < arrayInt.length; i++)
+            if (arrayInt[i] != Props.ARRAY_INT_DEFAULT[i])
+                throw new Exception("bad default for int[" + i + "]:" + arrayInt[i]);
+        int [] testArrayInt = {1, 2, 3, 4, 5};
+        propBean.setArrayInt(testArrayInt);
+        arrayInt = propBean.getArrayInt();
+        if (arrayInt == null || arrayInt.length != testArrayInt.length)
+            throw new Exception("bad get size for arrayInt:" + arrayInt);
+        for (int i = 0; i < arrayInt.length; i++)
+            if (arrayInt[i] != testArrayInt[i])
+                throw new Exception("bad get value for arrayInt["+i+"]:"+arrayInt[i]);
+
+        //
+        // String [] property test
+        //
+        String [] arrayString = propBean.getArrayString();
+        if (arrayString == null || arrayString.length != Props.ARRAY_STRING_DEFAULT.length)
+            throw new Exception("bad default for String []:" + arrayString);
+        for (int i = 0; i < arrayString.length; i++)
+            if (!arrayString[i].equals(Props.ARRAY_STRING_DEFAULT[i]))
+                throw new Exception("bad default for String []:" + arrayString);
+        String [] testArrayString = { "fee", "fi", "fo", "fum" };
+        propBean.setArrayString(testArrayString);
+        arrayString = propBean.getArrayString();
+        if (arrayString.length != testArrayString.length)
+            throw new Exception("bad get size for String array:" + arrayString);
+        for (int i = 0; i < arrayString.length; i++)
+            if (!arrayString[i].equals(testArrayString[i]))
+                throw new Exception("bad get value for arrayString["+i+"]:"+arrayString[i]);
+
+        //
+        // Class [] property test
+        //
+        Class [] arrayClass = propBean.getArrayClass();
+        if (arrayClass == null || arrayClass.length != Props.ARRAY_CLASS_DEFAULT.length)
+            throw new Exception("bad default for Class []:" + arrayClass);
+        for (int i = 0; i < arrayClass.length; i++)
+            if (!arrayClass[i].equals(Props.ARRAY_CLASS_DEFAULT[i]))
+                throw new Exception("bad default for Class []:" + arrayClass);
+        Class [] testArrayClass = {Integer.class, Long.class, Short.class, Float.class,
+                                   Double.class, Character.class, Boolean.class};
+        propBean.setArrayClass(testArrayClass);
+        arrayClass = propBean.getArrayClass();
+        if (arrayClass.length != testArrayClass.length)
+            throw new Exception("bad get size for Class array:" + arrayClass);
+        for (int i = 0; i < arrayClass.length; i++)
+            if (!arrayClass[i].equals(testArrayClass[i]))
+                throw new Exception("bad get value for arrayClass["+i+"]:"+arrayClass[i]);
+
+        //
+        // Enum [] property test
+        //
+        SimpleEnum [] arrayEnum = propBean.getArrayEnum();
+        if (arrayEnum == null || arrayEnum.length != Props.ARRAY_ENUM_DEFAULT.length)
+            throw new Exception("bad default for Class []:" + arrayEnum);
+        for (int i = 0; i < arrayEnum.length; i++)
+            if (!arrayEnum[i].equals(Props.ARRAY_ENUM_DEFAULT[i]))
+                throw new Exception("bad default for Class []:" + arrayEnum);
+        SimpleEnum [] testArrayEnum = 
+            { SimpleEnum.ChoiceB, SimpleEnum.ChoiceC, SimpleEnum.ChoiceA };
+        propBean.setArrayEnum(testArrayEnum);
+        arrayEnum = propBean.getArrayEnum();
+        if (arrayEnum.length != testArrayEnum.length)
+            throw new Exception("bad get size for Class array:" + arrayEnum);
+        for (int i = 0; i < arrayEnum.length; i++)
+            if (!arrayEnum[i].equals(testArrayEnum[i]))
+                throw new Exception("bad get value for arrayEnum["+i+"]:"+arrayEnum[i]);
+
+        //
+        // Annotation property test
+        //
+        SimpleProps simpleAnnot = propBean.getSimpleAnnot();
+        if (simpleAnnot == null)
+            throw new Exception("unexpected null default for annotation:" + simpleAnnot);
+        if (simpleAnnot.simpleInt() != Props.ANNOT_INT_DEFAULT)
+            throw new Exception("bad default for int annotation:" + simpleAnnot.simpleInt());
+        if (!Props.ANNOT_STRING_DEFAULT.equals(simpleAnnot.simpleString()))
+            throw new Exception("bad default for String annotation:" + simpleAnnot.simpleString());
+        if (!Props.ANNOT_CLASS_DEFAULT.equals(simpleAnnot.simpleClass()))
+            throw new Exception("bad default for Class annotation:" + simpleAnnot.simpleClass());
+        if (simpleAnnot.simpleEnum() != Props.ANNOT_ENUM_DEFAULT)
+            throw new Exception("bad default for enum annotation:" + simpleAnnot.simpleEnum());
+
+        PropertyMap simpleAnnotMap = new BeanPropertyMap(SimpleProps.class);
+        Integer testAnnotInt = new Integer(5150);
+        simpleAnnotMap.setProperty(new PropertyKey(SimpleProps.class, "simpleInt"), 
+                                   testAnnotInt);
+        String testAnnotString = new String("abracadabra");
+        simpleAnnotMap.setProperty(new PropertyKey(SimpleProps.class, "simpleString"), 
+                                   testAnnotString);
+        Class testAnnotClass = org.apache.beehive.controls.api.bean.Control.class;
+        simpleAnnotMap.setProperty(new PropertyKey(SimpleProps.class, "simpleClass"), 
+                                   testAnnotClass);
+
+        propBean.setSimpleAnnot(simpleAnnotMap); 
+
+        simpleAnnot = propBean.getSimpleAnnot();
+        if (simpleAnnot == null)
+            throw new Exception("unexpected null value for annotation:" + simpleAnnot);
+        if (simpleAnnot.simpleInt() != testAnnotInt.intValue())
+            throw new Exception("bad get value for annotation int:" + simpleAnnot.simpleInt());
+        if (!testAnnotString.equals(simpleAnnot.simpleString()))
+            throw new Exception("bad get value for annotation String:" + simpleAnnot.simpleString());
+        if (!testAnnotClass.equals(simpleAnnot.simpleClass()))
+            throw new Exception("bad get value for annotation Class:" + simpleAnnot.simpleClass());
+    }
+
+    /**
+     * Basic test: Reading property values inside implementation via ControlBeanContext API
+     */ 
+    public void testImplAccess() throws Exception 
+    {
+        PropsExtensionBean propExtBean = (PropsExtensionBean)createTestBean("org.apache.beehive.controls.test.properties.PropsExtensionBean");
+
+        Props.SimpleProps simpleProps = (SimpleProps)propExtBean.getControlPropertySet(SimpleProps.class);
+        if (simpleProps.simpleInt() != PropsExtension.SIMPLE_INT_VALUE)
+            throw new Exception("bad get value for JCX class property:" + simpleProps.simpleInt());
+
+        simpleProps = (SimpleProps)propExtBean.getPropertySetOnMethod1(SimpleProps.class);
+        if (!simpleProps.simpleClass().equals(PropsExtension.SIMPLE_CLASS_VALUE1))
+            throw new Exception("bad get value for JCX method property:" + simpleProps.simpleClass());
+        simpleProps = (SimpleProps)propExtBean.getPropertySetOnMethod2(SimpleProps.class);
+        if (!simpleProps.simpleClass().equals(PropsExtension.SIMPLE_CLASS_VALUE2))
+            throw new Exception("bad get value for JCX method property:" + simpleProps.simpleClass());
+
+        NestPropsBean nestBean = (NestPropsBean)createTestBean("org.apache.beehive.controls.test.properties.NestPropsBean");
+        simpleProps = (SimpleProps)nestBean.getControlPropertySet(SimpleProps.class);
+        if (!simpleProps.simpleString().equals("A field annotation value"))
+            throw new Exception("bad get value for JCX field annotation:" + simpleProps.simpleString());
+        String [] arrayExpect = {"One", "Two", "Three"};
+        ArrayProps arrayProps = (ArrayProps)nestBean.getExtensionControlPropertySet(ArrayProps.class);
+        String [] arrayString = arrayProps.arrayString();
+        if (arrayString.length != arrayExpect.length)
+            throw new Exception("bad value for JCX field annotation:" + arrayString);
+        for (int i = 0; i < arrayExpect.length; i++)
+            if (!arrayString[i].equals(arrayExpect[i]))
+                throw new Exception("bad get value for JCX field annotation:" + arrayString);
+
+        simpleProps = (SimpleProps)nestBean.getExtensionControlPropertySet(SimpleProps.class);
+        if (simpleProps.simpleInt() != PropsExtension.SIMPLE_INT_VALUE)
+            throw new Exception("bad get value for nested JCX class property:" + simpleProps.simpleInt());
+    }
+
+    /**
+     * Basic test: client access to properties, running inside container context
+     */
+    public void testClientAccessInContainer() throws Exception 
+    {
+        //
+        // Create and start a new ControlBean test context
+        //
+        TestBeanContext testContext = createTestBeanContext();
+        testContext.beginContext();
+        try
+        {
+            testClientAccess();
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+    }
+
+    /**
+     * Basic test: implementation access to properties, running inside container context
+     */
+    public void testImplAccessInContainer() throws Exception 
+    {
+        //
+        // Create and start a new ControlBean test context
+        //
+        TestBeanContext testContext = createTestBeanContext();
+        testContext.beginContext();
+        try
+        {
+            testImplAccess();    
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+    }
+}

Added: incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/util/TestBeanContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/drt/tests/org/apache/beehive/controls/test/util/TestBeanContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+package org.apache.beehive.controls.test.util;
+
+import java.beans.beancontext.BeanContextServices;
+import java.beans.beancontext.BeanContextServiceProvider;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.apache.beehive.controls.runtime.bean.ControlContainerContext;
+
+/**
+ * The TestBeanContext is a simple standalone bean context intended to be used as a test harness
+ * for control drt tests.  The goal is to enable controls to be instantiated and used within
+ * a standalone VM, and to give the client control of ControlContainerContext behavior, such
+ * as resource scoping.
+ */
+public class TestBeanContext extends ControlContainerContext implements TestContext
+{
+    /**
+     * The ControlBeanContextProvider inner class acts as a single BeanContext service
+     * provider for the ControlBeanContext service class.  The implementation is simple,
+     * because the runtime ControlBeanContext implementation class directly implements
+     * this interface.
+     */
+    private static class TestContextProvider implements BeanContextServiceProvider
+    {
+        //
+        // BeanContextServiceProvider.getService()
+        //
+        public Object getService(BeanContextServices bcs, Object requestor, Class serviceClass,
+                                 Object serviceSelector)
+        {
+            //
+            // Contextual services for a ControlBean is provided by the peer context
+            // instance.
+            //
+            return bcs;
+        }
+
+        //
+        // BeanContextServiceProvider.releaseService()
+        //
+        public void releaseService(BeanContextServices bcs, Object requestor, Object service)
+        {
+            // noop, because context exists whether referenced or not
+        }
+
+        //
+        // BeanContextServiceProvider.getContextServiceSelectors()
+        //
+        public Iterator getCurrentServiceSelectors(BeanContextServices bcs, Class serviceClass)
+        {
+            return null;    // no selectors
+        }
+    }
+
+    /**
+     * A singleton instance of the ControlBeanContextProvider class is that will be registered
+     * on all ControlBeanContext instances.  The provider can be a singleton because it is
+     * completely stateless and thread-safe.
+     */
+    static private TestContextProvider theProvider = new TestContextProvider();
+
+    /**
+     * Called by BeanContextSupport superclass during construction and deserialization to
+     * initialize subclass transient state
+     */
+    public void initialize()
+    {
+        super.initialize();
+
+        //
+        // Register the ControlBeanContext provider on all new context instances.
+        //
+        addService(org.apache.beehive.controls.test.util.TestContext.class, theProvider);
+    }
+
+    // TestContext.addEvent()
+    public void addEvent(String event)
+    {
+        _events.add(event);
+    }
+
+    // TestContext.resetEvents()
+    public void resetEvents()
+    {
+        _events.clear();
+    }
+
+    // TestContext.getEvents();
+    public String [] getEvents()
+    {
+        String [] retval = new String [_events.size()];
+        _events.toArray(retval);
+        return retval;
+    }
+
+    Vector<String> _events = new Vector<String>();
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/ControlException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/ControlException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+package org.apache.beehive.controls.api;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The ControlException class declares an unchecked exception that is thrown by the Controls
+ * runtime under certain failure conditions.
+ */
+public class ControlException extends RuntimeException
+{
+	/**
+	 * Constructs a ControlException object with the specified String as a message.
+	 * 
+	 * @param message The message to use.
+	 */
+    public ControlException(String message)
+    {
+        super(message);
+    }
+
+	/**
+	 * Constructs a ControlException object using the specified String as a message, and the 
+     * specified Throwable as a nested exception.
+	 * 
+	 * @param message The message to use.
+	 * @param t The exception to nest within this 
+	 * exception.
+	 */
+    public ControlException(String message, Throwable t)
+    {
+        super(message + "[" + t.getMessage() + "]", t);
+    }
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/Control.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/Control.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+package org.apache.beehive.controls.api.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The Control annotation type is used to annotate a field within a control
+ * client source file that is a control reference.  It is the declarative
+ * mechanism for instantiating controls in Java clients.  Java Controls
+ * runtime implementations will automatically initialize such annotated field
+ * references to an appropriate Java Control Bean of the requested type,
+ * and perform event listener hookup etc.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD})
+public @interface Control
+{
+
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+package org.apache.beehive.controls.api.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.beans.beancontext.BeanContext;
+import java.beans.beancontext.BeanContextProxy;
+
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+/**
+ * The ControlBean interface defines a base set of methods that are implemented by all
+ * <code>JavaBeans</code> that host Java Controls.
+ * <p>
+ * A ControlBean will implement the <code>java.beans.beancontext.BeanContextProxy</code>
+ * interface to provide a way to get the <code>BeanContext</code> directly associated
+ * with the Java Control.   The <code>getBeanContext()</code> API on the interface will
+ * return the parent (containing) context.
+ */
+public interface ControlBean extends BeanContextProxy, java.io.Serializable
+{
+    /**
+     * Returns the <code>java.beans.beancontext.BeanContext</code> that provides the parent
+     * context for the Java Control.
+     * @return the containing <code>BeanContext</code> for the Java ControlBean.
+     *
+     * @see java.beans.beancontext.BeanContext
+     */
+    public BeanContext getBeanContext();
+
+    /**
+     * Returns the <code>org.apache.beehive.controls.api.context.ControlBeanContext</code> instance
+     * that provides the local context for this control bean. <b>This is not the parent
+     * context for the control.</b>  It is the context that would be the parent context for
+     * any nested controls hosted by this control.
+     */
+    public ControlBeanContext getControlBeanContext();
+
+    /**
+     * Returns the unique control ID associated with the Java ControlBean.  This control ID
+     * is guaranteed to be unique within the containing <code>BeanContext</code>
+     * @return the control ID
+     */
+    public String getControlID();
+
+    /**
+     * Returns the Java Control public interface for the ControlBean.  This interface defines
+     * the operations and events exposed by the Java Control to its clients.
+     * @return the control public interface
+     */
+    public Class getControlInterface();
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+package org.apache.beehive.controls.api.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.Declaration;
+
+/**
+ * The ControlChecker interface is implemented by control authors wishing to
+ * enforce rich semantic validation on extension and field instance declarations of
+ * their controls.  By supplying a ControlChecker implementation (a "checker")
+ * and associating it with your control's public interface, when an extension (.jcx) 
+ * of your control is processed at build-time, the checker will be invoked and
+ * can do rich validation of the jcx type and field instances via introspection and
+ * analysis of the jcx's type structure, signatures and annotations.
+ * <p>
+ * Checkers are instantiated by, and required to implement, a no-arg constructor.
+ * They are provided with type information and context via the Sun mirror API.
+ */
+public interface ControlChecker
+{
+    /**
+     * Invoked by the control build-time infrastructure to process a declaration of
+     * a control extension (ie, an interface annotated with @ControlExtension), or
+     * a field instance of a control type.
+     */
+    public void check(Declaration decl, AnnotationProcessorEnvironment env);
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlExtension.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlExtension.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+package org.apache.beehive.controls.api.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The ControlExtension annotation type is used to annotate a control extension interface.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface ControlExtension
+{
+    // Members parameterizing the control extension will be added here
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlImplementation.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlImplementation.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.api.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The ControlImplementation annotation type is used to annotate the implementation class for a
+ * Java Control.  It marks the class as a control implementation and (in the future) parameterizes
+ * it.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface ControlImplementation
+{
+    /** class name for the Class (which implements
+     *  com.bea.control.assembly.ControlAssembler) whose assemble()
+     *  method is called at assembly time - if left Void then no
+     *  special assembly is needed
+     */
+    Class assemblyHelperClass() default java.lang.Void.class;
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlInterface.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/ControlInterface.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+package org.apache.beehive.controls.api.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The ControlInterface annotation type is used to annotate a control public interface.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface ControlInterface
+{
+    static public final String INTERFACE_NAME = "<InterfaceName>";
+    public String defaultBinding() default INTERFACE_NAME + "Impl";
+    public Class<? extends ControlChecker> checkerClass() default DefaultControlChecker.class;
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/DefaultControlChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/DefaultControlChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+package org.apache.beehive.controls.api.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.Declaration;
+
+/**
+ * The default or "empty" control checker that assigned to an @ControlInterface's
+ * controlChecker attribute if none is provided.
+ */
+public class DefaultControlChecker implements ControlChecker
+{
+    public void check(Declaration decl, AnnotationProcessorEnvironment env) { };
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/Extensible.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/bean/Extensible.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.api.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+
+/**
+ * The Extensible interface is implemented by a Java Control implementation class if the
+ * control defines an extensibility model that allows extended operations to be declared
+ * using a JCX interface.
+ * <p>
+ * The interface provides the <code>invoke</code> method, that is called whenever an
+ * extended operation is called by the client at run time.
+ */
+public interface Extensible
+{
+    /**
+     * Called by the Controls runtime to handle calls to methods of an
+     * extensible control. 
+     * <p>
+     * @param method The extended operation that was called.
+     * @param args Parameters of the operation.
+     * @return The value that should be returned by the operation.
+     * @throws java.lang.Throwable any exception declared on the extended operation may be
+     * thrown.  If a checked exception is thrown from the implementation that is not declared
+     * on the original interface, it will be wrapped in a ControlException.
+     */
+    public Object invoke(Method method, Object[] args) throws Throwable;
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/Context.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/Context.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+package org.apache.beehive.controls.api.context;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The Context annotation type is used to annotate a field within a control implementation
+ * class that refers to a contextual service.  The Java Controls runtime will automatically
+ * initialize the field value to an appropriate provider of the requested service, or will
+ * throw a construction or deserialization error if no such provider is available.
+ *
+ * The following is a simple example:
+ *
+ * <code><pre>
+ * <sp>@ControlImplementation
+ * public class MyControlImpl
+ * {
+ *     <sp>@Context
+ *     ControlContext myContext;
+ * }
+ * </pre></code>
+ * This example declares a field named <code>myContext</code> that will automatically be
+ * initialized by the Java Controls runtime to refer to a provider of the 
+ * <code>ControlContext</code> contextual service.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD})
+public @interface Context
+{
+
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/ControlBeanContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,139 @@
+package org.apache.beehive.controls.api.context;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.beans.beancontext.BeanContextServices;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.events.EventSet;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * The ControlBeanContext interface defines the basic set of contextual services and lifecycle
+ * events for Java Control Beans.
+ * <p>
+ * ControlBeanContext also extends the <code>java.beans.beancontext.BeanContextServices</code>
+ * interface, so it also provide core Java Beans services for managing contained controls,
+ * looking up contextual services, and locating the parent BeanContext context.
+ * <p>
+ * A Control implementation class can obtain access to the ControlBeanContext associated
+ * with it by declaring an instance field of this type and annotating it with the
+ * <code>org.apache.beehive.controls.api.context.Context</code> annotation, as in the following
+ * example:
+ *
+ * <code><pre>
+ * import org.apache.beehive.controls.api.context.Context;
+ * import org.apache.beehive.controls.api.context.ControlBeanContext;
+ *
+ * <sp>@ControlImplementation
+ * public class MyControlImpl
+ * {
+ *     <sp>@Context
+ *     ControlBeanContext myContext;
+ * }
+ * </pre></code>
+ * The Java Control runtime will automatically initialize this field to a reference to the
+ * ControlBeanContext associated with the implementation instance.
+ */
+public interface ControlBeanContext extends BeanContextServices
+{
+    /**
+     * Returns the public or extension interface associated with the context
+     */
+    public Class getControlInterface();
+
+    /**
+     * Returns the current value of PropertySet for the associated control, or
+     * null if the property set has not been bound.  Actual bindings for property
+     * values may be the result of annotations on the control field or class,
+     * property setting via factory arguments or setter APIs, or external
+     * configuration.
+     *
+     * @param propertySet the PropertySet to return
+     * @return the requested PropertySet instance, or null if not bound
+     *
+     * @see org.apache.beehive.controls.api.properties.PropertySet
+     */
+    public <T extends Annotation> T getControlPropertySet(Class<T> propertySet);
+
+    /**
+     * Returns the current value of PropertySet for the provided method, or null
+     * if the property set has not been bound for this method.
+     *
+     * @param m the Method to check for properties
+     * @param propertySet the PropertySet to return
+     * @return the requested PropertySet instance, or null if not bound
+     *
+     * @see org.apache.beehive.controls.api.properties.PropertySet
+     */
+    public <T extends Annotation> T getMethodPropertySet(Method m, Class<T> propertySet);
+
+    /**
+     * Returns the current set of properties (in PropertyMap format) for the control 
+     * associated with the context.  The return map will contain the values for all bound 
+     * properties for the control.
+     * @return the PropertyMap containing properties of the control.  This map is read-only;
+     * any changes to it will not effect the local bean instance.
+     *
+     * @see org.apache.beehive.controls.api.properties.PropertyMap
+     */
+    public PropertyMap getControlPropertyMap();
+
+    /**
+     * Returns an instance of a contextual service based upon the local context.  If
+     * no provider for this service is available, then null will be returned.
+     *
+     * @param serviceClass the class of the requested service
+     * @param selector the service dependent parameter
+     * @return an instance of the request service, or null if unavailable
+     *
+     * @see java.beans.beancontext.BeanContextServices#getService
+     */
+    public <T> T getService(Class<T> serviceClass, Object selector);
+
+    /**
+     * The Lifecycle event interface defines a set of lifecycle events exposed by the
+     * ControlBeanContext to any registered listener.
+     */
+    @EventSet
+    public interface LifeCycle
+    {
+        /**
+         * The onCreate event is delivered when the control implementation instance for
+         * the associated bean has been instantiated and fully initialized.
+         */
+        public void onCreate();
+    }
+
+    /**
+     * Registers a new listener for LifeCycle events on the context.
+     *
+     * @see org.apache.beehive.controls.api.context.ControlBeanContext$LifeCycle
+     */
+    public void addLifeCycleListener(LifeCycle listener);
+
+    /**
+     * Removes a currently registered LifeCycle event listener on the context.
+     *
+     * @see org.apache.beehive.controls.api.context.ControlBeanContext$LifeCycle
+     */
+    public void removeLifeCycleListener(LifeCycle listener);
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/ResourceContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/context/ResourceContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,166 @@
+package org.apache.beehive.controls.api.context;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+import org.apache.beehive.controls.api.events.EventSet;
+
+/**
+ * The ResourceContext interface defines a basic contextual service for coordinating the 
+ * resource utilization of a control implementation within a resource scope defined external 
+ * to the control.   This contextual service that provides assistance to a Control in managing 
+ * any external resources (connections, sesssions, etc) that may be relatively expensive to 
+ * obtain and/or can only be held for a relatively short duration.  
+ * <p>
+ * A ResourceContext implementation may be provided by an external container of Controls, such 
+ * as a servlet engine or EJB container, that coordinates the resource lifecycle of controls with 
+ * the activities of the external container.    For example, the resource scope for a 
+ * ResourceContext provider associated with the web tier might enable control resources to be 
+ * used for the duration of a single http request;  for the EJB tier it might mean for the 
+ * lifetime of the current EJB invocation or active transaction.
+ * <p>
+ * A control implementation participates in this resource management contract by declaring a 
+ * ResourceContext instance annotated with the
+ * <sp>@Context annotation, the standard service provider model of the Control runtime will
+ * associate the control instance with a ResourceControl provider implementation that is
+ * associated with the current execution context.  This is demonstrated by the following
+ * code excerpt from a ControlImplementation class:
+ * <p>
+ * <pre><code>
+ * <sp>@org.apache.beehive.controls.api.bean.ControlImplementation
+ * public class MyControlImpl
+ * {
+ *     ...
+ *     // Declare need for resource mgmt support via the ResourceContext service
+ *     <sp>@org.apache.beehive.controls.api.context.Context
+ *     ResourceContext resourceContext;
+ *     ...
+ * </code></pre>
+ * <p>
+ * Once the control has been associated with a ResourceContext provider, the provider will
+ * deliver events to the Control Implementation instance according to the following basic
+ * contract:
+ * <p>
+ * <ul>
+ * <li>the ResourceContext provider notifies a control implementation when it should acquire its
+ * resources using the onAcquire event.
+ * <li>the ResourceContext provider notifies a control implementation when it should release its
+ * resources using the onRelease event.
+ * </ul>
+ * <p>
+ * The following code fragment shows how to receive resource events from within a Control
+ * implementation:
+ * <p>
+ * <pre><code>
+ * import org.apache.beehive.controls.api.events.EventHandler;
+ * 
+ * ...
+ *
+ * <sp>@EventHandler(field="resourceContext" 
+ *                eventSet=ResourceContext.Events.class,
+ *                eventName="onAcquire")
+ * public void onAcquire() 
+ * { 
+ *      // code to obtain connections/sessions/...
+ * }
+ * 
+ * <sp>@EventHandler(field="resourceContext" 
+ *                eventSet=ResourceContext.Events.class,
+ *                eventName="onRelease")
+ * public void onRelease() 
+ * { 
+ *      // code to release connections/sessions/...
+ * }
+ * </code></pre>
+ * <p>
+ * The onAcquire resource event is guaranteed to be delivered once before any operation declared 
+ * on a public or extension interface associated with the control.  This event will be delivered
+ * once, and only once, within a particular resource scope associated with the ResourceContext.
+ *
+ * If a control needs to utilize its resources in another context (such as in response to a 
+ * PropertyChange notification), the ResourceContext also provides support for manually
+ * acquiring and releasing resources.
+ * 
+ * @see org.apache.beehive.controls.api.context.ResourceContext.Events
+ * @see org.apache.beehive.controls.api.context.Context
+ * @see org.apache.beehive.controls.api.events.EventHandler
+ */
+public interface ResourceContext
+{
+    /**
+     * The acquire method allows a Control implementation to manually request acquisition.
+     * This is useful in contexts where the control needs access to associated resources
+     * from outside the scope of an operation.  If invoked when the control has not currently
+     * acquired resources, the onAcquire event will be delivered to the control and it will 
+     * be registered in the current resource scope as holding resources.  If the control has
+     * previously acquired resources in the current resource scope, then calling acquire()
+     * will have no effect.
+     */
+    public void acquire();
+
+    /**
+     * The release method allows a Control implement to manually release resources immediately,
+     * instead of waiting until the end of the current resource scope.  If invoked when the
+     * control has currently acquired resources, the onRelease event will be delivered immediately
+     * and the control will no longer be in the list of controls holding resources in the current
+     * resource scope.  If the control has not previously acquired resources, then calling
+     * release() will have no effect.
+     */
+    public void release();
+
+    /** 
+     * The hasResources method returns true if the control has currently acquired resources,
+     * false otherwise.
+     */
+    public boolean hasResources();
+
+    /**
+     * The ResourceEvents interface defines the resource events delivered by a ResourceContext
+     * provider.
+     */
+    @EventSet
+    public interface ResourceEvents
+    {
+        /** 
+         * The onAcquire event will be delivered by a ResourceContext provider to the 
+         * Control implementation <b>before</b> any operation on the control is invoked within 
+         * the resource scope associated with the provider and its associated container.  This 
+         * provides the opportunity for the implementation instance to obtain any resource it 
+         * uses to provide its services.
+         */
+        public void onAcquire();
+
+        /**
+         * The onRelease event will be delivered by a ResourceContext provider to the 
+         * Control implementation <b>immediately before</b> before the end of the resource 
+         * scope associated with the provider and its associated container.  This provides 
+         * the opportunity for the implementation instance to relinquish any resources it 
+         * obtained during <i>onAcquire</i> event handling.
+         */
+        public void onRelease();
+    }
+
+    /**
+     * Registers a listener that implements the ResourceEvents interface for the ResourceContext. 
+     */
+    public void addResourceEventsListener(ResourceEvents resourceListener);
+
+    /**
+     * Unregisters a listener that implements the ResourceEvents interface for the ResourceContext. 
+     */
+    public void removeResourceEventsListener(ResourceEvents resourceListener);
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/Client.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/Client.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+package org.apache.beehive.controls.api.events;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The Client annotation type is used to mark fields in a Control implementation class
+ * that define client event proxies. 
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD})
+public @interface Client
+{
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/EventHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/EventHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+package org.apache.beehive.controls.api.events;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The EventHandler annotation type is used to mark a method that provides the event handler
+ * implementation for a Control event.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+public @interface EventHandler
+{
+    /**
+     * The field name of the Java control event source.  This must be an @Control field declared 
+     * on the class defining the event handler method (or on a superclass if the field is not
+     * declared to be private).
+     */
+    String field();
+
+    /**
+     * The EventSet interface that declares the event.   This must be a valid EventSet interface 
+     * associated with the control type of the <code>field</code> member.
+     */
+    Class eventSet();
+
+    /**
+     * The name of the handled event.  This must be the name of a method declared on the EventSet
+     * interface referenced by the <code>eventSet</code> member.  The annotated method must have
+     * an event signature that <b>exactly</b> matches one of the event methods with this name.
+     */
+    String eventName();
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/EventSet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/events/EventSet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+package org.apache.beehive.controls.api.events;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The EventSet annotation type is used to mark an interface that defines a group of events
+ * associated with a Java Control.  By convention, event interfaces are defined as inner 
+ * classes on the Java Control public interface.  Each method defined within a
+ * event interface indicates an event that can be delivered by the control.
+ * <p>
+ * Here is a simple example:
+ * <code><pre>
+ * public interface MyControl extends org.apache.beehive.controls.api.Control
+ * {
+ *     <sp>@EventSet
+ *     public interface MyEvents
+ *     {
+ *         public void anEvent();
+ *     }
+ *
+ *     ...
+ * }
+ * </pre></code>
+ * This will declare an event interface named <code>MyEvents</code> that declares a single
+ * event: <code>anEvent</code>
+ * 
+ * The declaration of an EventSet for a control also means that the associated Control
+ * JavaBean will have listener registration/deregistration APIs.  The name of these
+ * APIs will be <i>add/remove<EventSetName>Listener</i>, and the argument will be an
+ * listener instance that implements the EventSet interface.
+ * <p>
+ * The above example would result in the following APIs on <code>MyControlBean</code>
+ *
+ * <code><pre>
+ * public class MyControlBean implements MyControl
+ * {
+ *     ...
+ *     public void addMyEventsListener(MyEvents listener) { ... }
+ *     public void removeMyEventsListener(MyEvents listener) { ... }
+ * </pre></code>
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface EventSet
+{
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/AnnotatedElementMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/AnnotatedElementMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,227 @@
+package org.apache.beehive.controls.api.properties;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+
+
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+/**
+ * The AnnotatedElementMap represents a read-only PropertyMap where property values are
+ * derived from JSR-175 annotations.
+ */
+public class AnnotatedElementMap extends BaseMap implements PropertyMap,java.io.Serializable
+{
+    /**
+     * Creates a new PropertyMap that is initialized based upon the type and annotations
+     * associated with an AnnotatedElement.
+     */ 
+    public AnnotatedElementMap(AnnotatedElement annotElem)
+    {
+        if (annotElem instanceof Class)
+            setMapClass((Class)annotElem);
+        else if (annotElem instanceof Field)
+            setMapClass(((Field)annotElem).getType());
+        else if (annotElem instanceof Method)
+            setMapClass(((Method)annotElem).getDeclaringClass());
+        else
+            throw new IllegalArgumentException("Unsupported element type: " + annotElem.getClass());
+
+        _annotElem = annotElem;
+    }
+
+    /**
+     * Sets the property specifed by 'key' within this map.
+     */
+    public void setProperty(PropertyKey key, Object value)
+    {
+        throw new IllegalStateException("AnnotatedElementMap is a read-only PropertyMap");
+    }
+
+    /**
+     * Returns the property value specified by 'key' within this map.
+     */
+    public Object getProperty(PropertyKey key)
+    {
+        if (!isValidKey(key))
+            throw new IllegalArgumentException("Key " + key + " is not valid for " + _mapClass);
+
+        //
+        // Look for the property value on the associated annotated element
+        //
+        Annotation annot = _annotElem.getAnnotation(key.getPropertySet());
+        if (annot != null)
+            return key.extractValue(annot);
+
+        //
+        // Call up to superclass for delegation / default value
+        //
+        return super.getProperty(key);
+    }
+
+    /**
+     * Returns true if the PropertyMap contains one or more values for the specified
+     * PropertySet, false otherwise
+     */
+    public boolean containsPropertySet(Class<? extends Annotation> propertySet)
+    {
+        if (_annotElem.isAnnotationPresent(propertySet))
+            return true;
+
+        //
+        // Call up to superclass for delegation
+        //
+        return super.containsPropertySet(propertySet);
+    }
+
+    /**
+     * Returns the AnnotatedElement used for PropertyMap values.
+     */
+    public AnnotatedElement getAnnotatedElement()
+    {
+        return _annotElem;
+    }
+
+    /**
+     * Returns a String version of method argument lists based upon the method argument types
+     */
+    private String getMethodArgs(Method m)
+    {
+        StringBuffer sb = new StringBuffer();
+        Class [] argTypes = m.getParameterTypes();
+        for (int i = 0; i < argTypes.length; i++)
+        {
+            if (i != 0) sb.append(",");
+            sb.append(argTypes[i].toString());
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Overrides the standard Serialization writeObject method to compute and store the element
+     * information in a serializable form.
+     */
+    private void writeObject(java.io.ObjectOutputStream out) throws IOException
+    {
+        //
+        // When serializing, compute sufficient information about the annotated element to
+        // allow it to be reassociated later in readObject
+        //
+        if (_annotElem instanceof Class)
+        {
+            _elemClass = (Class)_annotElem;
+            _elemDesc = null;   // non required
+        }
+        else if (_annotElem instanceof Field)
+        {
+            Field f = (Field)_annotElem;
+            _elemClass = f.getDeclaringClass();
+            _elemDesc = f.getName();
+        }
+        else if (_annotElem instanceof Method)
+        {
+            Method m = (Method)_annotElem;
+            _elemClass = m.getDeclaringClass();
+            _elemDesc = m.getName() + "(" + getMethodArgs(m) + ")";
+        } 
+
+        out.defaultWriteObject();
+    } 
+
+    /**
+     * Overrides the standard Serialization readObject implementation to reassociated with the
+     * target AnnotatedElement after deserialization.
+     */
+    private void readObject(java.io.ObjectInputStream in) 
+                 throws IOException, ClassNotFoundException
+    {
+        in.defaultReadObject();
+
+        if (_elemDesc == null)  // element is a Class
+            _annotElem = _elemClass;
+        else
+        {
+            int argsIndex = _elemDesc.indexOf('/');
+            if (argsIndex < 0)  // element is a Field
+            {
+                try
+                {
+                    _annotElem = _elemClass.getDeclaredField(_elemDesc);
+                }
+                catch (NoSuchFieldException nsfe)
+                {
+                    throw new IOException("Unable to locate field " + nsfe);
+                }
+            }
+            else // element is a method
+            {
+                String methodName = _elemDesc.substring(0, argsIndex);
+                if (_elemDesc.charAt(argsIndex+1) == ')')
+                {
+                    // At least handle the null args case quickly
+                    try
+                    {
+                        _annotElem = _elemClass.getDeclaredMethod(methodName, new Class [] {});
+                    }
+                    catch (NoSuchMethodException nsme)
+                    {
+                        throw new IOException("Unable to locate method " +_elemDesc);
+                    }
+                }
+                else
+                {
+                    // Linear search for the rest :(
+                    String methodArgs = _elemDesc.substring(argsIndex+1, _elemDesc.length()-1);
+                    Method [] methods = _elemClass.getDeclaredMethods();
+                    for (int i = 0; i < methods.length; i++)
+                    {
+                        if (methods[i].getName().equals(methodName) &&
+                            getMethodArgs(methods[i]).equals(methodArgs))
+                        {
+                            _annotElem = methods[i];
+                            break;
+                        }
+                    }
+
+                    if (_annotElem == null)
+                    {
+                        throw new IOException("Unable to locate method " +  _elemDesc);
+                    }
+                }
+            }
+        }
+    }
+
+    // The AnnotatedElement upon which this PropertyMap is based.  This is marked transient,
+    // because many Reflection types are not Serializable. 
+    transient private AnnotatedElement _annotElem;
+
+    private Class  _elemClass;   // Class associated with the annotated element
+    private String _elemDesc;    // Description of the element
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/BaseMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/BaseMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,164 @@
+package org.apache.beehive.controls.api.properties;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+
+
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+/**
+ * The BaseMap class provide an abstract base PropertyMap class from which other
+ * concrete PropertyMap implementation can derive.  It contains some common code
+ * (such as property key validation and the implementation of the base delegation model)
+ * that is generically useful.
+ */
+abstract public class BaseMap implements PropertyMap, java.io.Serializable
+{
+    /**
+     * Sets the PropertySet or Control interface associated with this map.  Only properties
+     * declared by the PropertySet or one of the PropertySets on the Control interface may
+     * be used with this map.
+     */
+    protected void setMapClass(Class mapClass)
+    {
+        //
+        // If the provided map class is a ControlBean type, then locate associated control
+        // interface or extension that defines properties.
+        //
+        if (ControlBean.class.isAssignableFrom(mapClass))
+        {
+            Class [] intfs = mapClass.getInterfaces();
+            for (int i = 0; i < intfs.length; i++)
+            {
+                if (intfs[i].isAnnotationPresent(ControlInterface.class) ||
+                    intfs[i].isAnnotationPresent(ControlExtension.class))
+                {
+                    mapClass = intfs[i];
+                    break;
+                }
+            }
+        }
+        else
+        {
+            if (!mapClass.isAnnotation() &&
+                !mapClass.isAnnotationPresent(ControlInterface.class) &&
+                !mapClass.isAnnotationPresent(ControlExtension.class))
+                throw new IllegalArgumentException(mapClass+" must be Control or annotation type");
+        }
+
+        _mapClass = mapClass;
+    }
+
+    /**
+     * Returns the PropertySet or Control interface class associated with the PropertyMap.
+     */
+    public Class getMapClass() { return _mapClass; }
+
+    /**
+     * Checks to see if the provided class is a control or property set interface that is
+     * compatible with the local PropertyMap.
+     */
+    private boolean isCompatibleClass(Class checkClass)
+    {
+        //
+        // If the check class is equal to or a super-interface of the map class, then
+        // they are compatible.
+        //
+        if (_mapClass.isAssignableFrom(checkClass))
+            return true;
+
+        //
+        // If the check class is a property set declared by the map class or a super interface
+        // of the map class, then they are compatible.
+        //
+        if (checkClass.isAnnotationPresent(PropertySet.class))
+        {
+            Class declaringClass = checkClass.getDeclaringClass();
+            if (declaringClass != null && 
+                checkClass.getDeclaringClass().isAssignableFrom(_mapClass))
+                return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks to ensure that the provided key is a valid key for this PropertyMap
+     */
+    protected boolean isValidKey(PropertyKey key)
+    {
+        return isCompatibleClass(key.getPropertySet());
+    }
+
+    /**
+     * Sets a delegate base property map from which values will be derived if not found within
+     * the local property map.
+     */
+    public void setDelegateMap(PropertyMap delegateMap)
+    {
+        if (!isCompatibleClass(delegateMap.getMapClass()))
+            throw new IllegalArgumentException("The delegate map is an incompatible type");
+
+        _delegateMap = delegateMap;
+    }
+
+    /**
+     * Returns the property value specified by 'key' within this map.
+     */
+    public Object getProperty(PropertyKey key)
+    {
+        //
+        // Delegate up to any parent map
+        //
+        if (_delegateMap != null)
+            return _delegateMap.getProperty(key);
+
+        //
+        // If neither found a value, return the default value
+        //
+        return key.getDefaultValue();
+    }
+
+    /**
+     * Returns true if the PropertyMap contains one or more values for the specified
+     * PropertySet, false otherwise.
+     */
+    public boolean containsPropertySet(Class<? extends Annotation> propertySet)
+    {
+        //
+        // Defer to any delegate map
+        //
+        if (_delegateMap != null)
+            return _delegateMap.containsPropertySet(propertySet);
+
+        return false;
+    }
+
+    Class            _mapClass;                     // associated Control or PropertySet class
+    PropertyMap      _delegateMap;                  // wrapped PropertyMap (or null)
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/BeanPropertyMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/BeanPropertyMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,147 @@
+package org.apache.beehive.controls.api.properties;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+
+
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+/**
+ * The BeanPropertyMap class represents a collection of property values where properties are
+ * stored in a local HashMap.
+ */
+public class BeanPropertyMap extends BaseMap implements PropertyMap,java.io.Serializable
+{
+    private static final HashMap _primToObject = new HashMap();
+
+    static
+    {
+        _primToObject.put(Integer.TYPE, Integer.class);
+        _primToObject.put(Long.TYPE, Long.class);
+        _primToObject.put(Short.TYPE, Short.class);
+        _primToObject.put(Float.TYPE, Float.class);
+        _primToObject.put(Double.TYPE, Double.class);
+        _primToObject.put(Character.TYPE, Character.class);
+        _primToObject.put(Boolean.TYPE, Boolean.class);
+    }
+
+    /**
+     * Creates an empty BeanPropertyMap associated with the specific Control public
+     * interface, PropertySet, or annotation type.
+     */
+    public BeanPropertyMap(Class mapClass)
+    {
+        setMapClass(mapClass);
+    }
+
+    /**
+     * Creates a BeanPropertyMap that wraps another PropertyMap.  Any changes via setProperty
+     * will be maintained locally on the constructed map, but getProperty will delegate to the 
+     * base PropertyMap for properties not set locally.
+     */
+    public BeanPropertyMap(PropertyMap map)
+    {
+        setMapClass(map.getMapClass());
+        setDelegateMap(map); 
+    }
+
+    /**
+     * Sets the property specifed by 'key' within this map.
+     */
+    public void setProperty(PropertyKey key, Object value)
+    {
+        if (!isValidKey(key))
+            throw new IllegalArgumentException("Key " + key + " is not valid for " + getMapClass());
+
+        //
+        // Validate the value argument, based upon the property type reference by the key
+        //
+        Class propType = key.getPropertyType();
+        if (value == null)
+        {
+            if (propType.isPrimitive() || propType.isAnnotation())
+                throw new IllegalArgumentException("Invalid null value for key " + key);
+        }
+        else
+        {
+            if (propType.isPrimitive())
+                propType = (Class)_primToObject.get(propType);
+            else if (propType.isAnnotation())
+                propType = PropertyMap.class;
+
+            if (!propType.isAssignableFrom(value.getClass()))
+            {
+                throw new IllegalArgumentException("Value class (" + value.getClass() + 
+                                                   ") not of expected type: " + propType);
+            }
+        }
+        _properties.put(key, value);
+        _propertySets.add(key.getPropertySet());
+    }
+
+    /**
+     * Returns the property value specified by 'key' within this map.
+     */
+    public Object getProperty(PropertyKey key)
+    {
+        if (!isValidKey(key))
+            throw new IllegalArgumentException("Key " + key + " is not valid for " + getMapClass());
+
+        //
+        // Check local properties first
+        //
+        if (_properties.containsKey(key))
+            return _properties.get(key);
+
+        //
+        // Call up to superclass, for delegation model / default value
+        //
+        return super.getProperty(key);
+    }
+
+    /**
+     * Returns true if the PropertyMap contains one or more values for the specified
+     * PropertySet, false otherwise
+     */
+    public boolean containsPropertySet(Class<? extends Annotation> propertySet)
+    {
+        if (_propertySets.contains(propertySet))
+            return true;
+
+        //
+        // Call up to superclass, for delegation model
+        //
+        return super.containsPropertySet(propertySet);
+    }
+
+    // locally maintained property values
+    HashMap<PropertyKey,Object> _properties = new HashMap<PropertyKey,Object>();   
+
+    // locally maintained PropertySets
+    HashSet<Class>   _propertySets = new HashSet();
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertyKey.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertyKey.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,118 @@
+package org.apache.beehive.controls.api.properties;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+
+/**
+ * The PropertyKey class represents a key that can be used to set a JSR-175 attribute member
+ * value within a <code>PropertyMap</code>.
+ */
+public class PropertyKey implements java.io.Serializable
+{
+    /**
+     * This constructor takes the JSR-175 metadata interface that is associated with
+     * the contained attributes.
+     */
+    public PropertyKey(Class<? extends Annotation> propertySet, String propertyName)
+    {
+        if (!propertySet.isAnnotation())
+        {
+            throw new IllegalArgumentException("Class " + propertySet + 
+                                               " is not a valid annotation type");
+        } 
+
+        try
+        {
+            _getMethod = propertySet.getMethod(propertyName, (Class [])null);
+            _propertySet = propertySet;
+            _propertyName = propertyName;
+            _propertyType = _getMethod.getReturnType();
+
+            //
+            // Compute a hash code for the key instance that will be constant for all keys
+            // that reference the same interface/member combo
+            // 
+            _hashCode = new String(propertySet.getName() + "." + propertyName).hashCode();
+        }
+        catch (NoSuchMethodException nsme)
+        {
+            throw new IllegalArgumentException(propertyName + 
+                          "is not a valid member of the metadata interface " + propertySet);
+        }
+    }
+
+    /**
+     * Computes the default value for the value of this property key, or null if there
+     * is no defined default.
+     */
+    public Object getDefaultValue()
+    {
+        // Query the accessor method for the default value
+        // This method will return 'null' if there is no defined default
+        return _getMethod.getDefaultValue();
+    }
+
+    /**
+     * Extracts the value of the key from an Annotation instance
+     */
+    /* package */ Object extractValue(Annotation annot)
+    {
+        try
+        {
+            return _getMethod.invoke(annot, new Object [] {});
+        }
+        // TODO -- cleanup exception handling, property defining a PropertyException
+        catch (RuntimeException re) { throw re; }
+        catch (Exception e)
+        {
+            throw new RuntimeException("Unable to extract value for " + _propertyName, e); 
+        }
+    }
+
+    public boolean equals(Object obj)
+    {
+        // fast success for static key declaration cases
+        if (this == obj)    
+            return true;
+
+        // fast fail on obvious differences
+        if (obj == null || !(obj instanceof PropertyKey) || _hashCode != obj.hashCode())
+            return false;
+
+        // slower success on two equivalent keys constructed independently
+        PropertyKey keyObj = (PropertyKey)obj;
+        return _propertySet.equals(keyObj._propertySet) && 
+               _propertyName.equals(keyObj._propertyName);
+    }
+
+    public int hashCode() { return _hashCode; }
+
+    public Class<? extends Annotation>  getPropertySet()  { return  _propertySet; }
+    public String   getPropertyName() { return _propertyName; }
+    public Class    getPropertyType() { return _propertyType; }
+
+    Class<? extends Annotation>  _propertySet;
+    String  _propertyName;
+    Class   _propertyType;
+    int     _hashCode;
+    Method  _getMethod;
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertyMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertyMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+package org.apache.beehive.controls.api.properties;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+
+
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+/**
+ * The PropertyMap interface represents a collection of ControlBean properties.  Concrete
+ * implementations of this interface might derive property values from a local Map, JSR-175
+ * annotation, external configuration, or other property sources.
+ */
+public interface PropertyMap 
+{
+    /**
+     * Returns the PropertySet or Control interface class associated with the PropertyMap.
+     */
+    public Class getMapClass();
+
+    /**
+     * Sets a delegate base property map from which values will be derived if not found within
+     * the local property map.
+     */
+    public void setDelegateMap(PropertyMap delegateMap);
+
+    /**
+     * Sets the property specifed by 'key' within this map.
+     */
+    public void setProperty(PropertyKey key, Object value);
+
+    /**
+     * Returns the property value specified by 'key' within this map.
+     */
+    public Object getProperty(PropertyKey key);
+
+    /**
+     * Returns true if the PropertyMap contains one or more values for the specified
+     * PropertySet, false otherwise
+     */
+    public boolean containsPropertySet(Class<? extends Annotation> propertySet);
+}

Added: incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertySet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/api/org/apache/beehive/controls/api/properties/PropertySet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,77 @@
+package org.apache.beehive.controls.api.properties;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The PropertySet annotation type is used to mark an interface that defines a set of
+ * properties that are associated with a Java Control.  By convention, property sets
+ * are declared as an inner annotation types on the Java Control public interface.
+ * <p>
+ * Each member of the annotation type targeted by the <code>PropertySet</code> annotation
+ * will define a new property for the control.
+ * <p>
+ * Here is a simple example:
+ * <code><pre>
+ * public interface MyControl extends org.apache.beehive.controls.api.Control
+ * {
+ *     <sp>@PropertySet
+ *     public @interface MyProperties
+ *     {
+ *         public String aStringProperty();
+ *         public int anIntProperty();
+ *         ...
+       }
+ * }
+ * </pre></code>
+ * <p>
+ * A Java Control can have multiple property sets associated with it.
+ */
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface PropertySet
+{
+    /**
+     * The prefix member defines a prefix that will be used in all property setter/getter
+     * methods for properties in the <code>PropertySet</code>.
+     * <p>
+     * The following code shows the basic conventions for setter/getter methods on a Java
+     * Control Bean:
+     * <code><pre>
+     *     public void set&lt;prefix&gt;&lt;propertyName&gt;(&lt;propertyType&gt; value);
+     *     public &lt;propertyType&gt; get&lt;prefix&gt;&lt;propertyName&gt;();
+     * </pre>/code>
+     * where <code>prefix</code> is the prefix member value, <code>propertyName</code> is
+     * the name of the declared property member, and <code>propertyType</code> is the
+     * type associated with the declared property member.
+     */
+    String prefix() default "";
+
+    /**
+     * The externalConfig member defines whether properties in the set will be settable
+     * via external configuration.
+     */
+    boolean externalConfig() default false;
+}

Added: incubator/beehive/controls/src/runtime/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,5 @@
+#
+# This configures APT so the ControlProcessorFactory can be used to process Control annotations
+#
+org.apache.beehive.controls.runtime.generator.apt.ControlAnnotationProcessorFactory
+org.apache.beehive.controls.runtime.generator.apt.ControlClientAnnotationProcessorFactory

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/BeanListener.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/BeanListener.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The BeanListener class acts as the abstract base class for generated event listeners
+ * associated with a  ControlBean.
+ */
+abstract public class BeanListener implements java.io.Serializable
+{
+    protected BeanListener()  { this(null); }
+    protected BeanListener(Object source) { _source = source; }
+
+    abstract public BeanListener cloneListener(Object source);
+
+    public Object getSource() { return _source; }
+
+    Object _source;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,631 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.beans.beancontext.BeanContext;
+import java.beans.beancontext.BeanContextChild;
+import java.beans.beancontext.BeanContextServices;
+import java.beans.beancontext.BeanContextServicesSupport;
+import java.beans.beancontext.BeanContextServiceRevokedListener;
+import java.beans.beancontext.BeanContextServiceRevokedEvent;
+import java.beans.beancontext.BeanContextSupport;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.EventListener;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.TooManyListenersException;
+import java.util.Vector;
+
+import org.apache.beehive.controls.api.ControlException;
+import org.apache.beehive.controls.api.properties.AnnotatedElementMap;
+import org.apache.beehive.controls.api.properties.BeanPropertyMap;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+
+/**
+ * The ControlBean class is an abstract base class for the JavaBean classes generated to support
+ * Workshop controls.
+ *
+ * The ControlBean class extends the BeanContextServicesSupport class, meaning it is capable of
+ * being a container and service provider for itself and other nested JavaBeans.
+ *
+ * All support APIs (which may be called from derived derived subclasses or contextual services
+ * are generally marked as protected and have names that start with an underscore.  This avoids the
+ * possibility that the name might conflict with a user-defined method on a control's public or
+ * extended (JCX) interface.
+ */
+abstract public class ControlBean
+                      implements org.apache.beehive.controls.api.bean.ControlBean,
+                                 java.beans.beancontext.BeanContextProxy,
+                                 java.io.Serializable
+{
+    public static final char IDSeparator = '/';
+    public static final char FactorySeparator = ':';
+
+    /**
+     * The Mutex class provides a basic mutex implementation.  It does lock counting, so the owner
+     * can call lock() multiple times, but will be required to call unlock() an equivalent
+     * number of times to give up the mutex lock.
+     */
+    private class Mutex implements java.io.Serializable
+    {
+        public synchronized void lock()
+        {
+            Thread currentThread = Thread.currentThread();
+            do
+            {
+                if (_owner == null)
+                {
+                    _owner = currentThread;
+                    _lockCount = 1;
+                }
+                else if (_owner == currentThread)
+                {
+                    _lockCount++;
+                }
+                else
+                {
+                    try { this.wait(); } catch (InterruptedException ie) {};
+                }
+            }
+            while (currentThread != _owner);
+        }
+
+        public synchronized void unlock()
+        {
+            if (_owner != Thread.currentThread())
+                throw new IllegalStateException("Must be lock owner to release mutex");
+
+            if (--_lockCount <= 0)
+            {
+                _owner = null;
+                notify();
+            }
+        }
+
+        //
+        // These can be safely marked transient, because a lock should never be held across
+        // Java serialization boundaries, since it is associated with a thread.
+        //
+        transient private Thread _owner;  // owning thread, or null if available
+        transient private int _lockCount; // lock count of owning thread
+    }
+
+    protected ControlBean(org.apache.beehive.controls.api.context.ControlBeanContext context,
+                          String id, PropertyMap initProperties, Class controlClass)
+    {
+        super();
+
+        _localID = id;
+        _id = _localID;
+        _controlClass = controlClass;
+ 
+        //
+        // If no containing context was specified during construction, see if there is a current
+        // active container context and implicitly associated the control with it.
+        //
+        if (context == null)
+            context = ControlContainerContext.getContext();
+
+        //
+        // Associate the constructed bean w/ a context (if any)
+        //
+        if (context != null)
+            context.add(this);
+
+        //
+        // Get the default map for the control class.  This contains the default property
+        // values for all beans of the class.
+        //
+        PropertyMap classMap = getAnnotationMap(controlClass);
+        if (initProperties != null)
+        {
+            //
+            // If the initialization map derives its values from a Java annotated element,
+            // then allow container overrides on this element to be applied.  This will also
+            // coelesce maps referencing the same element.
+            //
+            AnnotatedElement annotElem = null;
+            if (initProperties instanceof AnnotatedElementMap)
+            {
+                annotElem = ((AnnotatedElementMap)initProperties).getAnnotatedElement();
+                initProperties = getAnnotationMap(annotElem);
+            }
+
+            //
+            // If an initial property map was provided, set it to delegate to the default
+            // map, and then create a wrapper map around it for storing per instance
+            // properties.
+            //
+            if (annotElem != controlClass)
+                initProperties.setDelegateMap(classMap);
+            _properties = new BeanPropertyMap(initProperties);
+        }
+        else
+        {
+            //
+            // If no initial map was provided, simply create an empty map wrapping the
+            // control class default.
+            //
+            _properties = new BeanPropertyMap(classMap);
+        }
+
+        //
+        // If the implementation class requires a guarantee of single-threaded behavior and the
+        // outer container does not guarantee it, then enable invocation locking on this
+        // bean instance.
+        //
+        if (hasSingleThreadedImpl() && !hasSingleThreadedContainer())
+            _invokeLock = new Mutex();
+    }
+
+    /**
+     * Return the BeanContextService proxy associated with this bean instance
+     */
+    final public ControlBeanContext getBeanContextProxy()
+    {
+        if (_cbc == null)
+            _cbc = new ControlBeanContext(this);
+
+        return _cbc;
+    }
+
+    /**
+     * Returns the nesting BeanContext for this ControlBean.
+     */
+    final public BeanContext getBeanContext()
+    {
+        //
+        // Indirect through the bean proxy for this control bean and up to its parent nesting
+        // context
+        //
+        return getBeanContextProxy().getBeanContext();
+    }
+
+    /**
+     * Called by the BeanContextProxy whenever the context associated with this control bean is
+     * changed.  This is the place to do any initialization (or reinitialization) that is dependent
+     * upon attributes of the container for the ControlBean
+     */
+    final public void setBeanContext(BeanContext bc)
+    {
+        //
+        // If the implementation class requires a guarantee of single-threaded behavior and the
+        // outer container does not guarantee it, then enable invocation locking on this
+        // bean instance.
+        //
+        if (hasSingleThreadedImpl() && !hasSingleThreadedContainer())
+            _invokeLock = new Mutex();
+        else
+            _invokeLock = null;
+    }
+
+    /**
+     * Returns the control ID for this control
+     */
+    final public String getControlID()
+    {
+        return _id;
+    }
+
+    /**
+     * Returns the public interface for this control.
+     */
+    final public Class getControlInterface()
+    {
+        return _controlClass;
+    }
+
+    /**
+     * This method will return true if the external container for this control
+     * guarantees single-threaded behavior.  For example, the EJB container does
+     * provide this guarantee, the servlet container does not.
+     */
+    /* package */ boolean hasSingleThreadedContainer()
+    {
+        BeanContext bc = getBeanContext();
+        if (bc instanceof ControlBeanContext)
+            return ((ControlBeanContext)bc).isSingleThreadedContainer();
+
+        // Better safe than sorry, when it comes to thread safety
+        return false;
+    }
+
+    /**
+     * Returns true if the implementation class for this ControlBean can be assumed to
+     * be thread-safe.  For now, implementations are always assumed to be thread unsafe
+     */
+    /* package */ boolean hasSingleThreadedImpl()
+    {
+        return false;
+    }
+
+    /**
+     * Returns true if the ControlBean instance is running in an environment that
+     * guarantees single-threaded behvior, false otherwise
+     */
+    public boolean isSingleThreadedBean()
+    {
+        //
+        // If the thread safe marker interface isn't found on the implementation, then
+        // assume than single-threaded behavior is guaranteed to be locally enforced.
+        //
+        if (hasSingleThreadedImpl())
+            return true;
+
+        //
+        // else, delegate to the outer container, which might be single threaded itself.
+        //
+        return hasSingleThreadedContainer();
+    }
+
+    /**
+     * Returns the target control instance associated with this ControlBean, performing lazy
+     * instantiation and initialization of the instance.
+     */
+    protected Object ensureControl()
+    {
+        if (_control == null)
+        {
+            try
+            {
+                //
+                // Query the current context for the binding between public interface and
+                // an associated implementation.
+                //
+                ControlBeanContext context = getBeanContextProxy(); 
+                Class implClass = context.getControlBinding(_controlClass);
+
+                //
+                // Create and initialize the new instance
+                //
+                _control = implClass.newInstance();
+                try
+                {
+                    Class initClass = implClass.getClassLoader().loadClass(
+                                            implClass.getName() + "Initializer");
+                    ControlInitializer initializer = (ControlInitializer)initClass.newInstance();
+                    initializer.initialize(this, _control);
+                }
+                catch (ClassNotFoundException cnfe)
+                {
+                    throw new ControlException("Control initialization failure", cnfe);
+                }
+
+                //
+                // Once the control is initialized, then allow the associated context
+                // to do any initialization.
+                //
+                ControlBeanContext cbcs = (ControlBeanContext)getBeanContextProxy();
+                cbcs.initializeControl();
+            }
+            catch (RuntimeException re) { throw re; }   // never mask RuntimeExceptions
+            catch (Exception e)
+            {
+                throw new ControlException("Unable to create control instance", e);
+            }
+        }
+        return _control;
+    }
+
+    /**
+     * The preinvoke method is called before all operations on the control.  It is the basic
+     * hook for logging, context initialization, resource management, and other common
+     * services
+     */
+    protected void preInvoke(Method m, Object [] args)
+    {
+        //
+        // If the implementation expects single threaded behavior and our container does
+        // not guarantee it, then enforce it locally here
+        //
+        if (_invokeLock != null)
+            _invokeLock.lock();
+
+        if (_invokeListeners.size() > 0)
+        {
+            Iterator iter = _invokeListeners.iterator();
+            while (iter.hasNext())
+                ((InvokeListener)iter.next()).preInvoke(m, args);
+        }
+    }
+
+    /**
+     * The postInvoke method is called after all operations on the control.  It is the basic
+     * hook for logging, context initialization, resource management, and other common
+     * services.
+     */
+    protected void postInvoke(Object retval, Throwable t)
+    {
+        try
+        {
+            if (_invokeListeners.size() > 0)
+            {
+                Iterator iter = _invokeListeners.iterator();
+                while (iter.hasNext())
+                    ((InvokeListener)iter.next()).postInvoke(retval, t);
+            }
+        }
+        finally
+        {
+            //
+            // Release any lock obtained above in preInvoke
+            //
+            if (_invokeLock != null)
+                _invokeLock.unlock();
+        }
+    }
+
+    //
+    // HACK ALERT: These will be removed and auto-boxing relied upon instead
+    //
+    protected void postInvoke(int retval, Throwable t) { postInvoke(new Integer(retval), t); }
+    protected void postInvoke(short retval, Throwable t) { postInvoke(new Short(retval), t); }
+    protected void postInvoke(long retval, Throwable t) { postInvoke(new Long(retval), t); }
+    protected void postInvoke(float retval, Throwable t) { postInvoke(new Float(retval), t); }
+    protected void postInvoke(double retval, Throwable t) { postInvoke(new Double(retval), t); }
+    protected void postInvoke(char retval, Throwable t) { postInvoke(new Character(retval), t); }
+    protected void postInvoke(byte retval, Throwable t) { postInvoke(new Byte(retval), t); }
+    protected void postInvoke(boolean retval, Throwable t) { postInvoke(new Boolean(retval), t); }
+
+    /**
+     * Sets the EventNotifier for this ControlBean
+     */
+    protected void setEventNotifier(Class eventSet, EventNotifier notifier)
+    {
+        _callbackNotifiers.put(eventSet,notifier);
+    }
+
+    /**
+     * Returns the EventNotifier for this ControlBean
+     */
+    protected EventNotifier getEventNotifier(Class eventSet)
+    {
+        return _callbackNotifiers.get(eventSet);
+    }
+
+    /**
+     * Registers a new InvokeListener for this ControlBean.
+     */
+    public void addInvokeListener(InvokeListener invokeListener)
+    {
+        _invokeListeners.addElement(invokeListener);
+    }
+
+    /**
+     * Deregisters an existing InvokeListener for this ControlBean.
+     */
+    public void removeInvokeListener(InvokeListener invokeListener)
+    {
+        _invokeListeners.removeElement(invokeListener);
+    }
+
+    /**
+     * Returns the local (parent-relative) ID for this ControlBean
+     */
+    protected String getLocalID()
+    {
+        return _localID;
+    }
+
+    /**
+     * Set the local (parent-relative) ID for this ControlBean.  It has package access because
+     * the local ID should only be set from within the associated context, and only when the
+     * bean is currently anonymous (hence the assertion below)
+     */
+    /* package */ void setLocalID(String localID)
+    {
+        assert _localID == null;    // should only set if not already set!
+        _localID = localID;
+    }
+
+
+    /**
+     * Returns the bean context instance associated with the this bean, as opposed to the
+     * parent context returned by the public getBeanContext() API.
+     */
+    public ControlBeanContext getControlBeanContext()
+    {
+        //
+        // The peer context instance is the context provider for this ControlBean
+        //
+        return (ControlBeanContext)getBeanContextProxy();
+    }
+
+    /**
+     * Locates and obtains a context service from the BeanContextServices instance
+     * supporting this bean.
+     *
+     * The base design for the BeanContextServicesSupport is that it will delegate up to peers
+     * in a nesting context, so a nested control bean will look 'up' to find a service provider.
+     */
+    protected Object getControlService(Class serviceClass, Object selector)
+                     throws TooManyListenersException
+
+    {
+        //
+        // Get the associated context object, then use it to locate the (parent) bean context.
+        // Services are always provided by the parent context.
+        //
+        ControlBeanContext cbc = getControlBeanContext();
+        BeanContext bc = cbc.getBeanContext();
+        if (bc == null || !(bc instanceof BeanContextServices))
+            throw new ControlException("Can't locate service context: " + bc);
+
+        //
+        // Call getService on the parent context, using this bean as the requestor and the
+        // associated peer context instance as the child and event listener parameters.
+        //
+        return  ((BeanContextServices)bc).getService(cbc, this, serviceClass, selector, cbc);
+    }
+
+    /**
+     * Sets the absolute controlID for this ControlBean.  This is called from the associated
+     * BeanContextChild instance when the bean is associated with a new context.
+     */
+    public void setControlID(String id)
+    {
+        _id = id;
+
+        // TODO: The ID change needs to be propagated down to nested children
+    }
+
+    /**
+     * Sets a property on the ControlBean instance.  All generated property setter methods
+     * will delegate down to this method.
+     */
+    protected void setControlProperty(PropertyKey key, Object o)
+    {
+        //
+        // TODO: Property change notification and veto handling go here
+        //
+        _properties.setProperty(key, o);
+    }
+
+    //
+    // These can all be removed once auto-boxing can be assumed
+    //
+    protected void setControlProperty(PropertyKey key, int i)
+    { setControlProperty(key, new Integer(i)); }
+
+    protected void setControlProperty(PropertyKey key, short s)
+    { setControlProperty(key, new Short(s)); }
+
+    protected void setControlProperty(PropertyKey key, long l)
+    { setControlProperty(key, new Long(l)); }
+
+    protected void setControlProperty(PropertyKey key, byte b)
+    { setControlProperty(key, new Byte(b)); }
+
+    protected void setControlProperty(PropertyKey key, char c)
+    { setControlProperty(key, new Character(c)); }
+
+    protected void setControlProperty(PropertyKey key, float f)
+    { setControlProperty(key, new Float(f)); }
+
+    protected void setControlProperty(PropertyKey key, double d)
+    { setControlProperty(key, new Double(d)); }
+
+    protected void setControlProperty(PropertyKey key, boolean b)
+    { setControlProperty(key, new Boolean(b)); }
+
+    /**
+     * Returns a property on the ControlBean instance.  All generated property getter methods
+     * will delegate down to this method
+     */
+    protected Object getControlProperty(PropertyKey key)
+    {
+        Object value = _properties.getProperty(key);
+
+        // If the held value is a PropertyMap, then wrap it in an annotation proxy of
+        // the expected type.
+        if (value instanceof PropertyMap)
+        {
+            PropertyMap map = (PropertyMap)value;
+            value = PropertySetProxy.getProxy(map.getMapClass(), map);
+        }
+
+        return value;
+    }
+
+    /**
+     * Returns the local cache for ControlBean property maps.
+     */
+    abstract protected Map getPropertyMapCache();
+
+    /**
+     * Returns the PropertyMap containing values associated with an AnnotatedElement.  Elements
+     * that are associated with the bean's Control interface will be locally cached.
+     */
+    protected PropertyMap getAnnotationMap(AnnotatedElement annotElem)
+    {
+        Map annotCache = getPropertyMapCache();
+
+        // If in the cache already , just return it
+        if (annotCache.containsKey(annotElem))
+            return (PropertyMap)annotCache.get(annotElem);
+
+        //
+        // Ask the associated ControlBeanContext to locate and initialize a PropertyMap, then
+        // store it in the local cache.
+        //
+        PropertyMap map = getControlBeanContext().getAnnotationMap(annotElem);
+        annotCache.put(annotElem, map);
+
+        return map;
+    }
+
+    /**
+     * Returns the property map containing the properties for the bean
+     */
+    /* package */ PropertyMap getPropertyMap()
+    {
+        return _properties;
+    }
+
+    /**
+     * The control ID associated with this instance
+     */
+    private String _localID;
+
+    /**
+     * The control ID associated with this instance
+     */
+    private String _id;
+
+    /**
+     * The public control interface associated with this ControlBean
+     */
+    private Class _controlClass;
+
+    /**
+     * The control implementation instance wrapped by this ControlBean
+     */
+    private Object _control;
+
+    /**
+     * The control bean context instance associated with this ControlBean
+     */
+    private ControlBeanContext _cbc;
+
+    /**
+     * This field manages the register listener list(s) associated with event set interfaces
+     * for the ControlBean.
+     */
+    private HashMap<Class, EventNotifier> _callbackNotifiers = new HashMap<Class,EventNotifier>();
+
+    /**
+     * Maintains the list of callback event listeners (if any) for this ControlBean.
+     */
+    private Vector _invokeListeners = new Vector();
+
+    /**
+     *  Contains the per-instance properties set for this ControlBean.
+     */
+    private PropertyMap _properties;
+
+    /**
+     * Used to guarantee single threaded invocation when required.  If the
+     * outer container provides the guarantee or the implementation itself
+     * is threadsafe, then the value will be null.
+     */
+    transient private Mutex _invokeLock;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBeanContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBeanContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,627 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.beancontext.BeanContext;
+import java.beans.beancontext.BeanContextChild;
+import java.beans.beancontext.BeanContextServiceRevokedEvent;
+import java.beans.beancontext.BeanContextServiceRevokedListener;
+import java.beans.beancontext.BeanContextServiceProvider;
+import java.beans.beancontext.BeanContextServices;
+import java.beans.beancontext.BeanContextServicesSupport;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TooManyListenersException;
+import java.util.Vector;
+
+import org.apache.beehive.controls.api.ControlException;
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.AnnotatedElementMap;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+import org.apache.beehive.controls.api.properties.PropertySet;
+import org.apache.beehive.controls.api.properties.BeanPropertyMap;
+
+/**
+ * The ControlBeanContext implements the basic BeanContextServices implementation
+ * for ControlBeans.
+ *
+ * It provides several basic functions:
+ *  - it defines the generic services that are available for all control containers
+ *  - it acts as the base class for other container service implementations
+ *  - it acts as the BeanContextServicesRevokedListener when an associated control
+ *    bean has lost access to services.
+ */
+public class ControlBeanContext extends BeanContextServicesSupport
+                                        implements BeanContextServiceRevokedListener,
+                                                   org.apache.beehive.controls.api.context.ControlBeanContext
+{
+    static private HashMap<Class,BeanContextServiceProvider> _providers = 
+                    new HashMap<Class,BeanContextServiceProvider>();
+
+    /**
+     * Creates a new ControlBeanContext instance associated with a specific
+     * control bean.
+     */
+    protected ControlBeanContext(ControlBean bean)
+    {
+        _bean = bean;
+    }
+
+    /**
+     * The ControlBeanContextProvider inner class acts as a single BeanContext service
+     * provider for the ControlBeanContext service class.  The implementation is simple,
+     * because the runtime ControlBeanContext implementation class directly implements
+     * this interface.
+     */
+    private static class ControlBeanContextProvider implements BeanContextServiceProvider
+    {
+        //
+        // BeanContextServiceProvider.getService()
+        //
+        public Object getService(BeanContextServices bcs, Object requestor, Class serviceClass,
+                                 Object serviceSelector)
+        {
+            //
+            // Contextual services for a ControlBean is provided by the peer context
+            // instance.
+            //
+            if (requestor instanceof ControlBean)
+                return ((ControlBean)requestor).getControlBeanContext();
+
+            return null;
+        }
+
+        //
+        // BeanContextServiceProvider.releaseService()
+        //
+        public void releaseService(BeanContextServices bcs, Object requestor, Object service)
+        {
+            // noop, because context exists whether referenced or not
+        }
+
+        //
+        // BeanContextServiceProvider.getContextServiceSelectors()
+        //
+        public Iterator getCurrentServiceSelectors(BeanContextServices bcs, Class serviceClass)
+        {
+            return null;    // no selectors
+        }
+    }
+
+    /**
+     * A singleton instance of the ControlBeanContextProvider class is that will be registered
+     * on all ControlBeanContext instances.  The provider can be a singleton because it is
+     * completely stateless and thread-safe.
+     */
+    static private ControlBeanContextProvider theProvider = new ControlBeanContextProvider();
+
+    /**
+     * Called by BeanContextSupport superclass during construction and deserialization to 
+     * initialize subclass transient state
+     */
+    public void initialize()
+    {
+        super.initialize();
+
+        //
+        // Register the ControlBeanContext provider on all new context instances.
+        //
+        addService(org.apache.beehive.controls.api.context.ControlBeanContext.class, theProvider);
+    }
+
+    /**
+     * Implements the BeanContextServicesRevokedListener.servicesRevoked method.  This is
+     * called if the associated ControlBean has requested a service that is being subsequently
+     * revoked.
+     */
+    public void serviceRevoked(BeanContextServiceRevokedEvent bcsre)
+    {
+        //
+        // This is currently unexpected...
+        //
+        throw new ControlException("Unexpected service revocation: " + bcsre.getServiceClass());
+    }
+
+    /**
+     * Overrides the BeanContextChild.setBeanContext() method.  This hook is used to perform
+     * additional processing that needs to occur when the control is associated with a new
+     * nesting context.
+     */
+    public void setBeanContext(BeanContext beanContext) throws PropertyVetoException
+    {
+        ControlBeanContext cbcs = null;
+        String id = _bean.getLocalID();
+
+        if (beanContext != null) 
+        {
+            //
+            // ControlBeans can only be nested in context service instances that derive
+            // from ControlBeanContext.
+            //
+            if (!(beanContext instanceof ControlBeanContext))
+            {
+                PropertyChangeEvent pce = new PropertyChangeEvent(_bean, "beanContext",
+                                                                  getBeanContext(), beanContext);
+                throw new PropertyVetoException("Context does not support nesting controls: " +
+                                                beanContext.getClass(), pce);
+            }
+
+            cbcs = (ControlBeanContext)beanContext;
+        }
+
+        super.setBeanContext(beanContext);
+
+        //
+        // Notify the bean that its context (container) has been set
+        //
+        _bean.setBeanContext(beanContext);
+
+        //
+        // Establish a new value for the absolute control ID based upon the nesting context
+        // and parent bean (if any).
+        //
+        if (beanContext != null)
+        {
+            ControlBean parentBean = cbcs.getControlBean();
+            if (parentBean != null)
+                id = parentBean.getControlID() + ControlBean.IDSeparator + id;
+        }
+        _bean.setControlID(id);
+    }
+
+    /**
+     * The NameGenerator class is a simple helper class that creates new unique names based
+     * upon a base prefix and an incrementing counter
+     */
+    private static class NameGenerator implements java.io.Serializable   
+    {
+        NameGenerator(String namePrefix)
+        {
+            _namePrefix = namePrefix;
+        }
+
+        /**
+         * Get the next unique name
+         */
+        public synchronized String next()
+        {
+            return _namePrefix + _nextIndex++;
+        }
+
+        int _nextIndex = 0;
+        String _namePrefix;
+    }
+
+    /**
+     * Returns a new NameGenerator instance based upon a particular naming
+     * prefix.
+     */
+    private NameGenerator getNameGenerator(String namePrefix)
+    {
+        synchronized(this)
+        {
+            if (_nameGenerators == null)
+                _nameGenerators = new HashMap<String,NameGenerator>();
+
+            NameGenerator nameGenerator = (NameGenerator)_nameGenerators.get(namePrefix);
+            if (nameGenerator == null)
+            {
+                nameGenerator = new NameGenerator(namePrefix);
+                _nameGenerators.put(namePrefix, nameGenerator);
+            }
+            return nameGenerator;
+        }
+    }
+
+    /**
+     * Generates a new unique control ID for an instance of the target class
+     */
+    public String generateUniqueID(Class clazz)
+    {
+        String namePrefix = clazz.getName();
+        int dotIndex = namePrefix.lastIndexOf('.');
+        if (dotIndex > 0)
+            namePrefix = namePrefix.substring(dotIndex+1);
+        NameGenerator nameGenerator = getNameGenerator(namePrefix);
+        return nameGenerator.next();
+    }
+
+    /**
+     * Overrides the BeanContextSupport.add() method to perform additional validation
+     * that is unique for ControlBeans containers.
+     */
+    public boolean add(Object targetChild)
+    {
+        //
+        // The context can contain ControlBeans and other types of objects, such as a control
+        // factory.
+        //
+        String beanID = null;
+        if (targetChild instanceof ControlBean)
+        {
+            //
+            //
+            //
+            ControlBean bean = (ControlBean)targetChild;
+            beanID = bean.getLocalID();
+
+            //
+            // The bean is anonymous, so we must generate a new unique name within this context.
+            //
+            if (beanID == null)
+            {
+                beanID = generateUniqueID(bean.getClass());
+                bean.setLocalID(beanID);
+            }
+
+            ControlBean existingBean = (ControlBean)_childMap.get(beanID);
+            if (existingBean != null && existingBean != targetChild)
+            {
+                throw new IllegalArgumentException("Attempting to add control with duplicate ID: " +
+                                                   beanID);
+            }
+        }
+        boolean added = super.add(targetChild);
+        if (added && beanID != null)
+            _childMap.put(beanID, targetChild);
+
+        return added;
+    }
+
+    /**
+     * Overrides the BeanContextSupport.remove() method to perform additional post-processing
+     * on child removal.
+     */
+    public boolean remove(Object targetChild)
+    {
+        assert targetChild instanceof ControlBean;  // should be guaranteed above
+        boolean removed = super.remove(targetChild);
+        if (removed)
+        {   
+            //
+            // Remove from the locally maintained child map
+            //
+            String localID = ((ControlBean)targetChild).getLocalID(); 
+            Object removedChild = _childMap.remove(localID);
+            assert removedChild == targetChild;     // just being safe
+        }
+        return removed;
+    }
+
+    /**
+     * Returns a ControlBean instance nested the current BeanContext.
+     * @param id the identifier for the target control, relative to the current
+     *           context.
+     */
+    public ControlBean getBean(String id)
+    {
+        int delim = id.indexOf(ControlBean.IDSeparator);
+        if (delim < 0)  // child is a direct descendent
+            return (ControlBean)_childMap.get(id);
+
+        // Find the child referenced by the first element in the path
+        ControlBean bean = (ControlBean)_childMap.get(id.substring(0, delim));
+        if (bean == null)
+            return bean;
+
+        // Get the BeanContext associated with the found child, and then ask it
+        // to resolve the rest of the path
+        return ((ControlBeanContext)bean.getBeanContextProxy()).getBean(id.substring(delim+1));
+    }
+
+    /* package */ ControlBean getControlBean()
+    {
+        return _bean;
+    }
+
+    /**
+     *  Returns true if this container associated with this context service enforces
+     *  single-threaded invocation, false otherwise.
+     *
+     *  This should be overridden by container-specific subclasses that guarantee
+     *  single-threaded behavior (such as the EJB container) to return true.
+     */
+    public boolean isSingleThreadedContainer()
+    {
+        if (_bean != null)
+            return _bean.isSingleThreadedBean();
+
+        // Better safe than sorry, in this case
+        return false;
+    }
+
+    /**
+     * The initializeControl method is invoked when the implementation instance associated
+     * with the context has been instantiated and initialized.
+     */
+    public void initializeControl()
+    {
+        //
+        // Deliver the onCreate event to any register lifecycle listeners
+        //
+        if (_lifeCycleListeners != null)
+        {
+            Iterator iter = _lifeCycleListeners.iterator();      
+            while (iter.hasNext())
+            {
+                LifeCycle listener = (LifeCycle)iter.next();
+                listener.onCreate();
+            }
+        }
+    }
+
+    /**
+     * Returns the PropertyMap containing default properties for an AnnotatedElement
+     * in the current context.  The initialization of PropertyMap binding is always
+     * done by delegating to a ControlContainerContext, enabling containers to implement
+     * property binding mechanisms (such as external config) that may override the values
+     * contained within the element annotations.
+     */
+    public PropertyMap getAnnotationMap(AnnotatedElement annotElem)
+    {
+        ControlBeanContext beanContext = this;
+        while (beanContext != null)
+        {
+            if (beanContext instanceof ControlContainerContext)
+                return beanContext.getBeanAnnotationMap(_bean, annotElem);
+            beanContext = (ControlBeanContext)beanContext.getBeanContext();
+        } 
+            
+        // No ControlContainerContext was found, so just use the default implementation
+        return getBeanAnnotationMap(_bean, annotElem);
+    }
+
+    /**
+     * The default implementation of getBeanAnnotationMap.  This returns a map based purely
+     * upon annotation reflection
+     */
+    protected PropertyMap getBeanAnnotationMap(ControlBean bean, AnnotatedElement annotElem)
+    {
+        PropertyMap map = new AnnotatedElementMap(annotElem);
+        setDelegateMap( map, bean, annotElem );
+        return map;
+    }
+
+    protected void setDelegateMap( PropertyMap map, ControlBean bean, AnnotatedElement annotElem )
+    {
+        //
+        // If building an annotation map for a method or field, we want to delegate back
+        // to the base control type.
+        //
+        Class annotClass = null;
+        if (annotElem instanceof Field)
+        {
+           annotClass = ((Field)annotElem).getType();
+        }
+        else if (annotElem instanceof Method)
+        {
+           annotClass = bean.getControlInterface();
+        }
+        if (annotClass != null)
+        {
+            PropertyMap delegateMap = bean.getAnnotationMap(annotClass);
+            map.setDelegateMap(delegateMap);
+        }
+    }
+
+    /**
+     * Returns the control implementation class that is bound to (implements) the
+     * public or extension interface in the current context.
+     */
+    protected Class getControlBinding(Class controlClass)
+    {
+        //
+        // Delegate up until a ControlContainerContext is found to manage the binding.
+        //
+        ControlBeanContext cbc = (ControlBeanContext)getBeanContext();
+        if (cbc != null)
+            return cbc.getControlBinding(controlClass);
+
+        // No parent context exists, just return default binding
+        return getDefaultControlBinding(controlClass);
+    }
+
+    /**
+     * Returns the default binding based entirely upon annotations or naming conventions.
+     */
+    static protected Class getDefaultControlBinding(Class controlClass)
+    {
+        while (controlClass.isAnnotationPresent(ControlExtension.class))
+        {
+            Class [] intfs = controlClass.getInterfaces();
+            boolean found = false;
+            for (int i = 0; i < intfs.length; i++)
+            {
+                if (intfs[i].isAnnotationPresent(ControlExtension.class) ||
+                    intfs[i].isAnnotationPresent(ControlInterface.class))
+                {
+                    controlClass = intfs[i];
+                    found = true;
+                    break;
+                }
+            }
+            if (!found)
+            {
+                throw new ControlException("Can't find base control interface for " + controlClass);
+            }
+        }
+
+        ControlInterface intfAnnot = 
+                    (ControlInterface)controlClass.getAnnotation(ControlInterface.class);
+        String implBinding = intfAnnot.defaultBinding();
+        int intfIndex = implBinding.indexOf(ControlInterface.INTERFACE_NAME);
+        if (intfIndex >= 0)
+        {
+            implBinding = implBinding.substring(0,intfIndex) + controlClass.getName() +
+                          implBinding.substring(intfIndex +
+                                                ControlInterface.INTERFACE_NAME.length());
+        }
+        try
+        {
+            return controlClass.getClassLoader().loadClass(implBinding);
+        }
+        catch (ClassNotFoundException cnfe)
+        {
+            throw new ControlException("Unable to load control implementation", cnfe);
+        }
+    }
+
+    //
+    // ControlBeanContext.getControlInterface
+    //
+    public Class getControlInterface()
+    {
+        return _bean.getControlInterface();
+    }
+
+    //
+    // ControlBeanContext.getControlPropertySet
+    //
+    public <T extends Annotation> T getControlPropertySet(Class<T> propertySet)
+    {
+        PropertyMap map = _bean.getPropertyMap();
+
+        // TODO: Add a PropertySet meta-attribute that indicates the PropertySet is optional.
+        // This implies:  a) no setters/getters, and b) the PropertySet can appear to be
+        // 'null' from the impl perspective if unset; otherwise, a PropertySet containing all
+        // default values will be returned.
+        //if (!map.containsPropertySet(propertySet))
+        //    return null;
+
+        //
+        // Construct a new PropertySet proxy instance that derives its values from
+        // the bean property map.
+        //
+        return PropertySetProxy.getProxy(propertySet, map);
+    }
+
+    //
+    // ControlBeanContext.getMethodPropertySet
+    //
+    public <T extends Annotation> T getMethodPropertySet(Method m, Class<T> propertySet)
+    {
+        PropertyMap map = _bean.getAnnotationMap(m);
+        if (!map.containsPropertySet(propertySet))
+            return null;
+
+        //
+        // Construct a new PropertySet proxy instance that derives its values from
+        // the method property map.
+        //
+        return PropertySetProxy.getProxy(propertySet, _bean.getAnnotationMap(m));
+    }
+
+    //
+    // ControlBeanContext.getPropertyMap
+    //
+    public PropertyMap getControlPropertyMap()
+    {
+        //
+        // Return a wrapped copy of the original bean property map, so any edits
+        // don't impact the bean properties.
+        //
+        return new BeanPropertyMap(_bean.getPropertyMap());
+    }
+
+    //
+    // ControlBeanContext.getService
+    //
+    public <T> T getService(Class<T> serviceClass, Object selector)
+    {
+        //
+        // The parent BeanContext is responsible for providing requested services.  If
+        // no parent context is available or it is does not manage services, then no service.
+        //
+        BeanContext bc = getBeanContext();
+        if (bc == null || !(bc instanceof BeanContextServices))
+            return null;
+
+        //
+        // Call getService on the parent context, using this bean as the requestor and the
+        // this context as the child context and ServicesRevoked event listener parameters.
+        //
+        try
+        {
+            return  (T)((BeanContextServices)bc).getService(this, _bean, serviceClass, selector, 
+                                                            this);
+        }
+        catch (TooManyListenersException tmle)
+        {
+            // This would be highly unusual... it implies that the registration for service
+            // revocation notifications failed for some reason.
+            throw new ControlException("Unable to register for service events", tmle);
+        }
+    }
+
+    //
+    // ControlBeanContext.addLifeCycleListener
+    //
+    public void addLifeCycleListener(LifeCycle listener)
+    {
+        if (_lifeCycleListeners == null)
+            _lifeCycleListeners = new Vector<LifeCycle>();
+        _lifeCycleListeners.addElement(listener);
+    }
+
+    //
+    // ControlBeanContext.removeLifeCycleListener
+    //
+    public void removeLifeCycleListener(LifeCycle listener)
+    {
+        if (_lifeCycleListeners != null)
+            _lifeCycleListeners.removeElement(listener);
+    }
+
+    /**
+     * The ControlBean instance that this context is providing services for.  This value can
+     * be null, if the context instance is associated with top-level (non-control) context.
+     */
+    private ControlBean _bean;
+
+    /**
+     * Maps children by the local (relative) ID of the child to the actual bean instance.
+     * This needs to be synchronized, because adds/removes/gets are not necessarily guaranteed
+     * to happen within the scope of the global hierarchy lock.   It would be relatively easy
+     * to synchronize add/remove, since setBeanContext on the child is inside this lock scope,
+     * but gets on the map are another story.
+     */
+    private Map<String,Object> _childMap = 
+                Collections.synchronizedMap(new HashMap<String,Object>());
+
+    /**
+     * Maintains a set of NameGenerators (for control ID generation) keyed by a
+     * base prefix.  The map itself is lazily constructed, so there is minimal
+     * overhead of no id generation is needed in this context.
+     */
+    private Map<String,NameGenerator> _nameGenerators;
+
+    /**
+     * Maintains the list of lifecycle event listeners (if any) for this context.
+     */
+    private Vector<LifeCycle> _lifeCycleListeners;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlContainerContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlContainerContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,233 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Stack;
+
+import org.apache.beehive.controls.api.context.ResourceContext;
+
+/**
+ * The ControlContainerContext class provides a base class implementation for external containers
+ * of ControlBeans.  It provides additional services, such as:
+ *
+ * - defines a contextual service provider for the ResourceManager interface
+ * - defines a simplified contract for the external container to interact with resource
+ *   management (beginContext/endContext)
+ */
+public class ControlContainerContext extends ControlBeanContext
+{
+    public ControlContainerContext()
+    {
+        super(null);
+    }
+
+    /**
+     * Manages the association of ControlContainerContext with current threads of execution.
+     * Each thread will maintain its own Stack of currently executing contexts.  This can be
+     * used to reassociated with the currently active context.
+     */
+    static ThreadLocal _threadStacks = new ThreadLocal(); 
+
+    /**
+     * Returns the active ControlContainerContext for the current thread, or null if no
+     * context is currently active.
+     */ 
+    public static ControlContainerContext getContext() 
+    {
+        Stack contextStack = (Stack)_threadStacks.get();
+        if (contextStack == null || contextStack.size() == 0)
+            return null;
+
+        return (ControlContainerContext)contextStack.peek();
+    }
+
+    /**
+     * Defines the beginning of a new control container execution context.
+     */
+    public synchronized void beginContext()
+    {
+        Stack contextStack = (Stack)_threadStacks.get();
+        if (contextStack == null)
+        {
+            contextStack = new Stack();
+            _threadStacks.set(contextStack);
+        }
+        contextStack.push(this);
+    }
+
+    /**
+     * Ends the current control container execution context
+     */
+    public synchronized void endContext()
+    {
+        Stack contextStack = (Stack)_threadStacks.get();
+        if (contextStack == null)
+            throw new IllegalStateException("No context started for current thread");
+
+        if (contextStack.peek() != this)
+            throw new IllegalStateException("Context is not the current active context");
+
+        try
+        {
+            //
+            // Release all resources associated with the current execution context.
+            //
+            releaseResources();
+        }
+        finally
+        {
+            contextStack.pop();
+        }
+    }
+
+    /**
+     * Called by BeanContextSupport superclass during construction and deserialization to
+     * initialize subclass transient state
+     */
+    public void initialize()
+    {
+        super.initialize();
+
+        //
+        // Register the ResourceContext provider on all new ControlContainerContext instances.
+        //
+        addService(org.apache.beehive.controls.api.context.ResourceContext.class,
+                   ResourceContextImpl.getProvider());
+    }
+
+    /**
+     * Adds a new managed ResourceContext to the ControlContainerContext.  This method
+     * is used to register a resource context that has just acquired resources
+     * @param resourceContext the ResourceContext service that has acquired resources
+     */
+    protected synchronized void addResourceContext(ResourceContext resourceContext)
+    {
+        if (!resourceContext.hasResources())
+            _resourceContexts.push(resourceContext); 
+    }
+
+    /**
+     * Removes a managed ResourceContext from the ControlContainerContext.  This method
+     * is used to unregister a resource context that has already acquired resources
+     * @param resourceContext the ResourceContext service to be removed
+     */
+    protected synchronized void removeResourceContext(ResourceContext resourceContext)
+    {
+        //
+        // Ignore removal requests received within the context of global cleanup.  The
+        // stack is already being popped, so these are just requests for resources that
+        // already have in-flight removal taking place.
+        //
+        if (!_releasingAll && resourceContext.hasResources())
+            _resourceContexts.remove(resourceContext);
+    }
+
+    /**
+     * Releases all ResourceContexts associated with the current ControlContainerContext.  
+     * This method is called by the associated container whenever all managed ResourceContexts 
+     * that have acquired resources should release them.
+     */
+    protected synchronized void releaseResources()
+    {
+        // Set the local flag indicating global resource release is occuring
+        _releasingAll = true;
+
+        //
+        // Iterate through the list of acquired ResourceContexts and release them
+        //
+        while (!_resourceContexts.empty())
+        {
+            ResourceContext resourceContext = _resourceContexts.pop();
+            resourceContext.release();
+        }
+
+        // Clear the local flag indicating global resource release is occuring
+        _releasingAll = false;
+    }
+
+    /**
+     * Dispatch an operation or an event to a bean within this container bean context.
+     * @param targetID the composite ID of the target control bean
+     * @param method the method to be invoked on the target bean
+     * @param args the arguments to be passed to the target method invocation
+     */
+    public Object dispatch(String targetID, Method method, Object [] args) 
+            throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
+    {
+        ControlBean bean = getBean(targetID);
+        if (bean == null)
+            throw new IllegalArgumentException("Invalid bean ID: " + targetID);
+
+        //
+        // The method can be either an operation or event, so use reflection to determine
+        // how to deliver it.
+        //
+        Class methodClass = method.getDeclaringClass();
+        Class controlInterface = bean.getControlInterface();
+        if (methodClass.isAssignableFrom(controlInterface))     // an operation
+        {
+            //
+            // Operations are delivered directly to the target bean
+            //
+            return method.invoke(bean, args);
+        }
+        else    // an event
+        {
+            //
+            // If the method isn't implemented by the bean, then the only other
+            // possibility is that it is a callback on the bean.  Get the event
+            // notifier instance for the bean and invoke the callback on it.
+            //
+            return method.invoke(bean.getEventNotifier(method.getDeclaringClass()), args);
+        }
+    }
+
+    /**
+     * Returns a ControlHandle to the component containing the control.  This handle can be
+     * used to dispatch events and operations to a control instance.  This method will return
+     * null if the containing component does not support direct dispatch.
+     * @param targetID the composite ID of the target control bean
+     */
+    public ControlHandle getHandle(String targetID)
+    {
+        //
+        // The base implementation doesn't support dispatch.  Containers should override
+        // and return a valid service handle that does component-specific dispatch.
+        //
+        return null;
+    }
+
+    /** 
+     * Returns the binding from a control interface to a control implementation for the
+     * current container context.
+     */
+    protected Class getControlBinding(Class controlClass)
+    {
+        //
+        // TODO: Add caching of relationships and external binding mechanisms
+        //
+        return getDefaultControlBinding(controlClass);
+    }
+
+    boolean _releasingAll;
+    Stack<ResourceContext> _resourceContexts = new Stack<ResourceContext>();
+}
+

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlHandle.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlHandle.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * The ControlHandle interface defines a reference object to a control instance that enables
+ * control events to be fired on the control.  Control container implementations will provide
+ * implementation of this interface that use container-specific dispatch mechanisms to locate
+ * the appropriate control container instance when events are fired.
+ */
+public interface ControlHandle
+{
+    /**
+     * Returns the controlID of the target control referenced by this handle
+     */
+    public String getControlID();
+
+    /**
+     * Invokes the named operation on the target control referenced by this handle.
+     */
+    public Object invokeOperation(String operationName, Object [] args) 
+                  throws InvocationTargetException;
+
+    /**
+     * Delivers the specified event to the target control referenced by this handle.
+     */
+    public Object sendEvent(String eventSet, String eventName, Object [] args) 
+                  throws InvocationTargetException;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlInitializer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlInitializer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,52 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.AnnotatedElement;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+
+/**
+ * The ControlInitializer class is an abstract base class that all generated Control
+ * initalization classes will extend.  It provides common utilities and supporting code
+ * for initialization, and has a shared package relationship with the base ControlBean
+ * class providing access to internals not available in a more general context.
+ */
+abstract public class ControlInitializer
+{
+    /**
+     * Initializes a new ControlImplementation instance associated with the specified bean.
+     */
+    abstract public void initialize(ControlBean bean, Object impl);
+
+    /**
+     * Returns the ControlBean event notifer for the specified eventSet
+     */
+    public EventNotifier getEventNotifier(ControlBean bean, Class eventSet)
+    {
+        return bean.getEventNotifier(eventSet);
+    }
+
+    /**
+     * Returns the annotation map for the specified bean/element combination.
+     */
+    public PropertyMap getAnnotationMap(ControlBean bean, AnnotatedElement annotElem)
+    {
+        return bean.getAnnotationMap(annotElem);
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/EventNotifier.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.EventListener;
+import java.util.TooManyListenersException;
+
+/**
+ * The EventNotifier class provides basic callback listener management and event delivery
+ * services for ControlBean instances.
+ */
+public class EventNotifier implements java.io.Serializable
+{
+    /**
+     * Adds a new callback event listener for this EventNotifier
+     */
+    public void addListener(Object listener) throws TooManyListenersException
+    {
+        if (_listener != null)
+             throw new TooManyListenersException("Callback listener is already registered");
+        _listener = listener;
+    }
+
+    /**
+     * Remove an existing callback event listener for this EventNotifier
+     */
+    public void removeListener(Object listener)
+    {
+        if (listener != _listener)
+            throw new IllegalStateException("Invalid listener, not currently registered");
+        _listener = null;
+    }
+                                                                                                    
+    /**
+     * Returns the listener associated with this EventNotifier
+     */
+    public Object getListener()
+    {
+        return _listener;
+    }
+
+    private Object _listener;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/InvokeListener.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/InvokeListener.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+
+/**
+ *  The InvokeListener interface can be implemented by contextual services or helper
+ *  classes associated with a ControlBean that want pre/post hook notifications of
+ *  invocations occuring on a ControlBean.
+ *
+ *  Hooking is "read only".  An InvokeListener cannot modify the invoked method,
+ *  arguments, return value or thrown exceptions in any way.
+ */
+public interface InvokeListener extends java.util.EventListener
+{
+    /**
+     * Called just prior to invoking an operation or callback event on a control.
+     */
+    public void preInvoke(Method m, Object [] args);
+
+    /**
+     * Called just after inovcation of an operation or callback event on a control
+     */
+    public void postInvoke(Object retval, Throwable t);
+} 

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/PropertySetProxy.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/PropertySetProxy.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * The PropertySetProxy class is a dynamic proxy InvocationHandler class that exposes the
+ * values held within a PropertyMap as an Object implementing an annotation type interface.
+ * <p>
+ * This enables properties resolved using the PropertyMap's hiearchical resolution mechanism to
+ * be exposed to the client of the proxy in the same way that JSR-175 annotations are 
+ * exposed using raw Java reflection APIs.   A proxy of this type should behave identically
+ * to the one returned from a call to <code>AnnotatedElement.getAnnotation()</code>, but backed
+ * by a richer, more dynamic resolution mechanism.
+ *
+ * @see java.lang.reflect.Proxy
+ * @see java.lang.reflect.InvocationHandler
+ * @see java.lang.reflect.AnnotatedElement#getAnnotation
+ * @see org.apache.beehive.controls.api.properties.PropertySet
+ * @see org.apache.beehive.controls.api.properties.PropertyMap
+ */
+public class PropertySetProxy <T extends Annotation> implements InvocationHandler
+{
+    /**
+     * Creates a new proxy instance implementing the PropertySet interface and backed
+     * by the data from the property map.
+     *
+     * @param propertySet an annotation type that has the PropertySet meta-annotation
+     * @param propertyMap the PropertyMap containing property values backing the proxy
+     * @return proxy that implements the PropertySet interface
+     */
+    public static <T extends Annotation> T getProxy(Class<T> propertySet, PropertyMap propertyMap)
+    {
+        assert propertySet != null && propertyMap != null;
+
+        if (!propertySet.isAnnotation())
+            throw new IllegalArgumentException(propertySet + " is not an annotation type");
+
+        return (T) Proxy.newProxyInstance(propertySet.getClassLoader(),
+                                          new Class [] {propertySet },
+                                          new PropertySetProxy(propertySet, propertyMap));
+    }
+
+    private PropertySetProxy(Class<T> propertySet, PropertyMap propertyMap)
+    {
+        _propertySet = propertySet;
+        _propertyMap = propertyMap;
+    }
+
+    //
+    // InvocationHandler.invoke
+    //
+    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
+    {
+        // Query the nested value in the property map
+        PropertyKey key = new PropertyKey(_propertySet, method.getName());
+        Object value = _propertyMap.getProperty(key);
+
+        // If the returned value is itself a PropertyMap (i.e. a nested annotation type),
+        // then wrap it in a PropertySetProxy instance before returning.
+        if (value instanceof PropertyMap)
+        {
+            PropertyMap propertyMap = (PropertyMap)value;
+            value = getProxy(propertyMap.getMapClass(), propertyMap);
+        }
+
+        return value;
+    }
+
+    private Class<T> _propertySet;
+    private PropertyMap _propertyMap;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ResourceContextImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ResourceContextImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,173 @@
+package org.apache.beehive.controls.runtime.bean;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.beans.beancontext.BeanContextServices;
+import java.beans.beancontext.BeanContextServiceProvider;
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.apache.beehive.controls.api.context.ResourceContext;
+
+/**
+ * The ResourceContextImpl class provides an implementation of the ResourceContext service,
+ * as well as a simple singleton provider that can be used to obtain new instances.
+ */
+public class ResourceContextImpl implements ResourceContext, InvokeListener
+{
+    /**
+     * The ResourceContextProvider inner class acts as a single BeanContext service
+     * provider for the ResourceContext service class. 
+     */
+    private static class ResourceContextProvider implements BeanContextServiceProvider
+    {
+        //
+        // BeanContextServiceProvider.getService()
+        //
+        public Object getService(BeanContextServices bcs, Object requestor, Class serviceClass,
+                                 Object serviceSelector)
+        {
+            //
+            // There is an implied contract between ControlContainerContext and ControlBean
+            // classes required to implement the resource management contract.  This cannot
+            // be supported for any generic BeanContextChild class.
+            //
+            if (requestor instanceof ControlBean)
+            {
+                return new ResourceContextImpl((ControlContainerContext)bcs,
+                                               (ControlBean)requestor);
+            }
+
+            return null;
+        }
+
+        //
+        // BeanContextServiceProvider.releaseService()
+        //
+        public void releaseService(BeanContextServices bcs, Object requestor, Object service)
+        {
+            return; // Should not happen, service is never unregistered
+        }
+
+        //
+        // BeanContextServiceProvider.getContextServiceSelectors()
+        //
+        public Iterator getCurrentServiceSelectors(BeanContextServices bcs, Class serviceClass)
+        {
+            return null;    // no selectors
+        }
+    }
+
+    /**
+     * A singleton instance of the ResourceContextProvider class is what will be registered
+     * on all ControlContainerContext instances.  The provider can be a singleton because it is
+     * completely stateless and thread-safe.
+     */
+    static private ResourceContextProvider _theProvider = new ResourceContextProvider();
+
+    /**
+     * Returns the ResourceContextProvider used to create new ResourceContext instances
+     */
+    static /* package */ ResourceContextProvider getProvider() { return _theProvider; }
+
+    /**
+     * Constructs a new ResourceContext service implementation to manage resources for
+     * a target ControlBean within a specific ControlContainerContext
+     */
+    public ResourceContextImpl(ControlContainerContext containerContext, ControlBean bean)
+    {
+        _containerContext = containerContext;
+        _bean = bean;
+
+        //
+        // Register to receive invocation notifications from the target bean
+        //
+        _bean.addInvokeListener(this);
+    }
+
+    /**
+     * Implements the InvokeListener.preInvoke method.  This hook will be called before the
+     * managed beans' operations are invoked
+     */
+    public void preInvoke(Method m, Object [] args)
+    {
+        if (!_hasAcquired)
+            acquire();
+    }
+
+    /**
+     * Implements the InvokeListener.postInvoke method.
+     */
+    public void postInvoke(Object retval, Throwable t) {};
+
+    // ResourceContext.acquire()
+    public void acquire() 
+    { 
+        if (_hasAcquired)
+            return;
+
+        // Deliver the onAcquire event to registered listeners
+        for (ResourceEvents resourceListener : _listeners)
+            resourceListener.onAcquire();
+
+        // Register this ResourceContext with associated container context
+        _containerContext.addResourceContext(this);
+
+        // Set the flag to indicate resources have been acquired.
+        _hasAcquired = true;
+    };
+
+    // ResourceContext.release()
+    public void release() 
+    { 
+        if (!_hasAcquired)
+            return;
+
+        // Deliver the onRelease event to the registered listeners
+        for (ResourceEvents resourceListener : _listeners)
+            resourceListener.onRelease();
+
+        // Unregister this ResourceContext with associated container context
+        _containerContext.removeResourceContext(this);
+
+        // Reset the flag to indicate resources have been released.
+        _hasAcquired = false;
+    };
+
+    // ResourceContext.hasResources()
+    public boolean hasResources() { return _hasAcquired; } 
+
+    // ResourceContext.addResourceEventsListener
+    public void addResourceEventsListener(ResourceEvents resourceListener)
+    {
+        _listeners.add(resourceListener);
+    }
+
+    // ResourceContext.removeResourceEventsListener
+    public void removeResourceEventsListener(ResourceEvents resourceListener)
+    {
+        _listeners.remove(resourceListener);
+    }
+
+    private Vector<ResourceEvents> _listeners = new Vector<ResourceEvents>();
+    private boolean _hasAcquired = false;
+    private ControlContainerContext _containerContext;
+    private ControlBean _bean;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,241 @@
+package org.apache.beehive.controls.runtime.generator;
+
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.Javac;
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.GlobPatternMapper;
+import org.apache.tools.ant.util.SourceFileScanner;
+
+/**
+ * The AptTask class defines a custom ANT task for invoking APT-based code generation. It
+ * derives from the <javac> built-in task, so all of the attributes and nested elements of that
+ * task are supported, for source list selection, classpath selection, compiler arguments,
+ * etc.   Each of these options will be passed onto APT for processing.
+ * <p>
+ * AptTask also adds some new attributes:
+ * <ul>
+ * <li>gendir - specifies the directory where temporary source files that are produced during
+ * generation will be kept.
+ * <li>srcExtensions - provides a comma-separated list of source file extensions that are 
+ * considered valid input to APT.  The default value is "*.java".
+ * <li>
+ */
+public class AptTask extends Javac
+{
+    /**
+     * The srcExtensions attribute can be set to a comma-separated list of source filename
+     * extensions that are considered to be valid inputs to APT processing.  
+     * The default value is "*.java".
+     */
+    public void setSrcExtensions(String srcExts)
+    {
+        StringTokenizer tok = new StringTokenizer(srcExts, ",");
+        while (tok.hasMoreTokens())
+            _srcExts.add(tok.nextToken());
+    }
+
+    /**
+     * The gendir attribute specifies the name of the output directory for any files generated
+     * as a result of calling APT.
+     */
+    public void setGendir(File genDir)
+    {
+        _genDir = genDir;
+    }
+
+    /**
+     * The nocompile attribute disables compilation of the input source file list and any
+     * generated sources that are derived from them.  The default value is 'false'.
+     */
+    public void setNocompile(boolean nocompile)
+    {
+        _nocompile = nocompile;
+    }
+
+    /**
+     * Override the implementation of scanDir, to look for additional files based upon any
+     * specified source extensions
+     */
+    protected void scanDir(File srcDir, File destDir, String[] files) 
+    {
+        // If no source path was specified, we effectively created one by adding the generation
+        // path.   Because of this, we need to be sure and add all source dirs to the path too.
+        if (!_hasSourcepath)
+        {
+            Path srcPath = new Path(getProject()); 
+            srcPath.setLocation(srcDir);
+            setSourcepath(srcPath);
+        }
+
+        if (_srcExts.size() == 0)
+        {
+            super.scanDir(srcDir, destDir, files);
+            return;
+        }
+
+        //for (String ext : _srcExts)
+        //{
+        for (int i = 0; i < _srcExts.size(); i++)
+        {
+            String ext = (String)_srcExts.get(i);
+            GlobPatternMapper m = new GlobPatternMapper();
+            m.setFrom(ext);
+            m.setTo("*.class");
+            SourceFileScanner sfs = new SourceFileScanner(this);
+            if (ext.equals("*.java"))
+            {
+                File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir, m);
+                if (newFiles.length > 0) 
+                {
+                    File[] newCompileList = new File[compileList.length + newFiles.length];
+                    System.arraycopy(compileList, 0, newCompileList, 0, compileList.length);
+                    System.arraycopy(newFiles, 0, newCompileList, compileList.length, 
+                                     newFiles.length);
+                    compileList = newCompileList;
+                }
+            }
+            else
+            {
+                String [] newSources = sfs.restrict(files, srcDir, destDir, m);
+                int extLen = ext.length() - 1;  // strip wildcard
+                if (newSources.length > 0) 
+                {
+                    File[] newCompileList = new File[compileList.length + newSources.length];
+                    System.arraycopy(compileList, 0, newCompileList, 0, compileList.length);
+                    try
+                    {
+                        FileUtils fileUtils = FileUtils.newFileUtils();
+                        for (int j = 0; j < newSources.length; j++)
+                        {
+                            String toName = 
+                                newSources[j].substring(0, newSources[j].length() - extLen) + 
+                                ".java";
+                                                                   
+                            File srcFile = new File(srcDir, newSources[j]);
+                            File dstFile = new File(_genDir, toName);
+                            fileUtils.copyFile(srcFile, dstFile, null, true, true);
+                            newCompileList[compileList.length + j] = dstFile;
+                        }
+                    }
+                    catch (IOException ioe)
+                    {
+                        throw new BuildException("Unable to copy " + ext + " file", ioe, 
+                                                 getLocation());
+                    }
+                    compileList = newCompileList;
+                }
+            }
+        }
+    }
+
+    public void execute() throws BuildException
+    {
+        // Ensure that the gendir attribute was specified
+        if (_genDir == null)
+            throw new BuildException("Missing genDir attribute: must be set to codegen output directory", getLocation());
+
+
+        // Save whether a user sourcepath was provided
+        _hasSourcepath = getSourcepath() != null;
+
+        // The generation dir is always added to the source path for compilation
+        Path genPath = new Path(getProject()); 
+        genPath.setLocation(_genDir);
+        setSourcepath(genPath);
+
+        //
+        // Select the executable (apt) and set fork = true
+        //
+        setExecutable("apt");
+        setFork(true);
+
+        //
+        // Specify the code generation output directory to APT
+        // 
+        Commandline.Argument arg = createCompilerArg();
+        arg.setValue("-s");
+        arg = createCompilerArg();
+        arg.setFile(_genDir);
+
+        checkParameters();
+        resetFileLists();
+
+        // scan source directories and dest directory to build up
+        // compile lists
+        String[] list = getSrcdir().list();
+        File destDir = getDestdir();
+        for (int i = 0; i < list.length; i++) 
+        {
+            File srcDir = getProject().resolveFile(list[i]);
+            if (!srcDir.exists()) {
+                throw new BuildException("srcdir \""
+                                         + srcDir.getPath()
+                                         + "\" does not exist!", getLocation());
+            }
+
+            //
+            // The base <javac> algorithm is tweaked here, to allow <src> elements
+            // to contain a list of files _or_ a list of directories to scan.
+            //
+            Vector<File> inputFiles = new Vector<File>();
+            if (srcDir.isDirectory())
+            {
+                DirectoryScanner ds = this.getDirectoryScanner(srcDir);
+                String[] files = ds.getIncludedFiles();
+                scanDir(srcDir, destDir != null ? destDir : srcDir, files);
+            }
+            else
+            {
+                //
+                // BUGBUG: Because these bypass scanning, they also bypass dependency chks :(
+                //
+                inputFiles.add(srcDir);
+            }
+
+            if (inputFiles.size() != 0)
+            {
+                File[] newCompileList = new File[compileList.length + inputFiles.size()];
+                inputFiles.toArray(newCompileList);
+                System.arraycopy(compileList, 0, newCompileList, inputFiles.size(), 
+                                 compileList.length);
+                compileList = newCompileList;
+            }
+        }
+        compile();
+    }
+
+    protected boolean _nocompile = false;
+    protected boolean _hasSourcepath;
+    protected File _genDir;
+    protected Vector/*<String>*/ _srcExts = new Vector/*<String>*/();
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ClientField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The ClientField class is an abstract base class that represents an java.lang.reflect.Field 
+ * on an implementation class that refers to a client event notifier
+ */
+abstract public class ClientField extends GenField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlImpl the declaring ControlImpl
+     */
+    protected ClientField(ControlImpl controlImpl) 
+    {
+        _controlImpl = controlImpl;
+    };
+
+    /**
+     * Initializes the ClientField instance.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init()
+    {
+    }
+
+    private ControlImpl _controlImpl;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/CodeGenerationException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/CodeGenerationException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+package org.apache.beehive.controls.runtime.generator;
+
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * A simple exception wrapper class used for code generation failures.  These is a runtime
+ * exception, because user errors that result in code generation failures are reported
+ * through the APT messager class.
+ */
+public class CodeGenerationException extends RuntimeException
+{
+    public CodeGenerationException(String msg, Exception e) { super(msg, e); }
+    public CodeGenerationException(String msg) { super(msg); }
+    public CodeGenerationException(Exception e) { super("Code Generation Exception", e); }
+}
+

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/CodeGenerator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/CodeGenerator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+package org.apache.beehive.controls.runtime.generator;
+
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * The CodeGenerator class is an abstract base class that encapsulates the invocation
+ * Apache Velocity or other code generation tools that generate source artifacts.
+ * <p>
+ * This primary motivation for this abstraction is to decouple the loading and invocation
+ * of Velocity from the mainline control generation process.
+ */
+abstract public class CodeGenerator
+{
+    public CodeGenerator() {};
+
+    abstract public void generate(GeneratorOutput genOut) throws CodeGenerationException;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ContextField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ContextField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+
+/**
+ * The ContextField class is an abstract base class that represents an java.lang.reflect.Field 
+ * on an implementation class that refers to a contextual service.
+ */
+abstract public class ContextField extends EventField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlImpl the declaring ControlImpl
+     */
+    protected ContextField(ControlImpl controlImpl) 
+    {
+        _controlImpl = controlImpl;
+    };
+
+    private ControlImpl _controlImpl;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,82 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The ControlBean class is an class representing a generated JavaBean class that can host
+ * control implementation types associated with a particular control public or extension
+ * interface.
+ */
+public class ControlBean extends GenClass
+{
+    /**
+     * Constructs a new ControlBean class supporting a particular bean interface
+     * @param controlIntf the public interface associated with the bean
+     */
+    protected ControlBean(ControlInterface controlIntf)
+    {
+        super();
+        _controlIntf = controlIntf;
+        if (_controlIntf != null)
+        {
+            _packageName = _controlIntf.getPackage();
+            _shortName = _controlIntf.getShortName() + "Bean";
+            _className = _packageName + "." + _shortName;
+            _superClass = new ControlBean(_controlIntf.getSuperClass());
+        } 
+        else
+        {
+            Class c = org.apache.beehive.controls.runtime.bean.ControlBean.class;
+            _packageName = c.getPackage().getName();
+            _className = c.getName();
+            _shortName = _className.substring(_packageName.length() + 1);
+        }
+    }
+
+    /**
+     * Returns the fully qualified package name of the ControlBean
+     */
+    public String getPackage() { return _packageName; }
+
+    /**
+     * Returns the unqualified classname of the ControlBean
+     */
+    public String getShortName() { return _shortName; }
+
+    /**
+     * Returns the fully qualified classname of the ControlBean
+     */
+    public String getClassName() { return _className; }
+
+    /**
+     * Returns the public or extension interface associated with the ControlBean
+     */
+    public ControlInterface getControlInterface() { return _controlIntf; }
+
+    /**
+     * Returns the super class for this ControlBean
+     */
+    public ControlBean getSuperClass() { return _superClass; }
+
+    String _packageName;
+    String _shortName;
+    String _className;
+    ControlInterface _controlIntf;
+    ControlBean _superClass;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,333 @@
+##
+## The Velocity code generation template for the JavaBean generated from a Control public
+## or extension interface.
+##
+## B E A   S Y S T E M S
+## Copyright 2001-2004  BEA Systems, Inc.
+##
+## Licensed under the Apache License, Version 2.0 (the "License");
+## you may not use this file except in compliance with the License.
+## You may obtain a copy of the License at
+## 
+##     http://www.apache.org/licenses/LICENSE-2.0
+## 
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+##
+## $Header:$
+##
+## The following context variables are used by this template:
+##      $bean - a ControlBean instance that defines the attributes of the bean
+##      $intf - a ControlInterface instance that defines the attributes of the public interface
+##
+## The actual class template apears at the end of this file, and is preceded by a number of
+## supporting macros that define elements of the template.
+##
+## SUPPORTING MACROS
+##
+## A simple helper macro that converts a primitive type to the equivalent object
+##
+#macro (toObject $type)#if ($type == "int")Integer#elseif ($type == "long")Long#elseif ($type == "boolean")Boolean#elseif ($type == "byte")Byte#elseif ($type == "short")Short#elseif ($type == "char")Character#elseif ($type == "float")Float#elseif ($type == "double")Double#else${type}#end#end
+##
+## A simple helper macro that converts a object type to the equivalent primitive
+##
+#macro (toPrimitive $type)#if ($type == "int").intValue()#elseif ($type == "long").longValue()#elseif ($type == "boolean").booleanValue()#elseif ($type == "byte").byteValue()#elseif ($type == "short").shortValue()#elseif ($type == "char").charValue()#elseif ($type == "float").floatValue()#elseif ($type == "double").doubleValue()#end#end
+##
+##
+## This macro provides the template for declaring the static final Method fields that
+## are associated with all declared operations
+##
+#macro (declareMethodFields)
+    #foreach ($operation in $intf.operations)
+        static final Method $operation.methodField;
+    #end
+#end
+##
+## This macros provides the template for initializing the static final Method fields that
+## are associated with declared operations
+##
+#macro (initMethodFields)
+    try
+    {
+        #foreach ($operation in $intf.operations)
+        $operation.methodField = ${intf.className}.class.getMethod("${operation.name}", new Class [] {$operation.argTypes});
+        #end
+    }
+    catch (NoSuchMethodException nsme)
+    {
+        throw new ExceptionInInitializerError(nsme);
+    }
+#end
+##
+## This macro declares the template for defining bean constructors
+##
+#macro (declareConstructors)
+    /**
+     * This is the public constructor for the class.  A client-defined control ID may
+     * be provided.  This ID must be unique within the nesting ControlBeanContext.
+     * @param context The containing ControlBeanContext
+     * @param id The control identifier (or null to autogenerate a unique value)
+     * @param props The initialization Properties for the new instance (or null for defaults)
+     */
+    public ${bean.shortName}(ControlBeanContext context, String id, PropertyMap props)
+    {
+        super(context, id, props, ${intf.className}.class);
+
+        #foreach ($eventSet in $intf.eventSets)
+        #if ($velocityCount == 1)
+        //
+        // Register event notifier instances for any EventSets
+        //
+        #end
+        setEventNotifier(${eventSet.shortName}.class, new ${eventSet.notifierClass}());
+        #end
+    }
+
+    /**
+     * This is the public null-arg constructor for this ControlBean.  If a control id
+     * is not provided, a unique value will be auto-generated.
+     */
+    public ${bean.shortName}()
+    {
+        this(null, null, null);
+    }
+
+    /**
+     * This is the protected version that is used by any ControlBean subclass
+     */
+    protected ${bean.shortName}(ControlBeanContext context, String id, PropertyMap props,
+                                Class controlClass)
+    {
+        super(context, id, props, controlClass);
+    }
+
+#end
+##
+## This macro defines the implementation of an operation
+##
+#macro (declareOperationImpl $operation)
+    #set ($returnType = $operation.returnType)
+    /**
+     * Implements ${intf.className}.${operation.name}
+     */
+    public $returnType ${operation.name}($operation.argDecl) $operation.throwsClause
+    {
+        Object [] _argArray = new Object[] { $operation.argObjectArray };
+        Throwable _thrown = null;
+        #if (!$intf.isExtension())
+        $intf.className _target = ($intf.className)ensureControl();
+        #else
+        Extensible _target = (Extensible)ensureControl();
+        #end
+        #if ($returnType != "void")
+        $returnType _retval = ${operation.defaultReturnValue};
+        #end
+
+        preInvoke(${operation.methodField}, _argArray);
+        try
+        {
+            ##
+            ## There are two basic generation patterns:
+            ##      - standard invoke (declared on a ControlInterface)
+            ##      - extensible invoke (declared on a ControlExtension)
+            ##
+            #if ($returnType != "void")
+            _retval = 
+            #end
+            #if (!$intf.isExtension())
+            _target.${operation.name}($operation.argList)
+            #else
+            ## Remove toObject/toPrimitive once auto-boxing can be assumed
+            #if ($returnType != "void")
+            ((#toObject ($returnType))
+            #end
+            _target.invoke(${operation.methodField}, _argArray)
+            #if ($returnType != "void")
+            )#toPrimitive($returnType)
+            #end
+            #end
+            ;
+        }
+        catch (Throwable t)
+        {
+            //
+            // All exceptions are caught here, so postInvoke processing has visibility into
+            // the exception status.  Errors, RuntimExceptions, or declared checked exceptions will 
+            // be rethrown.
+            //
+            _thrown = t;
+ 
+            if (t instanceof Error) throw (Error)t;
+            else if (t instanceof RuntimeException) throw (RuntimeException)t;
+            #foreach ($thrownException in $operation.throwsList)
+            else if (t instanceof $thrownException) throw ($thrownException)t;
+            #end
+
+            throw new UndeclaredThrowableException(t);
+        }
+        finally
+        {
+            #if ($returnType != "void")
+            postInvoke(_retval, _thrown);
+            #else
+            postInvoke(null, _thrown);
+            #end
+        }
+        #if ($returnType != "void")
+        return _retval;
+        #end
+    }
+
+#end
+##
+## This macro defines the property accessor methods for a bean property
+##
+#macro (declarePropertyAccessors $property)
+    public static PropertyKey $property.keyName = new PropertyKey(${property.propertySet.className}.class, "$property.memberName");
+
+    #if ($property.isAnnotation())
+    public void set${property.name}(PropertyMap map)
+    {
+        setControlProperty($property.keyName, map);
+    }
+    #else
+    public void set${property.name}($property.type prop)
+    {
+        setControlProperty($property.keyName, prop);
+    }
+    #end
+
+    public $property.type get${property.name}()
+    {
+        ## Remove toObject/toPrimitive once auto-boxing can be assumed
+        return ((#toObject($property.type))getControlProperty($property.keyName))#toPrimitive($property.type);
+    }
+
+#end
+##
+## This macro defines the implementation of an event routing method
+##
+#macro (declareEventImpl $event)
+    #set ($returnType = $event.returnType)
+    public $returnType ${event.name}($event.argDecl) $event.throwsClause
+    {
+        #if ($returnType != "void")
+        $returnType _retval = ${event.defaultReturnValue};
+        #end
+
+        $event.eventSet.shortName listener = ($event.eventSet.shortName)getEventNotifier(${event.eventSet.shortName}.class).getListener();
+
+        //
+        // If an event listener has been registered, then deliver the event
+        //
+        if (listener != null)
+        {
+            #if ($returnType != "void")
+            _retval = listener.${event.name}($event.argList);
+            #else
+            listener.${event.name}($event.argList);
+            #end
+        }
+        #if ($returnType != "void")
+        return _retval;
+        #end
+     }
+
+#end
+##
+## This macro defines an EventSet proxy implementation for routing events
+##
+#macro (declareEventSetImpl $eventSet)
+    /**
+     * This inner class implements a simple proxy to deliver $eventSet.shortName events 
+     * back to a register listener.
+     */
+    protected class $eventSet.notifierClass $eventSet.notifierExtends
+        implements $eventSet.shortName, java.io.Serializable
+    {
+        #foreach ($eventMethod in $eventSet.events)
+            #declareEventImpl($eventMethod)
+        #end
+    }
+
+#end
+##
+## This macros defines the EventSet listener registration methods
+##
+#macro (declaredListenerMethods $eventSet)
+    /**
+     * Registers a new listener for ${eventSet.shortName} events on the bean.
+     */
+    public synchronized void ${eventSet.addListenerMethod}($eventSet.shortName listener)
+                             throws java.util.TooManyListenersException
+    {
+        getEventNotifier(${eventSet.shortName}.class).addListener(listener);
+    } 
+                             
+    /**
+     * Unregisters an existing listener for ${eventSet.shortName} events on the bean.
+     */
+    public synchronized void ${eventSet.removeListenerMethod}($eventSet.shortName listener)
+    {
+        getEventNotifier(${eventSet.shortName}.class).removeListener(listener);
+    }
+#end
+##
+## This macro declares the local (bean class) cache that is used for shared PropertyMaps
+##
+#macro (declarePropertyCache)
+    /**
+     * The _annotCache maintains a lookup cache from AnnotatedElements to an associated
+     * PropertyMap.  This enables these maps to be shared across multiple beans.
+     */
+    static private HashMap _annotCache = new HashMap();
+
+    protected Map getPropertyMapCache() { return _annotCache; }
+#end
+##
+## THE CONTROLBEAN CLASS TEMPLATE
+##
+package $bean.package;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+
+public class ${bean.shortName} extends $bean.superClass.className implements $intf.className
+{
+    #if ($intf.operations.size() != 0)
+    #declareMethodFields()
+
+    static
+    {
+        #initMethodFields()
+    }
+    #end
+
+    #declareConstructors()
+
+    #foreach ($operation in $intf.operations)
+        #declareOperationImpl ($operation)
+    #end
+
+    #foreach ($propertySet in $intf.propertySets)
+        #foreach ($property in $propertySet.properties)
+            #declarePropertyAccessors ($property)
+        #end
+    #end
+
+    #foreach ($eventSet in $intf.eventSets)
+        #declareEventSetImpl ($eventSet)
+        #declaredListenerMethods($eventSet)
+    #end
+
+    #declarePropertyCache()
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEvent.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEvent.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The ControlEvent class is an abstract base class that represents an Event declared within an
+ * EventSet interface of a ControlInterface
+ */
+abstract public class ControlEvent extends GenMethod
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     */
+    protected ControlEvent(ControlEventSet eventSet) 
+    {
+        _eventSet = eventSet;
+    };
+
+    /**
+     * Initializes the ControlEvent instance.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init() {}
+
+    /**
+     * Returns the ControlEventSet associated with the ControlEvent
+     */
+    public ControlEventSet getEventSet() { return _eventSet; }
+
+    private ControlEventSet _eventSet;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEventHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEventHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The ControlEventHandler class is an abstract base class that represents an EventHandler
+ * method declared on a control hosting container.
+ */
+abstract public class ControlEventHandler extends GenMethod
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     */
+    protected ControlEventHandler(ControlEvent event) 
+    {
+        _event = event;
+    };
+
+    /**
+     * Returns the ControlEvent associated with the ControlEventHandler
+     */
+    public ControlEvent getEvent() { return _event; }
+
+    private ControlEvent _event;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEventSet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlEventSet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,110 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+
+/**
+ * The ControlEventSet class is an abstract base class that represents an EventSet on the
+ * interface of a ControlBean type.
+ */
+abstract public class ControlEventSet
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlIntf the declaring ControlInterface
+     */
+    protected ControlEventSet(ControlInterface controlIntf) 
+    {
+        _controlIntf = controlIntf;
+    };
+
+    /**
+     * Initializes the ControlEventSet instance.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init()
+    {
+        _events = initEvents();
+    }
+
+    /**
+     * Initializes the list of ControlEvents associated with this ControlEventSet
+     */
+    abstract protected ArrayList<ControlEvent> initEvents();
+
+    /**
+     * Returns the list of ControlEvents associated with this ControlEventSet
+     */
+    public ArrayList<ControlEvent> getEvents() { return _events; }
+
+    /**
+     * Returns the fully qualified EventSet name
+     */
+    abstract public String getName();
+
+    /**
+     * Returns the unqualified class name for this event set
+     */
+    public String getShortName()
+    {
+        String eventSetName = getName();
+        int lastDot = eventSetName.lastIndexOf('.');
+        return eventSetName.substring(lastDot + 1);
+    }
+
+    /**
+     * Returns the name of the generated notifier class for this ControlEventSet
+     */
+    public String getNotifierClass()
+    {
+        return getShortName() + "Notifier";
+    }
+
+    /**
+     * Returns any 'extends' clause that should be placed on the generated notifier class
+     */
+    public String getNotifierExtends()
+    {
+        //
+        // TODO: Add a model for how one event set can extend another
+        // return superClass().getNotifierClass();
+        //
+        return "extends org.apache.beehive.controls.runtime.bean.EventNotifier";
+    }
+
+    /**
+     * Returns the name of the method used to register a new EventSet listener
+     */
+    public String getAddListenerMethod()
+    {
+        return "add" + getShortName() + "Listener";
+    }
+
+    /**
+     * Returns the name of the method used to register a new EventSet listener
+     */
+    public String getRemoveListenerMethod()
+    {
+        return "remove" + getShortName() + "Listener";
+    }
+
+    private ControlInterface _controlIntf;
+    private ArrayList<ControlEvent> _events;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+
+/**
+ * The ControlField class is an abstract base class that represents an java.lang.reflect.Field 
+ * on an implementation class that refers to a control.
+ */
+abstract public class ControlField extends EventField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlImpl the declaring ControlImpl
+     */
+    protected ControlField(ControlImpl controlImpl) 
+    {
+        _controlImpl = controlImpl;
+    };
+
+    /**
+     * Initializes the ControlField instance.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init()
+    {
+        super.init();
+        _controlBean = new ControlBean(getControlInterface());
+    }
+
+    /**
+     * Returns the ControlBean associated with this ControlField
+     */
+    public ControlBean getControlBean() { return _controlBean; }
+
+    private ControlImpl _controlImpl;
+    private ControlBean _controlBean;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,180 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import com.sun.mirror.apt.Filer;
+
+/**
+ * The ControlImpl class is an abstract class that represents the attributes of a Control
+ * implementation class.
+ */
+abstract public class ControlImpl extends GenClass
+{
+    /**
+     * Initializes the ControlInterface class.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init()
+    {
+        _superClass = initSuperClass();
+        _controls = initControls();
+        _contexts = initContexts();
+        _clients = initClients();
+        initEventAdaptors();
+
+        //
+        // Construct a new initializer class from this implementation class
+        //
+        _init = new ControlInitializer(this);
+    }
+
+    /**
+     * Initializes the super ControlInterface that this ControlInterface extends (or sets it to null
+     * if a base interface)
+     */
+    abstract protected ControlImpl initSuperClass();
+
+    /**
+     * Returns the ControlInterface associated with this implementation
+     */
+    abstract public ControlInterface getControlInterface();
+
+    /**
+     * Initializes the list of ControlFields declared directly by this ControlImpl
+     */
+    abstract protected ArrayList<ControlField> initControls();
+
+    /**
+     * Initializes the list of ContextFields declared directly by this ControlImpl
+     */
+    abstract protected ArrayList<ContextField> initContexts();
+
+    /**
+     * Initializes the list of ClientFields declared directly by this ControlImpl
+     */
+    abstract protected ArrayList<ClientField> initClients();
+
+    /**
+     * Returns the super interface for this interface
+     */
+    public ControlImpl getSuperClass() { return _superClass; }
+
+    /**
+     * Returns the list of ControlFields declared directly by this ControlImpl
+     */
+    public ArrayList<ControlField> getControls() { return _controls; }
+
+    /**
+     * Returns true if the implemenation class contains any nested controls
+     */
+    public boolean hasControls() { return _controls.size() != 0; }
+
+    /**
+     * Returns the list of ContextFields declared directly by this ControlImpl
+     */
+    public ArrayList<ContextField> getContexts() { return _contexts; }
+
+    /**
+     * Returns true if the implemenation class contains any nested controls
+     */
+    public boolean hasContexts() { return _contexts.size() != 0; }
+
+    /**
+     * Returns the list of ClientFields declared directly by this ControlImpl
+     */
+    public ArrayList<ClientField> getClients() { return _clients; }
+
+    /**
+     * Returns true if the implemenation class contains any nested controls
+     */
+    public boolean hasClients() { return _clients.size() != 0; }
+
+    /**
+     * Initializes the ControlEventAdaptors associated with this ControlImpl
+     */
+    abstract protected void initEventAdaptors(); 
+
+    /**
+     * Returns true if the control implementation needs field initialization support
+     */
+    public boolean needsFieldInit()
+    {
+        return hasControls() || hasContexts() || hasClients();
+    }
+
+    /**
+     * Returns the field with the specified name
+     */
+    public GenField getField(String name)
+    {
+        for (GenField genField : _controls)
+            if (genField.getName().equals(name))
+                return genField;
+        for (GenField genField : _contexts)
+            if (genField.getName().equals(name))
+                return genField;
+        for (GenField genField : _clients)
+            if (genField.getName().equals(name))
+                return genField;
+
+        return null;
+    }
+
+    /**
+     * Returns the list of fully qualified class names for types that are derived
+     * from this GenClass
+     */
+    public String [] getGeneratedTypes()
+    {
+        return new String [] { _init.getClassName() };
+    }
+
+    /**
+     * Returns the information necessary to generate a ControlBean from this ControlInterface
+     */
+    public List<GeneratorOutput> getGeneratorOutput(Filer filer) throws IOException
+    {
+        HashMap<String,Object> map = new HashMap<String,Object>();
+        map.put("impl", this);                                  // control implementation
+        map.put("init", _init);                                  // control impl initializer
+        map.put("intf", getControlInterface());                 // control interface
+        map.put("bean", new ControlBean(getControlInterface()));// control bean
+
+        Writer writer = new IndentingWriter(filer.createSourceFile(_init.getClassName()));
+        GeneratorOutput genOut = 
+            new GeneratorOutput(writer,"org/apache/beehive/controls/runtime/generator/ControlInitializer.vm",
+                                map);
+        ArrayList<GeneratorOutput> genList = new ArrayList<GeneratorOutput>(1);
+        genList.add(genOut);
+        return genList;
+    }
+
+    ControlImpl _superClass;
+    ArrayList<ControlField> _controls;
+    ArrayList<ContextField> _contexts;
+    ArrayList<ClientField> _clients;
+    ControlInitializer _init;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInitializer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInitializer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,132 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+
+/**
+ * The ControlInitializer class is a generated class that contains the code necessary to initialize
+ * a ControlBean implementation instance.
+ */
+public class ControlInitializer extends GenClass
+{
+    /**
+     * Constructs a new ControlInitializer class supporting a particular control bean implementation
+     * @param beanInterface the public interface associated with the bean
+     */
+    protected ControlInitializer(ControlImpl controlImpl)
+    {
+        super();
+        _controlImpl = controlImpl;
+        _controlIntf = _controlImpl.getControlInterface();
+        if (_controlImpl != null)
+        {
+            _packageName = _controlImpl.getPackage();
+            _shortName = _controlImpl.getShortName() + "Initializer";
+            _className = _packageName + "." + _shortName;
+            if (_controlImpl.getSuperClass() != null)
+                _superClass = new ControlInitializer(_controlImpl.getSuperClass());
+        } 
+        else
+        {
+            Class c = org.apache.beehive.controls.runtime.bean.ControlInitializer.class;
+            _packageName = c.getPackage().getName();
+            _className = c.getName();
+            _shortName = _className.substring(_packageName.length() + 1);
+        }
+
+        //
+        // Compute the list of impl fields that will require reflected Fields.  This is
+        // done unconditionally for all @Control fields (to support PropertyMap initialization),            // and only if needed to initialize for fields of other types.
+        //
+        _reflectFields = new ArrayList<GenField>();
+        for (GenField genField : _controlImpl.getControls())
+            _reflectFields.add(genField);
+        for (GenField genField : _controlImpl.getContexts())
+            if (needsReflection(genField))
+                _reflectFields.add(genField);
+        for (GenField genField : _controlImpl.getClients())
+            if (needsReflection(genField))
+                _reflectFields.add(genField);
+    }
+
+    /**
+     * Returns the package name of the ControlInitializer
+     */
+    public String getPackage() { return _packageName; }
+
+    /**
+     * Returns the unqualified classname of the ControlInitializer
+     */
+    public String getShortName() { return _shortName; }
+
+    /**
+     * Returns the fully qualfied classname of the ControlInitializer
+     */
+    public String getClassName() { return _className; }
+
+    /**
+     * Returns the ControlBean implementation instance
+     */
+    public ControlImpl getControlImpl() { return _controlImpl; }
+
+    /**
+     * Returns the public or extension interface associated with the ControlBean implementation
+     */
+    public ControlInterface getControlInterface() { return _controlIntf; }
+
+    /**
+     * Returns the ControlInitializer super class for this ControlInitializer
+     */
+    public ControlInitializer getSuperClass() { return _superClass; }
+
+    /**
+     * Returns true if the initializer will use Reflection to initialize the field, false
+     * otherwise.
+     */
+    static public boolean needsReflection(GenField genField)
+    {
+        //
+        // Since initializers are generated into the same package as the initialized class,
+        // only private access fields require reflection
+        //
+        String accessModifier = genField.getAccessModifier();
+        if (accessModifier.equals("private"))
+            return true;
+
+        return false;
+    }
+
+    /**
+     * Returns the list of impl class fields that must be initialized using Reflection
+     */
+    public ArrayList<GenField> getReflectFields()
+    {
+        return _reflectFields;
+    }
+
+    String _packageName;
+    String _shortName;
+    String _className;
+    ControlImpl _controlImpl;
+    ControlInterface _controlIntf;
+    ControlInitializer _superClass;
+    ArrayList<GenField> _reflectFields;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInitializer.vm
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInitializer.vm	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,239 @@
+##
+## The Velocity code generation template for the Initializer class generated from a Control
+## implementation class
+##
+## B E A   S Y S T E M S
+## Copyright 2001-2004  BEA Systems, Inc.
+##
+## Licensed under the Apache License, Version 2.0 (the "License");
+## you may not use this file except in compliance with the License.
+## You may obtain a copy of the License at
+## 
+##     http://www.apache.org/licenses/LICENSE-2.0
+## 
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+##
+## $Header:$
+##
+## The following context variables are used by this template:
+##      $init - a ControlInitializer instance that defines the attributes of the intializer
+##      $intf - a ControlInterface instance that defines the attributes of the public interface
+##
+## The actual class template apears at the end of this file, and is preceded by a number of
+## supporting macros that define elements of the template.
+##
+## SUPPORTING MACROS
+##
+##
+## This macro defines any static final Field values needed for field initialization
+##
+#macro (declareReflectFields)
+    #foreach ($field in $init.reflectFields)
+        static final Field $field.reflectField;
+    #end
+#end
+##
+## This macro initializes the value of any static final Field values for field initialization
+##
+#macro (initReflectFields)
+    try
+    {
+    #foreach ($field in $init.reflectFields)
+        $field.reflectField = ${impl.className}.class.getDeclaredField("$field.name");
+        ${field.reflectField}.setAccessible(true);
+    #end
+    }
+    catch (NoSuchFieldException nsfe)
+    {
+        throw new ExceptionInInitializerError(nsfe);
+    }
+#end
+##
+## This macro declares a new event adaptor class that maps events from an EventSet to
+## a set of implemented handlers on a control implementation
+##
+#macro (declareEventAdaptor $adaptor)
+    #set ($eventSet = $adaptor.eventSet)
+    protected class $adaptor.className implements $eventSet.name, java.io.Serializable
+    {
+        $impl.className _impl;
+
+        ${adaptor.className}($impl.className impl) { _impl = impl; }
+
+        #foreach ($event in $eventSet.events)
+            public ${event.returnType} ${event.name}(${event.argDecl}) $event.throwsClause
+            {
+            #if ($adaptor.hasHandler($event))
+                #if ($event.returnType != "void") return #end _impl.${adaptor.getHandler($event).name}(${event.argList});
+            #elseif ($event.returnType != "void")
+                return $event.defaultReturnValue;
+            #end
+            }
+
+            #set ($eventHandler = "")
+        #end
+    }
+
+#end
+##
+## This macros declares any generated class that act as event adaptors between an event
+## source (control or context) and implementation class event handlers.
+##
+#macro (declareEventAdaptors)
+    #foreach ($control in $impl.controls)
+        #foreach ($adaptor in $control.eventAdaptors)
+            #declareEventAdaptor($adaptor)
+        #end
+    #end
+    #foreach ($context in $impl.contexts)
+        #foreach ($adaptor in $context.eventAdaptors)
+            #declareEventAdaptor($adaptor)
+        #end
+    #end
+#end
+##
+## This macro initializes any event adaptors for a nested control
+##
+#macro (initEventAdaptors $control)
+    #foreach ($adaptor in $control.eventAdaptors)
+        ${control.localName}.${adaptor.eventSet.addListenerMethod}(new ${adaptor.className}(impl));
+    #end
+#end
+##
+##
+## This macro defines the initialization of a nested control
+##
+#macro (initControl $control)
+    $control.controlBean.className $control.localName = new ${control.controlBean.className}(_initBeanContext, "$control.name", getAnnotationMap(bean, ${control.reflectField}));
+    #initEventAdaptors($control)
+    #if ($init.needsReflection($control))
+    ${control.reflectField}.set(impl, $control.localName);
+    #else
+    impl.$control.name = $control.localName; 
+    #end
+
+#end
+##
+##
+## This macro defines the initialization of a contextual service
+##
+#macro (initContext $context)
+    #if ($context.getType().equals("org.apache.beehive.controls.api.context.ControlBeanContext"))
+    $context.type $context.localName = _initBeanContext;
+    #else
+    $context.type $context.localName = ($context.type)_initBeanContext.getService(${context.type}.class, null);
+    #end
+    if ($context.localName == null)
+        throw new ControlException("Contextual service $context.type is not available");
+    #initEventAdaptors($context)
+    #if ($init.needsReflection($context))
+    ${context.reflectField}.set(impl, $context.localName);
+    #else
+    impl.$context.name = $context.localName; 
+    #end
+
+#end
+##
+##
+## This macro defines the initialization of a client notification proxy
+##
+#macro (initClient $client)
+    $client.type $client.localName = ($client.type)getEventNotifier(bean, ${client.type}.class);
+    #if ($init.needsReflection($client))
+    ${client.reflectField}.set(impl, $client.localName);
+    #else
+    impl.$client.name = $client.localName; 
+    #end
+
+#end
+##
+## This macro defines the initialization method for all nested control instances.
+##
+#macro (declareFieldInit)
+    public void initializeFields(ControlBean bean, $impl.className impl)
+    {
+
+        ControlBeanContext _initBeanContext = bean.getControlBeanContext();
+        try
+        {
+            #foreach ($control in $impl.controls)
+            #if ($velocityCount == 1)
+            //
+            // Initialize any nested controls used by the implementation
+            //
+            #end 
+            #initControl($control) 
+            #end
+            #foreach ($context in $impl.contexts)
+            #if ($velocityCount == 1)
+            //
+            // Initialize any contextual services used by the implementation
+            //
+            #end 
+            #initContext($context)
+            #end
+            #foreach ($client in $impl.clients)
+            #if ($velocityCount == 1)
+            //
+            // Initialize any client event proxies used by the implementation
+            //
+            #end 
+            #initClient($client)
+            #end
+        }
+        catch (RuntimeException re) { throw re; }
+        catch (Exception e)
+        {
+            throw new ControlException("Initializer failure", e);
+        }
+    }
+#end
+##
+## THE CONTROL INITIALIZER CLASS TEMPLATE
+##
+package $init.package;
+
+import java.lang.reflect.Field;
+import org.apache.beehive.controls.api.ControlException;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.runtime.bean.ControlBean;
+
+public class $init.shortName
+    #if ($init.hasSuperClass())
+             extends $init.superClass.className 
+    #else
+             extends org.apache.beehive.controls.runtime.bean.ControlInitializer
+    #end
+{
+    #if ($init.reflectFields.size() != 0)
+        #declareReflectFields()
+        static
+        {
+            #initReflectFields()
+        }
+    #end
+
+    #if ($impl.needsFieldInit())
+    #declareEventAdaptors()
+
+    #declareFieldInit()
+    #end
+
+    public void initialize(ControlBean bean, Object impl)
+    {
+        $impl.className _impl = ($impl.ClassName)impl;
+
+        #if ($init.hasSuperClass())
+        super.initialize(bean, _impl);
+
+        #end
+        #if ($impl.needsFieldInit())
+        initializeFields(bean, _impl);
+
+        #end
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInterface.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlInterface.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,192 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import com.sun.mirror.apt.Filer;
+
+/**
+ * The ControlInterface class is an abstract base class that represents the interface (base or
+ * extension) associated with a ControlBean type.
+ */
+abstract public class ControlInterface extends GenClass
+{
+    /**
+     * Initializes the ControlInterface class.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init()
+    {
+        _superClass = initSuperClass();
+
+        // Build the intial operations list, then look for overloaded methods and assign
+        // them a unique index value.
+        _operations = initOperations();
+        HashMap <String, ArrayList<ControlOperation>> nameMap = 
+            new HashMap<String,ArrayList<ControlOperation>>();
+        for (ControlOperation operation : _operations)
+        {
+            String name = operation.getName();
+            if (!nameMap.containsKey(name))
+                nameMap.put(name, new ArrayList<ControlOperation>());
+            nameMap.get(name).add(operation);
+        }
+        for (ArrayList<ControlOperation> al : nameMap.values())
+        {
+            if (al.size() > 1)
+            {
+                for (int i = 0; i < al.size(); i++)
+                    al.get(i).setIndex(i+1);      
+            }
+        }
+
+        _propertySets = initPropertySets();
+
+        _eventSets = initEventSets();
+
+        //
+        // Construct a bean instance for this interface
+        //
+        _bean = new ControlBean(this);
+
+        //
+        // If this is an control extension, run the control-author-specified
+        // checker class to perform additional validation.
+        //
+
+        if (isExtension())
+            runChecker();
+    }
+
+    /**
+     * Initializes the super ControlInterface that this ControlInterface extends (or sets it to null
+     * if a base interface)
+     */
+    abstract protected ControlInterface initSuperClass();
+
+    /**
+     * Initializes the list of ControlOperations declared directly by this ControlInterface
+     */
+    abstract protected ArrayList<ControlOperation> initOperations();
+
+    /**
+     * Initializes the list of ControlPropertySets declared directly by this ControlInterface
+     */
+    abstract protected ArrayList<ControlPropertySet> initPropertySets();
+
+    /**
+     * Initializes the list of ControlEventSets declared directly by this ControlInterface
+     */
+    abstract protected ArrayList<ControlEventSet> initEventSets();
+
+    /**
+     * Returns 'true' if this interface is a ControlExtension (jcx) interface, false
+     * otherwise.
+     */
+    abstract public boolean isExtension();
+
+    /**
+     * Returns the most-derived interface in the inheritance chain that is annotated
+     * with @ControlInterface.  It represents the point in the inheritance chain where
+     * @ControlInterface becomes @ControlExtension (i.e., anything interface derived from
+     * the 'most-derived interface' is annotated with @ControlExtension).
+     */
+    abstract public ControlInterface getMostDerivedInterface();
+
+    /**
+     * Returns a classloader that can be used to load external classes (e.g. user-written
+     * control checkers)
+     */
+    abstract public ClassLoader getExternalClassLoader();
+
+    /**
+     * Runs control-specific checker class (if specified)
+     */
+    abstract public void runChecker();
+
+    /**
+     * Returns the super interface for this interface
+     */
+    public ControlInterface getSuperClass() { return _superClass; }
+
+    /**
+     * Returns the list of ControlOperations declared directly by this ControlInterface
+     */
+    public ArrayList<ControlOperation> getOperations() { return _operations; }
+
+    /**
+     * Returns the list of ControlPropertySets declared directly by this ControlInterface
+     */
+    public ArrayList<ControlPropertySet> getPropertySets() { return _propertySets; }
+
+    /**
+     * Returns the list of ControlEventSets declared directly by this ControlInterface
+     */
+    public ArrayList<ControlEventSet> getEventSets() { return _eventSets; }
+
+    /**
+     * Returns the ControlEventSet with the specified name
+     */
+    public ControlEventSet getEventSet(String name)
+    {
+        for (ControlEventSet eventSet: getEventSets())
+            if (eventSet.getName().equals(name))
+                return eventSet;
+        return null;
+    }
+
+    /**
+     * Returns the list of fully qualified class names for types that are derived
+     * from this GenClass
+     */
+    public String [] getGeneratedTypes()
+    {
+        return new String [] { _bean.getClassName() };
+    }
+
+    /**
+     * Returns the information necessary to generate a ControlBean from this ControlInterface
+     */
+    public List<GeneratorOutput> getGeneratorOutput(Filer filer) throws IOException
+    {
+        HashMap<String,Object> map = new HashMap<String,Object>();
+
+        map.put("intf", this);                  // the control interface
+        map.put("bean", _bean);
+
+        Writer writer = new IndentingWriter(filer.createSourceFile(_bean.getClassName()));
+        GeneratorOutput genOut = 
+            new GeneratorOutput(writer, "org/apache/beehive/controls/runtime/generator/ControlBean.vm", map);
+        ArrayList<GeneratorOutput> genList = new ArrayList(1);
+        genList.add(genOut);
+        return genList;
+    }
+
+    ControlInterface               _superClass;
+    ArrayList<ControlOperation>    _operations;
+    ArrayList<ControlPropertySet>  _propertySets;
+    ArrayList<ControlEventSet>     _eventSets;
+    ControlBean                    _bean;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlOperation.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlOperation.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The ControlOperation class is an abstract base class that represents an operation on the
+ * interface of a ControlBeanType.
+ *
+ */
+abstract public class ControlOperation extends GenMethod
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     */
+    protected ControlOperation(ControlInterface controlIntf) 
+    {
+        super();
+        _controlIntf = controlIntf;
+    };
+
+    /**
+     * Initializes the ControlOperation instance.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init()
+    {
+
+    }
+
+    /**
+     * Returns the body of an Object array initializer based upon method arguments.  All
+     * primitive arguments are converted to the equivalent Object type.
+     */
+    abstract public String getArgObjectArray();
+
+    /**
+     * Returns the name of the static field that holds the name of this method.
+     */
+    public String getMethodField()
+    {
+        StringBuffer sb = new StringBuffer();
+        sb.append("_");
+        sb.append(getName());
+        if (_index != 0)
+            sb.append(_index);
+        sb.append("Method");
+        return sb.toString();
+    }
+
+    /**
+     *  Sets the unique index value for this method
+     */
+    public void setIndex(int index)
+    {
+        _index = index;
+    }
+
+    /**
+     * Returns the ControlInterface associated with this ControlOperation
+     */
+    public ControlInterface getControlInterface() { return _controlIntf; }
+
+    int _index = 0;  // used for uniqueness if overloaded
+    ControlInterface _controlIntf;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlProperty.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlProperty.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,86 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The ControlProperty class is an abstract base class that represents an Event declared within an
+ * EventSet interface of a ControlBean type.
+ */
+abstract public class ControlProperty
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     */
+    protected ControlProperty(ControlPropertySet propertySet) 
+    {
+        _propertySet = propertySet;
+    };
+
+    /**
+     * Initializes the ControlProperty instance.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init() {}
+
+    /**
+     * Returns the ControlPropertySet associated with the ControlPropertySet
+     */
+    public ControlPropertySet getPropertySet() { return _propertySet; }
+
+    /**
+     * Returns the member name associated with this Property in the PropertySet
+     */
+    abstract public String getMemberName();
+
+    /**
+     * Returns the base property name. The associated accessor methods will have the
+     * form set{name} and get{name}
+     */
+    public String getName()
+    {
+        StringBuffer sb = new StringBuffer();
+        sb.append(_propertySet.getPrefix());
+    
+        String memberName = getMemberName();
+        sb.append(Character.toUpperCase(memberName.charAt(0)));
+        if (memberName.length() > 0)
+            sb.append(memberName.substring(1));
+        return sb.toString();
+    }
+
+    /**
+     * Returns the static final field name containing the key for this Property
+     */
+    public String getKeyName()
+    {
+        return getName() + "Key";
+    }
+
+    /**
+     * Returns the type of the Property
+     */
+    abstract public String getType();
+
+    /**
+     * Returns true if the property is an annotation type, false otherwise
+     */
+    abstract public boolean isAnnotation();
+
+    private ControlPropertySet _propertySet;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlPropertySet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlPropertySet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,69 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+
+/**
+ * The ControlPropertySet class is an abstract base class that represents a PropertySet on the
+ * interface of a ControlBean type.
+ */
+abstract public class ControlPropertySet
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlIntf the declaring BeanInterace
+     */
+    protected ControlPropertySet(ControlInterface controlIntf) 
+    {
+        _controlIntf = controlIntf;
+    };
+
+    /**
+     * Initializes the ControlPropertySet instance.  This will be called by custom subclasses to drive
+     * the initialization process.
+     */
+    protected void init()
+    {
+        _properties = initProperties();
+    }
+
+    /**
+     * Initializes the list of BeanProperties associated with this ControlPropertySet
+     */
+    abstract protected ArrayList<ControlProperty> initProperties();
+
+    /**
+     * Returns the list of ControlProperties associated with this ControlPropertySet
+     */
+    public ArrayList<ControlProperty> getProperties() { return _properties; }
+
+    /**
+     * Returns the class name of the property set
+     */
+    abstract public String getClassName();
+
+    /**
+     * Returns the property name prefix for properties in this PropertySet
+     */
+    abstract public String getPrefix();
+
+    private ControlInterface _controlIntf;
+    private ArrayList<ControlProperty> _properties;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/EventAdaptor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/EventAdaptor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,91 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.HashMap;
+
+/**
+ * The EventAdaptor class represents the generated class that is necessary to route
+ * events for a EventSet onto implemented EventHandlers on an implementation class.
+ */
+public class EventAdaptor
+{
+    /**
+     * Constructs a new EventAdaptor for events declared on an EventSet
+     */
+    public EventAdaptor(EventField eventField, ControlEventSet eventSet)
+    {
+        _eventField = eventField;
+        _eventSet = eventSet;
+
+        StringBuffer sb = new StringBuffer();
+
+        String fieldName = eventField.getName();
+        String setName = eventSet.getName();
+        sb.append(Character.toUpperCase(fieldName.charAt(0)));
+        if (fieldName.length() > 1)
+            sb.append(fieldName.substring(1));
+        sb.append(setName.substring(setName.lastIndexOf('.') + 1));
+        sb.append("EventAdaptor");
+        _className = sb.toString();
+    }
+
+    /**
+     * Returns the name of the generated class for this adaptor
+     */
+    public String getClassName()
+    {
+        return _className;
+    }
+
+    /**
+     * Returns the EventSet associated with this Adaptor
+     */
+    public ControlEventSet getEventSet() { return _eventSet; }
+
+    /**
+     * Adds a new EventHandler for a ControlEvent to the EventAdaptor
+     */
+    public void addHandler(ControlEvent event, GenMethod eventHandler)
+    {
+        assert event.getEventSet() == _eventSet;
+        _handlerMap.put(event, eventHandler);
+    }
+
+    /**
+     * Returns true if there is an EventHandler for ControlEvent on this EventAdaptor
+     */
+    public boolean hasHandler(ControlEvent event)
+    {
+        return _handlerMap.containsKey(event);
+    }
+
+    /**
+     * Returns the EventHandler for a ControlEvent on this EventAdaptor
+     */
+    public GenMethod getHandler(ControlEvent event)
+    {
+        return _handlerMap.get(event);
+    }
+
+    private String _className;
+    private EventField _eventField;
+    private ControlEventSet _eventSet;
+    private HashMap<ControlEvent, GenMethod> _handlerMap = new HashMap<ControlEvent,GenMethod>();
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/EventField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/EventField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,78 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.Collection;
+import java.util.HashMap;
+
+/**
+ * The GenField class represents a field type that is also an event source
+ */
+abstract public class EventField extends GenField
+{
+    protected void init()
+    {
+        _controlIntf = initControlInterface();
+    }
+
+    /**
+     * Initializes the ControlInterface associated with this event field. The public interface
+     * for controls and contextual services, and their associated events can be modeled in the
+     * same way.
+     */
+    abstract protected ControlInterface initControlInterface();
+
+    /**
+     * Returns the ControlInterface associated with this event field
+     */
+    public ControlInterface getControlInterface()
+    {
+        return _controlIntf;
+    }
+
+    /**
+     * Gets the EventAdaptor for a particular EventSet
+     */
+    public EventAdaptor getEventAdaptor(ControlEventSet eventSet)
+    {
+        return _eventAdaptors.get(eventSet);
+    }
+
+    /**
+     * Adds a EventAdaptor for a particular EventSet
+     */
+    public void addEventAdaptor(ControlEventSet eventSet, EventAdaptor eventAdaptor)
+    {
+        assert !_eventAdaptors.containsKey(eventSet);
+        _eventAdaptors.put(eventSet, eventAdaptor);
+    }
+
+    /**
+     *  Returns all EventAdaptors for this EventField
+     */
+    public Collection<EventAdaptor> getEventAdaptors()
+    {
+        return _eventAdaptors.values();
+    }
+
+    HashMap<ControlEventSet, EventAdaptor> _eventAdaptors = 
+        new HashMap<ControlEventSet, EventAdaptor>();
+
+    ControlInterface _controlIntf;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenClass.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenClass.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+
+import com.sun.mirror.apt.Filer;
+
+/**
+ * The GenClass abstract class defines a base set of methods that are generally available
+ * for template usage on class-type objects
+ * <p>
+ * This is done with an abstract class (instead of an interface) so derived abstract classes
+ * can be subclassed from it w/out requiring all of the methods to be declared there.
+ */
+abstract public class GenClass
+{
+    /**
+     * Returns the fully qualified classname associated with the GenClass
+     */
+    abstract public String getClassName();
+
+    /**
+     * Returns the base package name associated with the GenClass
+     */
+    abstract public String getPackage();
+
+    /**
+     * Returns the unqualified class name associated with the GenClass
+     */
+    abstract public String getShortName();
+
+    /**
+     * Returns the super class for this class
+     */
+    abstract public GenClass getSuperClass();
+
+    /**
+     * Returns true if the GenClass extends another class
+     */
+    public boolean hasSuperClass()
+    {
+        return getSuperClass() != null;
+    }
+
+    /**
+     * Returns the list of fully qualified class names for types that are derived
+     * from this GenClass
+     */
+    public String [] getGeneratedTypes()
+    {
+        return null;
+    }
+
+    /**
+     * Returns the list of generated files derived from this GenClass.
+     */
+    public List<GeneratorOutput> getGeneratorOutput(Filer filer) throws IOException
+    {  
+        return null; 
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * The GenField abstract class defines a base set of methods that are generally available
+ * for template usage on field-type objects
+ * <p>
+ * This is done with an abstract class (instead of an interface) so derived abstract classes
+ * can be subclassed from it w/out requiring all of the methods to be declared there.
+ */
+abstract public class GenField
+{
+    /**
+     * Returns the name of the field
+     */
+    abstract public String getName();
+
+    /**
+     * Returns the field type of the field
+     */
+    abstract public String getType();
+
+    /**
+     * Returns the access modifier associated with the field
+     */
+    abstract public String getAccessModifier();
+
+    /**
+     * Returns a local variable used when setting the field value
+     */
+    public String getLocalName() { return "_" + getName(); }
+
+    /**
+     * Returns the name of a static local field using to refer to this Field
+     */
+    public String getReflectField()
+    {
+        return "_" + getName() + "Field";
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenMethod.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GenMethod.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,94 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * The GenMethod abstract class defines a base set of methods that are generally available
+ * for template usage on method-type objects
+ * <p>
+ * This is done with an abstract class (instead of an interface) so derived abstract classes
+ * can be subclassed from it w/out requiring all of the methods to be declared there.
+ */ 
+abstract public class GenMethod
+{
+    private static HashMap<String, String> _defaultReturnValues = new HashMap<String,String>();
+
+    static
+    {
+        _defaultReturnValues.put("void", ""); 
+        _defaultReturnValues.put("boolean", "false"); 
+        _defaultReturnValues.put("char", "'\0'"); 
+        _defaultReturnValues.put("byte", "0");
+        _defaultReturnValues.put("short", "0");
+        _defaultReturnValues.put("int", "0");
+        _defaultReturnValues.put("long", "0");
+        _defaultReturnValues.put("float", "0.0");
+        _defaultReturnValues.put("double", "0.0");
+    }
+
+    /**
+     * Returns the name of the method
+     */
+    abstract public String getName();
+
+    /**
+     * Returns the method argument declaration
+     */
+    abstract public String getArgDecl();
+
+    /**
+     * Returns the the method argument names, in a comma separated list
+     */
+    abstract public String getArgList();
+
+    /**
+     * Returns the the method argument classes, in a comma separated list
+     */
+    abstract public String getArgTypes();
+
+    /**
+     * Returns the throws clause of the method
+     */
+    abstract public String getThrowsClause();
+
+    /**
+     * Returns an ArrayList containing the list of thrown exceptions
+     */
+    abstract public ArrayList getThrowsList(); 
+
+    /**
+     * Returns the return type name of the method
+     */
+    abstract public String getReturnType();
+
+    /**
+     * Returns the default return value for the operation, based upon the operation return
+     * type.
+     */
+    public String getDefaultReturnValue()
+    {
+        String returnType = getReturnType();
+        if (_defaultReturnValues.containsKey(returnType))
+            return _defaultReturnValues.get(returnType);
+        return "null";
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GeneratorOutput.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/GeneratorOutput.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+package org.apache.beehive.controls.runtime.generator;
+
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+import java.io.File;
+import java.io.Writer;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.HashMap;
+
+/**
+ * The GeneratorOutput class represents a single file output by the code generation process,
+ * as well as the template and context information necessary to generate it.
+ */
+public class GeneratorOutput
+{
+    public GeneratorOutput(Writer outWriter, String templateName, HashMap<String,Object> context)
+    {
+        _outWriter = outWriter;
+        _templateName = templateName;
+        _context = context;
+    }
+
+    public String getTemplateName() { return _templateName; }
+    public HashMap<String,Object> getContext() { return _context; }
+    public Writer getWriter() { return _outWriter; }
+
+    String _templateName;
+    Writer _outWriter;
+    HashMap<String, Object> _context;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/IndentingWriter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/IndentingWriter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,122 @@
+package org.apache.beehive.controls.runtime.generator;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * The IndentingWriter class is a simple implementation of an indenting code writer
+ */
+public class IndentingWriter extends Writer 
+{
+    /** current depth:
+     * <PRE>
+     * // depth = 0;
+     * {
+     *   // depth now is 2
+     *   {
+     *     // depth now is 4
+     *   }
+     *   // depth now is 2
+     * }
+     * // depth now is 0
+     * </PRE>
+     */
+    protected int depth = 0;
+
+    public IndentingWriter(Writer delegate) 
+    {
+	    this(delegate, 
+             Integer.getInteger("org.apache.beehive.controls.runtime.generator.indentLevel", 4).intValue());
+    }
+
+    public IndentingWriter(Writer delegate, int indentLevel) 
+    {
+	    _out = delegate;
+	    this._indentLevel = indentLevel;
+    }
+
+    public void write(char cbuf[], int off, int len) throws IOException 
+    {
+	    if (off < 0 || off + len > cbuf.length)
+	        throw new ArrayIndexOutOfBoundsException();
+
+	    for (int i = off; i < off + len; i++) 
+        {
+	        char c = cbuf[i];
+	        if (c == '}') 
+            {
+                decrDepth();
+	        } 
+            else if ((c == ' ' || c == '\t') && _needIndent) 
+            {
+		        continue;
+	        }
+
+	        if (_needIndent)
+		        indent();
+	        _out.write(c);
+
+	        if (c == '\n')
+            {
+		        _needIndent = true;
+            }
+	        else if (c == '{') 
+            {
+                incrDepth();
+            }
+	    }
+    }
+
+    public void flush() throws IOException 
+    {
+	    _out.flush();
+    }
+
+    public void close() throws IOException 
+    {
+	    _out.close();
+    }
+
+    private void indent() throws IOException 
+    {
+	    for (int i = 0; i < depth; i++) 
+        {
+	        _out.write(' ');
+	    }
+	    _needIndent = false;
+    }
+
+    private void incrDepth() 
+    {
+	    depth += _indentLevel;
+    }
+
+    private void decrDepth() 
+    {
+	    depth -= _indentLevel;
+	    if (depth < 0)
+	        depth = 0;
+    }
+
+    protected Writer _out;
+    protected int _indentLevel;
+    private boolean _needIndent = false;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/SimpleFiler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/SimpleFiler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+package org.apache.beehive.controls.runtime.generator;
+
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.OutputStream;
+
+import com.sun.mirror.apt.Filer;
+
+/**
+ * The SimpleFiler class is a very basic implementation of the com.sun.mirror.apt.Filer
+ * interface, for code generation output.  This is used to enable use of Filer as a common
+ * output abstraction between the APT based code generation (which uses the built-in Filer
+ * implementation and the Reflection-based implementation (ControlGenerator), which uses
+ * SimpleFiler.
+ * <p>
+ * Once transition to APT is complete, then Reflection-based support (including this class)
+ * will be dropped.
+ */
+public class SimpleFiler implements Filer
+{
+    public SimpleFiler(File outputDir)
+    {
+        _outputDir = outputDir;
+    }
+
+    public PrintWriter createSourceFile(String name) throws IOException
+    {
+        File outFile = new File(_outputDir,name.replace('.', File.separatorChar) + ".java");
+        outFile.getParentFile().mkdirs();
+        return new PrintWriter((new FileWriter(outFile)));
+    }
+
+    public OutputStream createClassFile(String name) throws IOException
+    {
+        throw new UnsupportedOperationException("SimpleFiler only supports source generation");
+    }
+
+    public PrintWriter createTextFile(Filer.Location loc, String pkg, File relPath, 
+                                      String charsetName)
+                       throws IOException
+    {
+        throw new UnsupportedOperationException("SimpleFiler only supports source generation");
+    }
+
+    public OutputStream createBinaryFile(Filer.Location loc, String pkg, File relPath)
+                        throws IOException
+    {
+        throw new UnsupportedOperationException("SimpleFiler only supports source generation");
+    }
+
+    File _outputDir;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/VelocityGenerator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/VelocityGenerator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+package org.apache.beehive.controls.runtime.generator;
+
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.Template;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.VelocityException;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+
+/**
+ * The VelocityGenerator class is an implementation of CodeGenerator that uses standard
+ * Apache Velocity classes from the system classpath.
+ */
+public class VelocityGenerator extends CodeGenerator
+{
+    public VelocityGenerator() throws Exception
+    {
+        super();
+
+        // Create a Velocity engine instance to support codgen
+        _ve = new VelocityEngine();
+        Properties p = new Properties();
+        p.setProperty(VelocityEngine.RESOURCE_LOADER, "class");
+        p.setProperty("class." + VelocityEngine.RESOURCE_LOADER + ".class",
+                      ClasspathResourceLoader.class.getName());
+        _ve.init(p);
+    }
+
+    /**
+     * Implementation of the CodeGenerator.generate() method, using standard Velocity
+     * package naming conventions and the system class loader
+     */
+    public void generate(GeneratorOutput genOut) throws CodeGenerationException
+    {
+        //
+        // Create a new VelocityContext
+        //
+        VelocityContext vc = new VelocityContext();
+
+        //
+        // Transfer any code generation properties excepted by the templates into the context
+        // 
+        HashMap<String,Object> genContext = genOut.getContext();
+        for(String key : genContext.keySet())
+            vc.put(key, genContext.get(key));
+
+        try
+        {
+            Writer genWriter = genOut.getWriter();
+            Template template = getTemplate(genOut.getTemplateName());
+            template.merge(vc, genWriter);    
+            genWriter.close();
+        }
+        catch (RuntimeException re) { throw re; }   // never wrap RuntimeExceptions
+        catch (Exception e) { throw new CodeGenerationException(e); }
+    }
+
+    //
+    // Returns the requested template, and caches the result for subsequent requests using the
+    // same template.
+    //
+    public Template getTemplate(String templateName) throws Exception
+    {
+        if (_templateMap.containsKey(templateName))
+            return _templateMap.get(templateName);
+
+        Template t = _ve.getTemplate(templateName);
+        _templateMap.put(templateName, t);
+        return t;
+    }
+
+    private HashMap<String, Template> _templateMap = new HashMap<String, Template>();
+    private VelocityEngine _ve;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptAnnotationHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptAnnotationHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.AnnotationValue;
+
+import org.apache.beehive.controls.runtime.generator.ClientField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+
+/**
+ * The AptAnnotationHelper class is a helper class that aids in the reading of annotation
+ * values using APT metadata
+ */
+public class AptAnnotationHelper
+{
+    /**
+     * Initialize a new helper instance based upon a specific annotation declaration.
+     * @param  annot The annotation value declaration
+     */
+    public AptAnnotationHelper(AnnotationMirror annot)
+    {
+        //
+        // Build maps from the element name to its declaration and values
+        //
+        Map <AnnotationTypeElementDeclaration,AnnotationValue> elemValues = 
+            annot.getElementValues();
+
+        for (AnnotationTypeElementDeclaration ated : elemValues.keySet())
+        {
+            _elementMap.put(ated.getSimpleName(), ated);
+            _valueMap.put(ated.getSimpleName(), elemValues.get(ated));
+        }
+    };
+
+    /**
+     * Returns the AnnotationTypeElementDeclaration for a particular element
+     */
+    public AnnotationTypeElementDeclaration getElementDeclaration(String elemName)
+    {
+        if (_elementMap.containsKey(elemName))
+            return _elementMap.get(elemName);
+        return null;
+    }
+
+    /**
+     * Returns the value of a particular element as a String
+     */
+    public String getStringValue(String elemName)
+    {
+        if (_valueMap.containsKey(elemName))
+            return _valueMap.get(elemName).toString();
+        return null;
+    }
+
+    /**
+     * Returns the value of a particular element as an Object
+     */
+    public Object getObjectValue(String elemName)
+    {
+        if (_valueMap.containsKey(elemName))
+            return _valueMap.get(elemName).getValue();
+        return null;
+    }
+
+    private HashMap<String,AnnotationTypeElementDeclaration> _elementMap = 
+                new HashMap<String,AnnotationTypeElementDeclaration>();
+    private HashMap<String,AnnotationValue> _valueMap = 
+                new HashMap<String,AnnotationValue>();
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptClientField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptClientField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.FieldDeclaration;
+
+import org.apache.beehive.controls.runtime.generator.ClientField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+
+/**
+ * The AptClientField class is an implementation of ClientField where values are derived
+ * using APT metadata
+ */
+public class AptClientField extends ClientField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlImpl the declaring ControlImplementation
+     */
+    protected AptClientField(ControlImpl controlImpl, FieldDeclaration fieldDecl,
+                             AnnotationProcessorEnvironment env) 
+    {
+        super(controlImpl);
+        _fieldDecl = fieldDecl;
+        _env = env;
+        _helper = new AptFieldHelper(fieldDecl);
+    };
+
+    //
+    // GenField implementations are delegated to the supporting FieldHelper instance.
+    //
+    public String getName() { return _helper.getName(); }
+    public String getType() { return _helper.getType(); }
+    public String getAccessModifier() { return _helper.getAccessModifier(); }
+
+    private FieldDeclaration _fieldDecl;
+    private AnnotationProcessorEnvironment _env;
+    private AptFieldHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptContextField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptContextField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.type.InterfaceType;
+import com.sun.mirror.type.TypeMirror;
+
+import org.apache.beehive.controls.runtime.generator.ContextField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+import org.apache.beehive.controls.runtime.generator.ControlInterface;
+
+/**
+ * The AptContextField class is an implementation of ContextField where values are derived
+ * using APT metadata
+ */
+public class AptContextField extends ContextField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlImpl the declaring ControlImplementation
+     */
+    protected AptContextField(ControlImpl controlImpl, FieldDeclaration fieldDecl, 
+                              AnnotationProcessorEnvironment env) 
+    {
+        super(controlImpl);
+        _fieldDecl = fieldDecl;
+        _env = env;
+        _helper = new AptFieldHelper(fieldDecl);
+
+        init();
+    };
+
+    /**
+     * Initializes the ControlInterface associated with this ControlField
+     */
+    protected ControlInterface initControlInterface()
+    {
+        TypeMirror fieldType = _fieldDecl.getType();
+        if (! (fieldType instanceof InterfaceType))
+        {
+            _env.getMessager().printError(_fieldDecl.getPosition(),
+                                          "@Context field type must be an interface");
+            return null;
+        }
+
+        //
+        // For contextual services, the declared type of the field is always the public
+        // interface for the contextual service.
+        //
+        return new AptControlInterface(((InterfaceType)_fieldDecl.getType()).getDeclaration(), 
+                                       _env);
+    }
+
+    //
+    // GenField implementations are delegated to the supporting FieldHelper instance.
+    //
+    public String getName() { return _helper.getName(); }
+    public String getType() { return _helper.getType(); }
+    public String getAccessModifier() { return _helper.getAccessModifier(); }
+
+    private FieldDeclaration _fieldDecl;
+    private AnnotationProcessorEnvironment _env;
+    private AptFieldHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,123 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.declaration.InterfaceDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.type.DeclaredType;
+import com.sun.mirror.type.InterfaceType;
+import com.sun.mirror.type.TypeMirror;
+
+import org.apache.beehive.controls.runtime.generator.ControlField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+import org.apache.beehive.controls.runtime.generator.ControlInterface;
+
+/**
+ * The AptControlField class is an implementation of ControlField where values are derived
+ * using APT metadata.
+ */
+public class AptControlField extends ControlField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlImpl the declaring ControlImplementation
+     */
+    protected AptControlField(ControlImpl controlImpl, FieldDeclaration controlDecl,
+                              AnnotationProcessorEnvironment env) 
+    {
+        super(controlImpl);
+        _controlDecl = controlDecl;
+        _env = env;
+        _helper = new AptFieldHelper(_controlDecl);
+
+        init();
+    };
+
+    /**
+     * Initializes the ControlInterface associated with this ControlField
+     */
+    protected ControlInterface initControlInterface()
+    {
+        TypeMirror controlType = _controlDecl.getType();
+        if (! (controlType instanceof DeclaredType))
+        {
+            _env.getMessager().printError(_controlDecl.getPosition(),
+                "@Control field type must be a valid ControlBean class or control interface");
+            return null;
+        }
+
+        //
+        // The field can either be declared as the bean type or the public interface type.
+        // If it is the bean type, then we need to reflect to find the public interface
+        // type it implements.
+        //
+        TypeDeclaration typeDecl = ((DeclaredType)controlType).getDeclaration();
+        InterfaceDeclaration controlIntf = null;
+        if (typeDecl instanceof ClassDeclaration)
+        {
+            Collection<InterfaceType> implIntfs = ((ClassDeclaration)typeDecl).getSuperinterfaces();
+            for (InterfaceType intfType : implIntfs)
+            {
+                InterfaceDeclaration intfDecl = intfType.getDeclaration();
+                if (intfDecl.getAnnotation(org.apache.beehive.controls.api.bean.ControlInterface.class) != null||
+                    intfDecl.getAnnotation(org.apache.beehive.controls.api.bean.ControlExtension.class) != null)
+                {
+                    controlIntf = intfDecl;
+                    break;
+                }
+            }
+
+            if (controlIntf == null)
+            {
+                _env.getMessager().printError(_controlDecl.getPosition(), 
+                                              "Unable to identify control type of field");
+                return null; 
+            }
+        }
+        else if (typeDecl instanceof InterfaceDeclaration)
+        {
+            controlIntf = (InterfaceDeclaration)typeDecl;
+        }
+        else
+        {
+            _env.getMessager().printError(_controlDecl.getPosition(),
+                                          "Control field is not a valid type");
+            return null;
+        }
+
+        return new AptControlInterface(controlIntf, _env);
+    }
+
+    //
+    // GenField implementations are delegated to the supporting FieldHelper instance.
+    //
+    public String getName() { return _helper.getName(); }
+    public String getType() { return _helper.getType(); }
+    public String getAccessModifier() { return _helper.getAccessModifier(); }
+
+    private FieldDeclaration _controlDecl;
+    private AnnotationProcessorEnvironment _env;
+    private AptFieldHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlImplementation.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlImplementation.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,276 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.declaration.InterfaceDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.type.InterfaceType;
+import com.sun.mirror.type.TypeMirror;
+
+import org.apache.beehive.controls.api.events.EventHandler;
+
+import org.apache.beehive.controls.runtime.generator.ClientField;
+import org.apache.beehive.controls.runtime.generator.CodeGenerationException;
+import org.apache.beehive.controls.runtime.generator.ContextField;
+import org.apache.beehive.controls.runtime.generator.ControlEvent;
+import org.apache.beehive.controls.runtime.generator.ControlEventSet;
+import org.apache.beehive.controls.runtime.generator.ControlField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+import org.apache.beehive.controls.runtime.generator.ControlInterface;
+import org.apache.beehive.controls.runtime.generator.EventAdaptor;
+import org.apache.beehive.controls.runtime.generator.EventField;
+
+public class AptControlImplementation extends ControlImpl
+{
+    /**
+     * Constructs a new ControlImpl instance where information is derived
+     * from APT metadata
+     * @param typeDecl the annotated declaration
+     */
+    public AptControlImplementation(Declaration decl, AnnotationProcessorEnvironment env)
+    {
+        super();
+        if (! (decl instanceof ClassDeclaration))
+        {
+            env.getMessager().printError(decl.getPosition(),
+              "The ControlImplementation annotation may only be used on a Java class");
+            return;
+        }
+
+        _implDecl = (ClassDeclaration)decl;
+        _env = env;
+
+        init();
+    }
+
+    /**
+     * Initializes the super interface that this ControlImpl extends (or null if a
+     * base class)
+     */
+    protected ControlImpl initSuperClass()
+    {
+        ClassDeclaration superDecl = _implDecl.getSuperclass().getDeclaration();
+        if (superDecl != null && 
+            superDecl.getAnnotation(org.apache.beehive.controls.api.bean.ControlImplementation.class) != null)
+        { 
+            return new AptControlImplementation(superDecl, _env);
+        }
+        
+        return null; 
+    }
+
+    /**
+     * Returns the ControlInterface implemented by this ControlImpl.
+     */
+    public ControlInterface getControlInterface()
+    {
+        Collection<InterfaceType> superInterfaces = _implDecl.getSuperinterfaces();
+        for (InterfaceType intfType : superInterfaces)
+        {
+            InterfaceDeclaration intfDecl = intfType.getDeclaration();
+            if (intfDecl != null &&
+                intfDecl.getAnnotation(org.apache.beehive.controls.api.bean.ControlInterface.class) != null)
+                return new AptControlInterface(intfDecl, _env);
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the fully qualified package name of the ControlImpl
+     */
+    public String getPackage()
+    {
+        return _implDecl.getPackage().getQualifiedName();
+    }
+
+    /**
+     * Returns the unqualified classname of this ControlImpl
+     */
+    public String getShortName()
+    {
+        return _implDecl.getSimpleName();
+    }
+
+    /**
+     * Returns the fully qualified classname of this ControlImpl
+     */
+    public String getClassName()
+    {
+        assert _implDecl.getQualifiedName().equals( getPackage() + "." + getShortName() );
+
+        return _implDecl.getQualifiedName();
+    }
+
+    /**
+     * Initializes the list of ControlFields declared directly by this ControlImpl
+     */
+    protected ArrayList<ControlField> initControls()
+    {
+        ArrayList<ControlField> controls = new ArrayList<ControlField>();
+        Collection<FieldDeclaration> declaredFields = _implDecl.getFields();
+        for (FieldDeclaration fieldDecl : declaredFields)
+        {
+            if (fieldDecl.getAnnotation(org.apache.beehive.controls.api.bean.Control.class) != null)
+                controls.add(new AptControlField(this, fieldDecl, _env));
+        }
+        return controls;
+    }
+
+    /**
+     * Initializes the list of ContextFields declared directly by this ControlImpl
+     */
+    protected ArrayList<ContextField> initContexts()
+    {
+        ArrayList<ContextField> contexts = new ArrayList<ContextField>();
+        Collection<FieldDeclaration> declaredFields = _implDecl.getFields();
+        for (FieldDeclaration fieldDecl : declaredFields)
+        {
+            if (fieldDecl.getAnnotation(org.apache.beehive.controls.api.context.Context.class) != null)
+                contexts.add(new AptContextField(this, fieldDecl, _env));
+        }
+        return contexts;
+    }
+
+    /**
+     * Initializes the list of ClientFields declared directly by this ControlImpl
+     */
+    protected ArrayList<ClientField> initClients()
+    {
+        ArrayList<ClientField> clients = new ArrayList<ClientField>();
+        Collection<FieldDeclaration> declaredFields = _implDecl.getFields();
+        for (FieldDeclaration fieldDecl : declaredFields)
+        {
+            if (fieldDecl.getAnnotation(org.apache.beehive.controls.api.events.Client.class) != null)
+                clients.add(new AptClientField(this, fieldDecl, _env));
+        }
+        return clients;
+    }
+
+    /**
+     * Initializes the list of EventAdaptors for this ControlImpl
+     */
+    protected void initEventAdaptors()
+    {
+        for (MethodDeclaration implMethod : _implDecl.getMethods())
+        {
+            //
+            // Do a quick check for the presence of the EventHandler annotation on methods
+            //
+            if (implMethod.getAnnotation(EventHandler.class) == null)
+                continue;
+
+            //
+            // If found, we must actually read the value using an AnnotationMirror, since it
+            // contains a Class element (eventSet) that cannot be loaded
+            //
+            AnnotationMirror handlerMirror = null;
+            for (AnnotationMirror annot : implMethod.getAnnotationMirrors())
+            {
+                if (annot.getAnnotationType().getDeclaration().getQualifiedName().equals(
+                        "org.apache.beehive.controls.api.events.EventHandler"))
+                {
+                    handlerMirror = annot;
+                    break;
+                }
+            }
+            if (handlerMirror == null)
+            {
+                throw new CodeGenerationException("Unable to find EventHandler annotation on " +
+                                                  implMethod);
+            }
+
+            AptAnnotationHelper handlerAnnot = new AptAnnotationHelper(handlerMirror);
+
+            //
+            // Locate the EventField based upon the field element value
+            //
+            String fieldName = (String)handlerAnnot.getObjectValue("field");
+            EventField eventField = (EventField)getField(fieldName);
+            if (eventField == null)
+            {
+                _env.getMessager().printError(implMethod.getPosition(),
+                    "Cannot find event source field: " + fieldName);
+                continue;
+            }
+
+            //
+            // Locate the EventSet based upon the eventSet element value
+            //
+            String setName = ((TypeMirror)handlerAnnot.getObjectValue("eventSet")).toString();
+            ControlInterface controlIntf = eventField.getControlInterface();
+            ControlEventSet eventSet = controlIntf.getEventSet(setName);
+            if (eventSet == null)
+            {
+                _env.getMessager().printError(implMethod.getPosition(),
+                    "Cannot find EventSet interface: " + setName);
+                continue;
+            }
+
+            //
+            // Register a new EventAdaptor for the EventSet, if none exists already
+            //
+            EventAdaptor adaptor = eventField.getEventAdaptor(eventSet);
+            if (adaptor == null)
+            {
+                adaptor = new EventAdaptor(eventField, eventSet);
+                eventField.addEventAdaptor(eventSet, adaptor);
+            }
+
+            //
+            // Locate the EventSet method based upon the eventName element value.  Once
+            // found, add a new AptEventHandler to the adaptor for this event.
+            //
+            boolean found = false;
+            String eventName = (String)handlerAnnot.getObjectValue("eventName");
+            AptMethodHelper handlerMethod = new AptMethodHelper(implMethod);
+            for (ControlEvent controlEvent : eventSet.getEvents())
+            {
+                if (!controlEvent.getName().equals(eventName))
+                    continue;
+
+                if (controlEvent.getArgTypes().equals(handlerMethod.getArgTypes()))
+                {
+                    adaptor.addHandler(controlEvent, 
+                                       new AptEventHandler(controlEvent, implMethod, _env));
+                    found = true;
+                    break;
+                }
+            }
+            if (!found)
+            {
+                _env.getMessager().printError(implMethod.getPosition(),
+                    "No event method with matching name and signature found on EventSet: " +
+                    setName);
+            }
+        } 
+    }
+
+    ClassDeclaration _implDecl;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlInterface.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptControlInterface.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,388 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+import java.util.Vector;
+import java.lang.reflect.Constructor;
+import java.util.*;
+import java.net.*;
+import java.io.File;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.EnumDeclaration;
+import com.sun.mirror.declaration.InterfaceDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.type.InterfaceType;
+import com.sun.mirror.type.TypeMirror;
+
+import org.apache.beehive.controls.api.bean.ControlChecker;
+import org.apache.beehive.controls.api.events.EventSet;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+import org.apache.beehive.controls.runtime.generator.ControlEventSet;
+import org.apache.beehive.controls.runtime.generator.ControlInterface;
+import org.apache.beehive.controls.runtime.generator.ControlOperation;
+import org.apache.beehive.controls.runtime.generator.ControlPropertySet;
+import org.apache.beehive.controls.runtime.generator.GenClass;
+
+/**
+ * REVIEW: does it make sense to define AptControlExtension and/or ControlExtension?
+ */
+
+public class AptControlInterface extends ControlInterface
+{
+    /**
+     * Constructs a new ControlInterface instance where interface information is derived
+     * from APT metadata
+     * @param decl the annotated Declaration
+     * @param env the APT environment
+     */
+    public AptControlInterface(Declaration decl, AnnotationProcessorEnvironment env)
+    {
+        super();
+
+        if (! (decl instanceof InterfaceDeclaration))
+        {
+            env.getMessager().printError(decl.getPosition(),
+              "The ControlInterface or ControlExtension annotation may only be used on a Java interface");
+            return;
+        }
+
+        
+        _intfDecl = (InterfaceDeclaration)decl;
+        _env = env;
+
+        init();
+    }
+
+    /**
+     * Initializes the super interface that this ControlInterface extends (or sets it to null
+     * if a base interface)
+     */
+    protected ControlInterface initSuperClass()
+    {
+        //
+        // Look for a super interface that is either a control interface or extension.
+        // If found, return it.
+        //
+        for (InterfaceType intfType : _intfDecl.getSuperinterfaces()) 
+        {
+            InterfaceDeclaration superDecl = intfType.getDeclaration();
+            if (superDecl.getAnnotation(org.apache.beehive.controls.api.bean.ControlExtension.class) != null ||
+                superDecl.getAnnotation(org.apache.beehive.controls.api.bean.ControlInterface.class) != null)
+            {
+                _superDecl = superDecl;
+                return new AptControlInterface(_superDecl, _env);
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Initializes the list of operations declared by this ControlInterface
+     */
+    protected ArrayList<ControlOperation> initOperations()
+    {
+        ArrayList<ControlOperation> operList = new ArrayList<ControlOperation>();
+
+        //
+        // Add the methods from the current interface and all super interfaces *other* 
+        // than the one from which control inheritance or extension is defined.  These
+        // exceptions are handled on the super ControlInterface (the return value
+        // of AptControlInterface.initSuperClass())
+        //
+        // Do this by:
+        //  - initially populate the check vector with the control interface
+        //  - iterate through the check vector, examining each interface to:
+        //      * ignore the super interface
+        //      * add all declared interface methods to the operations list
+        //      * add any super interfaces to the Vector (avoiding recursion)
+        //  - the iteration continues until all superinterfaces have been processed
+        //
+        Vector<InterfaceDeclaration> checkIntfs = new Vector<InterfaceDeclaration>();
+        checkIntfs.add(_intfDecl);
+
+        for (int i = 0; i < checkIntfs.size(); i++)
+        {
+            InterfaceDeclaration intfDecl = checkIntfs.elementAt(i);
+            if (intfDecl.equals(_superDecl))
+                continue;
+
+            for (MethodDeclaration methodDecl : intfDecl.getMethods())
+                operList.add(new AptOperation(this, methodDecl, _env));
+
+            for (InterfaceType superType : intfDecl.getSuperinterfaces())
+            {
+                InterfaceDeclaration superDecl = superType.getDeclaration();
+                if (!checkIntfs.contains(superDecl))
+                    checkIntfs.add(superDecl);
+            }
+        }
+
+        return operList;
+    }
+
+    /**
+     * Initializes the list of PropertySets declared by this ControlInterface
+     */
+    protected ArrayList<ControlPropertySet> initPropertySets()
+    {
+        ArrayList<ControlPropertySet> propSets = new ArrayList<ControlPropertySet>();
+
+        for (TypeDeclaration innerDecl : _intfDecl.getNestedTypes())
+        {
+            // HACKHACK: There appear to be mirror API bugs where calling getAnnotation()
+            // on certain entity types will result in an endless loop.  For now, work around
+            // this by a priori filtering... but this mechanism will drop errors that appear
+            // on an inapropriate type (see check below)
+            if (! (innerDecl instanceof AnnotationTypeDeclaration))
+                continue;
+
+            if (innerDecl.getAnnotation(PropertySet.class) != null)
+            {
+
+                if (! (innerDecl instanceof AnnotationTypeDeclaration))
+                {
+                    _env.getMessager().printError(innerDecl.getPosition(),
+                        "The PropertySet annotation must be on an Annotation type");
+                }
+                else
+                {
+                    propSets.add(
+                        new AptPropertySet(this, (AnnotationTypeDeclaration)innerDecl, _env));
+                }
+            }
+        }
+        return propSets;
+    }
+
+    /**
+     * Initializes the list of EventSets declared by this ControlInterface
+     */
+    protected ArrayList<ControlEventSet> initEventSets()
+    {
+        ArrayList<ControlEventSet> eventSets = new ArrayList<ControlEventSet>();
+
+        for (TypeDeclaration innerDecl : _intfDecl.getNestedTypes())
+        {
+            // HACKHACK: There appear to be mirror API bugs where calling getAnnotation()
+            // on certain entity types will result in an endless loop.  For now, work around
+            // this by a priori filtering... but this mechanism will drop errors that appear
+            // on an inapropriate type (see check below)
+            if (! (innerDecl instanceof InterfaceDeclaration))
+                continue;
+
+            if (innerDecl.getAnnotation(EventSet.class) != null)
+            {
+
+                if (! (innerDecl instanceof InterfaceDeclaration))
+                {
+                    _env.getMessager().printError(innerDecl.getPosition(),
+                        "The EventSet annotation must be on an interface declaration");
+                }
+                else
+                {
+                    eventSets.add(
+                        new AptEventSet(this, (InterfaceDeclaration)innerDecl, _env));
+                }
+            }
+        }
+        return eventSets;
+    }
+
+    /**
+     * Returns the fully qualified package name of this ControlImpl
+     */
+    public String getPackage()
+    {
+        return _intfDecl.getPackage().getQualifiedName();
+    }
+
+    /**
+     * Returns the unqualified classname of this ControlInterface
+     */
+    public String getShortName()
+    {
+        return _intfDecl.getSimpleName();
+    }
+
+    /**
+     * Returns the fully qualified classname of this ControlInterface
+     */
+    public String getClassName()
+    {
+        assert _intfDecl.getQualifiedName().equals( getPackage() + "." + getShortName() );
+
+        return _intfDecl.getQualifiedName();
+    }
+
+    /**
+     * Returns true if this interface is a ControlExtension (jcx) interface, false
+     * otherwise.
+     */
+    public boolean isExtension()
+    {
+        return _intfDecl.getAnnotation(org.apache.beehive.controls.api.bean.ControlExtension.class) != null;
+    }
+
+    /**
+     * Returns the most-derived interface in the inheritance chain that is annotated
+     * with @ControlInterface.  It represents the point in the inheritance chain where
+     * @ControlInterface becomes @ControlExtension (i.e., anything interface derived from
+     * the 'most-derived interface' is annotated with @ControlExtension).
+     */
+    public ControlInterface getMostDerivedInterface()
+    {
+        //
+        // Walk up ControlInterface chain looking for the 1st instance annotated
+        // w/ @ControlInterface (as opposed to @ControlExtension)
+        //
+        // REVIEW: TBD rules for inheritance of @ControlInterface will affect this.
+        // Probably need to keep walking and examine each @ControlInterface in the chain.
+        // Run all checkers in chain?  Make checkers responsible for invoking their base
+        // class-defined checkers?
+        //
+
+        ControlInterface ancestor = getSuperClass();
+        while (ancestor != null)
+        {
+            if (!ancestor.isExtension())
+                break;
+
+            ancestor = ancestor.getSuperClass();
+        }
+
+        assert ( ancestor != null ) : "@ControlExtension not rooted in @ControlInterface, should have been caught earlier";
+
+        return ancestor;
+    }
+
+    /**
+     * Returns a classloader that can be used to load external classes
+     */
+    public ClassLoader getExternalClassLoader()
+    {
+        Map<String,String> opts = _env.getOptions();
+        String classpath = opts.get("-classpath");
+
+        if ( classpath != null )
+        {
+            String [] cpEntries = classpath.split( File.pathSeparator );
+            ArrayList a = new ArrayList();
+            for ( String e : cpEntries )
+            {
+                try
+                {
+                    File f = (new File(e)).getCanonicalFile();
+                    URL u = f.toURL();
+                    a.add(u);
+                }
+                catch (Exception ex)
+                {
+                    ex.printStackTrace();
+                }
+            }
+            URL [] urls = new URL[a.size()];
+            urls = (URL[]) a.toArray(urls);
+
+            return new URLClassLoader( urls, ControlChecker.class.getClassLoader() );
+        }
+
+        return null; 
+    }
+
+    /**
+     * Runs control-specific checker class (if specified)
+     */
+    public void runChecker()
+    {
+        //
+        // Find the nearest @ControlInterface, which is where the relevant control checker
+        // annotation will be found.
+        //
+        //
+
+        AptControlInterface mostDerived = (AptControlInterface) getMostDerivedInterface();
+
+        InterfaceDeclaration intfDecl = mostDerived._intfDecl;
+
+        AnnotationMirror controlMirror = null;
+        for (AnnotationMirror annot : intfDecl.getAnnotationMirrors())
+        {
+            if (annot.getAnnotationType().getDeclaration().getQualifiedName().equals(
+                    "org.apache.beehive.controls.api.bean.ControlInterface"))
+            {
+                controlMirror = annot;
+                break;
+            }
+        }
+
+        assert ( controlMirror != null ) : "Found a control interface that isn't annotated properly: " + intfDecl;
+
+        AptAnnotationHelper controlAnnot = new AptAnnotationHelper(controlMirror);
+
+        //
+        // Read the name of the checker class from the @ControlInterface annotation,
+        // dynamically load and run it.
+        //
+        
+        TypeMirror checkerMirror = (TypeMirror)controlAnnot.getObjectValue("checkerClass");
+        if ( checkerMirror != null )
+        {
+            // TODO: optimize to not invoke default checker?
+            String checkerName = checkerMirror.toString();
+            System.err.println( "@ControlInterface " + intfDecl + " checker=" + checkerName );
+
+            try
+            {
+                ClassLoader loader = getExternalClassLoader();
+
+                Class checkerClass = loader.loadClass( checkerName );
+                if ( !ControlChecker.class.isAssignableFrom(checkerClass) )
+                {
+                    _env.getMessager().printError( intfDecl.getPosition(),
+                            "Control interface " + intfDecl + " specifies a checker class " +
+                            checkerName + " that doesn't implement ControlChecker." );
+                }
+                else
+                {
+
+                    Constructor ctor = checkerClass.getConstructor();
+
+                    ControlChecker checker = (ControlChecker) ctor.newInstance();
+                    checker.check( _intfDecl, _env );
+                }
+            }
+            catch ( Exception e )
+            {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    InterfaceDeclaration _intfDecl;
+    InterfaceDeclaration _superDecl;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEvent.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEvent.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,65 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.MethodDeclaration;
+
+import org.apache.beehive.controls.runtime.generator.ControlEvent;
+
+/**
+ * The AptEvent class represents a control Property where the event attributes
+ * are derived using APT metadata
+ */
+public class AptEvent extends ControlEvent
+{
+    /**
+     * Constructs a new AptEvent instance from APT metadata
+     * @param eventSet the declaring EventSet
+     * @param eventDecl the event annotation type element declaration
+     * @param env the annotation processing environment
+     */
+    public AptEvent(AptEventSet eventSet, MethodDeclaration eventDecl, 
+                    AnnotationProcessorEnvironment env)
+    {
+        super(eventSet);
+        _eventDecl = eventDecl;
+        _helper = new AptMethodHelper(_eventDecl);
+        _env = env;
+
+        init();
+    }
+
+    //
+    // All GenMethod calls can simply delegate to MethodHelper
+    //
+    public String getName() { return _helper.getName(); }
+    public String getArgDecl() { return _helper.getArgDecl(); }
+    public String getArgList() { return _helper.getArgList(); }
+    public String getArgTypes() { return _helper.getArgTypes(); }
+    public String getReturnType() { return _helper.getReturnType(); }
+    public String getThrowsClause() { return _helper.getThrowsClause(); }
+    public ArrayList getThrowsList() { return _helper.getThrowsList(); }
+
+    MethodDeclaration _eventDecl;
+    AptMethodHelper _helper;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEventHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEventHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+import java.util.Map;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.MethodDeclaration;
+
+import org.apache.beehive.controls.runtime.generator.ControlEvent;
+import org.apache.beehive.controls.runtime.generator.ControlEventHandler;
+
+/**
+ * The AptEventHandler class represents a control EventHandler where the event attributes
+ * are derived using APT metadata
+ */
+public class AptEventHandler extends ControlEventHandler
+{
+    /**
+     * Constructs a new AptEventHandler instance
+     * from APT metadata
+     * @param event the handled ControlEvent
+     * @param handlerDecl the handler method declaration
+     * @param env the annotation processing environment
+     */
+    public AptEventHandler(ControlEvent event, MethodDeclaration handlerDecl,
+                           AnnotationProcessorEnvironment env)
+    {
+        super(event);
+        _handlerDecl = handlerDecl;
+        _env = env;
+        _helper = new AptMethodHelper(_handlerDecl);
+    }
+
+    //
+    // All GenMethod calls can simply delegate to MethodHelper
+    //
+    public String getName() { return _helper.getName(); }
+    public String getArgDecl() { return _helper.getArgDecl(); }
+    public String getArgList() { return _helper.getArgList(); }
+    public String getArgTypes() { return _helper.getArgTypes(); }
+    public String getReturnType() { return _helper.getReturnType(); }
+    public String getThrowsClause() { return _helper.getThrowsClause(); }
+    public ArrayList getThrowsList() { return _helper.getThrowsList(); }
+
+    MethodDeclaration _handlerDecl;
+    AptMethodHelper _helper;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEventSet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptEventSet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,74 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.InterfaceDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+
+import org.apache.beehive.controls.runtime.generator.ControlEvent;
+import org.apache.beehive.controls.runtime.generator.ControlEventSet;
+
+/**
+ * The AptEventSet class represents a control EventSet where the events
+ * are derived using APT metadata.
+ */
+public class AptEventSet extends ControlEventSet
+{
+    /**
+     * Constructs a new AptEventSet instance from APT metadata
+     * @param controlIntf the declaring control interface
+     * @param eventSet the EventSet class
+     * @param env the associated AnnotationProcessorEnvironment
+     */
+    public AptEventSet(AptControlInterface controlIntf, InterfaceDeclaration eventSet,
+                       AnnotationProcessorEnvironment env)
+    {
+        super(controlIntf);
+        _eventSet = eventSet;
+        _env = env;
+
+        init();
+    }
+
+    /**
+     * Initializes the list of ControlEvents associated with this ControlEventSet
+     */
+    protected ArrayList<ControlEvent> initEvents()
+    {
+        ArrayList<ControlEvent> events = new ArrayList<ControlEvent>();
+        for (MethodDeclaration methodDecl : _eventSet.getMethods())
+            events.add(new AptEvent(this, methodDecl, _env));
+
+        return events;
+    }
+
+    /**
+     * Returns the fully qualified EventSet name
+     */
+    public String getName()
+    {
+        return _eventSet.getQualifiedName();
+    }
+
+    InterfaceDeclaration _eventSet;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptFieldHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptFieldHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+import java.util.Collection;
+
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.declaration.Modifier;
+
+import org.apache.beehive.controls.runtime.generator.GenField;
+
+/**
+ * The AptFieldHelper class is a helper class that knows how to generate useful information
+ * about a Field using APT metadata
+ */
+public class AptFieldHelper extends GenField
+{
+    AptFieldHelper(FieldDeclaration fieldDecl)
+    {
+        _fieldDecl = fieldDecl;
+    }
+
+    /**
+     * Returns the name of the method
+     */
+    public String getName()
+    {
+        return _fieldDecl.getSimpleName();
+    }
+
+    /**
+     * Returns the type of the field
+     */
+    public String getType()
+    {
+        return _fieldDecl.getType().toString();
+    }
+
+    /**
+     * Returns the access modifier associated with the field
+     */
+    public String getAccessModifier()
+    {
+        Collection<Modifier> modifiers = _fieldDecl.getModifiers();
+        if (modifiers.contains(Modifier.PRIVATE))
+            return "private";
+        if (modifiers.contains(Modifier.PROTECTED))
+            return "protected";
+        if (modifiers.contains(Modifier.PUBLIC))
+            return "public";
+
+        return "";
+    }
+
+    FieldDeclaration _fieldDecl;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptMethodHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptMethodHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,208 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.ParameterDeclaration;
+import com.sun.mirror.type.ClassType;
+import com.sun.mirror.type.PrimitiveType;
+import com.sun.mirror.type.ReferenceType;
+import com.sun.mirror.type.TypeMirror;
+
+import org.apache.beehive.controls.runtime.generator.GenMethod;
+
+/**
+ * The AptMethodHelper class is a helper class that knows how to generate useful information
+ * such as argument declarations, argument lists, return type info, etc from a MethodDeclaration
+ */
+public class AptMethodHelper extends GenMethod
+{
+    static final HashMap<PrimitiveType.Kind,String> _primToObject = 
+                        new HashMap<PrimitiveType.Kind,String>();
+
+    static
+    {
+        _primToObject.put(PrimitiveType.Kind.BOOLEAN, "Boolean");
+        _primToObject.put(PrimitiveType.Kind.BYTE, "Byte");
+        _primToObject.put(PrimitiveType.Kind.CHAR, "Character");
+        _primToObject.put(PrimitiveType.Kind.DOUBLE, "Double");
+        _primToObject.put(PrimitiveType.Kind.FLOAT, "Float");
+        _primToObject.put(PrimitiveType.Kind.INT, "Integer");
+        _primToObject.put(PrimitiveType.Kind.LONG, "Long");
+        _primToObject.put(PrimitiveType.Kind.SHORT, "Short");
+    }
+
+    AptMethodHelper(MethodDeclaration methodDecl)
+    {
+        _methodDecl = methodDecl;
+    }
+
+    /**
+     * Returns the name of the method
+     */
+    public String getName()
+    {
+        return _methodDecl.getSimpleName();
+    }
+
+    /**
+     * Returns the argument declaration of the operation
+     */
+    public String getArgDecl()
+    {
+        StringBuffer sb = new StringBuffer();
+        int i = 0;
+        for (ParameterDeclaration paramDecl : _methodDecl.getParameters())
+        {
+            if (i++ != 0)
+                sb.append(", ");
+            sb.append(paramDecl.getType().toString());
+            sb.append(' ');
+
+            // BUGBUG: when the MethodDeclaration is derived from Reflection, this seems
+            // to return 'arg0' for all arguments!
+            String argName = paramDecl.getSimpleName();
+            if (argName.equals("arg0"))
+                sb.append("arg" + i);
+            else
+                sb.append(argName);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Returns the the method argument names, in a comma separated list
+     */
+    public String getArgList()
+    {
+        StringBuffer sb = new StringBuffer();
+        int i = 0;
+        for (ParameterDeclaration paramDecl : _methodDecl.getParameters())
+        {
+            if (i++ != 0)
+                sb.append(", ");
+
+            // BUGBUG: when the MethodDeclaration is derived from Reflection, this seems
+            // to return 'arg0' for all arguments!
+            String argName = paramDecl.getSimpleName();
+            if (argName.equals("arg0"))
+                sb.append("arg" + i);
+            else
+                sb.append(argName);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Returns the body of an Object array initializer based upon method arguments.  All
+     * primitive arguments are converted to the equivalent Object type.
+     */
+    public String getArgObjectArray()
+    {
+        StringBuffer sb = new StringBuffer();
+        int i = 0;
+        for (ParameterDeclaration paramDecl : _methodDecl.getParameters())
+        {
+            if (i++ != 0)
+                sb.append(",");
+
+            // BUGBUG: when the MethodDeclaration is derived from Reflection, this seems
+            // to return 'arg0' for all arguments!
+            String argName = paramDecl.getSimpleName();
+            if (argName.equals("arg0"))
+                argName = "arg" + i;
+
+            TypeMirror paramType = paramDecl.getType();
+            if (paramType instanceof PrimitiveType)
+            {
+                sb.append(" new ");
+                sb.append(_primToObject.get(((PrimitiveType)paramType).getKind()));
+                sb.append("(");
+                sb.append(argName);
+                sb.append(")");
+            }
+            else
+                sb.append(argName);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Returns the the method argument classes, in a comma separated list
+     */
+    public String getArgTypes()
+    {
+        StringBuffer sb = new StringBuffer();
+        int i = 0;
+        for (ParameterDeclaration paramDecl : _methodDecl.getParameters())
+        {
+            if (i++ != 0)
+                sb.append(", ");
+            sb.append(paramDecl.getType().toString());
+            sb.append(".class");
+        }
+        return sb.toString();
+    }
+
+    public String getReturnType()
+    {
+        return _methodDecl.getReturnType().toString();
+    }
+
+    /**
+     * Returns the throws clause of the operation
+     */
+    public String getThrowsClause()
+    {
+        Collection<ReferenceType> thrownTypes = _methodDecl.getThrownTypes();
+        if (thrownTypes.size() == 0)
+            return "";
+
+        StringBuffer sb = new StringBuffer("throws ");
+        int i = 0;
+        for (ReferenceType exceptType : thrownTypes)
+        {
+            if (i++ != 0)
+                sb.append(", ");
+            sb.append(exceptType.toString());
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Returns an ArrayList of thrown exceptions
+     */
+    public ArrayList getThrowsList()
+    {
+        Collection<ReferenceType> thrownTypes = _methodDecl.getThrownTypes();
+        ArrayList throwsList = new ArrayList();
+        for (ReferenceType exceptType : thrownTypes)
+            throwsList.add(exceptType.toString());
+
+        return throwsList;
+    }
+
+    MethodDeclaration _methodDecl;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptOperation.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptOperation.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.MethodDeclaration;
+
+import org.apache.beehive.controls.runtime.generator.ControlOperation;
+
+/**
+ * The AptOperation class represents a control operation where the operation attributes
+ * are derived using APT metadata.
+ */
+public class AptOperation extends ControlOperation
+{
+
+    /**
+     * Constructs a new ControlOperation instance where interface information is derived
+     * from APT metadata
+     * @param controlIntf the declaring ControlInterface
+     * @param operMethod the Method associated with the operation
+     */
+    public AptOperation(AptControlInterface controlIntf, MethodDeclaration methodDecl,
+                        AnnotationProcessorEnvironment env)
+    {
+        super(controlIntf);
+        _operDecl = methodDecl;
+        _env = env;
+        _helper = new AptMethodHelper(_operDecl);
+
+        init();
+    }
+
+    //
+    // All GenMethod calls can simply delegate to MethodHelper
+    //
+    public String getName() { return _helper.getName(); }
+    public String getArgDecl() { return _helper.getArgDecl(); }
+    public String getArgList() { return _helper.getArgList(); }
+    public String getArgTypes() { return _helper.getArgTypes(); }
+    public String getReturnType() { return _helper.getReturnType(); }
+    public String getThrowsClause() { return _helper.getThrowsClause(); }
+    public ArrayList getThrowsList() { return _helper.getThrowsList(); }
+    public String getArgObjectArray() { return _helper.getArgObjectArray(); }
+
+    MethodDeclaration _operDecl;
+    AptMethodHelper _helper;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptProperty.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptProperty.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.type.AnnotationType;
+
+import org.apache.beehive.controls.runtime.generator.ControlProperty;
+
+/**
+ * The AptProperty class represents a control Property where the property attributes
+ * are derived using APT metadata
+ */
+public class AptProperty extends ControlProperty
+{
+    /**
+     * Constructs a new AptProperty instance
+     * from APT metadata
+     * @param propertySet the declaring PropertySet
+     * @param propDecl the declration of the property annotation type element
+     */
+    public AptProperty(AptPropertySet propertySet, AnnotationTypeElementDeclaration propDecl,
+                       AnnotationProcessorEnvironment env)
+    {
+        super(propertySet);
+        _propDecl = propDecl;
+        _env = env;
+
+        init();
+    }
+
+    /**
+     * Returns the member name associated with this Property in the PropertySet
+     */
+    public String getMemberName()
+    {
+        return _propDecl.getSimpleName();
+    }
+
+    /**
+     * Returns the type of the Property
+     */
+    public String getType()
+    {
+        return _propDecl.getReturnType().toString();
+    }
+
+    /**
+     * Returns true if the property is an annotation type, false otherwise
+     */
+    public boolean isAnnotation()
+    {
+        return _propDecl.getReturnType() instanceof AnnotationType;
+    }
+
+    AnnotationTypeElementDeclaration _propDecl;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptPropertySet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/AptPropertySet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,104 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+import org.apache.beehive.controls.runtime.generator.ControlProperty;
+import org.apache.beehive.controls.runtime.generator.ControlPropertySet;
+
+/**
+ * The AptPropertySet class represents a control PropertySet where the property list
+ * is derived using APT metadata
+ */
+public class AptPropertySet extends ControlPropertySet
+{
+    /**
+     * Constructs a new AptPropertySet instance from APT metadata
+     * @param controlIntf the declaring bean interface
+     * @param propertySet the PropertySet declaration
+     * @param env the AnnotationProcessorEnvironment
+     */
+    public AptPropertySet(AptControlInterface controlIntf, AnnotationTypeDeclaration propertySet,
+                          AnnotationProcessorEnvironment env)
+    {
+        super(controlIntf);
+        _propertySet = propertySet;
+        _env = env;
+
+        init();
+    }
+
+    /**
+     * Initializes the list of ControlProperties associated with this ControlPropertySet
+     */
+    protected ArrayList<ControlProperty> initProperties()
+    {
+        ArrayList<ControlProperty> properties = new ArrayList<ControlProperty>();
+
+        for (MethodDeclaration methodDecl : _propertySet.getMethods())
+            properties.add(new AptProperty(this,(AnnotationTypeElementDeclaration)methodDecl,_env));
+
+        return properties;
+    }
+
+    /**
+     * Returns the fully qualified package name of this property set
+     */
+    public String getPackage()
+    {
+        return _propertySet.getPackage().getQualifiedName();
+    }
+
+    /**
+     * Returns the unqualified classname of this property set
+     */
+    public String getShortName()
+    {
+        return _propertySet.getSimpleName();
+    }
+
+    /**
+     * Returns the fully qualified class name of the property set
+     */
+    public String getClassName()
+    {
+        return _propertySet.getQualifiedName();
+    }
+
+    /**
+     * Returns the property name prefix for properties in this PropertySet
+     */
+    public String getPrefix()
+    {
+        return _propertySet.getAnnotation(PropertySet.class).prefix();
+    }
+
+    AnnotationTypeDeclaration _propertySet;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlAnnotationProcessor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlAnnotationProcessor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorFactory;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+import com.sun.mirror.declaration.Declaration;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+import org.apache.beehive.controls.runtime.generator.CodeGenerationException;
+import org.apache.beehive.controls.runtime.generator.CodeGenerator;
+import org.apache.beehive.controls.runtime.generator.GenClass;
+import org.apache.beehive.controls.runtime.generator.GeneratorOutput;
+
+public class ControlAnnotationProcessor extends TwoPhaseAnnotationProcessor
+{
+    public ControlAnnotationProcessor(Set<AnnotationTypeDeclaration> atds,
+                                      AnnotationProcessorEnvironment env)
+    {
+        super(atds, env);
+    }
+
+    /**
+     * Returns the CodeGenerator instance supporting this processor, instantiaiting a new
+     * generator instance if necessary.
+     */
+    public CodeGenerator getGenerator()
+    {
+        if (_generator == null)
+        {
+            //
+            // Locate the class that wraps the Velocity code generation process
+            //
+            AnnotationProcessorEnvironment env = getAnnotationProcessorEnvironment();
+            String generatorName = null;
+
+            // BUGBUG: getting the name should be as easy as the code below... but for some
+            // reason the APT option processing is busted, and doesn't parse -A keys correctly.
+            // The entire value of the -Aoption will be the key, and the value will be 'null'
+            // generatorName = env.getOptions().get("-AcontrolGenerator");
+            for (String keyName : env.getOptions().keySet())
+            {
+                if (keyName.startsWith("-AcontrolGenerator="))
+                {
+                    generatorName = keyName.substring(19);
+                    break;
+                }
+            }
+
+            if (generatorName == null)
+                generatorName  = "org.apache.beehive.controls.runtime.generator.VelocityGenerator";
+            try 
+            {
+                Class generatorClass = Class.forName(generatorName);
+                _generator = (CodeGenerator)generatorClass.newInstance();
+            }
+            catch (Exception e)
+            {
+                throw new CodeGenerationException("Unable to create code generator", e); 
+            }
+        }
+        return _generator;
+    }
+
+    public String [] check(Declaration decl)
+    {
+        AnnotationProcessorEnvironment env = getAnnotationProcessorEnvironment();
+        GenClass genClass = null;
+        if (decl.getAnnotation(ControlInterface.class) != null)
+        {
+            genClass = new AptControlInterface(decl, env);
+        }
+        if (decl.getAnnotation(ControlExtension.class) != null)
+        {
+            genClass = new AptControlInterface(decl, env);
+        }
+        else if (decl.getAnnotation(ControlImplementation.class) != null)
+        {
+            genClass = new AptControlImplementation(decl, env);
+        }
+        if (genClass != null)
+        {
+            _typeMap.put(decl, genClass);
+            return genClass.getGeneratedTypes();
+        }
+        return null;
+    }
+
+    public void generate(Declaration decl) throws CodeGenerationException
+    {
+        GenClass genClass = _typeMap.get(decl);
+        if (genClass == null)
+            return;
+
+        AnnotationProcessorEnvironment env = getAnnotationProcessorEnvironment();
+        try
+        {
+            List<GeneratorOutput> genList = genClass.getGeneratorOutput(env.getFiler());
+            if (genList == null || genList.size() == 0)
+                return;
+
+            for (GeneratorOutput genOut : genList)
+            {
+                getGenerator().generate(genOut);
+            }
+        }
+        catch (IOException ioe)
+        {
+            throw new CodeGenerationException("Code generation failure: ", ioe);
+        }
+    }
+
+    HashMap<Declaration, GenClass> _typeMap = new HashMap<Declaration,GenClass>();
+    CodeGenerator _generator;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlAnnotationProcessorFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlAnnotationProcessorFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorFactory;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+
+public class ControlAnnotationProcessorFactory implements AnnotationProcessorFactory
+{
+    private static final Collection<String> _supportedAnnotations =
+            Collections.unmodifiableCollection(
+                Arrays.asList(new String[] {
+                    "org.apache.beehive.controls.api.bean.ControlInterface",
+                    "org.apache.beehive.controls.api.bean.ControlExtension",
+                    "org.apache.beehive.controls.api.bean.ControlImplementation"
+                    }));
+
+    private static final Collection<String> _supportedOptions =
+            Collections.unmodifiableCollection(
+                Arrays.asList(new String[] {
+                    "-AcontrolGenerator",   // sets CodeGenerator class
+                    }));
+
+    public Collection<String> supportedOptions()
+    {
+        return _supportedOptions;
+    }
+
+    public Collection<String> supportedAnnotationTypes()
+    {
+        return _supportedAnnotations;
+    }
+
+    public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> atds,
+                                               AnnotationProcessorEnvironment env)
+    {
+        return new ControlAnnotationProcessor(atds, env);   
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlClientAnnotationProcessor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlClientAnnotationProcessor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,135 @@
+
+package org.apache.beehive.controls.runtime.generator.apt;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.*;
+import com.sun.mirror.apt.*;
+import com.sun.mirror.type.*;
+import com.sun.mirror.util.*;
+import java.util.*;
+
+import org.apache.beehive.controls.runtime.generator.CodeGenerationException;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import java.util.Iterator;
+import java.util.Set;
+
+public class ControlClientAnnotationProcessor extends TwoPhaseAnnotationProcessor
+{
+
+    public ControlClientAnnotationProcessor(
+        Set<AnnotationTypeDeclaration> atds, AnnotationProcessorEnvironment env )
+    {
+        super( atds,env );
+    }
+
+    public void generate(Declaration decl) throws CodeGenerationException
+    {
+    }
+
+
+    public String[] check( Declaration d )
+    {        
+        if ( d instanceof FieldDeclaration )
+            checkControlField( (FieldDeclaration)d );
+
+        // if @Control is used on something other than a field, the Java lang
+        // checker should produce an error due to the @Target violation.
+
+        return null;
+    }
+
+    private void checkControlField( FieldDeclaration f )
+    {
+         Types typeUtils = getAnnotationProcessorEnvironment().getTypeUtils();
+         TypeMirror fieldType = f.getType();
+
+         // Valid control field instances can be of an interface type
+         // or a class type.
+         if ( fieldType instanceof InterfaceType )
+         {
+             // Valid interface type decls must be annotated w/ @ControlInterface
+             // or @ControlExtension.
+             Declaration fieldTypeDecl = ((InterfaceType)fieldType).getDeclaration();
+             if ( fieldTypeDecl.getAnnotation(ControlInterface.class) == null &&
+                  fieldTypeDecl.getAnnotation(ControlExtension.class) == null )
+                 printError( f, "control.field.bad.interfacetype" );
+         }
+         else if ( fieldType instanceof ClassType )
+         {
+             // Valid class type decls must implements the ControlBean API.
+             
+             // Walk the implementation inheritance hierarchy, seeing if one of the
+             // classes implements ControlBean.
+             //
+             // REVIEW: Does NOT check if the interfaces might implement ControlBean!
+             // This is unnecessary for our impl, since our generated bean class directly
+             // implements ControlBean, but other impls may choose to do otherwise.
+             boolean foundControlBean = false;
+             ClassType classType = (ClassType)fieldType;
+
+             outer: while ( classType != null )
+             {
+                 Collection<InterfaceType> intfs = classType.getSuperinterfaces();
+                 for ( InterfaceType intfType : intfs )
+                 {
+                     if ( intfType.getDeclaration().getQualifiedName().equals( "org.apache.beehive.controls.api.bean.ControlBean" ) )
+                     {
+                         foundControlBean = true;
+                         break outer;
+                     }
+                 }
+                 classType = classType.getSuperclass();
+             }
+             if ( !foundControlBean )
+                 printError( f, "control.field.bad.classtype" );
+         }
+         else
+         {
+             printError( f, "control.field.bad.type" );
+         }
+
+         TypeDeclaration declaringType = f.getDeclaringType();
+         assert declaringType != null : "Field " + f + " has no declaring type!";
+        
+         if ( declaringType.getDeclaringType() != null )
+             printError( f, "control.field.in.inner.class" );
+               
+         if ( f.getModifiers().contains( Modifier.TRANSIENT ))
+             printError( f, "transient.control.field" );
+
+         if ( f.getModifiers().contains( Modifier.STATIC ))
+             printError( f, "static.control.field" );
+    }
+    
+        
+    private final void printError( Declaration d, String id )
+    {
+        getAnnotationProcessorEnvironment().getMessager().printError(
+            d.getPosition(), getResourceString( id ) );
+    }
+
+    private final void printWarning( Declaration d, String id )
+    {
+        getAnnotationProcessorEnvironment().getMessager().printWarning(
+            d.getPosition(), getResourceString( id ) );
+    }
+
+    private final void printNotice( Declaration d, String id )
+    {
+        getAnnotationProcessorEnvironment().getMessager().printNotice(
+            d.getPosition(), getResourceString( id ) );
+    }
+
+    private final String getResourceString( String id )
+    {
+        ResourceBundle rb = ResourceBundle.getBundle(
+            ControlClientAnnotationProcessor.class.getPackage().getName() + ".strings" );
+        return rb.getString( id );
+    }        
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlClientAnnotationProcessorFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlClientAnnotationProcessorFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorFactory;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+
+public class ControlClientAnnotationProcessorFactory implements AnnotationProcessorFactory
+{
+    private static final Collection<String> _supportedAnnotations =
+            Collections.unmodifiableCollection(
+                Arrays.asList(new String[] {
+                        org.apache.beehive.controls.api.bean.Control.class.getName(),
+                    }));
+
+    private static final Collection<String> _supportedOptions =
+            Collections.unmodifiableCollection(
+                Arrays.asList( new String[0] ) );
+
+    public Collection<String> supportedOptions()
+    {
+        return _supportedOptions;
+    }
+
+    public Collection<String> supportedAnnotationTypes()
+    {
+        return _supportedAnnotations;
+    }
+
+    public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> atds,
+                                               AnnotationProcessorEnvironment env)
+    {
+        return new ControlClientAnnotationProcessor(atds, env);   
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/TwoPhaseAnnotationProcessor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/TwoPhaseAnnotationProcessor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+import com.sun.mirror.declaration.Declaration;
+
+import org.apache.beehive.controls.runtime.generator.CodeGenerationException;
+
+/**
+ * The TwoPhaseAnnotationProcessor class is an abstract class that implements the APT
+ * AnnotationProcessor interface.   It breaks the work of the process() method of the
+ * AnnotationProcessor down into two distinct phases, represented as abstract method
+ * of TwoPhaseAnnotationProcessor that are to be implemented by concrete subclasses.
+ * <p>
+ * The two phases of processing are:
+ * <ul>
+ * <li>The <b>check</b> phase is used to validate an input Declaration that has been
+ * annotated with annotation claimed by the processor to ensure that it 
+ * is semantically valid.
+ * <li>The <b>generate</b> phase will actually generate any source, binary, or class files
+ * that are derived from the input Declaration.
+ * </ul>
+ * The benefits of breaking process() down into check() and generate() phases are:
+ * <ol>
+ * <li>Makes it possible to perform the semantic validation of Declarations without
+ * necessary resulting in code generation.
+ * <li>Provides a clearer association between input Declarations and generator output,
+ * because the check() phase will return the list of new canonical types that will be
+ * produced by calling generate().
+ * </ol>
+ */
+abstract public class TwoPhaseAnnotationProcessor implements AnnotationProcessor
+{
+    public TwoPhaseAnnotationProcessor(Set<AnnotationTypeDeclaration> atds,
+                                       AnnotationProcessorEnvironment env)
+    {
+        _atds = atds;
+        _env = env;
+    }
+
+    /**
+     * Implements the AnnotationProcessor.process interface.  This is done by interating
+     * over the lilst of AnnotationTypeDeclarations for the processor, and calling the
+     * check() and generate() methods on them.
+     */
+    public void process() 
+    { 
+        for (AnnotationTypeDeclaration atd : _atds)
+        {
+            Collection<Declaration> decls = _env.getDeclarationsAnnotatedWith(atd);
+            for (Declaration decl : decls)
+            {
+                check(decl);
+                generate(decl);
+            }
+        }
+    }
+
+    /**
+     * The check method is responsible for all semantic validation of the input Declaration.
+     * The return value of the check method is a String array containing the canonical (fully
+     * qualified) names of new types that will be result from calling the generate method), or
+     * null if processing does not result in the generation of new types.  This (a null return
+     * value) should not be used as an indicator of whether it is necessary to call generate;
+     * it is still possible that other non-type artifacts (text or binary files) may result
+     * from generation.
+     * <p>
+     * <b>All semantic warnings/errors associated with the input Declaration
+     * AnnotationProcessEnvironment during the check phase.</b>
+     */
+    abstract public String [] check(Declaration decl);
+
+    /**
+     * The generate method is responsible for the generation of any additional artifacts
+     * (source, class, or binary) that are derived from the input Declaration.
+     * <p>
+     * <b>The generate method must use the return value of 
+     */
+    abstract public void generate(Declaration decl) throws CodeGenerationException;
+
+    protected AnnotationProcessorEnvironment getAnnotationProcessorEnvironment()
+    {
+        return _env;
+    }
+
+    Set<AnnotationTypeDeclaration> _atds;
+    AnnotationProcessorEnvironment _env;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/strings.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/strings.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+control.field.bad.interfacetype=\
+A control field's type must be annotated with @ControlInterface or @ControlExtension if it's an interface. \
+Verify the type of the control field declaration is annotated correctly. 
+
+control.field.bad.classtype=\
+A control field's type must implement org.apache.beehive.controls.api.bean.ControlBean if it's a class. \
+Verify the type of the control field declaration implements ControlBean.
+
+control.field.bad.type=\
+A control field must be of a class or interface type. \
+Verify the type of the control field declaration is a class or interface.
+
+control.field.in.inner.class=\
+A control field can exist only within the top-level class. \
+Move fields marked with the Control annotation to just inside the top-level class.
+
+control.public.interface.not.found = \
+Cannot find the public interface for this control. \
+Verify that the public interface for this control is available in this project.
+
+transient.control.field =\
+A control can not be declared as transient. \
+Remove the transient modifier from the control declaration.
+
+static.control.field =\
+A control can not be declared as static. \
+Remove the static modifier from the control declaration.
+

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ClassUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ClassUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/**
+ * Various utility methods for extracting information from a class
+ */
+public class ClassUtils
+{
+    /**
+     * Returns the class as it would be used in a declaration of an instance of the class
+     */
+    static public String getDecl(Class clazz)
+    {
+        int dims = 0;
+        while (clazz.isArray()) 
+        {
+            dims++;
+            clazz = clazz.getComponentType();
+        }
+
+        StringBuffer sb = new StringBuffer();
+        sb.append(clazz.getName().replace('$','.'));
+        while (dims-- > 0)
+            sb.append("[]");
+        return sb.toString(); 
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/FieldHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/FieldHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,70 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+
+import org.apache.beehive.controls.runtime.generator.GenField;
+
+/**
+ * The FieldHelper class is a helper class that knows how to generate useful information
+ * about a Field using reflection
+ */
+public class FieldHelper extends GenField
+{
+    FieldHelper(Field field)
+    {
+        _field = field;
+    }
+
+    /**
+     * Returns the name of the method
+     */
+    public String getName()
+    {
+        return _field.getName();
+    }
+
+    /**
+     * Returns the type of the field
+     */
+    public String getType()
+    {
+        return _field.getType().getName().replace('$','.');
+    }
+
+    /**
+     * Returns the access modifier associated with the field
+     */
+    public String getAccessModifier()
+    {
+        int mods = _field.getModifiers();
+        if (Modifier.isPrivate(mods))
+            return "private";
+        if (Modifier.isProtected(mods))
+            return "protected";
+        if (Modifier.isPublic(mods))
+            return "public";
+
+        return "";
+    }
+
+    Field _field;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/MethodHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/MethodHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,174 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.apache.beehive.controls.runtime.generator.GenMethod;
+
+/**
+ * The MethodHelper class is a helper class that knows how to generate useful information
+ * such as argument declarations, argument lists, return type info, etc from a Method
+ */
+public class MethodHelper extends GenMethod
+{
+    static final HashMap<Class,String> _primToObject = new HashMap<Class,String>();
+
+    static
+    {
+        _primToObject.put(Boolean.TYPE, "Boolean");
+        _primToObject.put(Byte.TYPE, "Byte");
+        _primToObject.put(Character.TYPE, "Character");
+        _primToObject.put(Double.TYPE, "Double");
+        _primToObject.put(Float.TYPE, "Float");
+        _primToObject.put(Integer.TYPE, "Integer");
+        _primToObject.put(Long.TYPE, "Long");
+        _primToObject.put(Short.TYPE, "Short");
+    }
+    MethodHelper(Method method)
+    {
+        _method = method;
+    }
+
+    /**
+     * Returns the name of the method
+     */
+    public String getName()
+    {
+        return _method.getName();
+    }
+
+    /**
+     * Returns the argument declaration of the operation
+     */
+    public String getArgDecl()
+    {
+        StringBuffer sb = new StringBuffer();
+        Class [] argTypes = _method.getParameterTypes();
+        for (int i = 0; i < argTypes.length; i++)
+        {
+            if (i != 0)
+                sb.append(", ");
+            sb.append(ClassUtils.getDecl(argTypes[i]));
+            sb.append(" arg" + i);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Returns the the method argument names, in a comma separated list
+     */
+    public String getArgList()
+    {
+        StringBuffer sb = new StringBuffer();
+        int argCount = _method.getParameterTypes().length;
+        for (int i = 0; i < argCount; i++)
+        {
+            if (i != 0)
+                sb.append(", ");
+            sb.append("arg" + i);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Returns the body of an Object array initializer based upon method arguments.  All
+     * primitive arguments are converted to the equivalent Object type.
+     */
+    public String getArgObjectArray()
+    {
+        StringBuffer sb = new StringBuffer();
+        Class [] argTypes = _method.getParameterTypes();
+        int argCount = argTypes.length;
+        for (int i = 0; i < argCount; i++)
+        {
+            if (i != 0)
+                sb.append(",");
+            if (argTypes[i].isPrimitive())
+            {
+                sb.append(" new ");
+                sb.append(_primToObject.get(argTypes[i]));
+                sb.append("(");
+                sb.append("arg" + i);
+                sb.append(")");
+            }
+            else
+                sb.append("arg" + i);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Returns the the method argument classes, in a comma separated list
+     */
+    public String getArgTypes()
+    {
+        StringBuffer sb = new StringBuffer();
+        Class [] argTypes = _method.getParameterTypes();
+        for (int i = 0; i < argTypes.length; i++)
+        {
+            if (i != 0)
+                sb.append(", ");
+            sb.append(ClassUtils.getDecl(argTypes[i]));
+            sb.append(".class");
+        }
+        return sb.toString();
+    }
+
+    public String getReturnType()
+    {
+        return ClassUtils.getDecl(_method.getReturnType());
+    }
+
+    /**
+     * Returns the throws clause of the operation
+     */
+    public String getThrowsClause()
+    {
+        Class [] exceptTypes = _method.getExceptionTypes();
+        if (exceptTypes.length == 0)
+            return "";
+
+        StringBuffer sb = new StringBuffer("throws ");
+        for (int i = 0; i < exceptTypes.length; i++)
+        {
+            if (i != 0)
+                sb.append(", ");
+            sb.append(ClassUtils.getDecl(exceptTypes[i]));
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Returns an ArrayList of thrown exceptions
+     */
+    public ArrayList getThrowsList()
+    {
+        Class [] exceptTypes = _method.getExceptionTypes();
+        ArrayList throwsList = new ArrayList();
+        for (int i = 0; i < exceptTypes.length; i++)
+            throwsList.add(ClassUtils.getDecl(exceptTypes[i]));
+
+        return throwsList;
+    }
+
+    Method _method;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectClientField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectClientField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+
+import org.apache.beehive.controls.runtime.generator.ClientField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+
+/**
+ * The ReflectClientField class is an implementation of ClientField where values are derived
+ * using Java Reflection.
+ */
+public class ReflectClientField extends ClientField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlIntf the declaring ControlInterface
+     */
+    protected ReflectClientField(ControlImpl controlImpl, Field field) 
+    {
+        super(controlImpl);
+        _field = field;
+        _helper = new FieldHelper(field);
+    };
+
+    //
+    // GenField implementations are delegated to the supporting FieldHelper instance.
+    //
+    public String getName() { return _helper.getName(); }
+    public String getType() { return _helper.getType(); }
+    public String getAccessModifier() { return _helper.getAccessModifier(); }
+
+    private Field _field;
+    private FieldHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectContextField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectContextField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+
+import org.apache.beehive.controls.runtime.generator.ContextField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+import org.apache.beehive.controls.runtime.generator.ControlInterface;
+
+/**
+ * The ReflectContextField class is an implementation of ContextField where values are derived
+ * using Java Reflection.
+ */
+public class ReflectContextField extends ContextField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlIntf the declaring ControlInterface
+     */
+    protected ReflectContextField(ControlImpl controlImpl, Field field) 
+    {
+        super(controlImpl);
+        _field = field;
+        _helper = new FieldHelper(field);
+
+        init();
+    };
+
+    /**
+     * Initializes the ControlInterface associated with this ControlField
+     */
+    protected ControlInterface initControlInterface()
+    {
+        //
+        // For contextual services, the declared type of the field is always the public
+        // interface for the contextual service.
+        //
+        return new ReflectControlInterface(_field.getType());
+    }
+
+    //
+    // GenField implementations are delegated to the supporting FieldHelper instance.
+    //
+    public String getName() { return _helper.getName(); }
+    public String getType() { return _helper.getType(); }
+    public String getAccessModifier() { return _helper.getAccessModifier(); }
+
+    private Field _field;
+    private FieldHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,84 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+
+import org.apache.beehive.controls.runtime.generator.ControlField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+import org.apache.beehive.controls.runtime.generator.ControlInterface;
+
+/**
+ * The ReflectControlField class is an implementation of ControlField where values are derived
+ * using Java Reflection.
+ */
+public class ReflectControlField extends ControlField
+{
+    /**
+     * Base constructor, protected so only a custom subclass can invoke
+     * @param controlIntf the declaring ControlInterface
+     */
+    protected ReflectControlField(ControlImpl controlImpl, Field field) 
+    {
+        super(controlImpl);
+        _field = field;
+        _helper = new FieldHelper(_field);
+
+        init();
+    };
+
+    /**
+     * Initializes the ControlInterface associated with this ControlField
+     */
+    protected ControlInterface initControlInterface()
+    {
+        //
+        // The field can either be declared as the bean type or the public interface type.
+        // If it is the bean type, then we need to reflect to find the public interface
+        // type it implements.
+        //
+        Class fieldClass = _field.getType();
+        if (org.apache.beehive.controls.runtime.bean.ControlBean.class.isAssignableFrom(fieldClass))
+        {
+            Class [] intfs = fieldClass.getInterfaces();
+            for (int i = 0; i < intfs.length; i++)
+            {
+                if (intfs[i].isAnnotationPresent(org.apache.beehive.controls.api.bean.ControlInterface.class)||
+                    intfs[i].isAnnotationPresent(org.apache.beehive.controls.api.bean.ControlExtension.class))
+                {
+                    fieldClass = intfs[i];
+                    break;
+                }
+            }
+        }
+
+        return new ReflectControlInterface(fieldClass);
+    }
+
+    //
+    // GenField implementations are delegated to the supporting FieldHelper instance.
+    //
+    public String getName() { return _helper.getName(); }
+    public String getType() { return _helper.getType(); }
+    public String getAccessModifier() { return _helper.getAccessModifier(); }
+
+    private Field _field;
+    private FieldHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,204 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.events.EventHandler;
+
+import org.apache.beehive.controls.runtime.generator.ClientField;
+import org.apache.beehive.controls.runtime.generator.ContextField;
+import org.apache.beehive.controls.runtime.generator.ControlEvent;
+import org.apache.beehive.controls.runtime.generator.ControlEventSet;
+import org.apache.beehive.controls.runtime.generator.ControlField;
+import org.apache.beehive.controls.runtime.generator.ControlImpl;
+import org.apache.beehive.controls.runtime.generator.ControlInterface;
+import org.apache.beehive.controls.runtime.generator.EventAdaptor;
+import org.apache.beehive.controls.runtime.generator.EventField;
+
+public class ReflectControlImpl extends ControlImpl
+{
+    /**
+     * Constructs a new ControlImpl instance where information is derived
+     * from Java Reflection.
+     * @param mplClass the interface class
+     */
+    public ReflectControlImpl(Class implClass)
+    {
+        super();
+        _implClass = implClass;
+
+        init();
+    }
+
+    /**
+     * Initializes the super interface that this ControlImpl extends (or null if a
+     * base class)
+     */
+    protected ControlImpl initSuperClass()
+    {
+        Class superClass = _implClass.getSuperclass();
+        if (superClass != null && 
+            superClass.isAnnotationPresent(org.apache.beehive.controls.api.bean.ControlImplementation.class))
+        { 
+            return new ReflectControlImpl(superClass);
+        }
+        
+        return null; 
+    }
+
+    /**
+     * Returns the ControlInterface implemented by this ControlImpl.
+     */
+    public ControlInterface getControlInterface()
+    {
+        Class [] intfs = _implClass.getInterfaces();
+        for (int i = 0; i < intfs.length; i++)
+        {
+            if (intfs[i].isAnnotationPresent(org.apache.beehive.controls.api.bean.ControlInterface.class))
+                return new ReflectControlInterface(intfs[i]);
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the classname of this ControlImpl
+     */
+    public String getClassName()
+    {
+        return _implClass.getName();
+    }
+
+    /**
+     * Returns the package name of this ControlImpl
+     */
+    public String getPackage()
+    {
+        return _implClass.getPackage().getName();
+    }
+
+    /**
+     * Returns the unqualified name of this ControlImpl
+     */
+    public String getShortName()
+    {
+        String pkg = getPackage();
+        return getClassName().substring( pkg.length() + (pkg.length() > 0 ? 1 : 0) );
+    }
+
+    /**
+     * Initializes the list of ControlFields declared directly by this ControlImpl
+     */
+    protected ArrayList<ControlField> initControls()
+    {
+        ArrayList<ControlField> controls = new ArrayList<ControlField>();
+        Field [] fields = _implClass.getDeclaredFields();
+        for (int i = 0; i < fields.length; i++)
+        {
+            if (fields[i].isAnnotationPresent(org.apache.beehive.controls.api.bean.Control.class))
+                controls.add(new ReflectControlField(this, fields[i]));
+        }
+        return controls;
+    }
+
+    /**
+     * Initializes the list of ContextFields declared directly by this ControlImpl
+     */
+    protected ArrayList<ContextField> initContexts()
+    {
+        ArrayList<ContextField> contexts = new ArrayList<ContextField>();
+        Field [] fields = _implClass.getDeclaredFields();
+        for (int i = 0; i < fields.length; i++)
+        {
+            if (fields[i].isAnnotationPresent(org.apache.beehive.controls.api.context.Context.class))
+                contexts.add(new ReflectContextField(this, fields[i]));
+        }
+        return contexts;
+    }
+
+    /**
+     * Initializes the list of ClientFields declared directly by this ControlImpl
+     */
+    protected ArrayList<ClientField> initClients()
+    {
+        ArrayList<ClientField> clients = new ArrayList<ClientField>();
+        Field [] fields = _implClass.getDeclaredFields();
+        for (int i = 0; i < fields.length; i++)
+        {
+            if (fields[i].isAnnotationPresent(org.apache.beehive.controls.api.events.Client.class))
+                clients.add(new ReflectClientField(this, fields[i]));
+        }
+        return clients;
+    }
+
+    /**
+     * Initializes the list of EventAdaptors for this ControlImpl
+     */
+    protected void initEventAdaptors()
+    {
+        Method [] implMethods = _implClass.getDeclaredMethods();
+        for (int i = 0; i < implMethods.length; i++)
+        {
+            EventHandler handlerAnnot = implMethods[i].getAnnotation(EventHandler.class);
+            if (handlerAnnot == null)
+                continue;
+
+            EventField eventField = (EventField)getField(handlerAnnot.field());
+            assert eventField != null : "Unable to find eventField: " + handlerAnnot.field();
+            ControlInterface controlIntf = eventField.getControlInterface();
+            ControlEventSet eventSet = controlIntf.getEventSet(handlerAnnot.eventSet().getName().replace('$','.'));
+            assert eventSet != null : "Unable to find eventSet: " + 
+                                      handlerAnnot.eventSet().getName();
+
+            EventAdaptor adaptor = eventField.getEventAdaptor(eventSet);
+            if (adaptor == null)
+            {
+                adaptor = new EventAdaptor(eventField, eventSet);
+                eventField.addEventAdaptor(eventSet, adaptor);
+            }
+
+            //
+            // Find the matching event set method and add the routing relationship to the
+            // EventAdaptor
+            //
+            boolean found = false;
+            MethodHelper handlerMethod = new MethodHelper(implMethods[i]);
+            for (ControlEvent controlEvent : eventSet.getEvents())
+            {
+                if (!controlEvent.getName().equals(handlerAnnot.eventName()))
+                    continue;
+
+                if (controlEvent.getArgTypes().equals(handlerMethod.getArgTypes()))
+                {
+                    adaptor.addHandler(controlEvent, 
+                        new ReflectEventHandler(controlEvent, implMethods[i]));
+                    found = true;
+                    break;
+                }
+            }
+            assert found : "No matching event for " + handlerMethod.getName();
+        } 
+    }
+
+    Class _implClass;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlInterface.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectControlInterface.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,176 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.events.EventSet;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+import org.apache.beehive.controls.runtime.generator.ControlEventSet;
+import org.apache.beehive.controls.runtime.generator.ControlInterface;
+import org.apache.beehive.controls.runtime.generator.ControlOperation;
+import org.apache.beehive.controls.runtime.generator.ControlPropertySet;
+
+public class ReflectControlInterface extends ControlInterface
+{
+    /**
+     * Constructs a new ControlInterface instance where interface information is derived
+     * from Java Reflection.
+     * @param intfClass the interface class
+     */
+    public ReflectControlInterface(Class intfClass)
+    {
+        super();
+        _intfClass = intfClass;
+
+        init();
+    }
+
+    /**
+     * Initializes the super interface that this ControlInterface extends (or sets it to null
+     * if a base interface)
+     */
+    protected ControlInterface initSuperClass()
+    {
+        //
+        // Look for a super interface that is either a control interface or extension.
+        // If found, return it.
+        //
+        Class [] intfs = _intfClass.getInterfaces();
+        for (int i = 0; i < intfs.length; i++)
+        {
+            if (intfs[i].isAnnotationPresent(org.apache.beehive.controls.api.bean.ControlExtension.class) ||
+                intfs[i].isAnnotationPresent(org.apache.beehive.controls.api.bean.ControlInterface.class))
+            {
+                _superClass = intfs[i];
+                return new ReflectControlInterface(_superClass);
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Initializes the list of operations declared by this ControlInterface
+     */
+    protected ArrayList<ControlOperation> initOperations()
+    {
+        ArrayList<ControlOperation> operList = new ArrayList<ControlOperation>();
+
+        Method [] methods = _intfClass.getMethods();
+        for (int i = 0; i < methods.length; i++)
+        {
+            //
+            // Filter out operations declared on the super interface
+            //
+            if (_superClass == null || 
+                !methods[i].getDeclaringClass().isAssignableFrom(_superClass))
+            {
+                operList.add(new ReflectOperation(this, methods[i]));
+            }
+        }
+
+        return operList;
+    }
+
+    /**
+     * Initializes the list of PropertySets declared by this ControlInterface
+     */
+    protected ArrayList<ControlPropertySet> initPropertySets()
+    {
+        ArrayList<ControlPropertySet> propSetList = new ArrayList<ControlPropertySet>();
+
+        Class [] innerClasses = _intfClass.getDeclaredClasses();
+        for (int i = 0; i < innerClasses.length; i++)
+        {
+            if (innerClasses[i].isAnnotationPresent(PropertySet.class))
+                propSetList.add(new ReflectPropertySet(this, innerClasses[i]));
+        }
+        return propSetList;
+    }
+
+    /**
+     * Initializes the list of EventSets declared by this ControlInterface
+     */
+    protected ArrayList<ControlEventSet> initEventSets()
+    {
+        ArrayList<ControlEventSet> eventSetList = new ArrayList<ControlEventSet>();
+
+        Class [] innerClasses = _intfClass.getDeclaredClasses();
+        for (int i = 0; i < innerClasses.length; i++)
+        {
+            if (innerClasses[i].isAnnotationPresent(EventSet.class))
+                eventSetList.add(new ReflectEventSet(this, innerClasses[i]));        
+        }
+        return eventSetList;
+    }
+
+    /**
+     * Returns the classname of this ControlInterface
+     */
+    public String getClassName()
+    {
+        return _intfClass.getName();
+    }
+
+    /**
+     * Returns the package name of this ControlInterface
+     */
+    public String getPackage()
+    {
+        return _intfClass.getPackage().getName();
+    }
+
+    /**
+     * Returns the unqualified classname of this ControlInterface
+     */
+    public String getShortName()
+    {
+        String pkg = getPackage();
+        return getClassName().substring( pkg.length() + (pkg.length() > 0 ? 1 : 0) );
+    }
+
+    /**
+     * Returns true if this interface is a ControlExtension (jcx) interface, false
+     * otherwise.
+     */
+    public boolean isExtension()
+    {
+        return _intfClass.isAnnotationPresent(ControlExtension.class);
+    }
+
+    public ControlInterface getMostDerivedInterface()
+    {
+        return null;
+    }
+
+    public ClassLoader getExternalClassLoader()
+    {
+        return null;
+    }
+    public void runChecker()
+    {
+    }
+
+    Class _superClass;
+    Class _intfClass;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEvent.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEvent.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+import org.apache.beehive.controls.runtime.generator.ControlEvent;
+
+/**
+ * The ReflectEvent class represents a control Property where the event attributes
+ * are derived using Java Reflection.
+ */
+public class ReflectEvent extends ControlEvent
+{
+    /**
+     * Constructs a new ReflectEvent instance
+     * from Java Reflection.
+     * @param beanInterface the declaring bean interface
+     * @param eventMethod the EventSet method associated with the event
+     */
+    public ReflectEvent(ReflectEventSet eventSet, Method eventMethod)
+    {
+        super(eventSet);
+        _eventMethod = eventMethod;
+        _helper = new MethodHelper(_eventMethod);
+
+        init();
+    }
+
+    //
+    // All GenMethod calls can simply delegate to MethodHelper
+    //
+    public String getName() { return _helper.getName(); }
+    public String getArgDecl() { return _helper.getArgDecl(); }
+    public String getArgList() { return _helper.getArgList(); }
+    public String getArgTypes() { return _helper.getArgTypes(); }
+    public String getReturnType() { return _helper.getReturnType(); }
+    public String getThrowsClause() { return _helper.getThrowsClause(); }
+    public ArrayList getThrowsList() { return _helper.getThrowsList(); }
+
+    Method _eventMethod;
+    MethodHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEventHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEventHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+import org.apache.beehive.controls.runtime.generator.ControlEvent;
+import org.apache.beehive.controls.runtime.generator.ControlEventHandler;
+
+/**
+ * The ReflectEvent class represents a control EventHandler where the event attributes
+ * are derived using Java Reflection.
+ */
+public class ReflectEventHandler extends ControlEventHandler
+{
+    /**
+     * Constructs a new ReflectEvent instance
+     * from Java Reflection.
+     * @param event the handled ControlEvent
+     * @param eventMethod the EventSet method associated with the event
+     */
+    public ReflectEventHandler(ControlEvent event, Method handlerMethod)
+    {
+        super(event);
+        _handlerMethod = handlerMethod;
+        _helper = new MethodHelper(_handlerMethod);
+    }
+
+    //
+    // All GenMethod calls can simply delegate to MethodHelper
+    //
+    public String getName() { return _helper.getName(); }
+    public String getArgDecl() { return _helper.getArgDecl(); }
+    public String getArgList() { return _helper.getArgList(); }
+    public String getArgTypes() { return _helper.getArgTypes(); }
+    public String getReturnType() { return _helper.getReturnType(); }
+    public String getThrowsClause() { return _helper.getThrowsClause(); }
+    public ArrayList getThrowsList() { return _helper.getThrowsList(); }
+
+    Method _handlerMethod;
+    MethodHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEventSet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectEventSet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,70 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+import org.apache.beehive.controls.runtime.generator.ControlEvent;
+import org.apache.beehive.controls.runtime.generator.ControlEventSet;
+
+/**
+ * The ReflectEventSet class represents a control EventSet where the events
+ * are derived using Java Reflection.
+ */
+public class ReflectEventSet extends ControlEventSet
+{
+    /**
+     * Constructs a new ReflectEventSet instance
+     * from Java Reflection.
+     * @param controlIntf the declaring bean interface
+     * @param eventSet the EventSet class
+     */
+    public ReflectEventSet(ReflectControlInterface controlIntf, Class eventSet)
+    {
+        super(controlIntf);
+        _eventSet = eventSet;
+
+        init();
+    }
+
+    /**
+     * Initializes the list of ControlEvents associated with this ControlEventSet
+     */
+    protected ArrayList<ControlEvent> initEvents()
+    {
+        ArrayList<ControlEvent> events = new ArrayList<ControlEvent>();
+
+        Method [] methods = _eventSet.getDeclaredMethods();
+        for (int i = 0; i < methods.length; i++)
+            events.add(new ReflectEvent(this, methods[i]));
+
+        return events;
+    }
+
+    /**
+     * Returns the fully qualified EventSet name
+     */
+    public String getName()
+    {
+        return _eventSet.getName().replace('$','.');
+    }
+
+    Class _eventSet;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectOperation.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectOperation.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.apache.beehive.controls.runtime.generator.ControlOperation;
+
+/**
+ * The ReflectOperation class represents a control operation where the operation attributes
+ * are derived using Java Reflection.
+ */
+public class ReflectOperation extends ControlOperation
+{
+
+    /**
+     * Constructs a new ControlOperation instance where interface information is derived
+     * from Java Reflection.
+     * @param controlIntf the declaring ControlInterface
+     * @param operMethod the Method associated with the operation
+     */
+    public ReflectOperation(ReflectControlInterface controlIntf, Method operMethod)
+    {
+        super(controlIntf);
+        _operMethod = operMethod;
+        _helper = new MethodHelper(_operMethod);
+
+        init();
+    }
+
+    //
+    // All GenMethod calls can simply delegate to MethodHelper
+    //
+    public String getName() { return _helper.getName(); }
+    public String getArgDecl() { return _helper.getArgDecl(); }
+    public String getArgList() { return _helper.getArgList(); }
+    public String getArgTypes() { return _helper.getArgTypes(); }
+    public String getReturnType() { return _helper.getReturnType(); }
+    public String getThrowsClause() { return _helper.getThrowsClause(); }
+    public ArrayList getThrowsList() { return _helper.getThrowsList(); }
+    public String getArgObjectArray() { return _helper.getArgObjectArray(); }
+
+
+    Method _operMethod;
+    MethodHelper _helper;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectProperty.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectProperty.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,70 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.runtime.generator.ControlProperty;
+
+/**
+ * The ReflectProperty class represents a control Property where the property attributes
+ * are derived using Java Reflection.
+ */
+public class ReflectProperty extends ControlProperty
+{
+    /**
+     * Constructs a new ReflectProperty instance
+     * from Java Reflection.
+     * @param beanInterface the declaring bean interface
+     * @param propMethod the member method associated with the property
+     */
+    public ReflectProperty(ReflectPropertySet propertySet, Method propMethod)
+    {
+        super(propertySet);
+        _propMethod = propMethod;
+
+        init();
+    }
+
+    /**
+     * Returns the member name associated with this Property in the PropertySet
+     */
+    public String getMemberName()
+    {
+        return _propMethod.getName();
+    }
+
+    /**
+     * Returns the type of the Property
+     */
+    public String getType()
+    {
+        return ClassUtils.getDecl(_propMethod.getReturnType());
+    }
+
+    /**
+     * Returns true if the property is an annotation type, false otherwise
+     */
+    public boolean isAnnotation()
+    {
+        return _propMethod.getReturnType().isAnnotation();
+    }
+
+    Method _propMethod;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectPropertySet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/generator/reflect/ReflectPropertySet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+package org.apache.beehive.controls.runtime.generator.reflect;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+import org.apache.beehive.controls.runtime.generator.ControlProperty;
+import org.apache.beehive.controls.runtime.generator.ControlPropertySet;
+
+/**
+ * The ReflectPropertySet class represents a control PropertySet where the property list
+ * is derived using Java Reflection.
+ */
+public class ReflectPropertySet extends ControlPropertySet
+{
+    /**
+     * Constructs a new ReflectPropertySet instance
+     * from Java Reflection.
+     * @param beanInterface the declaring bean interface
+     * @param propertySet the PropertySet class
+     */
+    public ReflectPropertySet(ReflectControlInterface controlIntf, Class propertySet)
+    {
+        super(controlIntf);
+        _propertySet = propertySet;
+
+        init();
+    }
+
+    /**
+     * Initializes the list of ControlProperties associated with this ControlPropertySet
+     */
+    protected ArrayList<ControlProperty> initProperties()
+    {
+        ArrayList<ControlProperty> properties = new ArrayList<ControlProperty>();
+
+        Method [] methods = _propertySet.getDeclaredMethods();
+        for (int i = 0; i < methods.length; i++)
+            properties.add(new ReflectProperty(this, methods[i]));
+
+        return properties;
+    }
+
+    /**
+     * Returns the class name of the property set
+     */
+    public String getClassName()
+    {
+        return _propertySet.getName().replace('$','.');
+    }
+
+    /**
+     * Returns the property name prefix for properties in this PropertySet
+     */
+    public String getPrefix()
+    {
+        return ((PropertySet)_propertySet.getAnnotation(PropertySet.class)).prefix();
+    }
+
+    Class _propertySet;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ControlFilter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ControlFilter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,126 @@
+package org.apache.beehive.controls.runtime.servlet;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+/**
+ * The ControlFilter class provides an implementation of an HTTP servlet filter that supports
+ * running controls in the web tier.  It works, in conjunction with the ServletControlContext
+ * class to provide runtime containment for controls.  It ensures that a valid BeanContext has 
+ * been set up prior to forwarding the request to the actual target servlet, and does 
+ * post-processing to ensure that resources have been properly released.
+ *
+ * This filter supports the following initialization parameters:
+ * 
+ * useSession - a boolean value that indicates whether the bean context should be stored in
+ *              session.  This makes the context (and any contained controls) accessible
+ *              across multiple http requests.
+ *
+ * This filter needs to be configured in web.xml for URL mappings that will be hosting servlets.
+ */
+public class ControlFilter implements Filter
+{
+    public static String BEAN_CONTEXT_ATTRIBUTE = ServletBeanContext.class.getName();
+
+    public void init(FilterConfig filterConfig) throws ServletException 
+    {
+        _filterConfig = filterConfig;
+        _useSessionContext = new Boolean(filterConfig.getInitParameter("useSession")).booleanValue();
+    }
+
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+                throws java.io.IOException, ServletException
+    {
+        if (request instanceof HttpServletRequest)
+        {
+            ServletBeanContext beanContext = null;
+            HttpSession httpSession = null;
+
+            //
+            // If preserving control bean context within session state, then retrieve
+            // it.
+            //
+            if (_useSessionContext)
+            {
+                httpSession = ((HttpServletRequest)request).getSession(true);
+                beanContext = (ServletBeanContext)httpSession.getAttribute(BEAN_CONTEXT_ATTRIBUTE);
+            }
+
+            //
+            // If no context exists, then create a new one and (optionally) store it 
+            // within session state.
+            // OPTIMIZE: Avoid per-request creation using TLS or some other mechanism
+            //
+            if (beanContext == null)
+            {
+                beanContext = new ServletBeanContext();
+                if (httpSession != null)
+                    httpSession.setAttribute(BEAN_CONTEXT_ATTRIBUTE, beanContext);
+            }
+
+            //
+            // Start a new execution context
+            //
+            beanContext.beginContext(_filterConfig.getServletContext(), request, response); 
+            try
+            {
+                //
+                // Pass the requst on to the next filter or target servlet
+                //
+                chain.doFilter(request, response);
+            }
+            finally
+            {
+                //
+                // End the execution context
+                //
+                beanContext.endContext();
+            }
+        }
+        else
+        {
+            //
+            // If the filter is (mis)configured on something other than an http servlet, just
+            // pass it on
+            //
+            chain.doFilter(request, response);
+        }
+    }
+
+    public void destroy() {}
+
+    /**
+     * The FilterConfig associated with this filter instance.
+     */
+    FilterConfig _filterConfig;
+
+    /**
+     * The resolved value of the 'useSession' filter attribute.
+     */
+    private boolean      _useSessionContext = false;
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/HttpRequestService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/HttpRequestService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,171 @@
+package org.apache.beehive.controls.runtime.servlet;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletRequest;
+
+/**
+ * This class is the contextual service implementation for javax.servlet.http.HttpServletRequest.
+ * It acts as an intermediary between the client and the HttpServletRequest instance held by the
+ * associated ServletBeanContext.  It validates that attempt to access the HttpServletRequest
+ * only occur during the servlet request processing lifecycle, then delegates to the underlying
+ * HttpServletRequest instance for actual services.
+ */
+/* package */ class HttpRequestService extends ServletRequestService implements HttpServletRequest
+{
+    
+    /* package */ HttpRequestService(ServletBeanContext beanContext)
+    {
+        super(beanContext);
+    }
+
+    final protected HttpServletRequest getHttpServletRequest()
+    {
+        ServletRequest servletRequest = getServletBeanContext().getServletRequest();
+        if (! (servletRequest instanceof HttpServletRequest))
+            throw new IllegalStateException("Current request is not an HttpServletRequest");
+        return (HttpServletRequest)servletRequest;
+    }
+
+    public java.lang.String getAuthType()
+    {
+        return getHttpServletRequest().getAuthType();
+    }
+
+    public javax.servlet.http.Cookie[] getCookies()
+    {
+        return getHttpServletRequest().getCookies();
+    }
+
+    public long getDateHeader(java.lang.String name)
+    {
+        return getHttpServletRequest().getDateHeader(name);
+    }
+
+    public java.lang.String getHeader(java.lang.String name)
+    {
+        return getHttpServletRequest().getHeader(name);
+    }
+
+    public java.util.Enumeration getHeaders(java.lang.String name)
+    {
+        return getHttpServletRequest().getHeaders(name);
+    }
+
+    public java.util.Enumeration getHeaderNames()
+    {
+        return getHttpServletRequest().getHeaderNames();
+    }
+
+    public int getIntHeader(java.lang.String name)
+    {
+        return getHttpServletRequest().getIntHeader(name);
+    }
+
+    public java.lang.String getMethod()
+    {
+        return getHttpServletRequest().getMethod();
+    }
+
+    public java.lang.String getPathInfo()
+    {
+        return getHttpServletRequest().getPathInfo();
+    }
+
+    public java.lang.String getPathTranslated()
+    {
+        return getHttpServletRequest().getPathTranslated();
+    }
+
+    public java.lang.String getContextPath()
+    {
+        return getHttpServletRequest().getContextPath();
+    }
+
+    public java.lang.String getQueryString()
+    {
+        return getHttpServletRequest().getQueryString();
+    }
+
+    public java.lang.String getRemoteUser()
+    {
+        return getHttpServletRequest().getRemoteUser();
+    }
+
+    public boolean isUserInRole(java.lang.String role)
+    {
+        return getHttpServletRequest().isUserInRole(role);
+    }
+
+    public java.security.Principal getUserPrincipal()
+    {
+        return getHttpServletRequest().getUserPrincipal();
+    }
+
+    public java.lang.String getRequestedSessionId()
+    {
+        return getHttpServletRequest().getRequestedSessionId();
+    }
+
+    public java.lang.String getRequestURI()
+    {
+        return getHttpServletRequest().getRequestURI();
+    }
+
+    public java.lang.StringBuffer getRequestURL()
+    {
+        return getHttpServletRequest().getRequestURL();
+    }
+
+    public java.lang.String getServletPath()
+    {
+        return getHttpServletRequest().getServletPath();
+    }
+
+    public javax.servlet.http.HttpSession getSession(boolean create)
+    {
+        return getHttpServletRequest().getSession(create);
+    }
+
+    public javax.servlet.http.HttpSession getSession()
+    {
+        return getHttpServletRequest().getSession();
+    }
+
+    public boolean isRequestedSessionIdValid()
+    {
+        return getHttpServletRequest().isRequestedSessionIdValid();
+    }
+
+    public boolean isRequestedSessionIdFromCookie()
+    {
+        return getHttpServletRequest().isRequestedSessionIdFromCookie();
+    }
+
+    public boolean isRequestedSessionIdFromURL()
+    {
+        return getHttpServletRequest().isRequestedSessionIdFromURL();
+    }
+
+    public boolean isRequestedSessionIdFromUrl()
+    {
+        return getHttpServletRequest().isRequestedSessionIdFromUrl();
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/HttpResponseService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/HttpResponseService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,131 @@
+package org.apache.beehive.controls.runtime.servlet;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletResponse;
+
+/**
+ * This class is the contextual service implementation for javax.servlet.http.HttpServletResponse.
+ * It acts as an intermediary between the client and the HttpServletResponse instance held by the
+ * associated ServletBeanContext.  It validates that attempt to access the HttpServletResponse
+ * only occur during the servlet request processing lifecycle, then delegates to the underlying
+ * HttpServletResponse instance for actual services.
+ */
+/* package */ class HttpResponseService extends ServletResponseService implements HttpServletResponse
+{
+    
+    /* package */ HttpResponseService(ServletBeanContext beanContext)
+    {
+        super(beanContext);
+    }
+
+    final protected HttpServletResponse getHttpServletResponse()
+    {
+        ServletResponse servletRequest = getServletBeanContext().getServletResponse();
+        if (! (servletRequest instanceof HttpServletResponse))
+            throw new IllegalStateException("Current request is not an HttpServletResponse");
+        return (HttpServletResponse)servletRequest;
+    }
+
+    public void addCookie(javax.servlet.http.Cookie cookie)
+    {
+        getHttpServletResponse().addCookie(cookie);
+    }
+
+    public boolean containsHeader(java.lang.String name)
+    {
+        return getHttpServletResponse().containsHeader(name);
+    }
+
+    public java.lang.String encodeURL(java.lang.String url)
+    {
+        return getHttpServletResponse().encodeURL(url);
+    }
+
+    public java.lang.String encodeRedirectURL(java.lang.String url)
+    {
+        return getHttpServletResponse().encodeRedirectURL(url);
+    }
+
+    public java.lang.String encodeUrl(java.lang.String url)
+    {
+        return getHttpServletResponse().encodeUrl(url);
+    }
+
+    public java.lang.String encodeRedirectUrl(java.lang.String url)
+    {
+        return getHttpServletResponse().encodeRedirectUrl(url);
+    }
+
+    public void sendError(int sc, java.lang.String msg) throws java.io.IOException    
+    {
+        getHttpServletResponse().sendError(sc, msg);
+    }
+
+    public void sendError(int sc) throws java.io.IOException
+    {
+        getHttpServletResponse().sendError(sc);
+    }
+
+    public void sendRedirect(java.lang.String location) throws java.io.IOException
+    {
+        getHttpServletResponse().sendRedirect(location);
+    }
+
+    public void setDateHeader(java.lang.String name, long date)
+    {
+        getHttpServletResponse().setDateHeader(name, date);
+    }
+
+    public void addDateHeader(java.lang.String name, long date)
+    {
+        getHttpServletResponse().addDateHeader(name, date);
+    }
+
+    public void setHeader(java.lang.String name, java.lang.String value)
+    {
+        getHttpServletResponse().setHeader(name, value);
+    }
+
+    public void addHeader(java.lang.String name, java.lang.String value)
+    {
+        getHttpServletResponse().addHeader(name, value);
+    }
+
+    public void setIntHeader(java.lang.String name, int value)
+    {
+        getHttpServletResponse().setIntHeader(name, value);
+    }
+
+    public void addIntHeader(java.lang.String name, int value)
+    {
+        getHttpServletResponse().addIntHeader(name, value);
+    }
+
+    public void setStatus(int sc)
+    {
+        getHttpServletResponse().setStatus(sc);
+    }
+
+    public void setStatus(int sc, java.lang.String sm)
+    {
+        getHttpServletResponse().setStatus(sc, sm);
+    }
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletBeanContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletBeanContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,156 @@
+package org.apache.beehive.controls.runtime.servlet;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.Stack;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.beehive.controls.runtime.bean.ControlContainerContext;
+
+/**
+ * The ServletBeanContext provides a ControlBeanContext implementation that offers services
+ * and a resource management context that is appropriate to web tier usage of controls.
+ */
+public class ServletBeanContext extends ControlContainerContext
+{
+    private static class RequestContext
+    {
+        RequestContext(ServletContext context, ServletRequest req, ServletResponse resp)
+        {
+            _context = context;
+            _request = req;
+            _response = resp;
+        }
+
+        ServletContext _context;
+        ServletResponse _response;
+        ServletRequest _request;
+    }
+
+    /**
+     * Called by BeanContextSupport superclass during construction and deserialization to
+     * initialize subclass transient state
+     */
+    public void initialize()
+    {
+        super.initialize();
+
+        //
+        // Register the ServletService classes associated with the ServletServiceProvider
+        //
+        ServletServiceProvider ssp = ServletServiceProvider.getProvider();
+        addService(ServletContext.class, ssp);
+        addService(ServletRequest.class, ssp);
+        addService(ServletResponse.class, ssp);
+        addService(HttpServletRequest.class, ssp);
+        addService(HttpServletResponse.class, ssp);
+    }
+
+    /**
+     * Begins a new execution context, associated with a specific ServletRequest
+     */
+    public void beginContext(ServletContext context, ServletRequest req, ServletResponse resp)
+    {
+        pushRequestContext(context, req, resp);
+        super.beginContext();
+    }
+
+    /**
+     * Ends the current execution context, and resetes the current active ServletRequest.
+     */
+    public void endContext()
+    {
+        super.endContext();
+        popRequestContext();
+    }
+
+    /**
+     * Pushes the current request context onto the stack
+     */
+    private synchronized void pushRequestContext(ServletContext context, ServletRequest req, 
+                                                 ServletResponse resp)
+    {
+        _reqStack.push(new RequestContext(context, req, resp));
+    }
+
+    /**
+     * Pops the current request context from the stack
+     */
+    private synchronized void popRequestContext()
+    {
+        _reqStack.pop();
+    }
+
+    /**
+     * Returns the current request context, or null is none is available
+     */
+    private synchronized RequestContext peekRequestContext()
+    {
+        if (_reqStack.empty())
+            return null;
+
+        return _reqStack.peek();
+    }
+
+    /**
+     * Returns the ServletContext associated with this context (or null if not currently
+     * processing a request)
+     */
+    protected ServletContext getServletContext()
+    {
+        RequestContext reqContext = peekRequestContext();
+        if (reqContext == null)
+            return null;
+
+        return  reqContext._context;
+    }
+
+    /**
+     * Returns the ServletRequest associated with this context (or null if not currently
+     * processing a request)
+     */
+    protected ServletRequest getServletRequest()
+    {
+        RequestContext reqContext = peekRequestContext();
+        if (reqContext == null)
+            return null;
+
+        return  reqContext._request;
+    }
+
+    /**
+     * Returns the ServletResponse associated with this context (or null if not currently
+     * processing a request)
+     */
+    protected ServletResponse getServletResponse()
+    {
+        RequestContext reqContext = peekRequestContext();
+        if (reqContext == null)
+            return null;
+
+        return  reqContext._response;
+    }
+
+    private Stack<RequestContext> _reqStack = new Stack<RequestContext>();
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletContextService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletContextService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,187 @@
+package org.apache.beehive.controls.runtime.servlet;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import javax.servlet.ServletContext;
+
+import org.apache.beehive.controls.runtime.bean.ControlContainerContext;
+
+/**
+ * This class is the contextual service implementation for javax.servlet.ServletContext.   It
+ * acts as an intermediary between the client and the ServletContext instance held by the
+ * associated ServletBeanContext.   It validates that attempt to access the ServletContext
+ * only occur during the servlet request processing lifecycle, then delegates to the underlying
+ * ServletContext instance for actual services.
+ */
+/* package */ class ServletContextService implements ServletContext
+{
+    
+    /* package */ ServletContextService(ServletBeanContext beanContext)
+    {
+        _beanContext = beanContext;
+    }
+
+    /**
+     * This method retrieves the current ServletBeanContext for the service.  It is capable
+     * of reassociating with the current active context, if the service instance has been
+     * serialized/deserialized.
+     */
+    final protected ServletBeanContext getServletBeanContext()
+    {
+        if (_beanContext == null)
+        {
+            ControlContainerContext ccc = ControlContainerContext.getContext();
+            if (! (ccc instanceof ServletBeanContext))
+                throw new IllegalStateException("No ServletBeanContext available");
+
+            _beanContext = (ServletBeanContext)ccc;
+        }
+        return _beanContext;
+    }
+
+    final protected ServletContext getServletContext()
+    {
+        ServletContext servletContext = getServletBeanContext().getServletContext();
+        if (servletContext == null)
+            throw new IllegalStateException("No access to ServletContext outside request processing");
+        return servletContext;
+    }    
+
+    public java.lang.Object getAttribute(java.lang.String name) 
+    {
+        return getServletContext().getAttribute(name);
+    }
+
+    public java.util.Enumeration getAttributeNames()
+    {
+        return getServletContext().getAttributeNames();
+    }
+
+    public ServletContext getContext(java.lang.String uripath)
+    {
+        return getServletContext().getContext(uripath); 
+    }
+
+    public java.lang.String getInitParameter(java.lang.String name)
+    {
+        return getServletContext().getInitParameter(name);
+    }
+
+    public java.util.Enumeration getInitParameterNames()
+    {
+        return getServletContext().getInitParameterNames();
+    }
+
+    public int getMajorVersion()
+    {
+        return getServletContext().getMajorVersion();
+    }
+
+    public java.lang.String getMimeType(java.lang.String file)
+    {
+        return getServletContext().getMimeType(file);
+    }
+
+    public int getMinorVersion()
+    {
+        return getServletContext().getMinorVersion();
+    }
+
+    public javax.servlet.RequestDispatcher getNamedDispatcher(java.lang.String name)
+    {
+        return getServletContext().getNamedDispatcher(name);
+    }
+
+    public java.lang.String getRealPath(java.lang.String path)
+    {
+        return getServletContext().getRealPath(path);
+    }
+
+    public javax.servlet.RequestDispatcher getRequestDispatcher(java.lang.String path)
+    {
+        return getServletContext().getRequestDispatcher(path);
+    }
+
+    public java.net.URL getResource(java.lang.String path) throws java.net.MalformedURLException
+    {
+        return getServletContext().getResource(path);
+    }
+
+    public java.io.InputStream getResourceAsStream(java.lang.String path)
+    {
+        return getServletContext().getResourceAsStream(path);
+    }
+
+    public java.util.Set getResourcePaths(java.lang.String path)
+    {
+        return getServletContext().getResourcePaths(path);
+    }
+
+    public java.lang.String getServerInfo()
+    {
+        return getServletContext().getServerInfo();
+    }
+
+    public javax.servlet.Servlet getServlet(java.lang.String name) throws javax.servlet.ServletException
+    {
+        return getServletContext().getServlet(name);
+    }
+
+    public java.lang.String getServletContextName()
+    {
+        return getServletContext().getServletContextName();
+    }
+
+    public java.util.Enumeration getServletNames()
+    {
+        return getServletContext().getServletNames();
+    }
+
+    public java.util.Enumeration getServlets()
+    {
+        return getServletContext().getServlets();
+    }
+
+    public void log(java.lang.String msg)
+    {
+        getServletContext().log(msg);
+    }
+
+    public void log(java.lang.Exception exception, java.lang.String msg)
+    {
+        getServletContext().log(exception, msg);
+    }
+
+    public void log(java.lang.String message, java.lang.Throwable throwable)
+    {
+        getServletContext().log(message, throwable);
+    }
+
+    public void removeAttribute(java.lang.String name)
+    {
+        getServletContext().removeAttribute(name);
+    }
+
+    public void setAttribute(java.lang.String name, java.lang.Object object)
+    {
+        getServletContext().setAttribute(name, object);
+    }
+
+    transient private ServletBeanContext _beanContext;  // never access directly
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletRequestService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletRequestService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,214 @@
+package org.apache.beehive.controls.runtime.servlet;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import javax.servlet.ServletRequest;
+
+import org.apache.beehive.controls.runtime.bean.ControlContainerContext;
+
+/**
+ * This class is the contextual service implementation for javax.servlet.ServletRequest.   It
+ * acts as an intermediary between the client and the ServletRequest instance held by the
+ * associated ServletBeanContext.   It validates that attempt to access the ServletRequest
+ * only occur during the servlet request processing lifecycle, then delegates to the underlying
+ * ServletRequest instance for actual services.
+ */
+/* package */ class ServletRequestService implements ServletRequest
+{
+    
+    /* package */ ServletRequestService(ServletBeanContext beanContext)
+    {
+        _beanContext = beanContext;
+    }
+
+    /**
+     * This method retrieves the current ServletBeanContext for the service.  It is capable
+     * of reassociating with the current active context, if the service instance has been
+     * serialized/deserialized.
+     */
+    final protected ServletBeanContext getServletBeanContext()
+    {
+        if (_beanContext == null)
+        {
+            ControlContainerContext ccc = ControlContainerContext.getContext();
+            if (! (ccc instanceof ServletBeanContext))
+                throw new IllegalStateException("No ServletBeanContext available");
+
+            _beanContext = (ServletBeanContext)ccc;
+        }
+        return _beanContext;
+    }
+
+    final protected ServletRequest getServletRequest()
+    {
+        ServletRequest servletRequest = getServletBeanContext().getServletRequest();
+        if (servletRequest == null)
+            throw new IllegalStateException("No access to ServletRequest outside request processing");
+        return servletRequest;
+    }
+
+    public java.lang.Object getAttribute(java.lang.String name)
+    {
+        return getServletRequest().getAttribute(name);
+    }
+
+    public java.util.Enumeration getAttributeNames()
+    {
+        return getServletRequest().getAttributeNames();
+    }
+
+    public java.lang.String getCharacterEncoding()
+    {
+        return getServletRequest().getCharacterEncoding();
+    }
+
+    public void setCharacterEncoding(java.lang.String env) 
+                throws java.io.UnsupportedEncodingException
+    {
+        getServletRequest().setCharacterEncoding(env);
+    }
+
+    public int getContentLength()
+    {
+        return getServletRequest().getContentLength();
+    }
+
+    public java.lang.String getContentType()
+    {
+        return getServletRequest().getContentType();
+    }
+
+    public javax.servlet.ServletInputStream getInputStream() throws java.io.IOException 
+    {
+        return getServletRequest().getInputStream();
+    }
+
+    public java.lang.String getParameter(java.lang.String name)
+    {
+        return getServletRequest().getParameter(name);
+    }
+
+    public java.util.Enumeration getParameterNames()
+    {
+        return getServletRequest().getParameterNames();
+    }
+
+    public java.lang.String[] getParameterValues(java.lang.String name)
+    {
+        return getServletRequest().getParameterValues(name);
+    }
+
+    public java.util.Map getParameterMap()
+    {
+        return getServletRequest().getParameterMap();
+    }
+
+    public java.lang.String getProtocol()
+    {
+        return getServletRequest().getProtocol();
+    }
+
+    public java.lang.String getScheme()
+    {
+        return getServletRequest().getScheme();
+    }
+
+    public java.lang.String getServerName()
+    {
+        return getServletRequest().getServerName();
+    }
+
+    public int getServerPort()
+    {
+        return getServletRequest().getServerPort();
+    }
+
+    public int getLocalPort()
+    {
+        return getServletRequest().getLocalPort();
+    }
+
+    public java.lang.String getLocalAddr()
+    {
+        return getServletRequest().getLocalAddr();
+    }
+
+    public java.lang.String getLocalName()
+    {
+        return getServletRequest().getLocalName();
+    }
+
+
+    public java.io.BufferedReader getReader() throws java.io.IOException
+    {
+        return getServletRequest().getReader();
+    }
+
+    public java.lang.String getRemoteAddr()
+    {
+        return getServletRequest().getRemoteAddr();
+    }
+
+    public java.lang.String getRemoteHost()
+    {
+        return getServletRequest().getRemoteHost();
+    }
+
+    public int getRemotePort()
+    {
+        return getServletRequest().getRemotePort();
+    }
+
+    public void setAttribute(java.lang.String name, java.lang.Object o)
+    {
+        getServletRequest().setAttribute(name, o);
+    }
+
+    public void removeAttribute(java.lang.String name)
+    {
+        getServletRequest().removeAttribute(name);
+    }
+
+    public java.util.Locale getLocale()
+    {
+        return getServletRequest().getLocale();
+    }
+
+    public java.util.Enumeration getLocales()
+    {
+        return getServletRequest().getLocales();
+    }
+
+    public boolean isSecure()
+    {
+        return getServletRequest().isSecure();
+    }
+
+    public javax.servlet.RequestDispatcher getRequestDispatcher(java.lang.String path)
+    {
+        return getServletRequest().getRequestDispatcher(path);
+    }
+
+    public java.lang.String getRealPath(java.lang.String path)
+    {
+        return getServletRequest().getRealPath(path);
+    }
+
+    transient private ServletBeanContext _beanContext;  // never access directly
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletResponseService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletResponseService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,142 @@
+package org.apache.beehive.controls.runtime.servlet;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import javax.servlet.ServletResponse;
+
+import org.apache.beehive.controls.runtime.bean.ControlContainerContext;
+
+/**
+ * This class is the contextual service implementation for javax.servlet.ServletResponse.   It
+ * acts as an intermediary between the client and the ServletResponse instance held by the
+ * associated ServletBeanContext.   It validates that attempt to access the ServletResponse
+ * only occur during the servlet request processing lifecycle, then delegates to the underlying
+ * ServletResponse instance for actual services.
+ */
+/* package */ class ServletResponseService implements ServletResponse
+{
+    
+    /* package */ ServletResponseService(ServletBeanContext beanContext)
+    {
+        _beanContext = beanContext;
+    }
+
+    /**
+     * This method retrieves the current ServletBeanContext for the service.  It is capable
+     * of reassociating with the current active context, if the service instance has been
+     * serialized/deserialized.
+     */
+    final protected ServletBeanContext getServletBeanContext()
+    {
+        if (_beanContext == null)
+        {
+            ControlContainerContext ccc = ControlContainerContext.getContext();
+            if (! (ccc instanceof ServletBeanContext))
+                throw new IllegalStateException("No ServletBeanContext available");
+
+            _beanContext = (ServletBeanContext)ccc;
+        }
+        return _beanContext;
+    }
+
+    final protected ServletResponse getServletResponse()
+    {
+        ServletResponse servletResponse = getServletBeanContext().getServletResponse();
+        if (servletResponse == null)
+            throw new IllegalStateException("No access to ServletResponse outside request processing");
+        return servletResponse;
+    }
+
+    public java.lang.String getCharacterEncoding()
+    {
+        return getServletResponse().getCharacterEncoding();
+    }
+
+    public java.lang.String getContentType()
+    {
+        return getServletResponse().getContentType();
+    }
+
+    public javax.servlet.ServletOutputStream getOutputStream() throws java.io.IOException
+    {
+        return getServletResponse().getOutputStream();
+    }
+
+    public java.io.PrintWriter getWriter() throws java.io.IOException
+    {
+        return getServletResponse().getWriter();
+    }
+
+    public void setCharacterEncoding(java.lang.String charset)
+    {
+        getServletResponse().setCharacterEncoding(charset);
+    }
+
+    public void setContentLength(int len)
+    {
+        getServletResponse().setContentLength(len);
+    }
+
+    public void setContentType(java.lang.String type)
+    {
+        getServletResponse().setContentType(type);
+    }
+
+    public void setBufferSize(int size)
+    {
+        getServletResponse().setBufferSize(size);
+    }
+
+    public int getBufferSize()
+    {
+        return getServletResponse().getBufferSize();
+    }
+
+    public void flushBuffer() throws java.io.IOException
+    {
+        getServletResponse().flushBuffer();
+    }
+
+    public void resetBuffer()
+    {
+        getServletResponse().resetBuffer();
+    }
+
+    public boolean isCommitted()
+    {
+        return getServletResponse().isCommitted();
+    }
+
+    public void reset()
+    {
+        getServletResponse().reset();
+    }
+
+    public void setLocale(java.util.Locale loc)
+    {
+        getServletResponse().setLocale(loc);
+    }
+
+    public java.util.Locale getLocale() 
+    {
+        return getServletResponse().getLocale();
+    }
+
+    transient private ServletBeanContext _beanContext;  // never access directly
+}

Added: incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletServiceProvider.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/src/runtime/org/apache/beehive/controls/runtime/servlet/ServletServiceProvider.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+package org.apache.beehive.controls.runtime.servlet;
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2001-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.beans.beancontext.BeanContextServices;
+import java.beans.beancontext.BeanContextServiceProvider;
+import java.util.Iterator;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * The ServletContextProvider helper class acts at the BeanContextServiceProvider provides
+ * instances of web tier services associated with a ServletBeanContext
+ */
+class ServletServiceProvider implements BeanContextServiceProvider
+{
+    static final private ServletServiceProvider _provider = new ServletServiceProvider();
+
+    static final ServletServiceProvider getProvider() { return _provider; }
+
+    /* package */ ServletServiceProvider() {}
+
+    public Object getService(BeanContextServices bcs, Object requestor, Class serviceClass,
+                             Object serviceSelector)
+    {
+        //
+        // These services are only available to controls running within the scope of a
+        // ServletBeanContext
+        //
+        if (! (bcs instanceof ServletBeanContext))
+            return null;
+
+        ServletBeanContext sbc = (ServletBeanContext)bcs;
+        if (serviceClass.equals(ServletContext.class))
+            return new ServletContextService(sbc);
+
+        if (serviceClass.equals(HttpServletRequest.class))
+            return new HttpRequestService(sbc);
+
+        if (serviceClass.equals(HttpServletResponse.class))
+            return new HttpResponseService(sbc);
+
+        if (serviceClass.equals(ServletRequest.class))
+            return new ServletRequestService(sbc);
+
+        if (serviceClass.equals(ServletResponse.class))
+            return new ServletResponseService(sbc);
+
+        return null;
+    }
+
+    public void releaseService(BeanContextServices bcs, Object requestor, Object service)
+    {
+        // noop, because the provider isn't tracking service instances.
+    }
+
+    public Iterator getCurrentServiceSelectors(BeanContextServices bcs, Class serviceClass)
+    {
+        return null;    // no selectors
+    }
+}

Added: incubator/beehive/controls/test/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,184 @@
+<?xml version="1.0" ?>
+
+<project name="beehive_test" default="usage">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+
+    <property name="dev.root" value="${os.DEV_ROOT}"/>
+
+    <taskdef name="apt" classname="org.apache.beehive.controls.runtime.generator.AptTask" 
+             classpath="../build/jars/controls.jar" onerror="report" />
+
+    <!-- BeeHive test specific properties -->
+    <property name="test.root" location="${basedir}/src"/>
+    <property name="tests.src" location="${test.root}/junit"/>
+    <property name="tests.driver.src" location="${test.root}/driver"/>
+    <property name="controls.src" location="${test.root}/controls"/>
+    <property name="build.dir" location="${basedir}/build"/>
+    <property name="build.classes" location="${build.dir}/classes"/>
+    <property name="build.beans" location="${build.dir}/classes/beans"/>
+    <property name="build.tests" location="${build.dir}/classes/tests"/>
+    <property name="build.tests.driver" location="${build.dir}/classes/driver"/>
+    <property name="build.beansrc" location="${build.dir}/beansrc"/>
+    <property name="build.jars" location="${build.dir}/jars"/>
+    <property name="test.logs" location="${basedir}/logs"/>
+    <condition property="test.os" value="windows" >
+       <os family="windows" />
+    </condition>
+    <condition property="test.os" value="unix" >
+       <os family="unix" />
+    </condition>
+
+    <!-- =================================================================== -->
+    <!-- Usage - print the usage -->
+    <!-- ==================================================================== -->
+    <target name="usage">
+        <echo message=""/>
+        <echo message=""/>
+        <echo message="Controls Test Build file"/>
+        <echo message="================================================================"/>
+        <echo message="|                          Usage                               |"/>
+        <echo message="================================================================"/>
+        <echo message="----------------------------------------------------------------"/>
+        <echo message="|                      Standard Targets                        |"/>
+        <echo message="----------------------------------------------------------------"/>
+        <echo message="clean               - Delete the junit classes."/>
+        <echo message="build               - build controls,test driver and java tests."/>
+        <echo message="run                 - run java tests that have already been built"/>
+        <echo message="test                - clean, build and run"/>
+        <echo message="----------------------------------------------------------------"/>
+    </target>
+
+    <path id="test.classpath">
+        <pathelement location="${junit.jar}"/>
+        <pathelement location="${tools.jar}"/>
+        <pathelement location="${velocity14.jar}"/>
+        <pathelement location="${velocitydep14.jar}"/>
+        <pathelement path="../build/jars/controls.jar"/>
+        <pathelement path="${build.beans}"/>
+    </path>
+
+    <target name="clean">
+        <delete dir="${build.dir}"/>
+        <delete dir="${test.logs}"/>
+        <delete file="velocity.log"/>
+    </target>
+
+    <target name="dirs">
+        <mkdir dir="${build.classes}" />
+        <mkdir dir="${build.beans}" />
+        <mkdir dir="${build.tests.driver}" />
+        <mkdir dir="${build.tests}" />
+        <mkdir dir="${build.beansrc}" />
+        <mkdir dir="${build.jars}" />
+        <mkdir dir="${test.logs}" />
+    </target>
+
+    <target name="build" depends="dirs">
+        <ant target="build-controls" />
+        <ant target="build-test-drivers" />
+        <ant target="build-java-tests" />
+    </target>
+
+    <target name="build-controls" depends="dirs" unless="_build.controls.ran">
+
+        <apt srcdir="${controls.src}" destdir="${build.beans}" gendir="${build.beansrc}"
+             classpathref="test.classpath" 
+             srcExtensions="*.jcs,*.jcx,*.java" >
+        </apt>
+        <jar destfile="${build.jars}/testbeans.jar"  basedir="${build.beans}" />
+        <property name="_build.controls.ran" value="true"/>
+    </target>
+
+    <target name="build-test-drivers" depends="build-controls" unless="_build.test.drivers.ran">
+	<echo>build helper class for testing controls</echo>
+        <!-- Build the test source directory -->
+        <javac srcdir="${tests.driver.src}"
+            destdir="${build.tests.driver}"
+            classpathref="test.classpath"
+            debug="on"
+            optimize="on"
+            verbose="false"
+            failonerror="true"
+            >
+            <classpath>
+            	<pathelement location="tools/lib/milton.jar"/>
+            </classpath>
+        </javac>
+        <property name="_build.test.drivers.ran" value="true"/>
+    </target>
+
+
+    <target name="build-java-tests" depends="build-test-drivers" unless="_build.java.tests.ran">
+        <!-- Build the test source directory -->
+        <javac srcdir="${tests.src}"
+            destdir="${build.tests}"
+            classpathref="test.classpath"
+            debug="on"
+            optimize="on"
+            verbose="false"
+            failonerror="true">
+            <classpath>
+            	<pathelement location="tools/lib/milton.jar"/>
+            	<pathelement path="${build.tests.driver}"/>
+            </classpath>
+        </javac>
+        <property name="_build.java.tests.ran" value="true"/>
+    </target>
+
+
+    <target name="test" depends="tests"/>
+    
+    <target name="tests" >
+
+        <antcall target="clean" />
+        <antcall target="build" />
+        <antcall target="run" />
+
+    </target>
+
+    
+    
+    <!-- =============================================== -->
+    <!-- stuff below this is stuff i added -->
+    <!-- =============================================== -->
+
+    <property name="junit.src.dir" value="${basedir}/src/junit"/>
+    <property name="peanut.home" location="../../tools/peanut"/>
+  
+      
+
+    
+    <!-- TODO: relative pathname (should be based on ${beehive.home}, or ${tools.home, or something similar -->
+    <property name="peanut.jar" location="../../tools/peanut/peanut.jar"/>
+  
+    
+    <taskdef name="peanut"
+	    classname="org.apache.beehive.peanut.PeanutTask"
+	    classpath="${peanut.jar}"/>
+    
+    
+    
+    <target name="run">
+      <peanut peanutHome="${peanut.home}" testfile="${junit.src.dir}/root.xml" fork="true">
+
+        <classpath>
+          <!--pathelement path="${os.ANT_CLASSPATH}"/-->
+          <pathelement path="${ant.jar}"/>
+          <pathelement path="${os.ANT_HOME}/lib/ant-launcher.jar"/>
+          <pathelement path="${tools.jar}"/>
+          <pathelement path="${junit.jar}"/>
+          <pathelement path="${velocity14.jar}"/>
+          <pathelement path="${velocitydep14}.jar"/>
+          <pathelement path="../build/jars/controls.jar"/>
+          <pathelement location="${build.beans}" />
+          <pathelement location="tools/lib/milton.jar"/>
+          <pathelement path="${build.tests.driver}"/>
+	      <pathelement location="${build.tests}" />
+	      <pathelement location="${peanut.jar}" />
+        </classpath>
+	
+      </peanut>
+    </target>  
+</project>

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Event.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Event.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+package org.apache.beehive.controls.test.controls.basic;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.events.EventSet;
+
+/**
+ * This is a basic control that tests event support code generation and runtime behavior
+ * for ControlBeans.
+ * <p>
+ * There is not currently a DRT test cases that exercises this control, but having it here
+ * will at least exercise callback event handling codegen paths.
+ */
+@ControlInterface
+public interface Event
+{
+    @EventSet
+    public interface EventSet1
+    {
+        public void set1Method1();
+        public int set1Method2();
+        public boolean set1OverloadedMethod();
+        public boolean set1OverloadedMethod(int anArg);
+    }
+
+    @EventSet
+    public interface EventSet2
+    {
+        public void set2Method1();
+        public int set2Method2();
+        public boolean set2OverloadedMethod();
+        public boolean set2OverloadedMethod(int anArg);
+    }
+
+    public void testEvents();
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/EventImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/EventImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+package org.apache.beehive.controls.test.controls.basic;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.events.Client;
+
+@ControlImplementation
+public class EventImpl implements Event
+{
+    @Client Event.EventSet1 eventSet1;
+    @Client Event.EventSet2 eventSet2;
+
+    public void testEvents() 
+    {
+        eventSet1.set1Method1();
+
+        eventSet2.set2Method2();
+    }
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Hello.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Hello.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.test.controls.basic;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlInterface
+public interface Hello
+{
+    //
+    // A simple enumerated type used to customize the greeting by gender
+    //
+    public enum GenderType
+    {
+        NEUTRAL, MALE, FEMALE
+    }
+
+    public @interface Gender
+    {
+        GenderType value();
+    }
+
+    /**
+     * Declare a simple PropertySet, that allows the salutation used by the custom
+     * control to be customized.
+     */
+    @PropertySet
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    @Retention(RetentionPolicy.RUNTIME)
+    public @interface Greeting
+    {
+        String salutation() default "Hello";
+        Gender gender() default @Gender(GenderType.NEUTRAL);
+    }
+
+    java.lang.String hello(java.lang.String name);
+
+    java.lang.String lastVisitor();
+
+    int visitorCount();
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/HelloImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/HelloImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.test.controls.basic;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+
+@ControlImplementation
+public class HelloImpl implements Hello, Extensible
+{ 
+    public String _lastVisitor = "<none>";
+    int _visitorCount = 0;
+
+    public String hello(String name)
+    {
+        _lastVisitor = name;
+        _visitorCount++;
+        return "Hello, " + name;
+    }
+
+    public String lastVisitor()
+    {
+        return _lastVisitor;
+    }
+
+    public int visitorCount()
+    {
+        return _visitorCount;
+    }
+
+    /**
+     * Implements the Extensible.invoke interface when a JCX-declared method is called
+     */
+    public Object invoke(Method method, Object [] args)
+    {
+        //
+        // To Be Implemented
+        //
+        return null; 
+    }
+} 

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperExcept.jcx
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperExcept.jcx	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+package org.apache.beehive.controls.test.controls.basic;
+
+import java.io.IOException;
+import org.apache.beehive.controls.api.bean.ControlExtension;
+
+/**
+ * This is a test extension that declares operations throwing different types of exceptions
+ * <p>
+ */
+@ControlExtension
+public interface OperExcept extends Operation
+{
+    public class LocalException extends Exception
+    {
+        LocalException(String message) { super(message); }
+    }
+
+    public void noException(Exception toThrow);
+    public void baseException(Exception toThrow) throws Exception;
+    public void runtimeException(Exception toThrow) throws RuntimeException;
+    public void multiException(Exception toThrow) throws IllegalAccessException, IOException;
+    public void localException(Exception toThrow) throws LocalException;
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperExtend.jcx
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperExtend.jcx	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+package org.apache.beehive.controls.test.controls.basic;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+
+/**
+ * This is a test extension that declares operations of various types
+ * <p>
+ */
+@ControlExtension
+public interface OperExtend extends Operation
+{
+    public void voidExtOperation();
+    public int  intExtOperation(int intArg);
+    public int [] intArrayExtOperation(int [] intArrayArg);
+    public int [][] intMultiArrayExtOperation(int [][] intMultiArrayArg);
+    public Integer integerExtOperation(Integer integerArg);
+    public Integer [] integerArrayExtOperation(Integer [] integerArrayArg);
+    public Integer [][] integerMultiArrayExtOperation(Integer [][] integerMultiArrayArg);
+    public Object [] multiArgsExtOperation(int intArg, Integer integerArg, String stringArg);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Operation.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/Operation.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+package org.apache.beehive.controls.test.controls.basic;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+/**
+ * This is a test interface that declares operations of various types
+ * <p>
+ */
+@ControlInterface
+public interface Operation
+{
+    public class LocalArg
+    {
+        int intArg;
+        String stringArg;
+    }
+
+    public void voidOperation();
+    public int  intOperation(int intArg);
+    public int [] intArrayOperation(int [] intArrayArg);
+    public int [][] intMultiArrayOperation(int [][] intMultiArrayArg);
+    public Integer integerOperation(Integer integerArg);
+    public Integer [] integerArrayOperation(Integer [] integerArrayArg);
+    public Integer [][] integerMultiArrayOperation(Integer [][] integerMultiArrayArg);
+    public Object [] multiArgsOperation(int intArg, Integer integerArg, String stringArg);
+    public LocalArg localArgOperation(LocalArg localArg);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperationImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/basic/OperationImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+package org.apache.beehive.controls.test.controls.basic;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.events.Client;
+
+@ControlImplementation
+public class OperationImpl implements Operation
+{
+    public void voidOperation() {};
+    public int  intOperation(int intArg) { return intArg; }
+    public int [] intArrayOperation(int [] intArrayArg) { return intArrayArg; }
+    public int [][] intMultiArrayOperation(int [][] intMultiArrayArg) { return intMultiArrayArg; }
+    public Integer integerOperation(Integer integerArg) { return integerArg; }
+    public Integer [] integerArrayOperation(Integer [] integerArrayArg) { return integerArrayArg; }
+    public Integer [][] integerMultiArrayOperation(Integer [][] integerMultiArrayArg) { return integerMultiArrayArg; }
+    public Object [] multiArgsOperation(int intArg, Integer integerArg, String stringArg)
+    {
+        return new Object [] { intArg, integerArg, stringArg };
+    }
+    public LocalArg localArgOperation(LocalArg localArg) { return localArg; }
+
+    public Object invoke(Object [] args) throws Throwable
+    {
+        // If the argument is an exception, throw it
+        if (args[0] instanceof Throwable)
+            throw (Throwable)args[0];
+
+        // otherwise, just echo it back, following the pattern above.
+        if (args.length == 1)
+        {
+            return args[0];
+        } 
+        else
+        {
+            return args;
+        }
+    }
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/Composer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/Composer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+package org.apache.beehive.controls.test.controls.composition;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * A simple control that tests control composition
+ */
+@ControlInterface
+public interface Composer
+{
+    //
+    // Returns a propertySet value for a simple nested control
+    //
+    public Annotation getControlPropertySet(Class propertySet);
+
+    //
+    // Returns a propertySet value for an extension nested control
+    //
+    public Annotation getExtensionControlPropertySet(Class propertySet);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/ComposerImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/ComposerImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,112 @@
+package org.apache.beehive.controls.test.controls.composition;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.events.EventHandler;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+import org.apache.beehive.controls.test.controls.properties.Props;
+import org.apache.beehive.controls.test.controls.properties.PropsExtension;
+
+@ControlImplementation
+public class ComposerImpl implements Composer
+{ 
+    static final long serialVersionUID = 1L;
+
+    @Control 
+    @Props.SimpleProps(simpleString="A field annotation value")
+    Props propControl;
+
+    @Control 
+    @PropsExtension.SimpleProps(simpleString="A different field annotation value")
+    private PropsExtension propExtControl;
+
+    @Nested.Index(1)
+    private @Control Nested nested1;
+
+    @Nested.Index(2)
+    /* package */@Control Nested nested2;
+
+    @Nested.Index(3)
+    protected @Control Nested nested3;
+
+    @Nested.Index(4)
+    public @Control Nested nested4;
+
+    /**
+     * Provides a simple test API to externally query the PropertySet values on a
+     * nested control.
+     */
+    public Annotation getControlPropertySet(Class propertySet)
+    {
+        return propControl.getControlPropertySet(propertySet);
+    }
+
+    public Annotation getExtensionControlPropertySet(Class propertySet)
+    {
+        return propExtControl.getControlPropertySet(propertySet);
+    }
+
+    //
+    // Define various event handlers for the nested controls
+    //
+    @EventHandler(field="nested1", eventSet=Nested.Return.class, eventName="returnVoid")
+    public void nested1ReturnVoid() { return; }
+
+    @EventHandler(field="nested1", eventSet=Nested.Return.class, eventName="returnString")
+    public String nested1ReturnString() { return "Hello"; }
+
+    @EventHandler(field="nested1", eventSet=Nested.Return.class, eventName="returnInt")
+    public int nested1ReturnInt() { return 21; }
+
+    @EventHandler(field="nested2", eventSet=Nested.Args.class, eventName="argsInt")
+    public int nested2ArgsInt(int value) { return value; } 
+
+    @EventHandler(field="nested2", eventSet=Nested.Args.class, eventName="argsString")
+    public String nested2ArgsString(String value) { return value; }
+
+    @EventHandler(field="nested2", eventSet=Nested.Args.class, eventName="argsMultiple")
+    public Object [] nested2ArgsMultiple(int val1, String val2) {return new Object[] {val1,val2};}
+
+    @EventHandler(field="nested3", eventSet=Nested.Except.class, eventName="exceptIO")
+    public void nested3ExceptIO() throws java.io.IOException
+    {
+        throw new java.io.IOException("Ouch");
+    }
+
+    @EventHandler(field="nested3", eventSet=Nested.Except.class, eventName="exceptRuntime")
+    public void nested3ExceptRuntime() throws java.lang.RuntimeException
+    {
+        throw new RuntimeException("Crash");
+    }
+
+    @EventHandler(field="nested3", eventSet=Nested.Except.class, eventName="exceptLocal")
+    public void nested3ExceptLocal() throws Nested.LocalException
+    {
+        throw new Nested.LocalException("Bang");
+    }
+
+    @EventHandler(field="nested3", eventSet=Nested.Except.class, eventName="exceptMultiple")
+    public void exceptMultiple() throws java.io.IOException, RuntimeException
+    {
+        throw new java.io.IOException("Play nice!");
+    }
+
+    @EventHandler(field="nested4", eventSet=Nested.Return.class, eventName="returnInt")
+    public int nested4ReturnInt() { return 99; }
+
+    @EventHandler(field="nested4", eventSet=Nested.Args.class, eventName="argsString")
+    public String nested4ArgsString(String value) { return value; }
+
+    @EventHandler(field="nested4", eventSet=Nested.Except.class, eventName="exceptLocal")
+    public void nested4ExceptLocal() throws Nested.LocalException
+    {
+        throw new Nested.LocalException("Bang");
+    }
+} 

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/Nested.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/Nested.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+package org.apache.beehive.controls.test.controls.composition;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.events.EventSet;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlInterface
+public interface Nested
+{
+    @PropertySet
+    @Target( {ElementType.TYPE, ElementType.FIELD} )
+    @Retention(RetentionPolicy.RUNTIME)
+    public @interface Index
+    {
+        int value();
+    }
+
+    @EventSet
+    public interface Return
+    {
+        void returnVoid();
+        String returnString();
+        int returnInt();
+    }
+
+    @EventSet
+    public interface Args
+    {
+        public int argsInt(int value);
+        public String argsString(String value);
+        public Object [] argsMultiple(int val1, String val2);
+    }
+
+    public class LocalException extends Exception
+    {
+        LocalException(String msg) { super(msg); }
+        LocalException(String msg, Throwable t) { super(msg,t); }
+    }
+
+    @EventSet
+    public interface Except
+    {
+        void exceptIO() throws java.io.IOException;
+        void exceptRuntime() throws java.lang.RuntimeException;
+        void exceptLocal() throws LocalException;
+        void exceptMultiple() throws java.io.IOException, RuntimeException;
+    }
+
+    public void fireEvent(String eventSet, String eventName);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/NestedImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/composition/NestedImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+package org.apache.beehive.controls.test.controls.composition;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.events.Client;
+
+@ControlImplementation
+public class NestedImpl implements Nested
+{ 
+    @Client Return  returnClient;
+    @Client Args    argsClient;
+    @Client Except  exceptClient;
+
+    public void fireEvent(String set, String name)
+    {
+    }
+} 

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/context/BaseContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/context/BaseContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+package org.apache.beehive.controls.test.controls.context;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlInterface
+public interface BaseContext
+{
+    java.lang.String hello(java.lang.String name);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/context/BaseContextImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/context/BaseContextImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.test.controls.context;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.context.ControlBeanContext.LifeCycle;
+import org.apache.beehive.controls.api.context.ResourceContext;
+import org.apache.beehive.controls.api.context.ResourceContext.ResourceEvents;
+import org.apache.beehive.controls.api.events.EventHandler;
+
+import org.apache.beehive.controls.test.controls.util.TestContext;
+
+@ControlImplementation
+public class BaseContextImpl implements BaseContext
+{ 
+    @Context ControlBeanContext context;
+    @Context ResourceContext resourceContext;
+    @Context TestContext testContext;
+
+    public String hello(String name)
+    {
+        testContext.addEvent("BaseContextImpl.hello " + name);
+        return "Hello, " + name;
+    }
+    
+    @EventHandler (field="context", eventSet=LifeCycle.class, eventName="onCreate")
+    public void onCreate() 
+    {
+        testContext.addEvent("BaseContextImpl.onCreate");
+    }
+
+    @EventHandler (field="resourceContext", eventSet=ResourceEvents.class, eventName="onAcquire")
+    /* package */ void onAcquire() 
+    {
+        testContext.addEvent("BaseContextImpl.onAcquire");
+    }
+
+    @EventHandler (field="resourceContext", eventSet=ResourceEvents.class, eventName="onRelease")
+    protected void onRelease()
+    {
+        testContext.addEvent("BaseContextImpl.onRelease");
+    }
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/instantiate/HelloControl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/instantiate/HelloControl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+//
+// Copyright � 2001-2002 BEA Systems.  All rights reserved.
+//
+
+package org.apache.beehive.controls.test.controls.instantiate;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+@ControlInterface
+public interface HelloControl
+{
+    public String hello(String input);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/instantiate/HelloControlImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/instantiate/HelloControlImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+package org.apache.beehive.controls.test.controls.instantiate;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+
+/**
+ * This test is one step further from a simple custome control
+ * This test has a simple custome control invoking another
+ * nested simple custome control
+ */
+
+@ControlImplementation 
+public class HelloControlImpl implements HelloControl
+{
+    public String hello(String input)
+    {
+	return input;
+    }
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/NestProps.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/NestProps.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+package org.apache.beehive.controls.test.controls.properties;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * A simple control that nests the Props control, for nested property testing.
+ */
+@ControlInterface
+public interface NestProps
+{
+    //
+    // Returns a propertySet value for a simple nested control
+    //
+    public Annotation getControlPropertySet(Class propertySet);
+
+    //
+    // Returns a propertySet value for an extension nested control
+    //
+    public Annotation getExtensionControlPropertySet(Class propertySet);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/NestPropsImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/NestPropsImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+package org.apache.beehive.controls.test.controls.properties;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlImplementation
+public class NestPropsImpl implements NestProps
+{ 
+    static final long serialVersionUID = 1L;
+
+    @Control 
+    @Props.SimpleProps(simpleString="A field annotation value")
+    Props propControl;
+
+    @Control 
+    @PropsExtension.ArrayProps(arrayString={"One","Two","Three"})
+    private PropsExtension propExtControl;
+
+    /**
+     * Provides a simple test API to externally query the PropertySet values on a
+     * nested control.
+     */
+    public Annotation getControlPropertySet(Class propertySet)
+    {
+        return propControl.getControlPropertySet(propertySet);
+    }
+
+    public Annotation getExtensionControlPropertySet(Class propertySet)
+    {
+        return propExtControl.getControlPropertySet(propertySet);
+    }
+} 

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/Props.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/Props.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+package org.apache.beehive.controls.test.controls.properties;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * A simple control that can be used for property testing of basic primitive properties,
+ * as well as nested an array property types.
+ */
+@ControlInterface
+public interface Props
+{
+    //
+    // A simple enumeration used to test enum annotations
+    //
+    public enum SimpleEnum { ChoiceA, ChoiceB, ChoiceC; }
+
+    //
+    // Define static final constants for SimpleProps defaults
+    //
+    static final int INT_DEFAULT = 87;
+    static final String STRING_DEFAULT = "Hello";
+    static final Class CLASS_DEFAULT = java.lang.Object.class;
+    static final SimpleEnum ENUM_DEFAULT = SimpleEnum.ChoiceA;
+
+    //
+    //
+    // Define a PropertySet that tests simple types
+    //
+    @PropertySet
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    public @interface SimpleProps
+    {
+        int simpleInt() default INT_DEFAULT;
+        String simpleString() default STRING_DEFAULT;
+        Class simpleClass() default java.lang.Object.class;
+        SimpleEnum simpleEnum() default SimpleEnum.ChoiceA;
+    }
+
+    //
+    // Define static final constants for ArrayProps defaults
+    //
+    static final int [] ARRAY_INT_DEFAULT = {99, 33, 66, 22};
+    static final String [] ARRAY_STRING_DEFAULT = {"How", "are", "you", ",", "today", "?"};
+    static final Class [] ARRAY_CLASS_DEFAULT = {java.util.HashMap.class, java.util.Iterator.class};
+    static final SimpleEnum [] ARRAY_ENUM_DEFAULT = { SimpleEnum.ChoiceB, SimpleEnum.ChoiceC };
+
+    //
+    // Define a PropertySet that tests array types
+    //
+    @PropertySet
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target( {ElementType.TYPE, ElementType.FIELD} )
+    public @interface ArrayProps
+    {
+        int [] arrayInt() default {99, 33, 66, 22};
+        String [] arrayString() default {"How", "are", "you", ",", "today", "?"};
+        Class [] arrayClass() default {java.util.HashMap.class, java.util.Iterator.class};
+        SimpleEnum [] arrayEnum() default { SimpleEnum.ChoiceB, SimpleEnum.ChoiceC };
+    }
+
+    //
+    // Define static final constants for SimpleProps defaults
+    //
+    static final int ANNOT_INT_DEFAULT = 9999999;
+    static final String ANNOT_STRING_DEFAULT = "Hola";
+    static final Class ANNOT_CLASS_DEFAULT = java.beans.Beans.class;
+    static final SimpleEnum ANNOT_ENUM_DEFAULT = SimpleEnum.ChoiceC;
+
+    //
+    // Define a PropertySet that tests properties that are themselves annotation types
+    //
+    @PropertySet
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    public @interface TestAnnot
+    {
+        SimpleProps simpleAnnot()
+            default @SimpleProps(
+                simpleInt = ANNOT_INT_DEFAULT,
+                simpleString = ANNOT_STRING_DEFAULT,
+                simpleClass =  java.beans.Beans.class,
+                simpleEnum = SimpleEnum.ChoiceC);
+        ArrayProps arrayAnnot();
+    }
+
+    //
+    // Define property keys to enable access to test members in a PropertyMap
+    //
+    public Annotation getControlPropertySet(Class propertySet);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/PropsExtension.jcx
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/PropsExtension.jcx	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+package org.apache.beehive.controls.test.controls.properties;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+
+import org.apache.beehive.controls.api.properties.PropertyKey;
+
+/**
+ * Defines a new extension interface that derives from Props
+ */
+@ControlExtension
+@Props.SimpleProps(simpleInt=3)   // matches INT_PRIM_VALUE below
+public interface PropsExtension extends Props
+{
+    // the class annotation value set above
+    public static int SIMPLE_INT_VALUE = 3;
+
+    // the method annotation vales set below
+    public static Class SIMPLE_CLASS_VALUE1 = java.beans.Beans.class;
+    public static Class SIMPLE_CLASS_VALUE2 = org.apache.beehive.controls.api.bean.ControlBean.class;
+    @SimpleProps (simpleClass=java.beans.Beans.class)
+    public Object getPropertySetOnMethod1(Class propertySet);
+
+    @SimpleProps (simpleClass=org.apache.beehive.controls.api.bean.ControlBean.class)
+    public Object getPropertySetOnMethod2(Class propertySet);
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/PropsImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/properties/PropsImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.test.controls.properties;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+@ControlImplementation
+public class PropsImpl implements Props, Extensible
+{ 
+    static final long serialVersionUID = 1L;
+
+    @Context
+    ControlBeanContext context;
+
+    /**
+     * Provides a simple test API to externally query the control instance PropertySet values 
+     * returned by ControlBeanContext APIs
+     */
+    public Annotation getControlPropertySet(Class propertySet)
+    {
+        return context.getControlPropertySet(propertySet);
+    }
+
+    /**
+     * This implementation of Extensible.invoke allows the testing of annotations found
+     * on JCX methods
+     */
+    public Object invoke(Method m, Object [] args) throws Throwable
+    {
+        if (!(args[0] instanceof Class) || 
+            !(((Class)args[0]).isAnnotationPresent(PropertySet.class)))
+            throw new IllegalArgumentException("Arg 0 must be an PropertySet interface!");
+
+        return context.getMethodPropertySet(m, (Class)args[0]);
+    }
+} 

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/util/TestBeanContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/util/TestBeanContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+package org.apache.beehive.controls.test.controls.util;
+
+import java.beans.beancontext.BeanContextServices;
+import java.beans.beancontext.BeanContextServiceProvider;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Vector;
+import java.util.Arrays;
+
+import org.apache.beehive.controls.runtime.bean.ControlContainerContext;
+
+/**
+ * The TestBeanContext is a simple standalone bean context intended to be used as a test harness
+ * for control drt tests.  The goal is to enable controls to be instantiated and used within
+ * a standalone VM, and to give the client control of ControlContainerContext behavior, such
+ * as resource scoping.
+ */
+public class TestBeanContext extends ControlContainerContext implements TestContext
+{
+    /**
+     * The ControlBeanContextProvider inner class acts as a single BeanContext service
+     * provider for the ControlBeanContext service class.  The implementation is simple,
+     * because the runtime ControlBeanContext implementation class directly implements
+     * this interface.
+     */
+    private static class TestContextProvider implements BeanContextServiceProvider
+    {
+        //
+        // BeanContextServiceProvider.getService()
+        //
+        public Object getService(BeanContextServices bcs, Object requestor, Class serviceClass,
+                                 Object serviceSelector)
+        {
+            //
+            // Contextual services for a ControlBean is provided by the peer context
+            // instance.
+            //
+            return bcs;
+        }
+
+        //
+        // BeanContextServiceProvider.releaseService()
+        //
+        public void releaseService(BeanContextServices bcs, Object requestor, Object service)
+        {
+            // noop, because context exists whether referenced or not
+        }
+
+        //
+        // BeanContextServiceProvider.getContextServiceSelectors()
+        //
+        public Iterator getCurrentServiceSelectors(BeanContextServices bcs, Class serviceClass)
+        {
+            return null;    // no selectors
+        }
+    }
+
+    /**
+     * A singleton instance of the ControlBeanContextProvider class is that will be registered
+     * on all ControlBeanContext instances.  The provider can be a singleton because it is
+     * completely stateless and thread-safe.
+     */
+    static private TestContextProvider theProvider = new TestContextProvider();
+
+    /**
+     * Called by BeanContextSupport superclass during construction and deserialization to
+     * initialize subclass transient state
+     */
+    public void initialize()
+    {
+        super.initialize();
+
+        //
+        // Register the ControlBeanContext provider on all new context instances.
+        //
+        addService(org.apache.beehive.controls.test.controls.util.TestContext.class, theProvider);
+    }
+
+    // TestContext.addEvent()
+    public void addEvent(String event)
+    {
+        _events.add(event);
+    }
+
+    // TestContext.resetEvents()
+    public void resetEvents()
+    {
+        _events.clear();
+    }
+
+    // TestContext.getEvents();
+    public String [] getEvents()
+    {
+        String [] retval = new String [_events.size()];
+        _events.toArray(retval);
+        return retval;
+    }
+
+    Vector<String> _events = new Vector<String>();
+}

Added: incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/util/TestContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/controls/org/apache/beehive/controls/test/controls/util/TestContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+package org.apache.beehive.controls.test.controls.util;
+
+import java.util.Collection;
+
+/**
+ * The TestContext is contextual service interface that is part of the basic test harness
+ * It is implemented by the TestBeanContext class
+ */
+public interface TestContext
+{
+    public void addEvent(String event);
+
+    public void resetEvents();
+
+    public String [] getEvents();
+}

Added: incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/context/DriveBaseContextBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/context/DriveBaseContextBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,184 @@
+package org.apache.beehive.controls.test.driver.context;
+
+import java.util.Arrays;
+import com.bea.milton.common.Report;
+import org.apache.beehive.controls.test.controls.util.TestBeanContext;
+import org.apache.beehive.controls.test.controls.context.BaseContextBean;
+
+/* This class contains the logic to test HelloControlBean
+	It will exercise the control in a certain way and generate a
+	test result report
+ */
+
+public class DriveBaseContextBean
+{
+
+    /**
+     * Returns a new TestBeanContext to act as a container for control testing.
+     */
+    private TestBeanContext createTestBeanContext() throws Exception
+    {
+        return new TestBeanContext();
+    }
+
+	/**
+	 * When one event raised to a bean instance
+	 */
+	public Report testSingleBean(BaseContextBean contextBean){
+
+		Report report=new Report();
+
+		TestBeanContext testContext =null;
+
+		try{
+        	testContext = createTestBeanContext();
+            testContext.add(contextBean);
+        	testContext.beginContext();
+		}
+		catch(Exception e){
+			report.setStatus(Report.FAIL);
+			report.setMessage("TestBeanContext could not be created.");
+			report.setExceptionStack(e);
+
+			return report;
+		}
+
+        try
+        {
+            testContext.resetEvents();
+            contextBean.hello("kyle");
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+        if(checkEvents(testContext.getEvents(),
+                    new String [] { "BaseContextImpl.onCreate", "BaseContextImpl.onAcquire",
+                                    "BaseContextImpl.hello kyle", "BaseContextImpl.onRelease" }))
+          report.setStatus(Report.PASS);
+        else{
+          report.setStatus(Report.FAIL);
+		  report.setMessage(Arrays.toString(testContext.getEvents()));
+		}
+
+		return report;
+	}
+
+	/**
+	 * When multiple events raised to same bean instance
+	 */
+	public Report testMultipleEvents(BaseContextBean contextBean){
+
+		Report report=new Report();
+
+		TestBeanContext testContext =null;
+
+		try{
+	        testContext = createTestBeanContext();
+            testContext.add(contextBean);
+			testContext.beginContext();
+		}
+		catch(Exception e){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("TestBeanContext could not be created.");
+			report.setExceptionStack(e);
+
+			return report;
+		}
+        try
+        {
+            testContext.resetEvents();
+            contextBean.hello("ken");
+            contextBean.hello("mike");
+            contextBean.hello("lawrence");
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+		boolean rslt= checkEvents(testContext.getEvents(),
+                    new String [] { "BaseContextImpl.onCreate", "BaseContextImpl.onAcquire",
+                                    "BaseContextImpl.hello ken", "BaseContextImpl.hello mike",
+                                    "BaseContextImpl.hello lawrence", "BaseContextImpl.onRelease" });
+        if(rslt)
+        	report.setStatus(Report.PASS);
+        else{
+			report.setStatus(Report.FAIL);
+			report.setMessage(Arrays.toString(testContext.getEvents()));
+		}
+		return report;
+	}
+
+	/**
+	 * When two events raised to two different bean instance
+	 */
+	public Report testParallelEvents(BaseContextBean contextBean1,BaseContextBean contextBean2){
+
+		Report report=new Report();
+
+		TestBeanContext testContext =null;
+
+		try{
+        	testContext = createTestBeanContext();
+            testContext.add(contextBean1);
+            testContext.add(contextBean2);
+        	testContext.beginContext();
+		}
+		catch(Exception e){
+			report.setStatus(Report.FAIL);
+			report.setMessage("TestBeanContext could not be created.");
+			report.setExceptionStack(e);
+
+			return report;
+		}
+        try
+        {
+            testContext.resetEvents();
+            contextBean1.hello("kyle");
+            contextBean2.hello("ken");
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+		boolean rslt=checkEvents(testContext.getEvents(),
+                    new String [] { "BaseContextImpl.onCreate", "BaseContextImpl.onAcquire",
+                                    "BaseContextImpl.hello kyle",
+                                    "BaseContextImpl.onCreate", "BaseContextImpl.onAcquire",
+                                    "BaseContextImpl.hello ken",
+                                    "BaseContextImpl.onRelease", "BaseContextImpl.onRelease" });
+        if (rslt)
+        	report.setStatus(Report.PASS);
+        else{
+			report.setStatus(Report.FAIL);
+			report.setMessage(Arrays.toString(testContext.getEvents()));
+            report.setExceptionStack(new Exception("Expected events not found"));
+		}
+		return report;
+
+	}
+
+    private boolean checkEvents(String [] expectResults, String [] actualResults)
+    {
+        boolean result=true;
+
+        if (expectResults.length != actualResults.length)
+        {
+			result=false;
+        }
+		else{
+	        for (int i = 0; i < expectResults.length; i++)
+	        {
+	            if (!expectResults[i].equals(actualResults[i]))
+	            {
+					result=false;
+					break;
+	            }
+	        }
+   		}
+   		return result;
+
+    }
+
+}

Added: incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/instantiate/DriveHelloControl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/instantiate/DriveHelloControl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+package org.apache.beehive.controls.test.driver.instantiate;
+
+import com.bea.milton.common.Report;
+import org.apache.beehive.controls.test.controls.instantiate.HelloControlBean;
+
+/* This class contains the logic to test HelloControlBean
+	It will exercise the control in a certain way and generate a
+	test result report
+ */
+
+public class DriveHelloControl
+{
+	private HelloControlBean myControl;
+
+	public void setControl(HelloControlBean bean){
+
+		myControl=bean;
+	}
+
+	public Report doTest(){
+
+		Report report=new Report();
+
+		if (myControl==null)
+			report.setStatus(Report.FAIL);
+		else
+		{
+			if (myControl.hello(Report.PASS).equals(Report.PASS))
+				report.setStatus(Report.PASS);
+			else
+				report.setStatus(Report.FAIL);
+
+		}
+		return report;
+	}
+
+}

Added: incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/driver/org/apache/beehive/controls/test/driver/property/DrivePropsBeans.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,475 @@
+package org.apache.beehive.controls.test.driver.property;
+
+import com.bea.milton.common.Report;
+
+import java.beans.Beans;
+
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.properties.BeanPropertyMap;
+import org.apache.beehive.controls.api.properties.PropertyKey;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+
+import org.apache.beehive.controls.test.controls.util.TestBeanContext;
+import org.apache.beehive.controls.test.controls.properties.Props;
+import org.apache.beehive.controls.test.controls.properties.Props.ArrayProps;
+import org.apache.beehive.controls.test.controls.properties.Props.SimpleEnum;
+import org.apache.beehive.controls.test.controls.properties.Props.SimpleProps;
+import org.apache.beehive.controls.test.controls.properties.Props.TestAnnot;
+import org.apache.beehive.controls.test.controls.properties.PropsBean;
+import org.apache.beehive.controls.test.controls.properties.PropsExtension;
+import org.apache.beehive.controls.test.controls.properties.PropsExtensionBean;
+import org.apache.beehive.controls.test.controls.properties.NestPropsBean;
+
+/* This class contains the logic to test HelloControlBean
+	It will exercise the control in a certain way and generate a
+	test result report
+ */
+
+public class DrivePropsBeans
+{
+
+    /**
+     * Returns a new TestBeanContext to act as a container for control testing.
+     */
+    private TestBeanContext createTestBeanContext()
+    {
+        return new TestBeanContext();
+    }
+
+
+	public Report testClientAccess(PropsBean propBean){
+
+		Report report=new Report();
+
+        //*************************************************************************************
+        // All of the tests below have the following basic structure:
+        //      1. get the initial property value and check that it matches the default
+        //      2. set the property value
+        //      3. get the property value and check that it matches the set value
+        //*************************************************************************************
+
+        //
+        // int property test
+        //
+        int simpleInt = propBean.getSimpleInt();
+        if (simpleInt != Props.INT_DEFAULT){
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for int:" + simpleInt);
+			return report;
+		}
+        propBean.setSimpleInt(237);
+        simpleInt = propBean.getSimpleInt();
+        if (simpleInt != 237){
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for int:" + simpleInt);
+			return report;
+		}
+
+        //
+        // String property test
+        //
+        String simpleString = propBean.getSimpleString();
+        if (simpleString == null || !simpleString.equals(Props.STRING_DEFAULT)){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for String:" + simpleString);
+			return report;
+		}
+
+        String testSimpleString = new String("howdy");
+        propBean.setSimpleString(testSimpleString);
+        simpleString = propBean.getSimpleString();
+        if (!simpleString.equals(testSimpleString)){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for String:" + simpleString);
+			return report;
+		}
+
+
+        //
+        // Class property test
+        //
+        Class simpleClass = propBean.getSimpleClass();
+        if (simpleClass == null || !simpleClass.equals(Props.CLASS_DEFAULT)){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for Class:" + simpleClass);
+			return report;
+
+		}
+
+        Class testSimpleClass = java.util.Vector.class;
+        propBean.setSimpleClass(testSimpleClass);
+        simpleClass = propBean.getSimpleClass();
+        if (!simpleClass.equals(testSimpleClass)){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for Class:" + simpleClass);
+			return report;
+		}
+
+        //
+        // Enum property test
+        //
+        SimpleEnum simpleEnum = propBean.getSimpleEnum();
+        if (simpleEnum == null || !simpleEnum.equals(Props.ENUM_DEFAULT)){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for enum:" + simpleEnum);
+			return report;
+		}
+
+        SimpleEnum testSimpleEnum = SimpleEnum.ChoiceB;
+        propBean.setSimpleEnum(testSimpleEnum);
+        simpleEnum = propBean.getSimpleEnum();
+        if (!simpleEnum.equals(testSimpleEnum)){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for enum:" + simpleEnum);
+			return report;
+		}
+
+        //
+        // int [] property test
+        //
+        int [] arrayInt = propBean.getArrayInt();
+        if (arrayInt == null || arrayInt.length != Props.ARRAY_INT_DEFAULT.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for int:" + arrayInt);
+			return report;
+		}
+
+        for (int i = 0; i < arrayInt.length; i++){
+            if (arrayInt[i] != Props.ARRAY_INT_DEFAULT[i]){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad default for int[" + i + "]:" + arrayInt[i]);
+				return report;
+			}
+		}
+
+        int [] testArrayInt = {1, 2, 3, 4, 5};
+        propBean.setArrayInt(testArrayInt);
+        arrayInt = propBean.getArrayInt();
+        if (arrayInt == null || arrayInt.length != testArrayInt.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get size for arrayInt:" + arrayInt);
+			return report;
+		}
+
+        for (int i = 0; i < arrayInt.length; i++){
+            if (arrayInt[i] != testArrayInt[i]){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad get value for arrayInt["+i+"]:"+arrayInt[i]);
+				return report;
+			}
+		}
+
+        //
+        // String [] property test
+        //
+        String [] arrayString = propBean.getArrayString();
+        if (arrayString == null || arrayString.length != Props.ARRAY_STRING_DEFAULT.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for String []:" + arrayString);
+			return report;
+		}
+
+        for (int i = 0; i < arrayString.length; i++){
+            if (!arrayString[i].equals(Props.ARRAY_STRING_DEFAULT[i])){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad default for String []:" + arrayString);
+				return report;
+			}
+		}
+
+        String [] testArrayString = { "fee", "fi", "fo", "fum" };
+        propBean.setArrayString(testArrayString);
+        arrayString = propBean.getArrayString();
+        if (arrayString.length != testArrayString.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get size for String array:" + arrayString);
+			return report;
+	   	}
+
+        for (int i = 0; i < arrayString.length; i++){
+            if (!arrayString[i].equals(testArrayString[i])){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad get value for arrayString["+i+"]:"+arrayString[i]);
+				return report;
+			}
+		}
+
+        //
+        // Class [] property test
+        //
+        Class [] arrayClass = propBean.getArrayClass();
+        if (arrayClass == null || arrayClass.length != Props.ARRAY_CLASS_DEFAULT.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for Class []:" + arrayClass);
+			return report;
+		}
+
+        for (int i = 0; i < arrayClass.length; i++){
+            if (!arrayClass[i].equals(Props.ARRAY_CLASS_DEFAULT[i])){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad default for Class []:" + arrayClass);
+				return report;
+			}
+		}
+
+        Class [] testArrayClass = {Integer.class, Long.class, Short.class, Float.class,
+                                   Double.class, Character.class, Boolean.class};
+        propBean.setArrayClass(testArrayClass);
+        arrayClass = propBean.getArrayClass();
+
+        if (arrayClass.length != testArrayClass.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get size for Class array:" + arrayClass);
+			return report;
+		}
+
+        for (int i = 0; i < arrayClass.length; i++){
+            if (!arrayClass[i].equals(testArrayClass[i])){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad get value for arrayClass["+i+"]:"+arrayClass[i]);
+				return report;
+			}
+		}
+
+        //
+        // Enum [] property test
+        //
+        SimpleEnum [] arrayEnum = propBean.getArrayEnum();
+        if (arrayEnum == null || arrayEnum.length != Props.ARRAY_ENUM_DEFAULT.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for Class []:" + arrayEnum);
+			return report;
+		}
+
+        for (int i = 0; i < arrayEnum.length; i++){
+            if (!arrayEnum[i].equals(Props.ARRAY_ENUM_DEFAULT[i])){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad default for Class []:" + arrayEnum);
+				return report;
+			}
+		}
+        SimpleEnum [] testArrayEnum =
+            { SimpleEnum.ChoiceB, SimpleEnum.ChoiceC, SimpleEnum.ChoiceA };
+        propBean.setArrayEnum(testArrayEnum);
+        arrayEnum = propBean.getArrayEnum();
+        if (arrayEnum.length != testArrayEnum.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get size for Class array:" + arrayEnum);
+			return report;
+		}
+        for (int i = 0; i < arrayEnum.length; i++){
+            if (!arrayEnum[i].equals(testArrayEnum[i])){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad get value for arrayEnum["+i+"]:"+arrayEnum[i]);
+				return report;
+			}
+		}
+
+        //
+        // Annotation property test
+        //
+        SimpleProps simpleAnnot = propBean.getSimpleAnnot();
+        if (simpleAnnot == null){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("unexpected null default for annotation:" + simpleAnnot);
+			return report;
+		}
+        if (simpleAnnot.simpleInt() != Props.ANNOT_INT_DEFAULT){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for int annotation:" + simpleAnnot.simpleInt());
+			return report;
+		}
+
+        if (!Props.ANNOT_STRING_DEFAULT.equals(simpleAnnot.simpleString())){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for String annotation:" + simpleAnnot.simpleString());
+			return report;
+		}
+
+        if (!Props.ANNOT_CLASS_DEFAULT.equals(simpleAnnot.simpleClass())){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for Class annotation:" + simpleAnnot.simpleClass());
+			return report;
+		}
+
+        if (simpleAnnot.simpleEnum() != Props.ANNOT_ENUM_DEFAULT){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad default for enum annotation:" + simpleAnnot.simpleEnum());
+			return report;
+		}
+
+        PropertyMap simpleAnnotMap = new BeanPropertyMap(SimpleProps.class);
+        Integer testAnnotInt = new Integer(5150);
+        simpleAnnotMap.setProperty(new PropertyKey(SimpleProps.class, "simpleInt"),
+                                   testAnnotInt);
+        String testAnnotString = new String("abracadabra");
+        simpleAnnotMap.setProperty(new PropertyKey(SimpleProps.class, "simpleString"),
+                                   testAnnotString);
+        Class testAnnotClass = org.apache.beehive.controls.api.bean.Control.class;
+        simpleAnnotMap.setProperty(new PropertyKey(SimpleProps.class, "simpleClass"),
+                                   testAnnotClass);
+
+        propBean.setSimpleAnnot(simpleAnnotMap);
+
+        simpleAnnot = propBean.getSimpleAnnot();
+        if (simpleAnnot == null){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("unexpected null value for annotation:" + simpleAnnot);
+			return report;
+		}
+
+        if (simpleAnnot.simpleInt() != testAnnotInt.intValue()){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for annotation int:" + simpleAnnot.simpleInt());
+			return report;
+		}
+
+        if (!testAnnotString.equals(simpleAnnot.simpleString())){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for annotation String:" + simpleAnnot.simpleString());
+			return report;
+		}
+
+        if (!testAnnotClass.equals(simpleAnnot.simpleClass())){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for annotation Class:" + simpleAnnot.simpleClass());
+			return report;
+		}
+
+		report.setStatus(Report.PASS);
+		return report;
+	}
+
+	public Report testImplAccess(PropsExtensionBean propExtBean, NestPropsBean nestBean){
+
+		Report report=new Report();
+
+        Props.SimpleProps simpleProps = (SimpleProps)propExtBean.getControlPropertySet(SimpleProps.class);
+        if (simpleProps.simpleInt() != PropsExtension.SIMPLE_INT_VALUE){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for JCX class property:" + simpleProps.simpleInt());
+			return report;
+		}
+
+        simpleProps = (SimpleProps)propExtBean.getPropertySetOnMethod1(SimpleProps.class);
+        if (!simpleProps.simpleClass().equals(PropsExtension.SIMPLE_CLASS_VALUE1)){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for JCX method property:" + simpleProps.simpleClass());
+			return report;
+		}
+
+        simpleProps = (SimpleProps)propExtBean.getPropertySetOnMethod2(SimpleProps.class);
+        if (!simpleProps.simpleClass().equals(PropsExtension.SIMPLE_CLASS_VALUE2)){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for JCX method property:" + simpleProps.simpleClass());
+			return report;
+		}
+
+        simpleProps = (SimpleProps)nestBean.getControlPropertySet(SimpleProps.class);
+        if (!simpleProps.simpleString().equals("A field annotation value")){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for JCX field annotation:" + simpleProps.simpleString());
+			return report;
+		}
+        String [] arrayExpect = {"One", "Two", "Three"};
+        ArrayProps arrayProps = (ArrayProps)nestBean.getExtensionControlPropertySet(ArrayProps.class);
+        String [] arrayString = arrayProps.arrayString();
+        if (arrayString.length != arrayExpect.length){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad value for JCX field annotation:" + arrayString);
+			return report;
+		}
+
+        for (int i = 0; i < arrayExpect.length; i++){
+            if (!arrayString[i].equals(arrayExpect[i])){
+
+				report.setStatus(Report.FAIL);
+				report.setMessage("bad get value for JCX field annotation:" + arrayString);
+				return report;
+			}
+		}
+
+        simpleProps = (SimpleProps)nestBean.getExtensionControlPropertySet(SimpleProps.class);
+        if (simpleProps.simpleInt() != PropsExtension.SIMPLE_INT_VALUE){
+
+			report.setStatus(Report.FAIL);
+			report.setMessage("bad get value for nested JCX class property:" + simpleProps.simpleInt());
+			return report;
+		}
+
+		report.setStatus(Report.PASS);
+		return report;
+	}
+
+	public Report testClientAccessInContainer(PropsBean propBean){
+
+		Report report=new Report();
+
+        TestBeanContext testContext = createTestBeanContext();
+        testContext.beginContext();
+        try
+        {
+            report=testClientAccess(propBean);
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+		return report;
+	}
+
+	public Report testImplAccessInContainer(PropsExtensionBean propExtBean, NestPropsBean nestBean){
+
+		Report report=new Report();
+
+        TestBeanContext testContext = createTestBeanContext();
+        testContext.beginContext();
+        try
+        {
+            report=testImplAccess(propExtBean,nestBean);
+        }
+        finally
+        {
+            testContext.endContext();
+        }
+
+		return report;
+	}
+
+}

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/root.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/root.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<project name="ROOT" default="na" >
+    <target name="na" >
+        <test-suite testunit="na" >
+              <test-suite-call testfile="test\root.xml" />
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/context/ContextTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/context/ContextTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,84 @@
+package org.apache.beehive.controls.test.java.context;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import java.beans.Beans;
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.test.controls.context.BaseContextBean;
+import org.apache.beehive.controls.test.driver.context.DriveBaseContextBean;
+
+import com.bea.milton.common.Report;
+
+
+public class ContextTest extends TestCase
+{
+    public ContextTest( String s ) { super( s ); }
+
+    public void setUp() { }
+
+
+    /**
+     * Creates a new ControlBean instance based upon the specified class name
+     */
+    private ControlBean createTestBean(String beanClassName) throws Exception
+    {
+        return (ControlBean)Beans.instantiate(Thread.currentThread().getContextClassLoader(),
+                                              beanClassName);
+    }
+
+    /**
+     * Test basic Context events for Controls
+     */
+    public void testContextEventSingle() throws Exception
+    {
+		BaseContextBean contextBean = (BaseContextBean)createTestBean("org.apache.beehive.controls.test.controls.context.BaseContextBean");
+
+		DriveBaseContextBean driver=new DriveBaseContextBean();
+		Report report=driver.testSingleBean(contextBean);
+
+        if (!Report.PASS.equals(report.getStatus()))
+        {
+            System.err.println("Message: " + report.getMessage());
+            System.err.println("Exception: " + report.getExceptionStack());
+            fail("testContextEventSingle failed");
+        }
+    }
+
+    /**
+     * Test basic Context events for Controls for multiple invocations in the same context
+     */
+    public void testContextEventMultiple() throws Exception
+    {
+		BaseContextBean contextBean = (BaseContextBean)createTestBean("org.apache.beehive.controls.test.controls.context.BaseContextBean");
+
+		DriveBaseContextBean driver=new DriveBaseContextBean();
+		Report report=driver.testMultipleEvents(contextBean);
+
+        if (!Report.PASS.equals(report.getStatus()))
+        {
+            System.err.println("Message: " + report.getMessage());
+            System.err.println("Exception: " + report.getExceptionStack());
+            fail("testContextEventMultiple failed");
+        }
+    }
+
+    /**
+     * Test basic Context events for Controls, for multiple controls used in the same context
+     */
+    public void testContextEventParallel() throws Exception
+    {
+		BaseContextBean contextBean1 = (BaseContextBean)createTestBean("org.apache.beehive.controls.test.controls.context.BaseContextBean");
+        BaseContextBean contextBean2 = (BaseContextBean)createTestBean("org.apache.beehive.controls.test.controls.context.BaseContextBean");
+		DriveBaseContextBean driver=new DriveBaseContextBean();
+		Report report=driver.testParallelEvents(contextBean1,contextBean2);
+
+        if (!Report.PASS.equals(report.getStatus()))
+        {
+            System.err.println("Message: " + report.getMessage());
+            System.err.println("Exception: " + report.getExceptionStack());
+            fail("testContextEventParallel failed");
+        }
+	}
+
+}

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/context/test.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/context/test.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<project name="org.apache.beehive.controls.test.java.context" default="org-apache-beehive-controls-test-java-context" >
+    <target name="org-apache-beehive-controls-test-java-context" >
+        <test-suite testunit="org-apache-beehive-controls-test-java-context" >
+        <test name="ContextTest" timeoutSeconds="300" >
+            <test-metadata>
+                <freq>daily</freq>
+                <status>active</status>
+            </test-metadata>
+            <junit testclass="org.apache.beehive.controls.test.java.context.ContextTest" />
+        </test>
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/instantiate/TestInstantiate.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/instantiate/TestInstantiate.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+package org.apache.beehive.controls.test.java.instantiate;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import java.beans.Beans;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.bean.ControlBean;
+
+import org.apache.beehive.controls.test.controls.instantiate.HelloControlBean;
+
+public class TestInstantiate extends TestCase
+{
+
+    @Control
+    public HelloControlBean myHelloBean;
+
+
+    public TestInstantiate(String s) { super(s); }
+
+    /**
+     * Test instantiating a custom control programmatically
+     */
+    public void testProgrammaticInstantiation() throws Exception
+    {
+
+		HelloControlBean hc=(HelloControlBean)java.beans.Beans.instantiate( Thread.currentThread().getContextClassLoader() ,
+		"org.apache.beehive.controls.test.controls.instantiate.HelloControlBean");
+
+		Assert.assertNotNull(hc);
+		Assert.assertEquals(hc.hello("Bob"),"Bob");
+    }
+
+    /**
+     * Test instantiating a custom control declaratively
+     */
+    public void testDeclarativeInstantiation() throws Exception
+    {
+		Assert.assertNotNull(myHelloBean);
+		Assert.assertEquals(myHelloBean.hello("Bob"),"Bob");
+    }
+
+}

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/instantiate/test.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/instantiate/test.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<project name="org.apache.beehive.controls.test.java.instantiate" default="org-apache-beehive-controls-test-java-instantiate" >
+    <target name="org-apache-beehive-controls-test-java-instantiate" >
+        <test-suite testunit="org-apache-beehive-controls-test-java-instantiate" >
+        <test name="TestInstantiate" timeoutSeconds="300" >
+            <test-metadata>
+                <freq>daily</freq>
+                <status>active</status>
+            </test-metadata>
+            <junit testclass="org.apache.beehive.controls.test.java.instantiate.TestInstantiate" />
+        </test>
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/property/PropTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/property/PropTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,94 @@
+package org.apache.beehive.controls.test.properties;
+
+import java.beans.Beans;
+import org.apache.beehive.controls.api.bean.ControlBean;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.beehive.controls.test.controls.util.TestBeanContext;
+import org.apache.beehive.controls.test.controls.properties.PropsBean;
+import org.apache.beehive.controls.test.controls.properties.PropsExtensionBean;
+import org.apache.beehive.controls.test.controls.properties.NestPropsBean;
+
+import org.apache.beehive.controls.test.driver.property.DrivePropsBeans;
+
+import com.bea.milton.common.Report;
+
+public class PropTest extends TestCase
+{
+    public PropTest( String s ) { super( s ); }
+
+    public void setUp() { }
+
+    /**
+     * Returns a new TestBeanContext to act as a container for control testing.
+     */
+    private TestBeanContext createTestBeanContext() throws Exception
+    {
+        return new TestBeanContext();
+    }
+
+    /**
+     * Creates a new ControlBean instance based upon the specified class name
+     */
+    private ControlBean createTestBean(String beanClassName) throws Exception
+    {
+        return (ControlBean)Beans.instantiate(Thread.currentThread().getContextClassLoader(),
+                                              beanClassName);
+    }
+
+    /**
+     * Basic test: setting/reading property values by a control client
+     */
+    public void testClientAccess() throws Exception
+    {
+        PropsBean propBean = (PropsBean)createTestBean("org.apache.beehive.controls.test.controls.properties.PropsBean");
+		DrivePropsBeans driver=new DrivePropsBeans();
+		Report report =driver.testClientAccess(propBean);
+
+		Assert.assertEquals(report.getStatus(), Report.PASS);
+
+    }
+
+    /**
+     * Basic test: Reading property values inside implementation via ControlBeanContext API
+     */
+    public void testImplAccess() throws Exception
+    {
+        PropsExtensionBean propExtBean = (PropsExtensionBean)createTestBean("org.apache.beehive.controls.test.controls.properties.PropsExtensionBean");
+        NestPropsBean nestBean = (NestPropsBean)createTestBean("org.apache.beehive.controls.test.controls.properties.NestPropsBean");
+
+		DrivePropsBeans driver=new DrivePropsBeans();
+		Report report =driver.testImplAccess(propExtBean,nestBean);
+
+		Assert.assertEquals(report.getStatus(), Report.PASS);
+
+    }
+
+    /**
+     * Basic test: client access to properties, running inside container context
+     */
+    public void testClientAccessInContainer() throws Exception
+    {
+        PropsBean propBean = (PropsBean)createTestBean("org.apache.beehive.controls.test.controls.properties.PropsBean");
+		DrivePropsBeans driver=new DrivePropsBeans();
+		Report report =driver.testClientAccessInContainer(propBean);
+
+		Assert.assertEquals(report.getStatus(), Report.PASS);
+    }
+
+    /**
+     * Basic test: implementation access to properties, running inside container context
+     */
+    public void testImplAccessInContainer() throws Exception
+    {
+        PropsExtensionBean propExtBean = (PropsExtensionBean)createTestBean("org.apache.beehive.controls.test.controls.properties.PropsExtensionBean");
+        NestPropsBean nestBean = (NestPropsBean)createTestBean("org.apache.beehive.controls.test.controls.properties.NestPropsBean");
+
+		DrivePropsBeans driver=new DrivePropsBeans();
+		Report report =driver.testImplAccessInContainer(propExtBean,nestBean);
+
+		Assert.assertEquals(report.getStatus(), Report.PASS);
+    }
+}

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/root.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/java/root.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<project name="ROOT" default="na" >
+    <target name="na" >
+        <test-suite testunit="na" >
+              <test-suite-call testfile="context\test.xml" />
+        </test-suite>
+        <test-suite testunit="na" >
+              <test-suite-call testfile="instantiate\test.xml" />
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/root.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/controls/test/root.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<project name="ROOT" default="na" >
+    <target name="na" >
+        <test-suite testunit="na" >
+              <test-suite-call testfile="java\root.xml" />
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/src/junit/org/apache/beehive/root.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/beehive/root.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<project name="ROOT" default="na" >
+    <target name="na" >
+        <test-suite testunit="na" >
+              <test-suite-call testfile="controls\root.xml" />
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/src/junit/org/apache/root.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/apache/root.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<project name="ROOT" default="na" >
+    <target name="na" >
+        <test-suite testunit="na" >
+              <test-suite-call testfile="beehive\root.xml" />
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/src/junit/org/root.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/org/root.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<project name="ROOT" default="na" >
+    <target name="na" >
+        <test-suite testunit="na" >
+              <test-suite-call testfile="apache\root.xml" />
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/src/junit/root.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/controls/test/src/junit/root.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<project name="ROOT" default="na" >
+    <target name="na" >
+        <test-suite testunit="na" >
+              <test-suite-call testfile="org\root.xml" />
+        </test-suite>
+    </target>
+</project>

Added: incubator/beehive/controls/test/tools/lib/milton.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/external/ant/apache-ant-1.6.1-bin.tar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/external/ant/apache-ant-1.6.1-bin.zip
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/external/junit/cpl-v10.html
==============================================================================
--- (empty file)
+++ incubator/beehive/external/junit/cpl-v10.html	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Common Public License - v 1.0</TITLE>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" VLINK="#800000">
+
+
+<P ALIGN="CENTER"><B>Common Public License - v 1.0</B>
+<P><B></B><FONT SIZE="3"></FONT>
+<P><FONT SIZE="3"></FONT><FONT SIZE="2">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT").  ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>1.  DEFINITIONS</B></FONT>
+<P><FONT SIZE="2">"Contribution" means:</FONT>
+
+<UL><FONT SIZE="2">a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and<BR CLEAR="LEFT">
+b) in the case of each subsequent Contributor:</FONT></UL>
+
+
+<UL><FONT SIZE="2">i)	 	changes to the Program, and</FONT></UL>
+
+
+<UL><FONT SIZE="2">ii)		additions to the Program;</FONT></UL>
+
+
+<UL><FONT SIZE="2">where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.  </FONT><FONT SIZE="2">A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf.  </FONT><FONT SIZE="2">Contributions do not include additions to the Program which:  (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.  </FONT></UL>
+
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Contributor" means any person or entity that distributes the Program.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.  </FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">"Program" means the Contributions distributed in accordance with this Agreement.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.</FONT>
+<P><FONT SIZE="2"><B></B></FONT>
+<P><FONT SIZE="2"><B>2.  GRANT OF RIGHTS</B></FONT>
+
+<UL><FONT SIZE="2"></FONT><FONT SIZE="2">a)	</FONT><FONT SIZE="2">Subject to the terms of this Agreement, each Contributor hereby grants</FONT><FONT SIZE="2"> Recipient a non-exclusive, worldwide, royalty-free copyright license to</FONT><FONT SIZE="2" COLOR="#FF0000"> </FONT><FONT SIZE="2">reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.</FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT><FONT SIZE="2">b) 	Subject to the terms of this Agreement, each Contributor hereby grants </FONT><FONT SIZE="2">Recipient a non-exclusive, worldwide,</FONT><FONT SIZE="2" COLOR="#008000"> </FONT><FONT SIZE="2">royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form.  This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents.  The patent license shall not apply to any other combinations which include the Contribution.  No hardware per se is licensed hereunder.   </FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2">c)	Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity.  Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise.  As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any.  For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.</FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2">d)	Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. </FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+<P><FONT SIZE="2"><B>3.  REQUIREMENTS</B></FONT>
+<P><FONT SIZE="2"><B></B>A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:</FONT>
+
+<UL><FONT SIZE="2">a)	it complies with the terms and conditions of this Agreement; and</FONT></UL>
+
+
+<UL><FONT SIZE="2">b)	its license agreement:</FONT></UL>
+
+
+<UL><FONT SIZE="2">i)	effectively disclaims</FONT><FONT SIZE="2"> on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; </FONT></UL>
+
+
+<UL><FONT SIZE="2">ii) 	effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; </FONT></UL>
+
+
+<UL><FONT SIZE="2">iii)</FONT><FONT SIZE="2">	states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and</FONT></UL>
+
+
+<UL><FONT SIZE="2">iv)	states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.</FONT><FONT SIZE="2" COLOR="#0000FF"> </FONT><FONT SIZE="2" COLOR="#FF0000"></FONT></UL>
+
+
+<UL><FONT SIZE="2" COLOR="#FF0000"></FONT><FONT SIZE="2"></FONT></UL>
+
+<P><FONT SIZE="2">When the Program is made available in source code form:</FONT>
+
+<UL><FONT SIZE="2">a)	it must be made available under this Agreement; and </FONT></UL>
+
+
+<UL><FONT SIZE="2">b)	a copy of this Agreement must be included with each copy of the Program.  </FONT></UL>
+
+<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT>
+<P><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT><FONT SIZE="2">Contributors may not remove or alter any copyright notices contained within the Program.  </FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.  </FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>4.  COMMERCIAL DISTRIBUTION</B></FONT>
+<P><FONT SIZE="2">Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like.  While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors.   Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering.  The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement.  In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations.  The Indemnified Contributor may participate in any such claim at its own expense.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">For example, a Contributor might include the Program in a commercial product offering, Product X.  That Contributor is then a Commercial Contributor.  If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.  Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"></FONT>
+<P><FONT SIZE="2" COLOR="#0000FF"></FONT><FONT SIZE="2"><B>5.  NO WARRANTY</B></FONT>
+<P><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is</FONT><FONT SIZE="2"> solely responsible for determining the appropriateness of using and distributing </FONT><FONT SIZE="2">the Program</FONT><FONT SIZE="2"> and assumes all risks associated with its exercise of rights under this Agreement</FONT><FONT SIZE="2">, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, </FONT><FONT SIZE="2">programs or equipment, and unavailability or interruption of operations</FONT><FONT SIZE="2">.  </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"><B>6.  DISCLAIMER OF LIABILITY</B></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES </FONT><FONT SIZE="2">(INCLUDING WITHOUT LIMITATION LOST PROFITS),</FONT><FONT SIZE="2"> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>7.  GENERAL</B></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed.  In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance.  If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable.  However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.  </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted  and may only be modified in the following manner. The Agreement Steward reserves the right to </FONT><FONT SIZE="2">publish new versions (including revisions) of this Agreement from time to </FONT><FONT SIZE="2">time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward.   IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity.  </FONT><FONT SIZE="2">Each new version of the Agreement will be given a distinguishing version number.  The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new </FONT><FONT SIZE="2">version.  </FONT><FONT SIZE="2">Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, </FONT><FONT SIZE="2">by implication, estoppel or otherwise</FONT><FONT SIZE="2">.</FONT><FONT SIZE="2">  All rights in the Program not expressly granted under this Agreement are reserved.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose.  Each party waives its rights to a jury trial in any resulting litigation.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+
+</BODY>
+
+</HTML>
\ No newline at end of file

Added: incubator/beehive/external/junit/junit.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/external/log4j/jakarta-log4j-1.2.8.zip
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/external/tomcat/jakarta-tomcat-5.0.25.zip
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/external/velocity/velocity-1.4.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/external/velocity/velocity-dep-1.4.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/external/xmlbeans/apache-xbean.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/ant/bootstrap.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/ant/bootstrap.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+#
+# NetUI bootstrap properties
+# 7/1/2003
+# ekoneil@bea.com
+#
+
+#
+# Operating specific properites.  If these are not 
+# set in the environment, they can be specified here by hand.
+#
+ant.home=${os.ANT_HOME}
+java.home=${os.JAVA_HOME}
+webui.home=${beehive.dir}/netui
+
+#
+# Beehive/NetUI distribution root values.  These directories
+# are the root directories for the NetUI distribution from
+# Beehive and reference three parts:
+#    - the webapp template
+#    - the JPF compiler set
+#    - the NetUI tests
+#
+netui.dist.dir=${webui.home}/build/dist
+webapp.dist.dir=${netui.dist.dir}/webapp
+compiler.dist.dir=${netui.dist.dir}/compiler
+test.dist.dir=${netui.dist.dir}/test
\ No newline at end of file

Added: incubator/beehive/netui/ant/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/ant/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,117 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/DevBuild" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="bootstrap.properties"/>
+    <property file="common.properties"/>
+
+    <!-- ============================================= -->
+    <!-- Dev Build Targets                             -->
+    <!-- ============================================= -->
+    <target name="clean" description="Clean the NetUI server modules">
+        <echo message="--------------------------------------------------"/>
+        <echo message="|      NetUI clean starting                      |"/>
+        <echo message="--------------------------------------------------"/>
+
+        <ant antfile="buildModules.xml" target="clean.modules" inheritAll="false">
+            <property name="source.root" location="${src.dir}"/>
+            <property name="module.list" value="${modules}"/>
+        </ant>
+        <antcall target="undeploy"/>
+
+        <echo message="--------------------------------------------------"/>
+        <echo message="|      NetUI clean ending                        |"/>
+        <echo message="--------------------------------------------------"/>
+    </target>
+
+    <target name="build" depends="prepare" description="Build the NetUI server modules">
+        <echo message="--------------------------------------------------"/>
+        <echo message="|      NetUI build starting                      |"/>
+        <echo message="--------------------------------------------------"/>
+
+        <ant antfile="buildModules.xml" target="build.modules" inheritAll="false">
+            <property name="source.root" location="${src.dir}"/>
+            <property name="module.list" value="${modules}"/>
+        </ant>
+
+        <echo message="--------------------------------------------------"/>
+        <echo message="|      NetUI build ending                        |"/> 
+        <echo message="--------------------------------------------------"/>
+    </target>
+
+    <target name="build.module" depends="prepare" description="Build a single source module">
+        <ant antfile="buildModules.xml" target="build.module" inheritAll="false">
+            <property name="source.root" location="${src.dir}"/>
+        </ant>
+    </target>
+
+    <target name="clean.module" description="Clean a single source module">
+        <ant antfile="buildModules.xml" target="clean.module" inheritAll="false">
+            <property name="source.root" location="${src.dir}"/>
+        </ant>
+        <antcall target="undeploy"/>
+    </target>
+
+    <target name="rebuild.module" description="Clean and build a single NetUI module">
+        <antcall target="clean.module"/>
+        <antcall target="build.module"/>
+    </target>
+
+    <target name="deploy" description="Rebuild the NetUI webapp templates.">
+        <echo message="--------------------------------------------------"/>
+        <echo message="|      NetUI deploy starting                     |"/>
+        <echo message="--------------------------------------------------"/>
+
+        <ant antfile="webappTemplate.xml" target="all.templates" inheritAll="false"/>
+
+        <echo message="--------------------------------------------------"/>
+        <echo message="|      NetUI deploy ending                       |"/>
+        <echo message="--------------------------------------------------"/>
+    </target>
+
+    <target name="undeploy">
+        <delete dir="${webappTemplate.dir}"/>
+    </target>
+
+    <target name="deploy.netui.runtime" description="Deploy the NetUI webapp template to a skeleton webapp">
+        <ant antfile="webappTemplate.xml" target="deploy.netui.runtime">
+            <property name="webapp.dir" value="${webapp.dir}"/>
+        </ant>
+    </target>
+
+    <target name="undeploy.netui.runtime" description="Clean the NetUI runtime from a webapp">
+        <ant antfile="webappTemplate.xml" target="undeploy.netui.runtime">
+            <property name="webapp.dir" value="${webapp.dir}"/>
+        </ant>
+    </target>
+
+    <target name="prepare">
+        <mkdir dir="${build.dir}"/>
+        <mkdir dir="${build.lib.dir}"/>
+        <mkdir dir="${classes.dir}"/>
+
+        <copy todir="${build.external.dir}">
+            <fileset dir="${external.dir}"/>
+        </copy>
+    </target>
+
+    <!-- ============================================= -->
+    <!-- JavaDoc Targets                               -->
+    <!-- ============================================= -->
+    <target name="javadoc.all" description="Generate Javadoc for all core server and tags">
+        <ant antfile="javadoc.xml" target="javadoc.all" inheritAll="false"/>
+    </target>	
+
+    <target name="clean.javadoc.all">
+        <ant antfile="javadoc.xml" target="clean.javadoc.all" inheritAll="false"/>
+    </target>	
+
+    <target name="usage">
+        <java fork="no" classname="org.apache.tools.ant.Main">
+            <arg line="-projecthelp"/>
+        </java>
+    </target>
+
+</project>

Added: incubator/beehive/netui/ant/buildModules.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/ant/buildModules.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,149 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Modules" default="" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="bootstrap.properties"/>
+    <property file="common.properties"/>
+
+    <!-- Build all modules.  A module is defined as a subdirectory of files in src/ targeted to
+         live in a single JAR file called <prefix>-moduleName.jar
+
+         The build for the module is left to the module to accomplish.  The ForEach task below
+         will call the given target in each of the build.xml files located in src/<module name>.
+         
+         The name of the module is passed under the property value of module.name.
+     -->
+    <target name="build.modules" depends="bootstrap" description="Build NetUI source modules">
+
+        <available property="source.root.available" file="${source.root}" type="dir"/>
+        <fail unless="source.root.available" message="The source directory ${source.root} does not exist"/>
+        <fail unless="module.list" message="No module.list was specified with ${module.list}"/>
+
+        <buildmodules locations="${module.list}" startdir="${source.root}" target="compile" propertykey="module.name" />
+    </target>
+
+    <!-- Clean all modules.  Cleaning a module should remove its JAR file and its classes directory. -->
+    <target name="clean.modules" depends="bootstrap" description="Clean NetUI source modules">
+
+        <available property="source.root.available" file="${source.root}" type="dir"/>
+        <fail unless="source.root.available" message="The source directory ${source.root} does not exist"/>
+        <fail unless="module.list" message="No module.list was specified with ${module.list}"/>
+
+        <buildmodules locations="${module.list}" startdir="${source.root}" target="clean" propertykey="module.name"/>
+    </target>
+
+    <!-- Build an individual module 
+
+         Call with the module name as a Java system property as:
+
+           ant -buildfile buildModules.xml build.module -Dmodule.name=<some module name>
+      -->
+    <target name="build.module" depends="bootstrap" description="Build a single module as specified with -Dmodule.name on the command line">
+
+        <available property="source.root.available" file="${source.root}" type="dir"/>
+        <fail unless="source.root.available" message="The source directory ${source.root} does not exist"/>
+        <fail unless="module.name" message="No module specified, set the -Dmodule.name=&lt;name&gt; property"/>
+
+        <buildmodules locations="${module.name}" startdir="${source.root}" target="compile" propertykey="module.name"/>
+    </target>
+
+    <!-- Clean an individual module 
+
+         Call with the module name as a Java system property as:
+
+           ant -buildfile buildModules.xml clean.module -Dmodule.name=<some module name>
+     -->
+    <target name="clean.module" depends="bootstrap" description="Clean a single module as specified with -Dmodule.name on the command line">
+
+        <available property="source.root.available" file="${source.root}" type="dir"/>
+        <fail unless="source.root.available" message="The source directory ${source.root} does not exist"/>
+        <fail unless="module.name" message="No module specified, set the -Dmodule.name=&lt;name&gt; property"/>
+
+        <buildmodules locations="${module.name}" startdir="${source.root}" target="clean" propertykey="module.name"/>
+    </target>
+
+    <target name="scrub">
+        <delete dir="${build.dir}"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!-- Bootstrap Targets                             -->
+    <!-- ============================================= -->
+ 
+    <!--
+         Bootstrap builds the custom Ant tasks used in this build file.
+
+         This target should be used as a prerequisite to any target that may need to call
+         a custom task.
+      -->
+    <target name="bootstrap">
+        <uptodate property="no.bootstrap" targetfile="${bootstrap.jar}">
+            <srcfiles dir="${src.dir}/bootstrap/" includes="**/*.java"/>
+        </uptodate>
+
+        <echo>no.bootstrap=${no.bootstrap}</echo>
+
+        <antcall target="build.bootstrap"/>
+        <taskdef name="buildmodules" classname="org.apache.beehive.netui.tools.ant.BuildModules" classpath="${bootstrap.jar}"/>     
+    </target>
+
+    <target name="build.bootstrap" unless="no.bootstrap">
+        <property name="bootstrap.module.name" value="bootstrap"/>
+
+        <ant antfile="${src.dir}/bootstrap/build.xml" target="compile"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!-- JavaDoc Targets                               -->
+    <!-- ============================================= -->
+
+    <target name="javadoc.modules" depends="bootstrap" description="Create Javadoc for the NetUI server modules">
+        <buildmodules locations="${modules}" startdir="${src.dir}" target="javadoc" propertykey="module.name"/>
+    </target>
+
+    <target name="cleanjavadoc.modules" depends="bootstrap" description="Clean the Javadoc for teh NetUI server modules">
+        <buildmodules locations="${modules}" startdir="${src.dir}" target="clean.javadoc" propertykey="module.name"/>
+    </target>
+
+    <!-- Javadoc an individual module 
+
+         Call with the module name as a Java system property as:
+
+           ant -buildfile buildModules.xml javadoc.module -Dmodule.name=<some module name>
+      -->
+    <target name="javadoc.module" depends="bootstrap" 
+            description="Create the Javadoc for a single NetUI server module as specified on the command line as -Dmodule.name">
+        <buildmodules locations="${module.name}" startdir="${src.dir}" target="javadoc" propertykey="module.name"/>
+    </target>
+
+    <!-- Clean Javadoc for an individual module 
+
+         Call with the module name as a Java system property as:
+
+           ant -buildfile buildModules.xml cleanjavadoc.module -Dmodule.name=<some module name>
+     -->
+    <target name="cleanjavadoc.module" depends="bootstrap" 
+            description="Create the Javadoc for a single NetUI server module as specified on the command line as -Dmodule.name">
+        <buildmodules locations="${module.name}" startdir="${src.dir}" target="clean.javadoc" propertykey="module.name"/>
+    </target>
+
+    <target name="javadoc.callback">
+        <property name="dest.dir" location="${javadoc.module.dir}/${module.name}"/>
+        <echo>Generate Javadoc for module ${module.name} in ${dest.dir}</echo>
+        <javadoc packagenames="*"
+                 sourcepath="${src.dir}/${module.name}"
+                 destdir="${dest.dir}"
+                 version="true"
+                 windowtitle="${window.title}"
+                 source="1.4">
+            <link href="${j2ee.docs}"/>
+        </javadoc>
+    </target>
+
+    <target name="cleanjavadoc.callback">
+        <delete dir="${javadoc.module.dir}/${module.name}"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/ant/common.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/ant/common.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,218 @@
+#
+# common.properties -- an Ant properties file that
+#   contains properties that are read-only in
+#   a user's development environment.
+#
+
+netui.ant.dir=${webui.home}/ant
+test.dir=${webui.home}/test
+app.dir=${test.dir}/webapps
+build.dir=${webui.home}/build
+docs.dir=${webui.home}/docs
+src.dir=${webui.home}/src
+conf.dir=${webui.home}/conf
+external.dir=${webui.home}/external
+classes.dir=${build.dir}/classes
+
+build.lib.dir=${build.dir}/lib
+build.external.dir=${build.dir}/external
+
+struts.dir=${build.external.dir}/struts
+jsf.dir=${build.external.dir}/jsf
+xdoclet.dir=${build.external.dir}/xdoclet
+
+javadoc.dir=${build.dir}/javadoc
+javadoc.module.dir=${javadoc.dir}/modules
+
+#
+# Tomcat properties.  These are used by the XDoclet build 
+# and will go away when the Tomcat security integration is 
+# implemented on Tomcat 5.x
+#
+tomcat.lib.dir=${build.external.dir}/tomcat
+catalina.4x.jar=${tomcat.lib.dir}/4x/catalina.jar
+coyote.4x.jar=${tomcat.lib.dir}/4x/tomcat-coyote.jar
+servlet23.jar=${tomcat.lib.dir}/4x/servlet.jar
+
+#
+# Properties that refer to the Tomcat JSTL implementation JARs.
+# These need to be present in the webapp for JSTL to work.
+#
+jstl.jar=${tomcat.dir}/webapps/jsp-examples/WEB-INF/lib/jstl.jar
+standard.jar=${tomcat.dir}/webapps/jsp-examples/WEB-INF/lib/standard.jar
+
+default.tomcat-users.xml=${conf.dir}/tomcat-users.xml
+
+# ---------------------------------------------------------------------------------
+#
+# JAR / resource paths
+#
+# ---------------------------------------------------------------------------------
+
+# External JARs
+
+# These JARs are referenced by the bootstrap module build.
+ant.jar=${ant.home}/lib/ant.jar
+
+# Struts JARs
+struts.jar=${struts.dir}/struts.jar
+commons-beanutils.jar=${struts.dir}/commons-beanutils.jar
+commons-collections.jar=${struts.dir}/commons-collections.jar
+commons-logging.jar=${struts.dir}/commons-logging.jar
+commons-digester.jar=${struts.dir}/commons-digester.jar
+commons-fileupload.jar=${struts.dir}/commons-fileupload.jar
+commons-validator.jar=${struts.dir}/commons-validator.jar
+
+#
+# External TLDs
+#
+struts11.logic.tld=${struts.dir}/struts-logic.tld
+struts11.html.tld=${struts.dir}/struts-html.tld
+struts11.bean.tld=${struts.dir}/struts-bean.tld
+
+# XDoclet JARs
+xdoclet.jar.name=xdoclet-1.2b4.jar
+xdoclet.web.module.jar.name=xdoclet-web-module-1.2b4.jar
+xjavadoc.jar.name=xjavadoc-1.0.jar
+xdoclet.jar=${xdoclet.dir}/${xdoclet.jar.name}
+xdoclet.web.module.jar=${xdoclet.dir}/${xdoclet.web.module.jar.name}
+xjavadoc.jar=${xdoclet.dir}/${xjavadoc.jar.name}
+
+tools.xdoclet.gen.classpath=${xdoclet.jar};${xjavadoc.jar};${xdoclet.web.module.jar};${commons-logging.jar};${commons-collections.jar};${log4j.jar}
+tools.xdoclet.run.classpath=${tools.xdoclet.gen.classpath};${bootstrap.jar};${servlet24.jar}
+
+# NetUI JAR file names
+bootstrap.jar.name=bootstrap.jar
+tags-html.jar.name=beehive-netui-tags-html.jar
+tags-template.jar.name=beehive-netui-tags-template.jar
+tags-databinding.jar.name=beehive-netui-tags-databinding.jar
+tags-datagrid.jar.name=beehive-netui-tags-datagrid.jar
+util.jar.name=beehive-netui-util.jar
+compiler.jar.name=beehive-netui-compiler.jar
+pageflow.jar.name=beehive-netui-pageflow.jar
+scoping.jar.name=beehive-netui-scoping.jar
+
+netuiconfig.xml.name=netui-config.xml
+
+netui-tomcat-common.4x.jar.name=beehive-netui-tomcat-common-4x.jar
+netui-tomcat-server.4x.jar.name=beehive-netui-tomcat-server-4x.jar
+netui-tomcat-webapp.4x.jar.name=beehive-netui-tomcat-webapp-4x.jar
+
+# NetUI TLD Names
+netui-tags-html.tld.name=beehive-netui-tags-html.tld
+netui-tags-html.tldx.name=beehive-netui-tags-html.tldx
+netui-tags-template.tld.name=beehive-netui-tags-template.tld
+netui-tags-template.tldx.name=beehive-netui-tags-template.tldx
+netui-tags-databinding.tld.name=beehive-netui-tags-databinding.tld
+netui-tags-databinding.tldx.name=beehive-netui-tags-databinding.tldx
+netui-tags-datagrid.tld.name=beehive-netui-tags-datagrid.tld
+netui-tags-datagrid.tldx.name=beehive-netui-tags-datagrid.tldx
+
+# ---------------------------------------------------------------------------------
+#
+# NetUI distribution JARs (the build creates these files)
+#
+# ---------------------------------------------------------------------------------
+
+# NetUI dist JARs
+bootstrap.jar=${build.lib.dir}/${bootstrap.jar.name}
+tags.html.jar=${build.lib.dir}/${tags-html.jar.name}
+tags.template.jar=${build.lib.dir}/${tags-template.jar.name}
+tags.databinding.jar=${build.lib.dir}/${tags-databinding.jar.name}
+tags.datagrid.jar=${build.lib.dir}/${tags-datagrid.jar.name}
+util.jar=${build.lib.dir}/${util.jar.name}
+compiler.jar=${build.lib.dir}/${compiler.jar.name}
+pageflow.jar=${build.lib.dir}/${pageflow.jar.name}
+scoping.jar=${build.lib.dir}/${scoping.jar.name}
+
+defaultnetuiconfig.xml=${src.dir}/webapp-template/config/netui-config-default.xml
+netuiconfig.xml=${src.dir}/webapp-template/config/netui-config.xml
+netuiconfig-812.xml=${src.dir}/webapp-template/config/netui-config-812.xml
+
+# NetUI dist TLD(x)
+netui-tags-html.tld=${build.lib.dir}/${netui-tags-html.tld.name}
+netui-tags-html.tldx=${build.lib.dir}/${netui-tags-html.tldx.name}
+netui-tags-template.tld=${build.lib.dir}/${netui-tags-template.tld.name}
+netui-tags-template.tldx=${build.lib.dir}/${netui-tags-template.tldx.name}
+netui-tags-databinding.tld=${build.lib.dir}/${netui-tags-databinding.tld.name}
+netui-tags-databinding.tldx=${build.lib.dir}/${netui-tags-databinding.tldx.name}
+netui-tags-datagrid.tld=${build.lib.dir}/${netui-tags-datagrid.tld.name}
+netui-tags-datagrid.tldx=${build.lib.dir}/${netui-tags-datagrid.tldx.name}
+
+# ---------------------------------------------------------------------------------
+#
+# NetUI webapp template JARs.  These come from the compressed / exploded webapp template.
+#
+# ---------------------------------------------------------------------------------
+webappTemplate.webinf=${webapp.dist.dir}/WEB-INF
+webappTemplate.webinf.lib=${webappTemplate.webinf}/lib
+
+# Deployed JARs
+deployed.tags.html.jar=${webappTemplate.webinf.lib}/${tags-html.jar.name}
+deployed.tags.template.jar=${webappTemplate.webinf.lib}/${tags-template.jar.name}
+deployed.tags.databinding.jar=${webappTemplate.webinf.lib}/${tags-databinding.jar.name}
+deployed.tags.datagrid.jar=${webappTemplate.webinf.lib}/${tags-datagrid.jar.name}
+deployed.util.jar=${webappTemplate.webinf.lib}/${util.jar.name}
+deployed.compiler.jar=${webappTemplate.webinf.lib}/${compiler.jar.name}
+deployed.pageflow.jar=${webappTemplate.webinf.lib}/${pageflow.jar.name}
+deployed.scoping.jar=${webappTemplate.webinf.lib}/${scoping.jar.name}
+
+# Deployed Struts JARs
+deployed.struts.jar=${webappTemplate.webinf.lib}/struts.jar
+deployed.commons-beanutils.jar=${webappTemplate.webinf.lib}/commons-beanutils.jar
+deployed.commons-collections.jar=${webappTemplate.webinf.lib}/commons-collections.jar
+deployed.commons-logging.jar=${webappTemplate.webinf.lib}/commons-logging.jar
+deployed.commons-digester.jar=${webappTemplate.webinf.lib}/commons-digester.jar
+deployed.commons-fileupload.jar=${webappTemplate.webinf.lib}/commons-fileupload.jar
+deployed.commons-validator.jar=${webappTemplate.webinf.lib}/commons-validator.jar
+
+# Deployed Struts file resources
+deployed.validator-rules.xml=${webappTemplate.webinf}/validator-rules.xml
+
+deployed.netuiconfig.xml=${webappTemplate.webinf}/netui-config.xml
+deployed.javascript.dir=${webapp.dist.dir}/resources/javascript
+
+netui-tomcat-common.4x.jar=${build.lib.dir}/${netui-tomcat-common.4x.jar.name}
+netui-tomcat-server.4x.jar=${build.lib.dir}/${netui-tomcat-server.4x.jar.name}
+netui-tomcat-webapp.4x.jar=${build.lib.dir}/${netui-tomcat-webapp.4x.jar.name}
+
+#compile options
+compile.debug=true
+compile.deprecation=off
+compile.optimize=off
+compile.source=1.4
+compile.source.1.5=1.5
+
+# Struts Version
+struts.version=1.1
+
+# runtime and compiler versions
+pageflow.version.runtime=3
+pageflow.version.compiler=3
+
+#  module list
+modules=\
+compiler,\
+scoping,\
+tomcat-common,\
+tomcat-server,\
+util,\
+pageflow,\
+tomcat-webapp,\
+tags-html,\
+tags-databinding,\
+tags-template,\
+tags-datagrid
+
+# Javadoc properties
+j2ee.docs=http://java.sun.com/j2ee/sdk_1.3/techdocs/api/
+core.javadoc=${javadoc.dir}/core
+
+# Miscellaneous constants
+generated.struts.dir=.pageflow-struts-generated
+
+# The location of external resources (*.js and images) that
+# are used by the grid tag set.
+#
+grid.resources.dir=${src.dir}/webapp-template/v1grid
+

Added: incubator/beehive/netui/ant/user.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/ant/user.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+#
+# user.properties -- an Ant properties file that
+#   contains properties that are meant to be
+#   set for a user's development environment.
+#
+
+# User specific properties used to synchronize
+# with Perforce
+p4.user=
+p4.password=
+p4.client=
+
+#
+# The WLS instance's system password -- used to
+# start the server.
+#
+weblogic.system.username=weblogic
+weblogic.system.password=weblogic
\ No newline at end of file

Added: incubator/beehive/netui/ant/webappTemplate.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/ant/webappTemplate.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,308 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/WebappTemplates" default="all.templates" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="bootstrap.properties"/>
+    <property file="common.properties"/>
+
+    <property name="template.root.dir" location="${src.dir}/webapp-template/"/>
+
+    <target name="all.templates">
+        <echo>webapp.dist.dir: ${webapp.dist.dir}</echo>
+        <antcall target="generic"/>
+    </target>
+
+    <target name="generic" description="Deploy the NetUI / generic webapp template">
+        <property name="webapp.dir" value="${webapp.dist.dir}"/>
+        <property name="webinf.dir" value="${webapp.dir}/WEB-INF"/>
+        <property name="webinf.lib" value="${webapp.dir}/WEB-INF/lib"/>
+
+        <antcall target="_deploy.common"/>
+
+        <copy todir="${webinf.dir}" file="${template.root.dir}/dd/generic/web.xml"/>
+    </target>
+
+    <target name="_deploy.common">
+
+        <!-- define the javascript directory -->
+        <property name="resource.dir" value="${webapp.dir}/resources"/>
+        <property name="javascript.dir" value="${resource.dir}/javascript"/>
+        <property name="tag.javascript.files" value="${src.dir}/javascript/tagshtml"/>
+        <property name="globalapp.source.dir" value="${webinf.dir}/src/global/"/>
+
+        <mkdir dir="${webapp.dist.dir}"/>
+        <mkdir dir="${webapp.dir}"/>
+
+        <mkdir dir="${webinf.dir}"/>
+        <mkdir dir="${webinf.dir}/lib"/>
+        <mkdir dir="${webinf.dir}/classes"/>
+        <mkdir dir="${globalapp.source.dir}"/>
+
+        <!-- create the javascript directories -->
+        <mkdir dir="${resource.dir}"/>
+        <mkdir dir="${javascript.dir}"/>
+
+        <!-- copy the JARs -->
+        <copy todir="${webinf.lib}" file="${struts.dir}/struts.jar"/>
+        <copy todir="${webinf.lib}" file="${struts.dir}/commons-beanutils.jar"/>
+        <copy todir="${webinf.lib}" file="${struts.dir}/commons-digester.jar"/>
+        <copy todir="${webinf.lib}" file="${struts.dir}/commons-logging.jar"/>
+        <copy todir="${webinf.lib}" file="${struts.dir}/commons-collections.jar"/>
+        <copy todir="${webinf.lib}" file="${struts.dir}/commons-validator.jar"/>
+        <copy todir="${webinf.lib}" file="${struts.dir}/commons-fileupload.jar"/>
+
+        <!-- copy the JSTL support JARs -->
+        <copy todir="${webinf.lib}" file="${jstl.jar}"/>
+        <copy todir="${webinf.lib}" file="${standard.jar}"/>
+  
+        <!-- copy the validation files -->
+        <copy todir="${webinf.dir}" file="${struts.dir}/validator-rules.xml"/>
+
+        <!-- scoping -->
+        <copy todir="${webinf.lib}" file="${scoping.jar}"/>
+
+        <!-- util -->
+        <copy todir="${webinf.lib}" file="${util.jar}"/>
+
+        <!-- pageflow -->
+        <copy todir="${webinf.lib}" file="${pageflow.jar}"/>
+
+        <!-- netui-tags-html -->
+        <copy todir="${webinf.dir}" file="${netui-tags-html.tld}"/>
+        <copy todir="${webinf.dir}" file="${netui-tags-html.tldx}"/>
+        <copy todir="${webinf.lib}" file="${tags.html.jar}"/>
+
+        <!-- netui-tags-template -->
+        <copy todir="${webinf.dir}" file="${netui-tags-template.tld}"/>
+        <copy todir="${webinf.dir}" file="${netui-tags-template.tldx}"/>
+        <copy todir="${webinf.lib}" file="${tags.template.jar}"/>
+
+        <!-- netui-tags-databinding -->
+        <copy todir="${webinf.lib}" file="${tags.databinding.jar}"/>
+        <copy todir="${webinf.dir}" file="${netui-tags-databinding.tld}"/>
+        <copy todir="${webinf.dir}" file="${netui-tags-databinding.tldx}"/>
+
+        <!-- netui-tags-datagrid -->
+        <copy todir="${webinf.lib}" file="${tags.datagrid.jar}"/>
+        <copy todir="${webinf.dir}" file="${netui-tags-datagrid.tld}"/>
+        <copy todir="${webinf.dir}" file="${netui-tags-datagrid.tldx}"/>
+
+        <!-- deploy the default NetUI server config file -->
+        <copy todir="${webinf.dir}" file="${template.root.dir}/config/netui-config.xml" overwrite="false"/>
+
+        <!-- deploy the default Global.app -->
+        <copy file="${template.root.dir}/default/Global.app" todir="${globalapp.source.dir}"/>
+        <copy file="${template.root.dir}/default/Controller.jpf" todir="${webapp.dir}"/>
+        <copy file="${template.root.dir}/default/index.jsp" todir="${webapp.dir}"/>
+        <copy file="${template.root.dir}/default/error.jsp" todir="${webapp.dir}"/>
+
+        <!-- copy the JSF implementation to directory -->
+<!--
+        <copy todir="${webinf.lib}" file="${jsf.dir}/jsf-api.jar"/>
+        <copy todir="${webinf.lib}" file="${jsf.dir}/jsf-impl.jar"/>
+        <copy todir="${webinf.lib}" file="${jsf.dir}/jstl.jar"/>
+        <copy todir="${webinf.lib}" file="${jsf.dir}/standard.jar"/>
+        <copy todir="${webinf.dir}" file="${jsf.dir}/web.xml.faces"/>
+        <copy todir="${webinf.dir}" file="${jsf.dir}/faces-config.xml"/>
+        <copy todir="${webinf.dir}" file="${jsf.dir}/html_basic.tld"/>
+        <copy todir="${webinf.dir}" file="${jsf.dir}/html_basic.tldx"/>
+        <copy todir="${webinf.dir}" file="${jsf.dir}/jsf_core.tld"/>
+        <copy todir="${webinf.dir}" file="${jsf.dir}/jsf_core.tldx"/>
+        <copy todir="${webinf.dir}" file="${jsf.dir}/c.tld"/>
+-->
+
+        <!-- copy the javascript files to the javavscript directory -->
+        <copy file="${tag.javascript.files}/netui-tree.js" todir="${javascript.dir}"/>
+    </target>
+
+    <patternset id="jsf.runtime">
+        <include name="WEB-INF/jsf_core.tld"/>
+        <include name="WEB-INF/jsf_core.tldx"/>
+        <include name="WEB-INF/html_basic.tld"/>
+        <include name="WEB-INF/html_basic.tldx"/>
+        <include name="WEB-INF/lib/jsf-api.jar"/>
+        <include name="WEB-INF/lib/jsf-impl.jar"/>
+        <include name="WEB-INF/lib/jstl.jar"/>
+        <include name="WEB-INF/lib/standard.jar"/>
+        <include name="WEB-INF/web.xml.faces"/>
+        <include name="WEB-INF/faces-config.xml"/>
+    </patternset>
+
+    <patternset id="netui.runtime">
+        <include name="WEB-INF/lib/${tags-html.jar.name}"/>
+        <include name="WEB-INF/${netui-tags-html.tld.name}"/>
+        <include name="WEB-INF/${netui-tags-html.tldx.name}"/>
+
+        <include name="WEB-INF/lib/${tags-template.jar.name}"/>
+        <include name="WEB-INF/${netui-tags-template.tld.name}"/>
+        <include name="WEB-INF/${netui-tags-template.tldx.name}"/>
+
+        <include name="WEB-INF/lib/${tags-databinding.jar.name}"/>
+        <include name="WEB-INF/${netui-tags-databinding.tld.name}"/>
+        <include name="WEB-INF/${netui-tags-databinding.tldx.name}"/>
+
+        <include name="WEB-INF/lib/${tags-datagrid.jar.name}"/>
+        <include name="WEB-INF/${netui-tags-datagrid.tld.name}"/>
+        <include name="WEB-INF/${netui-tags-datagrid.tldx.name}"/>
+
+        <include name="WEB-INF/lib/${util.jar.name}"/>
+        <include name="WEB-INF/lib/${pageflow.jar.name}"/>
+        <include name="WEB-INF/lib/${scoping.jar.name}"/>
+
+        <!-- JSTL support JARs -->
+        <include name="WEB-INF/lib/jstl.jar"/>
+        <include name="WEB-INF/lib/standard.jar"/>
+    </patternset>
+
+    <patternset id="struts.runtime">
+        <include name="WEB-INF/lib/struts.jar"/>
+        <include name="WEB-INF/lib/commons-beanutils.jar"/>
+        <include name="WEB-INF/lib/commons-digester.jar"/>
+        <include name="WEB-INF/lib/commons-logging.jar"/>
+        <include name="WEB-INF/lib/commons-collections.jar"/>
+        <include name="WEB-INF/lib/commons-validator.jar"/>
+        <include name="WEB-INF/lib/commons-fileupload.jar"/>
+        <include name="WEB-INF/validator-rules.xml"/>
+    </patternset>
+
+    <target name="deploy.netui.runtime" description="Deploy the NetUI server runtime to a webapp root directory.">
+        <available property="webapp.dir.available" file="${webapp.dir}" type="dir"/>
+        <fail unless="webapp.dir.available" message="Can't deploy the NetUI runtime to a ${webapp.dir} that does not exist."/>
+
+        <!-- just in case the directories don't exist, attempt to create them -->
+        <mkdir dir="${webapp.dir}/WEB-INF"/>
+        <mkdir dir="${webapp.dir}/WEB-INF/lib"/>
+        <mkdir dir="${webapp.dir}/WEB-INF/src"/>
+        <mkdir dir="${webapp.dir}/resources"/>
+        <mkdir dir="${webapp.dir}/resources/javascript"/>
+
+<!-- build support for optionally deploying JSF into a webapp is coming ... -->
+<!--
+        <echo>Deploy JSF to webapp rooted at: ${webapp.dir}</echo>
+        <copy todir="${webapp.dir}">
+            <fileset dir="${webapp.dist.dir}">
+                <patternset refid="jsf.runtime"/>
+            </fileset>
+        </copy>
+-->
+
+        <antcall target="deploy-struts">
+            <param name="webapp.dir" value="${webapp.dir}"/>
+        </antcall>
+
+        <echo>Deploy the NetUI runtime to webapp rooted at: ${webapp.dir}</echo>
+        <copy todir="${webapp.dir}">
+            <fileset dir="${webapp.dist.dir}">
+                <patternset refid="netui.runtime"/>
+            </fileset>
+        </copy>
+
+        <copy todir="${webapp.dir}/WEB-INF/" file="${deployed.netuiconfig.xml}"/>
+
+        <copy todir="${webapp.dir}/resources/javascript" overwrite="true">
+            <fileset dir="${deployed.javascript.dir}">
+                <include name="**/*.js"/>
+            </fileset>
+        </copy>
+
+        <!-- 
+            @todo: it's as yet undecided how these should get into Tomcat classpath; for now,
+            they are copied directly into WEB-INF/lib
+          -->
+        <copy todir="${webapp.dir}/WEB-INF/lib" file="${log4j.jar}"/>
+        <copy todir="${webapp.dir}/WEB-INF/lib" file="${controls.jar}"/>
+        <copy todir="${webapp.dir}/WEB-INF/lib" file="${jsr173.jar}"/>
+        <copy todir="${webapp.dir}/WEB-INF/lib" file="${xbean.jar}"/>
+
+        <!-- @todo: deploy the grid resources here? -->
+        <antcall target="deploy-grid-resources"/>
+    </target>
+
+    <target name="deploy-struts" description="Deploy only the Struts runtime to a webapp root directory.">
+        <echo>Deploy Struts to webapp rooted at: ${webapp.dir}</echo>
+        <copy todir="${webapp.dir}">
+            <fileset dir="${webapp.dist.dir}">
+                <patternset refid="struts.runtime"/>
+            </fileset>
+        </copy>
+    </target>
+
+    <target name="deploy-grid-resources">
+<!--
+        <mkdir dir="${webapp.dir}/resources"/>
+        <mkdir dir="${webapp.dir}/resources/grid"/>
+
+        <copy todir="${webapp.dir}/resources/grid">
+            <fileset dir="${webapp.dist.dir}">
+                <patternset refid="v1grid.resources"/>
+            </fileset>
+        </copy>        
+-->
+    </target>
+
+    <target name="clean-grid-resources">
+<!--
+        <delete quiet="true">
+            <fileset dir="${webapp.dir}">
+                <patternset refid="v1grid.resources"/>
+            </fileset>
+        </delete>        
+-->
+    </target>
+
+    <target name="undeploy.netui.runtime" description="Clean the NetUI runtime from a webapp root directory.">
+
+        <echo>Clean NetUI from: ${webapp.dir}</echo>
+        <property name="webinf.dir" value="${webapp.dir}/WEB-INF"/>
+
+        <delete>
+            <fileset dir="${webapp.dir}">
+                <patternset refid="netui.runtime"/>
+            </fileset>
+        </delete>
+        
+        <echo>Clean struts from: ${webapp.dir}</echo>
+        <delete>
+            <fileset dir="${webapp.dir}">
+                <patternset refid="struts.runtime"/>
+            </fileset>
+        </delete>
+
+        <delete quiet="true">
+            <fileset dir="${webapp.dir}/WEB-INF">
+                <include name="**/jpf-struts-config-*.xml"/>
+                <exclude name="**/jpf-struts-config--global.xml"/>
+            </fileset>
+	</delete>
+
+        <!-- @todo: need to whack only the netui / struts / JSF filesets -->
+        <delete quiet="true">
+            <fileset dir="${webinf.dir}/lib">
+                <include name="**/*.jar"/>
+            </fileset>
+        </delete>
+
+        <!-- clean .class files -->
+        <delete quiet="true" includeEmptyDirs="true">
+            <fileset dir="${webinf.dir}/classes/">
+                <include name="**/*.class"/>
+                <include name="**/*.java"/>
+                <include name="**/*.properties"/>
+                <include name="**/*.xml"/>
+                <include name="**/*.xsd"/>
+            </fileset>
+        </delete>
+
+        <delete file="${webinf.dir}/netui-config.xml" quiet="true"/>
+        <delete quiet="true">
+            <fileset dir="${webapp.dir}/resources/javascript">
+                <include name="*.js"/>
+            </fileset>
+        </delete>
+
+        <antcall target="clean-grid-resources"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/ant/xmlBean.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/ant/xmlBean.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/XMLBean Build" default="ant.build.xmlbean" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="bootstrap.properties"/>
+    <property file="common.properties"/>
+
+    <target name="ant.build.xmlbean" description="Compile a set of XSDs using the XMLBean Ant task">
+        <fail unless="xsd.root.dir" 
+              message="xsd.root.dir must be specified to build an XMLBean in order find the existing files"/>
+        <fail unless="class.output.dir" message="class.output.dir must be specified in order to bulid an XMLBean"/>
+        <fail unless="xbean.inputs" message="xbean.inputs must be specified"/>
+        <fail unless="xbean.output" message="xbean.output must be specified"/>
+
+        <echo>xbean.inputs: ${xbean.inputs}</echo>
+        <echo>xbean.output: ${xbean.output}</echo>
+
+        <!-- build a fileset of the source files that should be compiled by the XMLBean compiler -->
+        <fileset id="xbean.sources" dir="${xsd.root.dir}" includes="${xbean.inputs}"/>
+
+        <!-- check to see if these files are up-to-date relative to the given ${xbean.output} file -->
+        <uptodate property="xbean.uptodate" targetfile="${xbean.output}">
+            <srcfiles refid="xbean.sources"/>
+        </uptodate>
+
+        <echo>uptodate: ${xbean.uptodate}</echo>
+
+        <!-- if needed, build the ${xbean.inputs} into the ${class.output.dir} -->
+        <antcall target="xbean_schema_compiler"/>
+    </target>
+
+    <target name="xbean_schema_compiler" unless="xbean.uptodate">
+        <taskdef name="xmlbeanbuild" classname="org.apache.xmlbeans.impl.tool.XMLBean" 
+                 classpath="${xbean.jar};${jsr173.jar}"/>
+        <xmlbeanbuild classpath="${xbean.jar};${jsr173.jar}" schema="${xsd.root.dir}" 
+                      classgendir="${class.output.dir}" failonerror="true"/>
+    </target>
+
+</project>
+
+
+

Added: incubator/beehive/netui/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+
+<!-- 
+  Build file for the Beehive/NetUI project.  
+-->
+<project name="Beehive/NetUI Framework Build" default="build" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+
+    <target name="docs" description="No-op"/>
+
+    <target name="minprod" depends="deploy"/>
+
+    <target name="build" description="Compiles and builds the server bits of NetUI.">
+        <ant dir="ant" target="build" inheritAll="false"/>
+    </target>
+
+    <target name="clean" description="Cleans all NetUI build products.">
+        <delete dir="./build/"/>
+    </target>
+
+    <target name="deploy" depends="build" description="Builds and deploys NetUI.">
+        <ant dir="ant" target="deploy" inheritAll="false"/>
+    </target>
+
+    <target name="deploy.only">
+        <ant dir="ant" target="deploy" inheritAll="false"/>
+    </target>
+
+    <target name="drt" description="Runs the NetUI DRTs">
+        <echo message="--------------------------------------------------"/>
+        <echo message="|      NetUI DRT starting                        |"/>
+        <echo message="--------------------------------------------------"/>
+
+        <!-- run the JUnit DRTs -->
+        <ant dir="test/ant" target="drt" inheritAll="false">
+            <property name="drt.cc.mode" value="true"/>
+        </ant>
+
+        <!-- run the server DRTs -->
+        <ant dir="${beehive.dir}/netui/test/webapps/drt" antfile="build.xml" target="drt" inheritAll="false">
+            <property name="drt.cc.mode" value="true"/>
+        </ant>
+
+        <echo message="--------------------------------------------------"/>
+        <echo message="|      NetUI DRT ending                          |"/>
+        <echo message="--------------------------------------------------"/>
+    </target>
+
+    <target name="server.bvt" description="Run the NetUI Server BVTs">
+        <echo>NYI</echo>
+    </target>
+</project>

Added: incubator/beehive/netui/external/struts/LICENSE
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/LICENSE	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,65 @@
+/*
+ * $Header: /home/cvs/jakarta-struts/LICENSE,v 1.2 2001/02/02 00:38:31 craigmcc Exp $
+ * $Revision: 1.2 $
+ * $Date: 2001/02/02 00:38:31 $
+ *
+ * ====================================================================
+ * 
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ *    any, must include the following acknowlegement:  
+ *       "This product includes software developed by the 
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowlegement may appear in the software itself,
+ *    if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Struts", and "Apache Software
+ *    Foundation" must not be used to endorse or promote products derived
+ *    from this software without prior written permission. For written 
+ *    permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ *    nor may "Apache" appear in their names without prior written
+ *    permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */ 
+
+
+
+
+

Added: incubator/beehive/netui/external/struts/commons-beanutils.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-collections.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-dbcp.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-digester.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-fileupload.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-lang.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-logging.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-pool.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-resources.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-services.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/commons-validator.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/jakarta-oro.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/jdbc2_0-stdext.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/struts-bean.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/struts-bean.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>bean</shortname>
+<uri>http://jakarta.apache.org/struts/tags-bean</uri>
+<tag>
+<name>cookie</name>
+<tagclass>org.apache.struts.taglib.bean.CookieTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.CookieTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>define</name>
+<tagclass>org.apache.struts.taglib.bean.DefineTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.DefineTei</teiclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>toScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>header</name>
+<tagclass>org.apache.struts.taglib.bean.HeaderTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.HeaderTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>include</name>
+<tagclass>org.apache.struts.taglib.bean.IncludeTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.IncludeTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>message</name>
+<tagclass>org.apache.struts.taglib.bean.MessageTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>arg0</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg1</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg2</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg3</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg4</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>key</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>page</name>
+<tagclass>org.apache.struts.taglib.bean.PageTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.PageTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>parameter</name>
+<tagclass>org.apache.struts.taglib.bean.ParameterTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.ParameterTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>resource</name>
+<tagclass>org.apache.struts.taglib.bean.ResourceTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.ResourceTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>input</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>size</name>
+<tagclass>org.apache.struts.taglib.bean.SizeTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.SizeTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>struts</name>
+<tagclass>org.apache.struts.taglib.bean.StrutsTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.StrutsTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>formBean</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>mapping</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>write</name>
+<tagclass>org.apache.struts.taglib.bean.WriteTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>filter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>format</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>formatKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ignore</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+</taglib>
+
+
+

Added: incubator/beehive/netui/external/struts/struts-config_1_0.dtd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/struts-config_1_0.dtd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,408 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+
+<!--
+     DTD for the Struts Application Configuration File, Version 1.0
+
+     To support validation of your configuration file, include the following
+     DOCTYPE element at the beginning (after the "xml" declaration):
+
+     <!DOCTYPE struts-config PUBLIC
+       "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
+       "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
+
+     $Id: struts-config_1_0.dtd,v 1.5 2001/06/02 18:20:47 craigmcc Exp $
+-->
+
+
+<!-- ========== Defined Types ============================================= -->
+
+
+<!-- A "BeanName" is the identifier of a JavaBean, such as a form bean,
+     and also serves as the name of the corresponding scripting variable
+     and the name of the JSP attribute under which the bean is accessed.
+     Therefore, it must conform to the rules for a Java identifier.
+-->
+<!ENTITY % BeanName "CDATA">
+
+
+<!-- A "Boolean" is the string representation of a boolean (true or false)
+     variable.
+-->
+<!ENTITY % Boolean "(true|false|yes|no)">
+
+
+<!-- A "ClassName" is the fully qualified name of a Java class that is
+     instantiated to provide the functionality of the enclosing element.
+-->
+<!ENTITY % ClassName "CDATA">
+
+
+<!-- An "Integer" is a character string consisting solely of numeric digits,
+     optionally preceeded by a minus sign, that can be converted to a
+     32-bit integer.
+-->
+<!ENTITY % Integer "CDATA">
+
+
+<!-- A "Location" is a relative path, delimited by "/" characters, that
+     defines the location of a resource relative to the location of the
+     Struts configuration file itself.
+-->
+<!ENTITY % Location "#PCDATA">
+
+
+<!-- A "PropName" is the name of a JavaBeans property, and must begin with
+     a lower case letter and contain only characters that are legal in a
+     Java identifier.
+-->
+<!ENTITY % PropName "CDATA">
+
+
+<!-- A "RequestPath" is a context-relative URI path, beginning with a slash,
+     that identifies a mapped resource (such as a JSP page or a servlet)
+     within this web application.
+-->
+<!ENTITY % RequestPath "CDATA">
+
+
+<!-- The name of a JSP bean scope within which such a form bean may be
+     accessed.
+-->
+<!ENTITY % RequestScope "(request|session)">
+
+
+<!-- ========== Top Level Elements ======================================== -->
+
+
+<!-- The "struts-config" element is the root of the configuration file
+     hierarchy, and contains nested elements for all of the other
+     configuration settings.
+-->
+<!ELEMENT struts-config (data-sources?, form-beans?, global-forwards?, action-mappings?)>
+<!ATTLIST struts-config  id             ID              #IMPLIED>
+
+
+<!-- The "data-sources" element describes a set of JDBC 2.0 Standard Extension
+     data source objects which will be configured according to the nested
+     "data-source" elements found inside.
+-->
+
+<!ELEMENT data-sources (data-source*)>
+<!ATTLIST data-sources   id             ID              #IMPLIED>
+
+
+<!-- The "data-source" element describes a JDBC 2.0 Standard Extension data
+     source object (that implements javax.sql.DataSource) which will be
+     configured according to the properties and nested elements found here,
+     and made available as a servlet context attribute (i.e. application
+     scope bean).  The following attributes are required:
+
+     key             Servlet context attribute key under which this data
+                     source will be stored.  Default is the value specified
+                     by string constant Action.DATA_SOURCE_KEY.
+
+     type            Fully qualified Java class name of the implementation
+                     class (must implement javax.sql.DataSource).  Default
+                     value is 'org.apache.struts.util.GenericDataSource'.
+
+     NOTE:  The following attributes are defined by the default data source
+     implementation, and only take effect for that class or subclasses of
+     that class.
+
+     WARNING:  The use of these attributes is deprecated.  You should use
+     nested &lt;set-property&gt; elements to configure *all* properties of
+     your data source implementation.
+
+     autoCommit      The default auto-commit state for newly created
+                     connections.
+
+     description     The description of this data source.
+
+     driverClass     The Java class name of the JDBC driver to be used.
+                     [REQUIRED]
+
+     loginTimeout    The maximum number of seconds to wait for a connection
+                     to be created or returned.  Default is driver dependent.
+
+     maxCount        The maximum number of connections to be created.
+
+     minCount        The minimum number of connections to be created.
+
+     password        The database password to use when connecting. [REQUIRED]
+
+     readOnly        The default read-only state for newly created
+                     connections.
+
+     url             The JDBC URL to use when connecting. [REQUIRED]
+
+     user            The database username to use when connecting. [REQUIRED]
+
+-->
+<!ELEMENT data-source (set-property*)>
+<!ATTLIST data-source    id             ID              #IMPLIED>
+<!ATTLIST data-source    key            %BeanName;      #IMPLIED>
+<!ATTLIST data-source    type           %ClassName;     #IMPLIED>
+<!-- All of the following attributes are deprecated.  Use a nested          -->
+<!-- set-property element to configure data source properties.              -->
+<!ATTLIST data-source    autoCommit     %Boolean;       #IMPLIED>
+<!ATTLIST data-source    description    CDATA           #IMPLIED>
+<!ATTLIST data-source    driverClass    %ClassName;     #IMPLIED>
+<!ATTLIST data-source    loginTimeout   %Integer;       #IMPLIED>
+<!ATTLIST data-source    maxCount       %Integer;       #IMPLIED>
+<!ATTLIST data-source    minCount       %Integer;       #IMPLIED>
+<!ATTLIST data-source    password       CDATA           #IMPLIED>
+<!ATTLIST data-source    readOnly       %Boolean;       #IMPLIED>
+<!ATTLIST data-source    url            CDATA           #IMPLIED>
+<!ATTLIST data-source    user           CDATA           #IMPLIED>
+
+
+<!-- The "form-beans" element is the root of the set of form bean descriptors
+     for this application.  The following attributes are defined:
+
+     type            Fully qualified Java class name of the implementation
+                     class used for ActionFormBean objects.  DEPRECATED.
+
+                     WARNING:  For Struts 1.0, this value is ignored.  You
+                     can set the default implementation class name with the
+                     "formBean" initialization parameter to the Struts
+                     controller servlet.
+-->
+<!ELEMENT form-beans (form-bean*)>
+<!ATTLIST form-beans     id             ID              #IMPLIED>
+<!ATTLIST form-beans     type           %ClassName;     "org.apache.struts.action.ActionFormBean">
+
+
+<!-- The "form-bean" element describes a particular form bean, which is a
+     JavaBean that implements the org.apache.struts.action.ActionForm
+     class.  The following attributes are defined:
+
+     className       Fully qualified Java class name of the ActionFormBean
+                     implementation class to use.  Defaults to the value
+                     configured as the "formBean" initialization parameter
+                     to the Struts controller servlet.
+
+     name            Unique identifier of this bean, used to reference it
+                     in corresponding action mappings.
+
+     type            Fully qualified Java class name of the implementation
+                     class to be used or generated
+-->
+<!ELEMENT form-bean (icon?, display-name?, description?, set-property*)>
+<!ATTLIST form-bean      id             ID              #IMPLIED>
+<!ATTLIST form-bean      className      %ClassName;     #IMPLIED>
+<!ATTLIST form-bean      name           %BeanName;      #REQUIRED>
+<!ATTLIST form-bean      type           %ClassName;     #REQUIRED>
+
+
+<!-- The "global-forwards" element configures the global mappings of logical
+     names (used within the application) to mappable resources (identified
+     by context-relative URI paths).  A global "forward" with a particular name
+     can be locally overridden by defining a "forward" of the same name within
+     an "action" element.  The following attribute are defined:
+
+     type            Fully qualified Java class name of the implementation
+                     class used for ActionForward objects.  DEPRECATED.
+
+                     WARNING:  For Struts 1.0, this value is ignored.  You
+                     can set the default implementation class name with the
+                     "forward" initialization parameter to the Struts
+                     controller servlet.
+-->
+<!ELEMENT global-forwards (forward*)>
+<!ATTLIST global-forwards id            ID              #IMPLIED>
+<!ATTLIST global-forwards type          %ClassName;     "org.apache.struts.action.ActionForward">
+
+
+<!-- The "forward" element describes a mapping of a logical name (used within
+     the application) to a mappable resource identified by a context-relative
+     URI path.  The following attributes are defined:
+
+     className       Fully qualified Java class name of the ActionForward
+                     implementation class to use.  Defaults to the value
+                     configured as the "forward" initialization parameter
+                     to the Struts controller servlet.
+
+     name            Unique identifier of this forward, used to reference it
+                     in application action classes.
+
+     path            The context-relative path of the mapped resource.
+
+     redirect        Set to "true" if sendRedirect() should be used to forward
+                     to this resource, or "false" in order to use
+                     RequestDispatcher.forward() instead.
+-->
+<!ELEMENT forward (icon?, display-name?, description?, set-property*)>
+<!ATTLIST forward        id             ID              #IMPLIED>
+<!ATTLIST forward        className      %ClassName;     #IMPLIED>
+<!ATTLIST forward        name           CDATA           #REQUIRED>
+<!ATTLIST forward        path           %RequestPath;   #REQUIRED>
+<!ATTLIST forward        redirect       %Boolean;       #IMPLIED>
+
+
+<!-- The "action-mappings" element configures the mappings from submitted
+     request paths to the corresponding Action classes that should be
+     used to process these requests.  The following attributes are
+     defined:
+
+     type           Fully qualified Java class name of the ActionMapping
+                    implementation class to be used.  DEPRECATED.
+
+                     WARNING:  For Struts 1.0, this value is ignored.  You
+                     can set the default implementation class name with the
+                     "mapping" initialization parameter to the Struts
+                     controller servlet.
+-->
+<!ELEMENT action-mappings (action*)>
+<!ATTLIST action-mappings id             ID              #IMPLIED>
+<!ATTLIST action-mappings type           %ClassName;     "org.apache.struts.action.ActionMapping">
+
+
+<!-- The "action" element describes a mapping from a request paths to the
+     corresponding Action classes that should be used to process these
+     requests.  The following attributes are defined:
+
+     attribute       Name of the request-scope or session-scope attribute
+                     under which our form bean is accessed, if it is other
+                     than the bean's specified "name".  Optional if
+                     "name" is specified, else not allowed.
+
+     className       Fully qualified Java class name of the ActionMapping
+                     implementation class to use.  Defaults to the value
+                     configured as the "mapping" initialization parameter
+                     to the Struts controller servlet.
+
+     forward         Context-relative path of the servlet or JSP resource that
+                     will process this request, instead of instantiating and
+                     calling the Action class specified by "type".  Exactly one
+                     of "forward", "include", or "type" must be specified.
+
+     include         Context-relative path of the servlet or JSP resource that
+                     will process this request, instead of instantiating and
+                     calling the Action class specified by "type".  Exactly one
+                     of "forward", "include", or "type" must be specified.
+
+     input           Context-relative path of the input form to which control
+                     should be returned if a validation error is encountered.
+                     Required if "name" is specified and the input bean
+                     returns validation errors.  Optional if "name" is
+                     specified and the input bean does not return validation
+                     errors.  Not allowed if "name" is not specified.
+
+     name            Name of the form bean, if any, that is associated
+                     with this action.
+
+     path            The context-relative path of the submitted request,
+                     starting with a "/" character, and without the
+                     filename extension if extension mapping is used.
+
+     parameter       General purpose configuration parameter that can be used
+                     to pass extra information to the Action selected by this
+                     mapping.
+
+     prefix          Prefix used to match request parameter names to form bean
+                     property names, if any.  Optional if "name" is specified,
+                     else not allowed.
+
+     scope           Identifier of the scope ("request" or "session") within
+                     which our form bean is accessed, if any.  Optional if
+                     "name" is specified, else not allowed.
+
+     suffix          Suffix used to match request parameter names to form bean
+                     property names, if any.  Optional if "name" is specified,
+                     else not allowed.
+
+     type            Fully qualified Java class name of the Action class
+                     (implements org.apache.struts.action.Action) to be
+                     used to process requests for this mapping if the "forward"
+                     or "include" attribute is not included.  Exactly one
+                     of "forward", "include", or "type" must be specified.
+
+     unknown         Set to "true" if this action should be configured as the
+                     default for this application, to handle all requests
+                     not handled by another action.  Only one action can be
+                     defined as a default within a single application.
+
+     validate        Set to "true" if the validate() method of the form bean
+                     should be called prior to calling this action, or set to
+                     "false" if you do not want validation performed.
+-->
+<!ELEMENT action (icon?, display-name?, description?, set-property*, forward*)>
+<!ATTLIST action         id             ID              #IMPLIED>
+<!ATTLIST action         attribute      %BeanName;      #IMPLIED>
+<!ATTLIST action         className      %ClassName;     #IMPLIED>
+<!ATTLIST action         forward        %RequestPath;   #IMPLIED>
+<!ATTLIST action         include        %RequestPath;   #IMPLIED>
+<!ATTLIST action         input          %RequestPath;   #IMPLIED>
+<!ATTLIST action         name           %BeanName;      #IMPLIED>
+<!ATTLIST action         parameter      CDATA           #IMPLIED>
+<!ATTLIST action         path           %RequestPath;   #REQUIRED>
+<!ATTLIST action         prefix         CDATA           #IMPLIED>
+<!ATTLIST action         scope          %RequestScope;  #IMPLIED>
+<!ATTLIST action         suffix         CDATA           #IMPLIED>
+<!ATTLIST action         type           %ClassName;     #IMPLIED>
+<!ATTLIST action         unknown        %Boolean;       #IMPLIED>
+<!ATTLIST action         validate       %Boolean;       #IMPLIED>
+
+
+<!-- The "set-property" element specifies the name and value of an additional
+     JavaBeans configuration property whose setter method will be called
+     on the object that represents our surrounding element.  This is especially
+     useful when an extended implementation class (with additional properties)
+     is configured on the <global-forwards> or <action-mappings> elements.
+     The following attributes are defined:
+
+     property        Name of the JavaBeans property whose setter method
+                     will be called.
+
+     value           String representation of the value to which this
+                     property will be set, after suitable type conversion
+-->
+<!ELEMENT set-property EMPTY>
+<!ATTLIST set-property   id             ID              #IMPLIED>
+<!ATTLIST set-property   property       %PropName;      #REQUIRED>
+<!ATTLIST set-property   value          CDATA           #REQUIRED>
+
+
+
+<!-- ========== Subordinate Elements ====================================== -->
+
+
+<!-- The "description" element contains descriptive (paragraph length) text
+     about the surrounding element, suitable for use in GUI tools.
+-->
+<!ELEMENT description (#PCDATA)>
+<!ATTLIST description    id             ID              #IMPLIED>
+
+
+
+<!-- The "display-name" element contains a short (one line) description of
+     the surrounding element, suitable for use in GUI tools.
+-->
+<!ELEMENT display-name (#PCDATA)>
+<!ATTLIST display-name   id             ID              #IMPLIED>
+
+
+<!-- The "icon" element contains a small-icon and large-icon element which
+     specify the location, relative to the Struts configuration file, for small
+     and large images used to represent the surrounding element in GUI tools.
+-->
+<!ELEMENT icon (small-icon?, large-icon?)>
+<!ATTLIST icon           id             ID              #IMPLIED>
+
+
+<!-- The "large-icon" element specifies the location, relative to the Struts
+     configuration file, of a resource containing a large (32x32 pixel)
+     icon image.
+-->
+<!ELEMENT large-icon (%Location;)>
+<!ATTLIST large-icon     id             ID              #IMPLIED>
+
+
+<!-- The "small-icon" element specifies the location, relative to the Struts
+     configuration file, of a resource containing a small (16x16 pixel)
+     icon image.
+-->
+<!ELEMENT small-icon (%Location;)>
+<!ATTLIST small-icon     id             ID              #IMPLIED>
+

Added: incubator/beehive/netui/external/struts/struts-config_1_1.dtd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/struts-config_1_1.dtd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,697 @@
+<!--
+     DTD for the Struts Application Configuration File, Version 1.1
+
+     To support validation of your configuration file, include the following
+     DOCTYPE element at the beginning (after the "xml" declaration):
+
+     <!DOCTYPE struts-config PUBLIC
+       "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+       "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+     $Id: struts-config_1_1.dtd,v 1.40 2003/05/14 08:17:16 turner Exp $
+-->
+
+
+<!-- ========== Defined Types ============================================= -->
+
+
+<!-- An "AttributeName" is the identifier of a page, request, session, or
+     application scope attribute.
+-->
+<!ENTITY % AttributeName "CDATA">
+
+
+<!-- A "BeanName" is the identifier of a JavaBean, such as a form bean,
+     and also serves as the name of the corresponding scripting variable
+     and the name of the JSP attribute under which the bean is accessed.
+     Therefore, it must conform to the rules for a Java identifier.
+-->
+<!ENTITY % BeanName "CDATA">
+
+
+<!-- A "Boolean" is the string representation of a boolean (true or false)
+     variable.
+-->
+<!ENTITY % Boolean "(true|false|yes|no)">
+
+
+<!-- A "ClassName" is the fully qualified name of a Java class that is
+     instantiated to provide the functionality of the enclosing element.
+-->
+<!ENTITY % ClassName "CDATA">
+
+
+<!-- An "Integer" is a character string consisting solely of numeric digits,
+     optionally preceeded by a minus sign, that can be converted to a
+     32-bit integer.
+-->
+<!ENTITY % Integer "CDATA">
+
+
+<!-- A "Location" is a relative path, delimited by "/" characters, that
+     defines the location of a resource relative to the location of the
+     Struts configuration file itself.
+-->
+<!ENTITY % Location "#PCDATA">
+
+
+<!-- A "PropName" is the name of a JavaBeans property, and must begin with
+     a lower case letter and contain only characters that are legal in a
+     Java identifier.
+-->
+<!ENTITY % PropName "CDATA">
+
+
+<!-- A "RequestPath" is an application-relative URI path, beginning with a
+     slash, that identifies a mapped resource (such as a JSP page or a servlet)
+     within this web application.
+-->
+<!ENTITY % RequestPath "CDATA">
+
+
+<!-- The name of a JSP bean scope within which such a form bean may be
+     accessed.
+-->
+<!ENTITY % RequestScope "(request|session)">
+
+
+<!-- ========== Top Level Elements ======================================== -->
+
+
+<!-- The "struts-config" element is the root of the configuration file
+     hierarchy, and contains nested elements for all of the other
+     configuration settings.
+-->
+<!ELEMENT struts-config (data-sources?, form-beans?, global-exceptions?, global-forwards?, action-mappings?, controller?, message-resources*, plug-in*)>
+<!ATTLIST struts-config  id             ID              #IMPLIED>
+
+
+<!-- The "data-sources" element describes a set of DataSource objects [JDBC 2.0
+     Standard Extension]. The individual DataSource objects are configured through
+     nested <data-source> elements.
+-->
+<!ELEMENT data-sources (data-source*)>
+<!ATTLIST data-sources   id             ID              #IMPLIED>
+
+
+<!-- The "data-source" element describes a DataSource object [JDBC 2.0 Standard
+     Extension] that will be instantiated, configured, and made available as a
+     servlet context attribute (or "application-scope bean"). Any object can be
+     specified so long as it implements [javax.sql.DataSource] and can be
+     configured entirely from JavaBean properties. The following attributes
+     are required:
+
+     className       The configuration bean for this DataSource object. If
+                     specified, the object must be a subclass of the default
+                     configuration bean.
+                     ["org.apache.struts.config.DataSourceConfig"]
+
+     key             Servlet context attribute key under which this data source
+                     will be stored.  Default is the value specified by string
+                     constant defined by Globals.DATA_SOURCE_KEY. The application
+                     module prefix (if any) is appended to the key
+                     (${key}$prefix}).
+                     [org.apache.struts.Globals.DATA_SOURCE_KEY]
+
+                     NOTE: The application module prefix includes the leading
+                     slash, so the default datasource for a module named "foo" is
+                     stored under "org.apache.struts.action.DATA_SOURCE/foo".
+
+     type            Fully qualified Java class name for this data source object.
+                     The class must implement DataSource [javax.sql.DataSource],
+                     and the object must be configurable entirely from JavaBean
+                     properties.
+-->
+<!ELEMENT data-source (set-property*)>
+<!ATTLIST data-source    id             ID              #IMPLIED>
+<!ATTLIST data-source    className      %ClassName;     #IMPLIED>
+<!ATTLIST data-source    key            %AttributeName; #IMPLIED>
+<!ATTLIST data-source    type           %ClassName;     #IMPLIED>
+
+
+<!-- The "form-beans" element describes the set of form bean descriptors for this
+     application module. The following attributes are defined:
+
+     type            Fully qualified Java class to use when instantiating
+                     ActionFormBean objects. If specified, the object must be a
+                     subclass of the default class type.
+                     DEPRECATED.
+
+                     WARNING:  For Struts 1.0, this value is ignored.  You
+                     can set the default implementation class name with the
+                     "formBean" initialization parameter to the Struts
+                     controller servlet.
+-->
+<!ELEMENT form-beans (form-bean*)>
+<!ATTLIST form-beans     id             ID              #IMPLIED>
+<!ATTLIST form-beans     type           %ClassName;     #IMPLIED>
+
+
+<!-- The "form-bean" element describes an ActionForm subclass
+     [org.apache.struts.action.ActionForm] that can be referenced by an "action"
+     element.
+
+
+The "form-bean" element describes a particular form bean, which is a
+     JavaBean that implements the org.apache.struts.action.ActionForm
+     class.  The following attributes are defined:
+
+     className       The configuration bean for this form bean object. If
+                     specified, the object must be a subclass of the default
+                     configuration bean.
+                     ["org.apache.struts.config.FormBeanConfig"]
+
+     dynamic         If the form bean type is a  DynaActionForm subclass (that you
+                     created), then (and only then) set this attribute to "true".
+                     If the type is set to the default DynaActionForm or any
+                     conventional ActionForm subclass, then this attribute can be
+                     omitted.
+                     [true] if type is "org.apache.struts.action.DynaActionForm"
+                     [false] otherwise  DEPRECATED - THIS IS NOW DETERMINED
+                     DYNAMICALLY BASED ON THE SPECIFIED IMPLEMENTATION CLASS.
+
+     name            The unique identifier for this form bean. Referenced by the
+                     <action> element to specify which form bean to use with its
+                     request.
+
+     type            Fully qualified Java class name of the ActionForm subclass
+                     to use with this form bean.
+-->
+<!ELEMENT form-bean (icon?, display-name?, description?, set-property*, form-property*)>
+<!ATTLIST form-bean      id             ID              #IMPLIED>
+<!ATTLIST form-bean      className      %ClassName;     #IMPLIED>
+<!ATTLIST form-bean      dynamic        %Boolean;       #IMPLIED>
+<!ATTLIST form-bean      name           %BeanName;      #REQUIRED>
+<!ATTLIST form-bean      type           %ClassName;     #REQUIRED>
+
+
+<!-- The "form-property" element describes a JavaBean property that can be used to
+     configure an instance of a DynaActionForm or a subclass thereof. This element
+     is only utilized when the "type" attribute of the enclosing "form-bean" element
+     is [org.apache.struts.action.DynaActionForm] or a subclass of DynaActionForm. If
+     a custom DynaActionForm subclass is used, then the "dynamic" attribute of the
+     enclosing <form-bean> element must be set to "true". Since Struts 1.1.
+
+     className       The configuration bean for this form property object. If
+                     specified, the object must be a subclass of the default
+                     configuration bean.
+                     ["org.apache.struts.config.FormPropertyConfig"]
+
+     initial         String representation of the initial value for this property.
+                     If not specified, primitives will be initialized to zero and
+                     objects initialized to the zero-argument instantiation of that
+                     object class.  For example, Strings will be initialized to ""
+
+
+     name            The name of the JavaBean property described by this element.
+
+     size            The number of array elements to create if the value of the
+                     "type" attribute specifies an array, but there is no value
+                     specified for the "initial" attribute.
+
+     type            Fully qualified Java class name of the field underlying this
+                     property, optionally followed by "[]" to indicate that the
+                     field is indexed.
+-->
+<!ELEMENT form-property  (set-property*)>
+<!ATTLIST form-property  className      %ClassName;     #IMPLIED>
+<!ATTLIST form-property  initial        CDATA           #IMPLIED>
+<!ATTLIST form-property  name           %PropName;      #REQUIRED>
+<!ATTLIST form-property  size           %Integer;       #IMPLIED>
+<!ATTLIST form-property  type           %ClassName;     #REQUIRED>
+
+
+<!-- The "global-exceptions" element describes a set of exceptions that might be
+     thrown by an Action object. The handling of individual exception types is
+     configured through nested exception elements. An <action> element may
+     override a global exception handler by registering a local exception handler
+     for the same exception type. Since Struts 1.1.
+-->
+<!ELEMENT global-exceptions (exception*)>
+<!ATTLIST global-exceptions id          ID              #IMPLIED>
+
+
+<!-- The "exception" element registers an ExceptionHandler for an exception type.
+     The following attributes are defined:
+
+    bundle           Servlet context attribute for the message resources bundle
+                     associated with this handler. The default attribute is the
+                     value specified by the string constant declared at
+                     Globals.MESSAGES_KEY.
+                     [org.apache.struts.Globals.MESSAGES_KEY]
+
+    className        The configuration bean for this ExceptionHandler object.
+                     If specified, className must be a subclass of the default
+                     configuration bean
+                     ["org.apache.struts.config.ExceptionConfig"]
+
+    handler          Fully qualified Java class name for this exception handler.
+                     ["org.apache.struts.action.ExceptionHandler"]
+
+    key              The key to use with this handler's message resource bundle
+                     that will retrieve the error message template for this
+                     exception.
+
+    path             The module-relative URI to the resource that will complete
+                     the request/response if this exception occurs.
+
+    scope            The context ("request" or "session") that is used to access
+                     the ActionError object [org.apache.struts.action.ActionError]
+                     for this exception.
+
+    type             Fully qualified Java class name of the exception type to
+                     register with this handler.
+-->
+<!ELEMENT exception (icon?, display-name?, description?, set-property*)>
+<!ATTLIST exception      id             ID              #IMPLIED>
+<!ATTLIST exception      bundle         %AttributeName; #IMPLIED>
+<!ATTLIST exception      className      %ClassName;     #IMPLIED>
+<!ATTLIST exception      handler        %ClassName;     #IMPLIED>
+<!ATTLIST exception      key            CDATA           #REQUIRED>
+<!ATTLIST exception      path           %RequestPath;   #IMPLIED>
+<!ATTLIST exception      scope          CDATA           #IMPLIED>
+<!ATTLIST exception      type           %ClassName;     #REQUIRED>
+
+
+<!-- The "global-forwards" element describes a set of ActionForward objects
+     [org.apache.struts.action.ActionForward] that are available to all Action
+     objects as a return value. The individual ActionForwards are configured
+     through nested <forward> elements. An <action> element may override a global
+     forward by defining a local <forward> of the same name.
+
+     type            Fully qualified Java class to use when instantiating
+                     ActionForward objects.  If specified, the object must be a
+                     subclass of the default class type.
+                     DEPRECATED.
+
+                     WARNING:  For Struts 1.0, this value is ignored.  You
+                     can set the default implementation class name with the
+                     "forward" initialization parameter to the Struts
+                     controller servlet.
+-->
+<!ELEMENT global-forwards (forward*)>
+<!ATTLIST global-forwards id            ID              #IMPLIED>
+<!ATTLIST global-forwards type          %ClassName;     #IMPLIED>
+
+
+<!-- The "forward" element describes an ActionForward that is to be made
+     available to an Action as a return value. An ActionForward is referenced by
+     a logical name and encapsulates a URI. A "forward" element may be used to
+     describe both global and local ActionForwards. Global forwards are available
+     to all the Action objects in the application module. Local forwards can be
+     nested within an <action> element and only available to an Action object
+     when it is invoked through that ActionMapping.
+
+     className       Fully qualified Java class name of ActionForward
+                     subclass to use for this object.
+                     ["org.apache.struts.action.ActionForward"]
+
+    contextRelative  Set this to "true" if, in a modular application, the path
+                     attribute starts with a slash "/" and should be considered
+                     relative to the entire web application rather than the module.
+                     Since Struts 1.1.
+                     [false]
+
+     name            The unique identifier for this forward. Referenced by the
+                     Action object at runtime to select - by its logical name -
+                     the resource that should complete the request/response.
+
+     path            The module-relative or context-relative path to the resources
+                     that is encapsulated by the logical name of this ActionForward.
+                     If the path is to be considered context-relative when used in
+                     a modular application, then the contextRelative attribute
+                     should be set to "true". This value should begin with a slash
+                     ("/") character.
+
+     redirect        Set to "true" if a redirect instruction should be issued to
+                     the user-agent so that a new request is issued for this
+                     forward's resource. If true,  RequestDispatcher.Redirect is
+                     called. If "false", RequestDispatcher.forward is called instead.
+                     [false]
+-->
+<!ELEMENT forward (icon?, display-name?, description?, set-property*)>
+<!ATTLIST forward        id             ID              #IMPLIED>
+<!ATTLIST forward        className      %ClassName;     #IMPLIED>
+<!ATTLIST forward        contextRelative %Boolean;      #IMPLIED>
+<!ATTLIST forward        name           CDATA           #REQUIRED>
+<!ATTLIST forward        path           %RequestPath;   #REQUIRED>
+<!ATTLIST forward        redirect       %Boolean;       #IMPLIED>
+
+
+<!-- The "action-mappings" element describes a set of ActionMapping objects
+     [org.apache.struts.action.ActionMapping] that are available to process
+     requests matching the url-pattern our ActionServlet registered with the
+     container. The individual ActionMappings are configured through nested
+     <action> elements. The following attributes are defined:
+
+     type           Fully qualified Java class to use when instantiating
+                    ActionMapping objects. If specified, the object must be a
+                    subclass of the default class type.
+
+                    WARNING:  For Struts 1.0, this value is ignored.  You
+                    can set the default implementation class name with the
+                    "mapping" initialization parameter to the Struts
+                    controller servlet.
+-->
+<!ELEMENT action-mappings (action*)>
+<!ATTLIST action-mappings id             ID              #IMPLIED>
+<!ATTLIST action-mappings type           %ClassName;     #IMPLIED>
+
+
+<!-- The "action" element describes an ActionMapping object that is to be used
+     to process a request for a specific module-relative URI. The following
+     attributes are defined:
+
+     attribute       Name of the request-scope or session-scope attribute that
+                     is used to access our ActionForm bean, if it is other than
+                     the bean's specified "name". Optional if "name" is specified,
+                     else not valid.
+
+     className       The fully qualified Java class name of the ActionMapping
+                     subclass to use for this action mapping object. Defaults to
+                     the type specified by the enclosing <action-mappings>
+                     element or to "org.apache.struts.action.ActionMapping" if
+                     not specified.
+                     ["org.apache.struts.action.ActionMapping"]
+
+     forward         Module-relative path of the servlet or other resource that
+                     will process this request, instead of the Action class
+                     specified by "type".  The path WILL NOT be processed
+                     through the "forwardPattern" attribute that is configured
+                     on the "controller" element for this application module.
+                     Exactly one of "forward", "include", or "type" must be
+                     specified.
+
+     include         Module-relative path of the servlet or other resource that
+                     will process this request, instead of the Action class
+                     specified by "type".  The path WILL NOT be processed
+                     through the "forwardPattern" attribute that is configured
+                     on the "controller" element for this application module.
+                     Exactly one of "forward", "include", or "type" must be
+                     specified.
+
+     input           Module-relative path of the action or other resource to
+                     which control should be returned if a validation error is
+                     encountered. Valid only when "name" is specified. Required
+                     if "name" is specified and the input bean returns
+                     validation errors. Optional if "name" is specified and the
+                     input bean does not return validation errors.
+
+     name            Name of the form bean, if any, that is associated with this
+                     action mapping.
+
+     path            The module-relative path of the submitted request, starting
+                     with a "/" character, and without the filename extension if
+                     extension mapping is used.
+
+                     NOTE:  Do *not* include a period in your path name,
+                     because it will look like a filename extension and
+                     cause your Action to not be located.
+
+     parameter       General-purpose configuration parameter that can be used to
+                     pass extra information to the Action object selected by
+                     this action mapping.
+
+     prefix          Prefix used to match request parameter names to ActionForm
+                     property names, if any. Optional if "name" is specified,
+                     else not allowed.
+
+     roles           Comma-delimited list of security role names that are allowed
+                     access to this ActionMapping object. Since Struts 1.1.
+
+     scope           The context ("request" or "session") that is used to
+                     access our ActionForm bean, if any.  Optional if "name" is
+                     specified, else not valid.
+
+     suffix          Suffix used to match request parameter names to ActionForm
+                     bean property names, if any. Optional if "name" is
+                     specified, else not valid.
+
+     type            Fully qualified Java class name of the Action subclass
+                     [org.apache.struts.action.Action] that will process requests
+                     for this action mapping. Not valid if either the "forward"
+                     or "include" attribute is specified.  Exactly one of
+                     "forward", "include", or "type" must be specified.
+
+     unknown         Set to "true" if this object should be configured as the
+                     default action mapping for this module. If a request does not
+                     match another object, it will be passed to the ActionMapping
+                     object with unknown set to "true". Only one ActionMapping
+                     can be marked as "unknown" within a module.
+                     [false]
+
+     validate        Set to "true" if the validate method of the ActionForm bean
+                     should be called prior to calling the Action object for this
+                     action mapping, or set to "false" if you do not want the
+                     validate method called.
+                     [true]
+-->
+<!ELEMENT action (icon?, display-name?, description?, set-property*, exception*, forward*)>
+<!ATTLIST action         id             ID              #IMPLIED>
+<!ATTLIST action         attribute      %BeanName;      #IMPLIED>
+<!ATTLIST action         className      %ClassName;     #IMPLIED>
+<!ATTLIST action         forward        %RequestPath;   #IMPLIED>
+<!ATTLIST action         include        %RequestPath;   #IMPLIED>
+<!ATTLIST action         input          %RequestPath;   #IMPLIED>
+<!ATTLIST action         name           %BeanName;      #IMPLIED>
+<!ATTLIST action         parameter      CDATA           #IMPLIED>
+<!ATTLIST action         path           %RequestPath;   #REQUIRED>
+<!ATTLIST action         prefix         CDATA           #IMPLIED>
+<!ATTLIST action         roles          CDATA           #IMPLIED>
+<!ATTLIST action         scope          %RequestScope;  #IMPLIED>
+<!ATTLIST action         suffix         CDATA           #IMPLIED>
+<!ATTLIST action         type           %ClassName;     #IMPLIED>
+<!ATTLIST action         unknown        %Boolean;       #IMPLIED>
+<!ATTLIST action         validate       %Boolean;       #IMPLIED>
+
+
+<!-- The "controller" element describes the ControllerConfig bean
+     [org.apache.struts.config.ControllerConfig] that encapsulates
+     an application module's runtime configuration. The following
+     attributes are defined:
+
+     bufferSize      The size of the input buffer used when processing
+                     file uploads.
+                     [4096]
+
+     className       Fully qualified Java class name of the
+                     ControllerConfig subclass for this controller object.
+                     If specified, the object must be a subclass of the
+                     default class.
+                     ["org.apache.struts.config.ControllerConfig"]
+
+     contentType     Default content type (and optional character encoding) to
+                     be set on each response. May be overridden by the Action,
+                     JSP, or other resource to which the request is forwarded.
+                     ["text/html"]
+
+     debug           Debugging detail level for this module. [0]
+                     DEPRECATED - configure the logging detail level
+                     in your underlying logging implementation.
+
+     forwardPattern  Replacement pattern defining how the "path" attribute of a
+                     <forward> element is mapped to a context-relative URL when
+                     it starts with a slash (and when the contextRelative
+                     property is false). This value may consist of any
+                     combination of the following:
+                     - "$M" - Replaced by the module prefix of this module
+                     - "$P" - Replaced by the "path" attribute of the  selected
+                     "forward" element
+                     - "$$" - Causes a literal dollar sign to be rendered
+                     - "$x" - (Where "x" is any character not defined above)
+                     Silently swallowed, reserved for future use
+                     If not specified, the default forwardPattern is "$M$P",
+                     which is consistent with the previous behavior of
+                     forwards.  Since Struts 1.1.  ["$M$P"]
+
+     inputForward    Set to "true" if you want the "input" attribute of
+                     <action> elements to be the name of a local or global
+                     ActionForward, which will then be used to calculate the
+                     ultimate URL. Set to "false" (the default) to treat the
+                     "input" parameter of <action> elements as a
+                     module-relative path to the resource
+                     to be used as the input form. Since Struts 1.1.
+                     [false]
+
+     locale          Set to "true" if you want a Locale object stored in the
+                     user's session if not already present.
+                     [true]
+
+     maxFileSize     The maximum size (in bytes) of a file to be accepted as a
+                     file upload.  Can be expressed as a number followed by a
+                     "K", "M", or "G", which are interpreted to mean kilobytes,
+                     megabytes, or gigabytes, respectively.
+                     ["250M"]
+
+     memFileSize     The maximum size (in bytes) of a file whose contents will
+                     be retained in memory after uploading. Files larger than
+                     this threshold will be written to some alternative storage
+                     medium, typically a hard disk. Can be expressed as a number
+                     followed by a "K", "M", or "G", which are interpreted to
+                     mean kilobytes, megabytes, or gigabytes, respectively.
+                     ["256K"]
+
+     multipartClass  The fully qualified Java class name of the multipart
+                     request handler class to be used with this module.
+                     ["org.apache.struts.upload.CommonsMultipartRequestHandler"]
+
+     nocache         Set to "true" if you want the controller to add HTTP
+                     headers for defeating caching to every response from
+                     this module.  [false]
+
+     pagePattern     Replacement pattern defining how the "page" attribute of
+                     custom tags using it is mapped to a context-relative URL
+                     of the corresponding resource.  This value may consist of
+                     any combination of the following:
+                     - "$M" - Replaced by the module prefix of this module
+                     - "$P" - Replaced by the value of the "page" attribute
+                     - "$$" - Causes a literal dollar sign to be rendered
+                     - "$x" - (Where "x" is any character not defined above)
+                              Silently swallowed, reserved for future use
+                     If not specified, the default forwardPattern is
+                     "$M$P", which is consistent with previous hard coded
+                     behavior of URL evaluation for "page" attributes.
+                     ["$M$P"]
+
+     processorClass  The fully qualified Java class name of the
+                     RequestProcessor subclass to be used with this module.
+                     ["org.apache.struts.action.RequestProcessor"]
+
+     tempDir         Temporary working directory to use when processing
+                     file uploads.
+                     [{Directory provided by servlet container}]
+-->
+<!ELEMENT controller     (set-property*)>
+<!ATTLIST controller     id             ID              #IMPLIED>
+<!ATTLIST controller     bufferSize     %Integer;       #IMPLIED>
+<!ATTLIST controller     className      %ClassName;     #IMPLIED>
+<!ATTLIST controller     contentType    CDATA           #IMPLIED>
+<!ATTLIST controller     debug          %Integer;       #IMPLIED>
+<!ATTLIST controller     forwardPattern CDATA           #IMPLIED>
+<!ATTLIST controller     inputForward   %Boolean;       #IMPLIED>
+<!ATTLIST controller     locale         %Boolean;       #IMPLIED>
+<!ATTLIST controller     maxFileSize    CDATA           #IMPLIED>
+<!ATTLIST controller     memFileSize    CDATA           #IMPLIED>
+<!ATTLIST controller     multipartClass %ClassName;     #IMPLIED>
+<!ATTLIST controller     nocache        %Boolean;       #IMPLIED>
+<!ATTLIST controller     pagePattern    CDATA           #IMPLIED>
+<!ATTLIST controller     processorClass %ClassName;     #IMPLIED>
+<!ATTLIST controller     tempDir        CDATA           #IMPLIED>
+
+
+<!-- The "message-resources" element describes a MessageResources object with
+     message templates for this module. The following attributes are defined:
+
+     className       The configuration bean for this message resources object.
+                     If specified, the object must be a subclass of the default
+                     configuration bean.
+                     ["org.apache.struts.config.MessageResourcesConfig"]
+
+     factory         Fully qualified Java class name of the
+                     MessageResourcesFactory subclass to use for this message
+                     resources object.
+                     ["org.apache.struts.util.PropertyMessageResourcesFactory"]
+
+     key             Servlet context attribute under which this message
+                     resources bundle will be stored. The default attribute is
+                     the value specified by the string constant at
+                     [Globals.MESSAGES_KEY]. The application module prefix (if
+                     any) is appended to the key (${key}${prefix}).
+                     [org.apache.struts.Globals.MESSAGES_KEY]
+
+                     NOTE: The application module  prefix includes the leading
+                     slash, so the default message resource bundle for a module
+                     named "foo" is stored under
+                     "org.apache.struts.action.MESSAGE/foo".
+
+     null            Set to "true" if you want our message resources to return a
+                     null string for unknown message keys, or "false" to return a
+                     message with the bad key value.
+
+     parameter       Configuration parameter to be passed to the createResources
+                     method of our factory object.
+-->
+<!ELEMENT message-resources (set-property*)>
+<!ATTLIST message-resources id          ID              #IMPLIED>
+<!ATTLIST message-resources className   %ClassName;     #IMPLIED>
+<!ATTLIST message-resources factory     %ClassName;     #IMPLIED>
+<!ATTLIST message-resources key         %AttributeName; #IMPLIED>
+<!ATTLIST message-resources null        %Boolean;       #IMPLIED>
+<!ATTLIST message-resources parameter   CDATA           #REQUIRED>
+
+
+<!-- The "plug-in" element specifies the fully qualified class name of a
+     general-purpose application plug-in module that receives notification of
+     application startup and shutdown events. An instance of the specified class
+     is created for each element, and can be configured with nested <set-property>
+     elements. The following attributes are supported:
+
+     className       Fully qualified Java class name of the plug-in class; must
+                     implement [org.apache.struts.action.PlugIn].
+-->
+<!ELEMENT plug-in           (set-property*)>
+<!ATTLIST plug-in           id          ID              #IMPLIED>
+<!ATTLIST plug-in           className   %ClassName;     #REQUIRED>
+
+
+<!-- ========== Subordinate Elements ====================================== -->
+
+
+<!-- The "description" element contains descriptive (paragraph length) text
+     about the surrounding element, suitable for use in GUI tools.
+-->
+<!ELEMENT description    (#PCDATA)>
+<!ATTLIST description    id             ID              #IMPLIED>
+
+
+<!-- The "display-name" element contains a short (one line) description of
+     the surrounding element, suitable for use in GUI tools.
+-->
+<!ELEMENT display-name (#PCDATA)>
+<!ATTLIST display-name   id             ID              #IMPLIED>
+
+
+<!-- The "icon" element contains a small-icon and large-icon element which
+     specify the location, relative to the Struts configuration file, for small
+     and large images used to represent the surrounding element in GUI tools.
+-->
+<!ELEMENT icon           (small-icon?, large-icon?)>
+<!ATTLIST icon           id             ID              #IMPLIED>
+
+
+<!-- The "large-icon" element specifies the location, relative to the Struts
+     configuration file, of a resource containing a large (32x32 pixel)
+     icon image.
+-->
+<!ELEMENT large-icon     (%Location;)>
+<!ATTLIST large-icon     id             ID              #IMPLIED>
+
+
+<!-- The "set-property" element specifies the method name and initial value of
+     an additional JavaBean configuration property. When the object representing
+     the surrounding element is instantiated, the accessor for the indicated
+     property is called and passed the indicated value. The "set-property"
+     element is especially useful when a custom subclass is used with
+     <data-source>, <forward>, <action>, or <plug-in> elements. The subclass
+     can be passed whatever other properties may be required to configure the
+     object without changing how the struts-config is parsed.
+
+     property        Name of the JavaBeans property whose setter method
+                     will be called.
+
+     value           String representation of the value to which this
+                     property will be set, after suitable type conversion
+-->
+<!ELEMENT set-property   EMPTY>
+<!ATTLIST set-property   id             ID              #IMPLIED>
+<!ATTLIST set-property   property       %PropName;      #REQUIRED>
+<!ATTLIST set-property   value          CDATA           #REQUIRED>
+
+
+<!-- The "small-icon" element specifies the location, relative to the Struts
+     configuration file, of a resource containing a small (16x16 pixel)
+     icon image.
+-->
+<!ELEMENT small-icon     (%Location;)>
+<!ATTLIST small-icon     id             ID              #IMPLIED>
+

Added: incubator/beehive/netui/external/struts/struts-html.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/struts-html.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2972 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>html</shortname>
+<uri>http://jakarta.apache.org/struts/tags-html</uri>
+<tag>
+<name>base</name>
+<tagclass>org.apache.struts.taglib.html.BaseTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>target</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>server</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>button</name>
+<tagclass>org.apache.struts.taglib.html.ButtonTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>cancel</name>
+<tagclass>org.apache.struts.taglib.html.CancelTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>checkbox</name>
+<tagclass>org.apache.struts.taglib.html.CheckboxTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>errors</name>
+<tagclass>org.apache.struts.taglib.html.ErrorsTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>file</name>
+<tagclass>org.apache.struts.taglib.html.FileTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>accept</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>form</name>
+<tagclass>org.apache.struts.taglib.html.FormTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>action</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>enctype</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>focus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>focusIndex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>method</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onreset</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onsubmit</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>target</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>frame</name>
+<tagclass>org.apache.struts.taglib.html.FrameTag</tagclass>
+<attribute>
+<name>action</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>frameborder</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>frameName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>longdesc</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>marginheight</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>marginwidth</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>noresize</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scrolling</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>hidden</name>
+<tagclass>org.apache.struts.taglib.html.HiddenTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>write</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>html</name>
+<tagclass>org.apache.struts.taglib.html.HtmlTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>xhtml</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>image</name>
+<tagclass>org.apache.struts.taglib.html.ImageTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>align</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>border</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>pageKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>src</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>srcKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>img</name>
+<tagclass>org.apache.struts.taglib.html.ImgTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>align</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>border</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>height</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>hspace</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>imageName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ismap</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>lowsrc</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>pageKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>src</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>srcKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>usemap</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>vspace</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>width</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>javascript</name>
+<tagclass>org.apache.struts.taglib.html.JavascriptValidatorTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>cdata</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>dynamicJavascript</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>formName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>method</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>src</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>staticJavascript</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>htmlComment</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>link</name>
+<tagclass>org.apache.struts.taglib.html.LinkTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>action</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>linkName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>target</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messages</name>
+<tagclass>org.apache.struts.taglib.html.MessagesTag</tagclass>
+<teiclass>org.apache.struts.taglib.html.MessagesTei</teiclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>footer</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>multibox</name>
+<tagclass>org.apache.struts.taglib.html.MultiboxTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>option</name>
+<tagclass>org.apache.struts.taglib.html.OptionTag</tagclass>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>key</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>options</name>
+<tagclass>org.apache.struts.taglib.html.OptionsTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>filter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>labelName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>labelProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>optionsCollection</name>
+<tagclass>org.apache.struts.taglib.html.OptionsCollectionTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>filter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>label</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>password</name>
+<tagclass>org.apache.struts.taglib.html.PasswordTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>redisplay</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>radio</name>
+<tagclass>org.apache.struts.taglib.html.RadioTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>idName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>reset</name>
+<tagclass>org.apache.struts.taglib.html.ResetTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>rewrite</name>
+<tagclass>org.apache.struts.taglib.html.RewriteTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>select</name>
+<tagclass>org.apache.struts.taglib.html.SelectTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>submit</name>
+<tagclass>org.apache.struts.taglib.html.SubmitTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>text</name>
+<tagclass>org.apache.struts.taglib.html.TextTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>textarea</name>
+<tagclass>org.apache.struts.taglib.html.TextareaTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>cols</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>rows</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>xhtml</name>
+<tagclass>org.apache.struts.taglib.html.XhtmlTag</tagclass>
+<bodycontent>empty</bodycontent>
+</tag>
+</taglib>
+

Added: incubator/beehive/netui/external/struts/struts-logic.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/struts-logic.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,642 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>logic</shortname>
+<uri>http://jakarta.apache.org/struts/tags-logic</uri>
+<tag>
+<name>empty</name>
+<tagclass>org.apache.struts.taglib.logic.EmptyTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>equal</name>
+<tagclass>org.apache.struts.taglib.logic.EqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>forward</name>
+<tagclass>org.apache.struts.taglib.logic.ForwardTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>greaterEqual</name>
+<tagclass>org.apache.struts.taglib.logic.GreaterEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>greaterThan</name>
+<tagclass>org.apache.struts.taglib.logic.GreaterThanTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>iterate</name>
+<tagclass>org.apache.struts.taglib.logic.IterateTag</tagclass>
+<teiclass>org.apache.struts.taglib.logic.IterateTei</teiclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexId</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>length</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>offset</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>lessEqual</name>
+<tagclass>org.apache.struts.taglib.logic.LessEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>lessThan</name>
+<tagclass>org.apache.struts.taglib.logic.LessThanTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>match</name>
+<tagclass>org.apache.struts.taglib.logic.MatchTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>location</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messagesNotPresent</name>
+<tagclass>org.apache.struts.taglib.logic.MessagesNotPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messagesPresent</name>
+<tagclass>org.apache.struts.taglib.logic.MessagesPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notEmpty</name>
+<tagclass>org.apache.struts.taglib.logic.NotEmptyTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notEqual</name>
+<tagclass>org.apache.struts.taglib.logic.NotEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notMatch</name>
+<tagclass>org.apache.struts.taglib.logic.NotMatchTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>location</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notPresent</name>
+<tagclass>org.apache.struts.taglib.logic.NotPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>user</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>present</name>
+<tagclass>org.apache.struts.taglib.logic.PresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>user</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>redirect</name>
+<tagclass>org.apache.struts.taglib.logic.RedirectTag</tagclass>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+</taglib>
+
+
+

Added: incubator/beehive/netui/external/struts/struts-nested.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/struts-nested.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2870 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>nested</shortname>
+<uri>http://jakarta.apache.org/struts/tags-nested</uri>
+<tag>
+<name>nest</name>
+<tagclass>org.apache.struts.taglib.nested.NestedPropertyTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>writeNesting</name>
+<tagclass>org.apache.struts.taglib.nested.NestedWriteNestingTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>filter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>root</name>
+<tagclass>org.apache.struts.taglib.nested.NestedRootTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>define</name>
+<tagclass>org.apache.struts.taglib.nested.bean.NestedDefineTag</tagclass>
+<teiclass>org.apache.struts.taglib.nested.bean.NestedDefineTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>toScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>message</name>
+<tagclass>org.apache.struts.taglib.nested.bean.NestedMessageTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>arg0</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg1</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg2</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg3</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg4</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>key</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>size</name>
+<tagclass>org.apache.struts.taglib.nested.bean.NestedSizeTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.SizeTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>write</name>
+<tagclass>org.apache.struts.taglib.nested.bean.NestedWriteTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>filter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>format</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>formatKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ignore</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>checkbox</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedCheckboxTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>errors</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedErrorsTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>file</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedFileTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>accept</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>form</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedFormTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>action</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>enctype</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>focus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>method</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onreset</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onsubmit</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>target</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>hidden</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedHiddenTag</tagclass>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>image</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedImageTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>align</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>border</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>pageKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>src</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>srcKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>img</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedImgTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>align</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>border</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>height</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>hspace</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>imageName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ismap</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>lowsrc</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>pageKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>src</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>srcKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>usemap</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>vspace</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>width</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>link</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedLinkTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>action</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>linkName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>target</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messages</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedMessagesTag</tagclass>
+<teiclass>org.apache.struts.taglib.html.MessagesTei</teiclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>footer</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>multibox</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedMultiboxTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>options</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedOptionsTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>labelName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>labelProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>optionsCollection</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>label</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>password</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedPasswordTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>redisplay</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>radio</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedRadioTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>select</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedSelectTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>submit</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedSubmitTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>text</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedTextTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>textarea</name>
+<tagclass>org.apache.struts.taglib.nested.html.NestedTextareaTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>cols</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>rows</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>empty</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedEmptyTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>equal</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>greaterEqual</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>greaterThan</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedGreaterThanTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>iterate</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedIterateTag</tagclass>
+<teiclass>org.apache.struts.taglib.nested.logic.NestedIterateTei</teiclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>id</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>length</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>offset</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>lessEqual</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedLessEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>lessThan</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedLessThanTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>match</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedMatchTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>location</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messagesNotPresent</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messagesPresent</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notEmpty</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedNotEmptyTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notEqual</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedNotEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notMatch</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedNotMatchTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>location</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notPresent</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedNotPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>user</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>present</name>
+<tagclass>org.apache.struts.taglib.nested.logic.NestedPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>user</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+</taglib>
+
+
+

Added: incubator/beehive/netui/external/struts/struts-template.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/struts-template.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>template</shortname>
+<uri>http://jakarta.apache.org/struts/tags-template</uri>
+<tag>
+<name>insert</name>
+<tagclass>org.apache.struts.taglib.template.InsertTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>template</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>put</name>
+<tagclass>org.apache.struts.taglib.template.PutTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>content</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>direct</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>get</name>
+<tagclass>org.apache.struts.taglib.template.GetTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>flush</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+</taglib>
+
+
+

Added: incubator/beehive/netui/external/struts/struts-tiles.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/struts-tiles.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>tiles</shortname>
+<uri>http://jakarta.apache.org/struts/tags-tiles</uri>
+<tag>
+<name>insert</name>
+<tagclass>org.apache.struts.taglib.tiles.InsertTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>template</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>component</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>definition</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>attribute</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanScope</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>flush</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>ignore</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>controllerUrl</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>controllerClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>definition</name>
+<tagclass>org.apache.struts.taglib.tiles.DefinitionTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>template</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>extends</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>put</name>
+<tagclass>org.apache.struts.taglib.tiles.PutTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>content</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>direct</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanScope</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>putList</name>
+<tagclass>org.apache.struts.taglib.tiles.PutListTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>add</name>
+<tagclass>org.apache.struts.taglib.tiles.AddTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>content</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>direct</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>beanScope</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>get</name>
+<tagclass>org.apache.struts.taglib.tiles.GetTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ignore</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>flush</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>getAsString</name>
+<tagclass>org.apache.struts.taglib.tiles.GetAttributeTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ignore</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>useAttribute</name>
+<tagclass>org.apache.struts.taglib.tiles.UseAttributeTag</tagclass>
+<teiclass>org.apache.struts.taglib.tiles.UseAttributeTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>classname</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ignore</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>importAttribute</name>
+<tagclass>org.apache.struts.taglib.tiles.ImportAttributeTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>ignore</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>initComponentDefinitions</name>
+<tagclass>org.apache.struts.taglib.tiles.InitDefinitionsTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>file</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>classname</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+</tag>
+</taglib>
+
+
+

Added: incubator/beehive/netui/external/struts/struts.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/struts/tiles-config.dtd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/tiles-config.dtd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+     DTD for the Tile Definition File, Version 1.0
+
+     To support validation of your configuration file, include the following
+     DOCTYPE element at the beginning (after the "xml" declaration):
+
+     <!DOCTYPE tiles-definitions PUBLIC
+       "-//Apache Software Foundation//DTD Tiles Configuration//EN"
+       "http://jakarta.apache.org/struts/dtds/tiles-config.dtd">
+
+     $Id: tiles-config.dtd,v 1.1 2002/06/25 03:23:20 craigmcc Exp $
+-->
+<!ELEMENT component-definitions (definition+)>
+<!ELEMENT tiles-definitions (definition+)>
+<!ELEMENT definition (put*, putList*)>
+<!ATTLIST definition
+	name CDATA #REQUIRED
+	page CDATA #IMPLIED
+	path CDATA #IMPLIED
+	extends CDATA #IMPLIED
+	role CDATA #IMPLIED
+	template CDATA #IMPLIED
+	controllerClass CDATA #IMPLIED
+	controllerUrl CDATA #IMPLIED
+>
+<!ELEMENT put (#PCDATA)>
+<!ATTLIST put
+	name CDATA #REQUIRED
+	value CDATA #IMPLIED
+	type (string | page | template | definition) #IMPLIED
+	content CDATA #IMPLIED
+	direct (true | false) #IMPLIED
+>
+<!ELEMENT putList ( (add* | item* | bean* | putList*)+) >
+<!ATTLIST putList
+	name CDATA #REQUIRED
+>
+<!ELEMENT putListElements (add | item | bean)>
+
+<!ELEMENT add (#PCDATA)>
+<!ATTLIST add
+	value CDATA #IMPLIED
+	type (string | page | template | definition) #IMPLIED
+	content CDATA #IMPLIED
+	direct (true | false) #IMPLIED
+>
+
+<!ELEMENT bean (#PCDATA)>
+<!ATTLIST bean
+	classtype CDATA #REQUIRED
+>
+
+<!ELEMENT item (#PCDATA)>
+<!ATTLIST item
+	value CDATA #REQUIRED
+	link CDATA #REQUIRED
+	classtype CDATA #IMPLIED
+	icon CDATA #IMPLIED
+	tooltip CDATA #IMPLIED
+>

Added: incubator/beehive/netui/external/struts/tiles-config_1_1.dtd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/tiles-config_1_1.dtd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,281 @@
+<!--
+     DTD for the Tile Definition File, Version 1.1
+
+     To support validation of your configuration file, include the following
+     DOCTYPE element at the beginning (after the "xml" declaration):
+
+     <!DOCTYPE tiles-definitions PUBLIC
+       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
+       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
+
+     $Id: tiles-config_1_1.dtd,v 1.6 2003/05/03 16:19:56 jholmes Exp $
+-->
+
+
+<!-- ========== Defined Types ============================================= -->
+
+
+<!-- A "Boolean" is the string representation of a boolean (true or false)
+     variable.
+-->
+<!ENTITY % Boolean "(true|false)">
+
+
+<!-- A "ContentType" is the content type of an attribute passed to a tile
+     component.
+-->
+<!ENTITY % ContentType "(string|page|template|definition)">
+
+<!-- A "ClassName" is the fully qualified name of a Java class that is
+     instantiated to provide the functionality of the enclosing element.
+-->
+<!ENTITY % ClassName "CDATA">
+
+<!-- A "RequestPath" is an application-relative URI path, beginning with a
+     slash, that identifies a mapped resource (such as a JSP page or a servlet)
+     within this web application.
+-->
+<!ENTITY % RequestPath "CDATA">
+
+<!-- A "DefinitionName" is the unique identifier of a definition. This identifier
+     is a logical name used to reference the definition.
+-->
+<!ENTITY % DefinitionName "CDATA">
+
+<!-- A "BeanName" is the identifier of a JavaBean, such as a form bean,
+     and also serves as the name of the corresponding scripting variable
+     and the name of the JSP attribute under which the bean is accessed.
+     Therefore, it must conform to the rules for a Java identifier.
+-->
+<!ENTITY % BeanName "CDATA">
+
+<!-- A "PropName" is the name of a JavaBeans property, and must begin with
+     a lower case letter and contain only characters that are legal in a
+     Java identifier.
+-->
+<!ENTITY % PropName "CDATA">
+
+<!-- A "Location" is a relative path, delimited by "/" characters, that
+     defines the location of a resource relative to the location of the
+     configuration file itself.
+-->
+<!ENTITY % Location "#PCDATA">
+
+
+
+<!-- ========== Top Level Elements ======================================== -->
+
+
+  <!-- deprecated: use tiles-definitions instead.-->
+<!ELEMENT component-definitions (definition+)>
+
+<!-- The "tiles-definitions" element is the root of the configuration file
+     hierarchy, and contains nested elements for all of the other
+     configuration settings.
+-->
+<!ELEMENT tiles-definitions (definition+)>
+
+<!-- The "definition" element describes a definition that can be inserted in a jsp
+     page. This definition is identified by its logical name. A definition allows
+     to define all the attributes that can be set in <insert> tag from a jsp page.
+
+     controllerClass The fully qualified Java class name of the controller
+                     subclass to call immediately before the tiles is inserted.
+                     Only one of controllerClass or controllerUrl should be
+                     specified.
+
+     controllerUrl   The context-relative path to the resource used as controller
+                     called immediately before the tiles is inserted.
+                     Only one of controllerClass or controllerUrl should be
+                     specified.
+
+     extends         Name of a definition that is used as ancestor of this definition.
+                     All attributes from the ancestor are available to the new
+                     definition. Any attribute inherited from the ancestor can
+                     be overloaded by providing a new value.
+
+     name            The unique identifier for this definition.
+
+     page            Same as path.
+
+     path            The context-relative path to the resource used as tiles to
+                     insert. This tiles will be inserted and a tiles context
+                     containing appropriate attributes will be available.
+
+     role            Security role name that is allowed access to this definition
+                     object. The definition is inserted only if the role name is
+                     allowed.
+
+     template        Same as path. For compatibility with the template tag library.
+-->
+<!ELEMENT definition (icon?, display-name?, description?, put*, putList*)>
+<!ATTLIST definition       id               ID               #IMPLIED>
+<!ATTLIST definition       controllerClass  %ClassName;      #IMPLIED>
+<!ATTLIST definition       controllerUrl    %RequestPath;    #IMPLIED>
+<!ATTLIST definition       extends          %DefinitionName; #IMPLIED>
+<!ATTLIST definition       name             %DefinitionName; #REQUIRED>
+<!ATTLIST definition       page             %RequestPath;    #IMPLIED>
+<!ATTLIST definition       path             %RequestPath;    #IMPLIED>
+<!ATTLIST definition       role             CDATA            #IMPLIED>
+<!ATTLIST definition       template         %RequestPath;    #IMPLIED>
+
+
+<!-- The "put" element describes an attribute of a definition. It allows to
+     specify the tiles attribute name and its value. The tiles value can be
+     specified as an xml attribute, or in the body of the <put> tag.
+
+     content         Same as value. For compatibility with the template tag library.
+
+     direct          Same as type="string". For compatibility with the template
+                     tag library.
+
+     name            The unique identifier for this put.
+
+     type            The type of the value. Can be: string, page, template or definition.
+                     By default, no type is associated to a value. If a type is
+                     associated, it will be used as a hint to process the value
+                     when the attribute will be used in the inserted tiles.
+
+     value           The value associated to this tiles attribute. The value should
+                     be specified with this tag attribute, or in the body of the tag.
+-->
+<!ELEMENT put (#PCDATA)>
+<!ATTLIST put              id               ID              #IMPLIED>
+<!ATTLIST put              content          CDATA           #IMPLIED>
+<!ATTLIST put              direct           %Boolean;       #IMPLIED>
+<!ATTLIST put              name             CDATA           #REQUIRED>
+<!ATTLIST put              type             %ContentType;   #IMPLIED>
+<!ATTLIST put              value            CDATA           #IMPLIED>
+
+
+<!-- The "putList" element describes a list attribute of a definition. It allows to
+     specify an attribute that is a java List containing any kind of values. In
+     the config file, the list elements are specified by nested <add>, <item> or
+     <putList>.
+
+     name            The unique identifier for this put list.
+-->
+<!ELEMENT putList ( (add* | item* | bean* | putList*)+) >
+<!ATTLIST putList          id               ID              #IMPLIED>
+<!ATTLIST putList          name             CDATA           #REQUIRED>
+
+<!-- ========== Subordinate Elements ====================================== -->
+
+<!-- The "add" element describes an element of a list. It is similar to the
+     <put> element.
+
+     content         Same as value. For compatibility with the template tag library.
+
+     direct          Same as type="string". For compatibility with the template
+                     tag library.
+
+     type            The type of the value. Can be: string, page, template or definition.
+                     By default, no type is associated to a value. If a type is
+                     associated, it will be used as a hint to process the value
+                     when the attribute will be used in the inserted tiles.
+
+     value           The value associated to this tiles attribute. The value should
+                     be specified with this tag attribute, or in the body of the tag.
+-->
+<!ELEMENT add (#PCDATA)>
+<!ATTLIST add              id               ID              #IMPLIED>
+<!ATTLIST add              content          CDATA           #IMPLIED>
+<!ATTLIST add              direct           %Boolean;       #IMPLIED>
+<!ATTLIST add              type             %ContentType;   #IMPLIED>
+<!ATTLIST add              value            CDATA           #IMPLIED>
+
+
+<!-- The "bean" element describes an element of a list. It create a bean of the
+     specified java classtype. This bean is initialized with appropriate nested
+     <set-property>.
+
+     classtype       The fully qualified classname for this bean.
+-->
+<!ELEMENT bean (set-property*)>
+<!ATTLIST bean             id               ID              #IMPLIED>
+<!ATTLIST bean             classtype        %ClassName;     #REQUIRED>
+
+<!-- The "set-property" element specifies the method name and initial value of
+     a bean property. When the object representing
+     the surrounding element is instantiated, the accessor for the indicated
+     property is called and passed the indicated value.
+
+     property        Name of the JavaBeans property whose setter method
+                     will be called.
+
+     value           String representation of the value to which this
+                     property will be set, after suitable type conversion
+-->
+<!ELEMENT set-property   EMPTY>
+<!ATTLIST set-property   id             ID              #IMPLIED>
+<!ATTLIST set-property   property       %PropName;      #REQUIRED>
+<!ATTLIST set-property   value          CDATA           #REQUIRED>
+
+
+<!-- The "item" element describes an element of a list. It create a bean added as
+     element to the list. Each bean can contain different properties: value, link,
+     icon, tooltip. These properties are to be interpreted by the jsp page using
+     them.
+     By default the bean is of type
+     "org.apache.struts.tiles.beans.SimpleMenuItem". This bean is useful to
+     create a list of beans used as menu items.
+
+     classtype       The fully qualified classtype for this bean.
+                     If specified, the classtype must be a subclass of the interface
+                     "org.apache.struts.tiles.beans.MenuItem".
+
+     icon            The bean 'icon' property.
+
+     link            The bean 'link' property.
+
+     tooltip         The bean 'tooltip' property.
+
+     value           The bean 'value' property.
+-->
+<!ELEMENT item (#PCDATA)>
+<!ATTLIST item             id               ID              #IMPLIED>
+<!ATTLIST item             classtype        %ClassName;     #IMPLIED>
+<!ATTLIST item             icon             CDATA           #IMPLIED>
+<!ATTLIST item             link             CDATA           #REQUIRED>
+<!ATTLIST item             tooltip          CDATA           #IMPLIED>
+<!ATTLIST item             value            CDATA           #REQUIRED>
+
+
+<!-- ========== Info Elements ====================================== -->
+
+<!-- The "description" element contains descriptive (paragraph length) text
+     about the surrounding element, suitable for use in GUI tools.
+-->
+<!ELEMENT description    (#PCDATA)>
+<!ATTLIST description    id             ID              #IMPLIED>
+
+
+<!-- The "display-name" element contains a short (one line) description of
+     the surrounding element, suitable for use in GUI tools.
+-->
+<!ELEMENT display-name (#PCDATA)>
+<!ATTLIST display-name   id             ID              #IMPLIED>
+
+
+<!-- The "icon" element contains a small-icon and large-icon element which
+     specify the location, relative to the Struts configuration file, for small
+     and large images used to represent the surrounding element in GUI tools.
+-->
+<!ELEMENT icon           (small-icon?, large-icon?)>
+<!ATTLIST icon           id             ID              #IMPLIED>
+
+
+<!-- The "large-icon" element specifies the location, relative to the Struts
+     configuration file, of a resource containing a large (32x32 pixel)
+     icon image.
+-->
+<!ELEMENT large-icon     (%Location;)>
+<!ATTLIST large-icon     id             ID              #IMPLIED>
+
+
+<!-- The "small-icon" element specifies the location, relative to the Struts
+     configuration file, of a resource containing a small (16x16 pixel)
+     icon image.
+-->
+<!ELEMENT small-icon     (%Location;)>
+<!ATTLIST small-icon     id             ID              #IMPLIED>

Added: incubator/beehive/netui/external/struts/validator-rules.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/validator-rules.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1044 @@
+<!DOCTYPE form-validation PUBLIC
+          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
+          "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
+<!--
+
+   This file contains the default Struts Validator pluggable validator
+   definitions.  It should be placed somewhere under /WEB-INF and
+   referenced in the struts-config.xml under the plug-in element
+   for the ValidatorPlugIn.
+
+      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
+        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
+                                                  /WEB-INF/validation.xml"/>
+      </plug-in>
+
+   These are the default error messages associated with
+   each validator defined in this file.  They should be
+   added to your projects ApplicationResources.properties
+   file or you can associate new ones by modifying the
+   pluggable validators msg attributes in this file.
+
+   # Struts Validator Error Messages
+   errors.required={0} is required.
+   errors.minlength={0} can not be less than {1} characters.
+   errors.maxlength={0} can not be greater than {1} characters.
+   errors.invalid={0} is invalid.
+
+   errors.byte={0} must be a byte.
+   errors.short={0} must be a short.
+   errors.integer={0} must be an integer.
+   errors.long={0} must be a long.
+   errors.float={0} must be a float.
+   errors.double={0} must be a double.
+
+   errors.date={0} is not a date.
+   errors.range={0} is not in the range {1} through {2}.
+   errors.creditcard={0} is an invalid credit card number.
+   errors.email={0} is an invalid e-mail address.
+
+-->
+
+<form-validation>
+
+   <global>
+
+      <validator name="required"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateRequired"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+                  msg="errors.required">
+
+         <javascript><![CDATA[
+            function validateRequired(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oRequired = new required();
+                for (x in oRequired) {
+                	var field = form[oRequired[x][0]];
+                	
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'file' ||
+                        field.type == 'select-one' ||
+                        field.type == 'radio' ||
+                        field.type == 'password') {
+                        
+                        var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+							if (si >= 0) {
+								value = field.options[si].value;
+							}
+						} else {
+							value = field.value;
+						}
+                        
+                        if (trim(value).length == 0) {
+                        
+	                        if (i == 0) {
+	                            focusField = field;
+	                        }
+	                        fields[i++] = oRequired[x][1];
+	                        isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return isValid;
+            }
+            
+            // Trim whitespace from left and right sides of s.
+            function trim(s) {
+                return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
+            }
+            
+            ]]>
+         </javascript>
+
+      </validator>
+
+      <validator name="requiredif"
+                 classname="org.apache.struts.validator.FieldChecks"
+                 method="validateRequiredIf"
+                 methodParams="java.lang.Object,
+                               org.apache.commons.validator.ValidatorAction,
+                               org.apache.commons.validator.Field,
+                               org.apache.struts.action.ActionErrors,
+                               org.apache.commons.validator.Validator,
+                               javax.servlet.http.HttpServletRequest"
+                 msg="errors.required">
+      </validator>
+
+      <validator name="minlength"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateMinLength"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.minlength">
+
+         <javascript><![CDATA[
+            function validateMinLength(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oMinLength = new minlength();
+                for (x in oMinLength) {
+                    var field = form[oMinLength[x][0]];
+                    
+                    if (field.type == 'text' ||
+                        field.type == 'textarea') {
+                        
+                        var iMin = parseInt(oMinLength[x][2]("minlength"));
+                        if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oMinLength[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return isValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="maxlength"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateMaxLength"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.maxlength">
+
+         <javascript><![CDATA[
+            function validateMaxLength(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oMaxLength = new maxlength();
+                for (x in oMaxLength) {
+                    var field = form[oMaxLength[x][0]];
+                    
+                    if (field.type == 'text' ||
+                        field.type == 'textarea') {
+                        
+                        var iMax = parseInt(oMaxLength[x][2]("maxlength"));
+                        if (field.value.length > iMax) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oMaxLength[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return isValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="mask"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateMask"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.invalid">
+
+         <javascript><![CDATA[
+            function validateMask(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oMasked = new mask();
+                for (x in oMasked) {
+                    var field = form[oMasked[x][0]];
+                    
+                    if ((field.type == 'text' || 
+                         field.type == 'textarea') && 
+                         (field.value.length > 0)) {
+                        
+                        if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oMasked[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return isValid;
+            }
+
+            function matchPattern(value, mask) {
+               return mask.exec(value);
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="byte"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateByte"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.byte"
+       jsFunctionName="ByteValidations">
+
+         <javascript><![CDATA[
+            function validateByte(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oByte = new ByteValidations();
+                for (x in oByte) {
+                	var field = form[oByte[x][0]];
+                	
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'select-one' ||
+						field.type == 'radio') {
+
+						var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+							if (si >= 0) {
+								value = field.options[si].value;
+							}
+						} else {
+							value = field.value;
+						}
+                        
+                        if (value.length > 0) {
+                            if (!isAllDigits(value)) {
+                                bValid = false;
+                                if (i == 0) {
+                                    focusField = field;
+                                }
+                                fields[i++] = oByte[x][1];
+
+                            } else {
+
+	                            var iValue = parseInt(value);
+	                            if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
+	                                if (i == 0) {
+	                                    focusField = field;
+	                                }
+	                                fields[i++] = oByte[x][1];
+	                                bValid = false;
+	                            }
+                            }
+						}
+						
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return bValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="short"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateShort"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.short"
+       jsFunctionName="ShortValidations">
+
+         <javascript><![CDATA[
+            function validateShort(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oShort = new ShortValidations();
+                for (x in oShort) {
+                	var field = form[oShort[x][0]];
+                	
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'select-one' ||
+                        field.type == 'radio') {
+                        
+                        var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+							if (si >= 0) {
+								value = field.options[si].value;
+							}
+						} else {
+							value = field.value;
+						}
+                        
+                        if (value.length > 0) {
+                            if (!isAllDigits(value)) {
+                                bValid = false;
+                                if (i == 0) {
+                                    focusField = field;
+                                }
+                                fields[i++] = oShort[x][1];
+
+                            } else {
+                        
+	                            var iValue = parseInt(value);
+	                            if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
+	                                if (i == 0) {
+	                                    focusField = field;
+	                                }
+	                                fields[i++] = oShort[x][1];
+	                                bValid = false;
+	                            }
+	                       }
+                       }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return bValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="integer"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateInteger"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.integer"
+       jsFunctionName="IntegerValidations">
+
+         <javascript><![CDATA[
+            function validateInteger(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oInteger = new IntegerValidations();
+                for (x in oInteger) {
+                	var field = form[oInteger[x][0]];
+
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'select-one' ||
+                        field.type == 'radio') {
+                        
+                        var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+						    if (si >= 0) {
+							    value = field.options[si].value;
+						    }
+						} else {
+							value = field.value;
+						}
+                        
+                        if (value.length > 0) {
+                        
+                            if (!isAllDigits(value)) {
+                                bValid = false;
+                                if (i == 0) {
+	                                focusField = field;
+	                            }
+						        fields[i++] = oInteger[x][1];
+						        
+                            } else {
+	                            var iValue = parseInt(value);
+	                            if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
+	                                if (i == 0) {
+	                                    focusField = field;
+	                                }
+	                                fields[i++] = oInteger[x][1];
+	                                bValid = false;
+	                           }
+                           }
+                       }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return bValid;
+            }
+
+            function isAllDigits(argvalue) {
+                argvalue = argvalue.toString();
+                var validChars = "0123456789";
+                var startFrom = 0;
+                if (argvalue.substring(0, 2) == "0x") {
+                   validChars = "0123456789abcdefABCDEF";
+                   startFrom = 2;
+                } else if (argvalue.charAt(0) == "0") {
+                   validChars = "01234567";
+                   startFrom = 1;
+                } else if (argvalue.charAt(0) == "-") {
+                    startFrom = 1;
+                }
+                
+                for (var n = startFrom; n < argvalue.length; n++) {
+                    if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
+                }
+                return true;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="long"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateLong"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.long"/>
+
+
+      <validator name="float"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateFloat"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.float"
+       jsFunctionName="FloatValidations">
+
+         <javascript><![CDATA[
+            function validateFloat(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oFloat = new FloatValidations();
+                for (x in oFloat) {
+                	var field = form[oFloat[x][0]];
+                	
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'select-one' ||
+                        field.type == 'radio') {
+                        
+                    	var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+							if (si >= 0) {
+							    value = field.options[si].value;
+							}
+						} else {
+							value = field.value;
+						}
+                        
+                        if (value.length > 0) {
+                            // remove '.' before checking digits
+                            var tempArray = value.split('.');
+                            var joinedString= tempArray.join('');
+
+                            if (!isAllDigits(joinedString)) {
+                                bValid = false;
+                                if (i == 0) {
+                                    focusField = field;
+                                }
+                                fields[i++] = oFloat[x][1];
+
+                            } else {
+	                            var iValue = parseFloat(value);
+	                            if (isNaN(iValue)) {
+	                                if (i == 0) {
+	                                    focusField = field;
+	                                }
+	                                fields[i++] = oFloat[x][1];
+	                                bValid = false;
+	                            }
+                            }
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return bValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="double"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateDouble"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.double"/>
+
+
+      <validator name="date"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateDate"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.date"
+       jsFunctionName="DateValidations">
+
+         <javascript><![CDATA[
+            function validateDate(form) {
+               var bValid = true;
+               var focusField = null;
+               var i = 0;
+               var fields = new Array();
+               oDate = new DateValidations();
+               for (x in oDate) {
+                   var value = form[oDate[x][0]].value;
+                   var datePattern = oDate[x][2]("datePatternStrict");
+                   if ((form[oDate[x][0]].type == 'text' ||
+                        form[oDate[x][0]].type == 'textarea') &&
+                       (value.length > 0) &&
+                       (datePattern.length > 0)) {
+                     var MONTH = "MM";
+                     var DAY = "dd";
+                     var YEAR = "yyyy";
+                     var orderMonth = datePattern.indexOf(MONTH);
+                     var orderDay = datePattern.indexOf(DAY);
+                     var orderYear = datePattern.indexOf(YEAR);
+                     if ((orderDay < orderYear && orderDay > orderMonth)) {
+                         var iDelim1 = orderMonth + MONTH.length;
+                         var iDelim2 = orderDay + DAY.length;
+                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+                         if (iDelim1 == orderDay && iDelim2 == orderYear) {
+                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
+                         } else if (iDelim1 == orderDay) {
+                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
+                         } else if (iDelim2 == orderYear) {
+                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
+                         } else {
+                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
+                         }
+                         var matched = dateRegexp.exec(value);
+                         if(matched != null) {
+                            if (!isValidDate(matched[2], matched[1], matched[3])) {
+                               if (i == 0) {
+                                   focusField = form[oDate[x][0]];
+                               }
+                               fields[i++] = oDate[x][1];
+                               bValid =  false;
+                            }
+                         } else {
+                            if (i == 0) {
+                                focusField = form[oDate[x][0]];
+                            }
+                            fields[i++] = oDate[x][1];
+                            bValid =  false;
+                         }
+                     } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
+                         var iDelim1 = orderDay + DAY.length;
+                         var iDelim2 = orderMonth + MONTH.length;
+                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+                         if (iDelim1 == orderMonth && iDelim2 == orderYear) {
+                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
+                         } else if (iDelim1 == orderMonth) {
+                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
+                         } else if (iDelim2 == orderYear) {
+                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
+                         } else {
+                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
+                         }
+                         var matched = dateRegexp.exec(value);
+                         if(matched != null) {
+                             if (!isValidDate(matched[1], matched[2], matched[3])) {
+                                 if (i == 0) {
+                                     focusField = form[oDate[x][0]];
+                                 }
+                                 fields[i++] = oDate[x][1];
+                                 bValid =  false;
+                              }
+                         } else {
+                             if (i == 0) {
+                                 focusField = form[oDate[x][0]];
+                             }
+                             fields[i++] = oDate[x][1];
+                             bValid =  false;
+                         }
+                     } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
+                         var iDelim1 = orderYear + YEAR.length;
+                         var iDelim2 = orderMonth + MONTH.length;
+                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+                         if (iDelim1 == orderMonth && iDelim2 == orderDay) {
+                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
+                         } else if (iDelim1 == orderMonth) {
+                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
+                         } else if (iDelim2 == orderDay) {
+                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
+                         } else {
+                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
+                         }
+                         var matched = dateRegexp.exec(value);
+                         if(matched != null) {
+                             if (!isValidDate(matched[3], matched[2], matched[1])) {
+                                 if (i == 0) {
+                                     focusField = form[oDate[x][0]];
+                                  }
+                                  fields[i++] = oDate[x][1];
+                                  bValid =  false;
+                              }
+                          } else {
+                              if (i == 0) {
+                                  focusField = form[oDate[x][0]];
+                              }
+                              fields[i++] = oDate[x][1];
+                              bValid =  false;
+                          }
+                     } else {
+                         if (i == 0) {
+                             focusField = form[oDate[x][0]];
+                         }
+                         fields[i++] = oDate[x][1];
+                         bValid =  false;
+                     }
+                  }
+               }
+               if (fields.length > 0) {
+                  focusField.focus();
+                  alert(fields.join('\n'));
+               }
+               return bValid;
+            }
+
+	    function isValidDate(day, month, year) {
+	        if (month < 1 || month > 12) {
+                    return false;
+                }
+                if (day < 1 || day > 31) {
+                    return false;
+                }
+                if ((month == 4 || month == 6 || month == 9 || month == 11) &&
+                    (day == 31)) {
+                    return false;
+                }
+                if (month == 2) {
+                    var leap = (year % 4 == 0 &&
+                               (year % 100 != 0 || year % 400 == 0));
+                    if (day>29 || (day == 29 && !leap)) {
+                        return false;
+                    }
+                }
+                return true;
+            }]]>
+         </javascript>
+
+      </validator>
+
+<!-- range is deprecated use intRange instead -->
+      <validator name="range"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateIntRange"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends="integer"
+                  msg="errors.range">
+
+         <javascript><![CDATA[
+            function validateRange(form) {
+                return validateIntRange(form);
+            }]]>
+         </javascript>
+
+      </validator>
+
+      <validator name="intRange"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateIntRange"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends="integer"
+                  msg="errors.range">
+
+         <javascript><![CDATA[
+            function validateIntRange(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oRange = new intRange();
+                for (x in oRange) {
+                    var field = form[oRange[x][0]];
+                    
+                    if ((field.type == 'text' ||
+                         field.type == 'textarea') &&
+                        (field.value.length > 0)) {
+                        
+                        var iMin = parseInt(oRange[x][2]("min"));
+                        var iMax = parseInt(oRange[x][2]("max"));
+                        var iValue = parseInt(field.value);
+                        if (!(iValue >= iMin && iValue <= iMax)) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oRange[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                    focusField.focus();
+                    alert(fields.join('\n'));
+                }
+                return isValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+      <validator name="floatRange"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateFloatRange"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends="float"
+                  msg="errors.range">
+
+         <javascript><![CDATA[
+            function validateFloatRange(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oRange = new floatRange();
+                for (x in oRange) {
+                    var field = form[oRange[x][0]];
+                    
+                    if ((field.type == 'text' ||
+                         field.type == 'textarea') &&
+                        (field.value.length > 0)) {
+                        
+                        var fMin = parseFloat(oRange[x][2]("min"));
+                        var fMax = parseFloat(oRange[x][2]("max"));
+                        var fValue = parseFloat(field.value);
+                        if (!(fValue >= fMin && fValue <= fMax)) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oRange[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                    focusField.focus();
+                    alert(fields.join('\n'));
+                }
+                return isValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+      <validator name="creditCard"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateCreditCard"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.creditcard">
+
+         <javascript><![CDATA[
+            function validateCreditCard(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oCreditCard = new creditCard();
+                for (x in oCreditCard) {
+                    if ((form[oCreditCard[x][0]].type == 'text' ||
+                         form[oCreditCard[x][0]].type == 'textarea') &&
+                        (form[oCreditCard[x][0]].value.length > 0)) {
+                        if (!luhnCheck(form[oCreditCard[x][0]].value)) {
+                            if (i == 0) {
+                                focusField = form[oCreditCard[x][0]];
+                            }
+                            fields[i++] = oCreditCard[x][1];
+                            bValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                    focusField.focus();
+                    alert(fields.join('\n'));
+                }
+                return bValid;
+            }
+
+            /**
+             * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
+             */
+            function luhnCheck(cardNumber) {
+                if (isLuhnNum(cardNumber)) {
+                    var no_digit = cardNumber.length;
+                    var oddoeven = no_digit & 1;
+                    var sum = 0;
+                    for (var count = 0; count < no_digit; count++) {
+                        var digit = parseInt(cardNumber.charAt(count));
+                        if (!((count & 1) ^ oddoeven)) {
+                            digit *= 2;
+                            if (digit > 9) digit -= 9;
+                        };
+                        sum += digit;
+                    };
+                    if (sum == 0) return false;
+                    if (sum % 10 == 0) return true;
+                };
+                return false;
+            }
+
+            function isLuhnNum(argvalue) {
+                argvalue = argvalue.toString();
+                if (argvalue.length == 0) {
+                    return false;
+                }
+                for (var n = 0; n < argvalue.length; n++) {
+                    if ((argvalue.substring(n, n+1) < "0") ||
+                        (argvalue.substring(n,n+1) > "9")) {
+                        return false;
+                    }
+                }
+                return true;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="email"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateEmail"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.email">
+
+         <javascript><![CDATA[
+            function validateEmail(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oEmail = new email();
+                for (x in oEmail) {
+                    if ((form[oEmail[x][0]].type == 'text' ||
+                         form[oEmail[x][0]].type == 'textarea') &&
+                        (form[oEmail[x][0]].value.length > 0)) {
+                        if (!checkEmail(form[oEmail[x][0]].value)) {
+                            if (i == 0) {
+                                focusField = form[oEmail[x][0]];
+                            }
+                            fields[i++] = oEmail[x][1];
+                            bValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                    focusField.focus();
+                    alert(fields.join('\n'));
+                }
+                return bValid;
+            }
+
+            /**
+             * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
+             * http://javascript.internet.com
+             */
+            function checkEmail(emailStr) {
+               if (emailStr.length == 0) {
+                   return true;
+               }
+               var emailPat=/^(.+)@(.+)$/;
+               var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
+               var validChars="\[^\\s" + specialChars + "\]";
+               var quotedUser="(\"[^\"]*\")";
+               var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
+               var atom=validChars + '+';
+               var word="(" + atom + "|" + quotedUser + ")";
+               var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
+               var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
+               var matchArray=emailStr.match(emailPat);
+               if (matchArray == null) {
+                   return false;
+               }
+               var user=matchArray[1];
+               var domain=matchArray[2];
+               if (user.match(userPat) == null) {
+                   return false;
+               }
+               var IPArray = domain.match(ipDomainPat);
+               if (IPArray != null) {
+                   for (var i = 1; i <= 4; i++) {
+                      if (IPArray[i] > 255) {
+                         return false;
+                      }
+                   }
+                   return true;
+               }
+               var domainArray=domain.match(domainPat);
+               if (domainArray == null) {
+                   return false;
+               }
+               var atomPat=new RegExp(atom,"g");
+               var domArr=domain.match(atomPat);
+               var len=domArr.length;
+               if ((domArr[domArr.length-1].length < 2) ||
+                   (domArr[domArr.length-1].length > 3)) {
+                   return false;
+               }
+               if (len < 2) {
+                   return false;
+               }
+               return true;
+            }]]>
+         </javascript>
+
+      </validator>
+
+   </global>
+
+</form-validation>

Added: incubator/beehive/netui/external/struts/version.txt
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/version.txt	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,3 @@
+Struts 1.1
+
+Downloaded: 7/17/2003 4:00 PM

Added: incubator/beehive/netui/external/struts/web-app_2_2.dtd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/web-app_2_2.dtd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,565 @@
+
+<!--
+The web-app element is the root of the deployment descriptor for
+a web application
+-->
+
+<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
+context-param*, servlet*, servlet-mapping*, session-config?,
+mime-mapping*, welcome-file-list?, error-page*, taglib*,
+resource-ref*, security-constraint*, login-config?, security-role*,
+env-entry*, ejb-ref*)>
+
+<!--
+The icon element contains a small-icon and a large-icon element
+which specify the location within the web application for a small and
+large image used to represent the web application in a GUI tool. At a
+minimum, tools must accept GIF and JPEG format images.
+-->
+
+<!ELEMENT icon (small-icon?, large-icon?)>
+
+<!--
+The small-icon element contains the location within the web
+application of a file containing a small (16x16 pixel) icon image.
+-->
+
+<!ELEMENT small-icon (#PCDATA)>
+
+<!--
+The large-icon element contains the location within the web
+application of a file containing a large (32x32 pixel) icon image.
+-->
+
+<!ELEMENT large-icon (#PCDATA)>
+
+<!--
+The display-name element contains a short name that is intended
+to be displayed by GUI tools
+-->
+
+<!ELEMENT display-name (#PCDATA)>
+
+<!--
+The description element is used to provide descriptive text about
+the parent element.
+-->
+
+<!ELEMENT description (#PCDATA)>
+
+<!--
+The distributable element, by its presence in a web application
+deployment descriptor, indicates that this web application is
+programmed appropriately to be deployed into a distributed servlet
+container
+-->
+
+<!ELEMENT distributable EMPTY>
+
+<!--
+The context-param element contains the declaration of a web
+application's servlet context initialization parameters.
+-->
+
+<!ELEMENT context-param (param-name, param-value, description?)>
+
+<!--
+The param-name element contains the name of a parameter.
+-->
+
+<!ELEMENT param-name (#PCDATA)>
+
+<!--
+The param-value element contains the value of a parameter.
+-->
+
+<!ELEMENT param-value (#PCDATA)>
+
+<!--
+The servlet element contains the declarative data of a
+servlet. If a jsp-file is specified and the load-on-startup element is
+present, then the JSP should be precompiled and loaded.
+-->
+
+<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
+(servlet-class|jsp-file), init-param*, load-on-startup?, security-role-ref*)>
+
+<!--
+The servlet-name element contains the canonical name of the
+servlet.
+-->
+
+<!ELEMENT servlet-name (#PCDATA)>
+
+<!--
+The servlet-class element contains the fully qualified class name
+of the servlet.
+-->
+
+<!ELEMENT servlet-class (#PCDATA)>
+
+<!--
+The jsp-file element contains the full path to a JSP file within
+the web application.
+-->
+
+<!ELEMENT jsp-file (#PCDATA)>
+
+<!--
+The init-param element contains a name/value pair as an
+initialization param of the servlet
+-->
+
+<!ELEMENT init-param (param-name, param-value, description?)>
+
+<!--
+The load-on-startup element indicates that this servlet should be
+loaded on the startup of the web application. The optional contents of
+these element must be a positive integer indicating the order in which
+the servlet should be loaded. Lower integers are loaded before higher
+integers. If no value is specified, or if the value specified is not a
+positive integer, the container is free to load it at any time in the
+startup sequence.
+-->
+
+<!ELEMENT load-on-startup (#PCDATA)>
+
+<!--
+The servlet-mapping element defines a mapping between a servlet
+and a url pattern
+-->
+
+<!ELEMENT servlet-mapping (servlet-name, url-pattern)>
+
+<!--
+The url-pattern element contains the url pattern of the
+mapping. Must follow the rules specified in Section 10 of the Servlet
+API Specification.
+-->
+
+<!ELEMENT url-pattern (#PCDATA)>
+
+<!--
+The session-config element defines the session parameters for
+this web application.
+-->
+
+<!ELEMENT session-config (session-timeout?)>
+
+<!--
+The session-timeout element defines the default session timeout
+interval for all sessions created in this web application. The
+specified timeout must be expressed in a whole number of minutes.
+-->
+
+<!ELEMENT session-timeout (#PCDATA)>
+
+<!--
+The mime-mapping element defines a mapping between an extension
+and a mime type.
+-->
+
+<!ELEMENT mime-mapping (extension, mime-type)>
+
+<!--
+The extension element contains a string describing an
+extension. example: "txt"
+-->
+
+<!ELEMENT extension (#PCDATA)>
+
+<!--
+The mime-type element contains a defined mime type. example:
+"text/plain"
+-->
+
+<!ELEMENT mime-type (#PCDATA)>
+
+<!--
+The welcome-file-list contains an ordered list of welcome files
+elements.
+-->
+
+<!ELEMENT welcome-file-list (welcome-file+)>
+
+<!--
+The welcome-file element contains file name to use as a default
+welcome file, such as index.html
+-->
+
+<!ELEMENT welcome-file (#PCDATA)>
+
+<!--
+The taglib element is used to describe a JSP tag library.
+-->
+
+<!ELEMENT taglib (taglib-uri, taglib-location)>
+
+<!--
+The taglib-uri element describes a URI, relative to the location
+of the web.xml document, identifying a Tag Library used in the Web
+Application.
+-->
+
+<!ELEMENT taglib-uri (#PCDATA)>
+
+<!--
+the taglib-location element contains the location (as a resource
+relative to the root of the web application) where to find the Tag
+Libary Description file for the tag library.
+-->
+
+<!ELEMENT taglib-location (#PCDATA)>
+
+<!--
+The error-page element contains a mapping between an error code
+or exception type to the path of a resource in the web application
+-->
+
+<!ELEMENT error-page ((error-code | exception-type), location)>
+
+<!--
+The error-code contains an HTTP error code, ex: 404
+-->
+
+<!ELEMENT error-code (#PCDATA)>
+
+<!--
+The exception type contains a fully qualified class name of a
+Java exception type.
+-->
+
+<!ELEMENT exception-type (#PCDATA)>
+
+<!--
+The location element contains the location of the resource in the
+web application
+-->
+
+<!ELEMENT location (#PCDATA)>
+
+<!--
+The resource-ref element contains a declaration of a Web
+Application's reference to an external resource.
+-->
+
+<!ELEMENT resource-ref (description?, res-ref-name, res-type, res-auth)>
+
+<!--
+The res-ref-name element specifies the name of the resource
+factory reference name.
+-->
+
+<!ELEMENT res-ref-name (#PCDATA)>
+
+<!--
+The res-type element specifies the (Java class) type of the data
+source.
+-->
+
+<!ELEMENT res-type (#PCDATA)>
+
+<!--
+The res-auth element indicates whether the application component
+code performs resource signon programmatically or whether the
+container signs onto the resource based on the principle mapping
+information supplied by the deployer. Must be CONTAINER or SERVLET
+-->
+
+<!ELEMENT res-auth (#PCDATA)>
+
+<!--
+The security-constraint element is used to associate security
+constraints with one or more web resource collections
+-->
+
+<!ELEMENT security-constraint (web-resource-collection+,
+auth-constraint?, user-data-constraint?)>
+
+<!--
+The web-resource-collection element is used to identify a subset
+of the resources and HTTP methods on those resources within a web
+application to which a security constraint applies. If no HTTP methods
+are specified, then the security constraint applies to all HTTP
+methods.
+-->
+
+<!ELEMENT web-resource-collection (web-resource-name, description?,
+url-pattern*, http-method*)>
+
+<!--
+The web-resource-name contains the name of this web resource
+collection
+-->
+
+<!ELEMENT web-resource-name (#PCDATA)>
+
+<!--
+The http-method contains an HTTP method (GET | POST |...)
+-->
+
+<!ELEMENT http-method (#PCDATA)>
+
+<!--
+The user-data-constraint element is used to indicate how data
+communicated between the client and container should be protected
+-->
+
+<!ELEMENT user-data-constraint (description?, transport-guarantee)>
+
+<!--
+The transport-guarantee element specifies that the communication
+between client and server should be NONE, INTEGRAL, or
+CONFIDENTIAL. NONE means that the application does not require any
+transport guarantees. A value of INTEGRAL means that the application
+requires that the data sent between the client and server be sent in
+such a way that it can't be changed in transit. CONFIDENTIAL means
+that the application requires that the data be transmitted in a
+fashion that prevents other entities from observing the contents of
+the transmission. In most cases, the presence of the INTEGRAL or
+CONFIDENTIAL flag will indicate that the use of SSL is required.
+-->
+
+<!ELEMENT transport-guarantee (#PCDATA)>
+
+<!--
+The auth-constraint element indicates the user roles that should
+be permitted access to this resource collection. The role used here
+must appear in a security-role-ref element.
+-->
+
+<!ELEMENT auth-constraint (description?, role-name*)>
+
+<!--
+The role-name element contains the name of a security role.
+-->
+
+<!ELEMENT role-name (#PCDATA)>
+
+<!--
+The login-config element is used to configure the authentication
+method that should be used, the realm name that should be used for
+this application, and the attributes that are needed by the form login
+mechanism.
+-->
+
+<!ELEMENT login-config (auth-method?, realm-name?, form-login-config?)>
+
+<!--
+The realm name element specifies the realm name to use in HTTP
+Basic authorization
+-->
+
+<!ELEMENT realm-name (#PCDATA)>
+
+<!--
+The form-login-config element specifies the login and error pages
+that should be used in form based login. If form based authentication
+is not used, these elements are ignored.
+-->
+
+<!ELEMENT form-login-config (form-login-page, form-error-page)>
+
+<!--
+The form-login-page element defines the location in the web app
+where the page that can be used for login can be found
+-->
+
+<!ELEMENT form-login-page (#PCDATA)>
+
+<!--
+The form-error-page element defines the location in the web app
+where the error page that is displayed when login is not successful
+can be found
+-->
+
+<!ELEMENT form-error-page (#PCDATA)>
+
+<!--
+The auth-method element is used to configure the authentication
+mechanism for the web application. As a prerequisite to gaining access
+to any web resources which are protected by an authorization
+constraint, a user must have authenticated using the configured
+mechanism. Legal values for this element are "BASIC", "DIGEST",
+"FORM", or "CLIENT-CERT".
+-->
+
+<!ELEMENT auth-method (#PCDATA)>
+
+<!--
+The security-role element contains the declaration of a security
+role which is used in the security-constraints placed on the web
+application.
+-->
+
+<!ELEMENT security-role (description?, role-name)>
+
+<!--
+The role-name element contains the name of a role. This element
+must contain a non-empty string.
+-->
+
+<!ELEMENT security-role-ref (description?, role-name, role-link)>
+
+<!--
+The role-link element is used to link a security role reference
+to a defined security role. The role-link element must contain the
+name of one of the security roles defined in the security-role
+elements.
+-->
+
+<!ELEMENT role-link (#PCDATA)>
+
+<!--
+The env-entry element contains the declaration of an
+application's environment entry. This element is required to be
+honored on in J2EE compliant servlet containers.
+-->
+
+<!ELEMENT env-entry (description?, env-entry-name, env-entry-value?,
+env-entry-type)>
+
+<!--
+The env-entry-name contains the name of an application's
+environment entry
+-->
+
+<!ELEMENT env-entry-name (#PCDATA)>
+
+<!--
+The env-entry-value element contains the value of an
+application's environment entry
+-->
+
+<!ELEMENT env-entry-value (#PCDATA)>
+
+<!--
+The env-entry-type element contains the fully qualified Java type
+of the environment entry value that is expected by the application
+code. The following are the legal values of env-entry-type:
+java.lang.Boolean, java.lang.String, java.lang.Integer,
+java.lang.Double, java.lang.Float.
+-->
+
+<!ELEMENT env-entry-type (#PCDATA)>
+
+<!--
+The ejb-ref element is used to declare a reference to an
+enterprise bean. 
+-->
+
+<!ELEMENT ejb-ref (description?, ejb-ref-name, ejb-ref-type, home, remote,
+ejb-link?)>
+
+<!--
+The ejb-ref-name element contains the name of an EJB
+reference. This is the JNDI name that the servlet code uses to get a
+reference to the enterprise bean.
+-->
+
+<!ELEMENT ejb-ref-name (#PCDATA)>
+
+<!--
+The ejb-ref-type element contains the expected java class type of
+the referenced EJB.
+-->
+
+<!ELEMENT ejb-ref-type (#PCDATA)>
+
+<!--
+The ejb-home element contains the fully qualified name of the
+EJB's home interface
+-->
+
+<!ELEMENT home (#PCDATA)>
+
+<!--
+The ejb-remote element contains the fully qualified name of the
+EJB's remote interface
+-->
+
+<!ELEMENT remote (#PCDATA)>
+
+<!--
+The ejb-link element is used in the ejb-ref element to specify
+that an EJB reference is linked to an EJB in an encompassing Java2
+Enterprise Edition (J2EE) application package. The value of the
+ejb-link element must be the ejb-name of and EJB in the J2EE
+application package.
+-->
+
+<!ELEMENT ejb-link (#PCDATA)>
+
+<!--
+The ID mechanism is to allow tools to easily make tool-specific
+references to the elements of the deployment descriptor. This allows
+tools that produce additional deployment information (i.e information
+beyond the standard deployment descriptor information) to store the
+non-standard information in a separate file, and easily refer from
+these tools-specific files to the information in the standard web-app
+deployment descriptor.
+-->
+
+<!ATTLIST web-app id ID #IMPLIED>
+<!ATTLIST icon id ID #IMPLIED>
+<!ATTLIST small-icon id ID #IMPLIED>
+<!ATTLIST large-icon id ID #IMPLIED>
+<!ATTLIST display-name id ID #IMPLIED>
+<!ATTLIST description id ID #IMPLIED>
+<!ATTLIST distributable id ID #IMPLIED>
+<!ATTLIST context-param id ID #IMPLIED>
+<!ATTLIST param-name id ID #IMPLIED>
+<!ATTLIST param-value id ID #IMPLIED>
+<!ATTLIST servlet id ID #IMPLIED>
+<!ATTLIST servlet-name id ID #IMPLIED>
+<!ATTLIST servlet-class id ID #IMPLIED>
+<!ATTLIST jsp-file id ID #IMPLIED>
+<!ATTLIST init-param id ID #IMPLIED>
+<!ATTLIST load-on-startup id ID #IMPLIED>
+<!ATTLIST servlet-mapping id ID #IMPLIED>
+<!ATTLIST url-pattern id ID #IMPLIED>
+<!ATTLIST session-config id ID #IMPLIED>
+<!ATTLIST session-timeout id ID #IMPLIED>
+<!ATTLIST mime-mapping id ID #IMPLIED>
+<!ATTLIST extension id ID #IMPLIED>
+<!ATTLIST mime-type id ID #IMPLIED>
+<!ATTLIST welcome-file-list id ID #IMPLIED>
+<!ATTLIST welcome-file id ID #IMPLIED>
+<!ATTLIST taglib id ID #IMPLIED>
+<!ATTLIST taglib-uri id ID #IMPLIED>
+<!ATTLIST taglib-location id ID #IMPLIED>
+<!ATTLIST error-page id ID #IMPLIED>
+<!ATTLIST error-code id ID #IMPLIED>
+<!ATTLIST exception-type id ID #IMPLIED>
+<!ATTLIST location id ID #IMPLIED>
+<!ATTLIST resource-ref id ID #IMPLIED>
+<!ATTLIST res-ref-name id ID #IMPLIED>
+<!ATTLIST res-type id ID #IMPLIED>
+<!ATTLIST res-auth id ID #IMPLIED>
+<!ATTLIST security-constraint id ID #IMPLIED>
+<!ATTLIST web-resource-collection id ID #IMPLIED>
+<!ATTLIST web-resource-name id ID #IMPLIED>
+<!ATTLIST http-method id ID #IMPLIED>
+<!ATTLIST user-data-constraint id ID #IMPLIED>
+<!ATTLIST transport-guarantee id ID #IMPLIED>
+<!ATTLIST auth-constraint id ID #IMPLIED>
+<!ATTLIST role-name id ID #IMPLIED>
+<!ATTLIST login-config id ID #IMPLIED>
+<!ATTLIST realm-name id ID #IMPLIED>
+<!ATTLIST form-login-config id ID #IMPLIED>
+<!ATTLIST form-login-page id ID #IMPLIED>
+<!ATTLIST form-error-page id ID #IMPLIED>
+<!ATTLIST auth-method id ID #IMPLIED>
+<!ATTLIST security-role id ID #IMPLIED>
+<!ATTLIST security-role-ref id ID #IMPLIED>
+<!ATTLIST role-link id ID #IMPLIED>
+<!ATTLIST env-entry id ID #IMPLIED>
+<!ATTLIST env-entry-name id ID #IMPLIED>
+<!ATTLIST env-entry-value id ID #IMPLIED>
+<!ATTLIST env-entry-type id ID #IMPLIED>
+<!ATTLIST ejb-ref id ID #IMPLIED>
+<!ATTLIST ejb-ref-name id ID #IMPLIED>
+<!ATTLIST ejb-ref-type id ID #IMPLIED>
+<!ATTLIST home id ID #IMPLIED>
+<!ATTLIST remote id ID #IMPLIED>
+<!ATTLIST ejb-link id ID #IMPLIED>

Added: incubator/beehive/netui/external/struts/web-app_2_3.dtd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/external/struts/web-app_2_3.dtd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1059 @@
+<!--
+Copyright 2000-2001 Sun Microsystems, Inc. 901 San Antonio Road,
+Palo Alto, CA  94303, U.S.A.  All rights reserved.
+
+This product or document is protected by copyright and distributed
+under licenses restricting its use, copying, distribution, and
+decompilation.  No part of this product or documentation may be
+reproduced in any form by any means without prior written authorization
+of Sun and its licensors, if any.
+
+Third party software, including font technology, is copyrighted and
+licensed from Sun suppliers.
+
+Sun, Sun Microsystems, the Sun Logo, Solaris, Java, JavaServer Pages, Java
+Naming and Directory Interface, JDBC, JDK, JavaMail and Enterprise JavaBeans,
+are trademarks or registered trademarks of Sun Microsystems, Inc in the U.S.
+and other countries.
+
+All SPARC trademarks are used under license and are trademarks
+or registered trademarks of SPARC International, Inc.
+in the U.S. and other countries. Products bearing SPARC
+trademarks are based upon an architecture developed by Sun Microsystems, Inc.
+
+PostScript is a registered trademark of Adobe Systems, Inc.
+
+Federal Acquisitions: Commercial Software - Government Users Subject to
+Standard License Terms and Conditions.
+
+DOCUMENTATION IS PROVIDED "AS IS" AND ALL EXPRESS OR IMPLIED
+CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
+IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE OR NON-INFRINGEMENT, ARE DISCLAIMED, EXCEPT
+TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE LEGALLY
+INVALID.
+
+_________________________________________________________________________
+
+Copyright 2000-2001 Sun Microsystems, Inc.,
+901 San Antonio Road, Palo Alto, CA  94303, Etats-Unis.
+Tous droits re'serve's.
+
+
+Ce produit ou document est prote'ge' par un copyright et distribue' avec
+des licences qui en restreignent l'utilisation, la copie, la distribution,
+et la de'compilation.  Aucune partie de ce produit ou de sa documentation
+associe'e ne peut e^tre reproduite sous aucune forme, par quelque moyen
+que ce soit, sans l'autorisation pre'alable et e'crite de Sun et de ses
+bailleurs de licence, s'il y en a.
+
+Le logiciel de'tenu par des tiers, et qui comprend la technologie
+relative aux polices de caracte`res, est prote'ge' par un copyright
+et licencie' par des fournisseurs de Sun.
+
+Sun, Sun Microsystems, le logo Sun, Solaris, Java, JavaServer Pages, Java
+Naming and Directory Interface, JDBC, JDK, JavaMail, et Enterprise JavaBeans,
+sont des marques de fabrique ou des marques de'pose'es de Sun
+Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
+
+Toutes les marques SPARC sont utilise'es sous licence et sont
+des marques de fabrique ou des marques de'pose'es de SPARC
+International, Inc. aux Etats-Unis et  dans
+d'autres pays. Les produits portant les marques SPARC sont
+base's sur une architecture de'veloppe'e par Sun Microsystems, Inc.
+
+Postcript est une marque enregistre'e d'Adobe Systems Inc.
+
+LA DOCUMENTATION EST FOURNIE "EN L'ETAT" ET TOUTES AUTRES CONDITIONS,
+DECLARATIONS ET GARANTIES EXPRESSES OU TACITES SONT FORMELLEMENT EXCLUES,
+DANS LA MESURE AUTORISEE PAR LA LOI APPLICABLE, Y COMPRIS NOTAMMENT
+TOUTE GARANTIE IMPLICITE RELATIVE A LA QUALITE MARCHANDE, A L'APTITUDE
+A UNE UTILISATION PARTICULIERE OU A L'ABSENCE DE CONTREFACON.
+-->
+
+<!--
+This is the XML DTD for the Servlet 2.3 deployment descriptor.
+All Servlet 2.3 deployment descriptors must include a DOCTYPE
+of the following form:
+
+  <!DOCTYPE web-app PUBLIC
+	"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+	"http://java.sun.com/dtd/web-app_2_3.dtd">
+
+-->
+
+<!--
+The following conventions apply to all J2EE deployment descriptor
+elements unless indicated otherwise.
+
+- In elements that contain PCDATA, leading and trailing whitespace
+  in the data may be ignored.
+
+- In elements whose value is an "enumerated type", the value is
+  case sensitive.
+
+- In elements that specify a pathname to a file within the same
+  JAR file, relative filenames (i.e., those not starting with "/")
+  are considered relative to the root of the JAR file's namespace.
+  Absolute filenames (i.e., those starting with "/") also specify
+  names in the root of the JAR file's namespace.  In general, relative
+  names are preferred.  The exception is .war files where absolute
+  names are preferred for consistency with the servlet API.
+-->
+
+
+<!--
+The web-app element is the root of the deployment descriptor for
+a web application.
+-->
+<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
+context-param*, filter*, filter-mapping*, listener*, servlet*,
+servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?,
+error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*,
+login-config?, security-role*, env-entry*, ejb-ref*,  ejb-local-ref*)>
+
+<!--
+The auth-constraint element indicates the user roles that should
+be permitted access to this resource collection. The role-name
+used here must either correspond to the role-name of one of the
+security-role elements defined for this web application, or be
+the specially reserved role-name "*" that is a compact syntax for
+indicating all roles in the web application. If both "*" and
+rolenames appear, the container interprets this as all roles.
+If no roles are defined, no user is allowed access to the portion of
+the web application described by the containing security-constraint.
+The container matches role names case sensitively when determining
+access.
+
+
+Used in: security-constraint
+-->
+<!ELEMENT auth-constraint (description?, role-name*)>
+
+<!--
+The auth-method element is used to configure the authentication
+mechanism for the web application. As a prerequisite to gaining access to any web resources which are protected by an authorization
+constraint, a user must have authenticated using the configured
+mechanism. Legal values for this element are "BASIC", "DIGEST",
+"FORM", or "CLIENT-CERT".
+
+Used in: login-config
+-->
+<!ELEMENT auth-method (#PCDATA)>
+
+<!--
+The context-param element contains the declaration of a web
+application's servlet context initialization parameters.
+
+Used in: web-app
+-->
+<!ELEMENT context-param (param-name, param-value, description?)>
+
+<!--
+The description element is used to provide text describing the parent
+element.  The description element should include any information that
+the web application war file producer wants to provide to the consumer of
+the web application war file (i.e., to the Deployer). Typically, the tools
+used by the web application war file consumer will display the description
+when processing the parent element that contains the description.
+
+Used in: auth-constraint, context-param, ejb-local-ref, ejb-ref,
+env-entry, filter, init-param, resource-env-ref, resource-ref, run-as,
+security-role, security-role-ref, servlet, user-data-constraint,
+web-app, web-resource-collection
+-->
+<!ELEMENT description (#PCDATA)>
+
+<!--
+The display-name element contains a short name that is intended to be
+displayed by tools.  The display name need not be unique.
+
+Used in: filter, security-constraint, servlet, web-app
+
+Example:
+
+<display-name>Employee Self Service</display-name>
+-->
+<!ELEMENT display-name (#PCDATA)>
+
+<!--
+The distributable element, by its presence in a web application
+deployment descriptor, indicates that this web application is
+programmed appropriately to be deployed into a distributed servlet
+container
+
+Used in: web-app
+-->
+<!ELEMENT distributable EMPTY>
+
+<!--
+The ejb-link element is used in the ejb-ref or ejb-local-ref
+elements to specify that an EJB reference is linked to an
+enterprise bean.
+
+The name in the ejb-link element is composed of a
+path name specifying the ejb-jar containing the referenced enterprise
+bean with the ejb-name of the target bean appended and separated from
+the path name by "#".  The path name is relative to the war file
+containing the web application that is referencing the enterprise bean.
+This allows multiple enterprise beans with the same ejb-name to be
+uniquely identified.
+
+Used in: ejb-local-ref, ejb-ref
+
+Examples:
+
+	<ejb-link>EmployeeRecord</ejb-link>
+
+	<ejb-link>../products/product.jar#ProductEJB</ejb-link>
+
+-->
+<!ELEMENT ejb-link (#PCDATA)>
+
+<!--
+The ejb-local-ref element is used for the declaration of a reference to
+an enterprise bean's local home. The declaration consists of:
+
+	- an optional description
+	- the EJB reference name used in the code of the web application
+	  that's referencing the enterprise bean
+	- the expected type of the referenced enterprise bean
+	- the expected local home and local interfaces of the referenced
+	  enterprise bean
+	- optional ejb-link information, used to specify the referenced
+	  enterprise bean
+
+Used in: web-app
+-->
+<!ELEMENT ejb-local-ref (description?, ejb-ref-name, ejb-ref-type,
+		local-home, local, ejb-link?)>
+
+<!--
+The ejb-ref element is used for the declaration of a reference to
+an enterprise bean's home. The declaration consists of:
+
+	- an optional description
+	- the EJB reference name used in the code of
+	  the web application that's referencing the enterprise bean
+	- the expected type of the referenced enterprise bean
+	- the expected home and remote interfaces of the referenced
+	  enterprise bean
+	- optional ejb-link information, used to specify the referenced
+	  enterprise bean
+
+Used in: web-app
+-->
+<!ELEMENT ejb-ref (description?, ejb-ref-name, ejb-ref-type,
+		home, remote, ejb-link?)>
+
+<!--
+The ejb-ref-name element contains the name of an EJB reference. The
+EJB reference is an entry in the web application's environment and is
+relative to the java:comp/env context.  The name must be unique
+within the web application.
+
+It is recommended that name is prefixed with "ejb/".
+
+Used in: ejb-local-ref, ejb-ref
+
+Example:
+
+<ejb-ref-name>ejb/Payroll</ejb-ref-name>
+-->
+<!ELEMENT ejb-ref-name (#PCDATA)>
+
+<!--
+The ejb-ref-type element contains the expected type of the
+referenced enterprise bean.
+
+The ejb-ref-type element must be one of the following:
+
+	<ejb-ref-type>Entity</ejb-ref-type>
+	<ejb-ref-type>Session</ejb-ref-type>
+
+Used in: ejb-local-ref, ejb-ref
+-->
+<!ELEMENT ejb-ref-type (#PCDATA)>
+
+<!--
+The env-entry element contains the declaration of a web application's
+environment entry. The declaration consists of an optional
+description, the name of the environment entry, and an optional
+value.  If a value is not specified, one must be supplied
+during deployment.
+-->
+<!ELEMENT env-entry (description?, env-entry-name, env-entry-value?,
+env-entry-type)>
+
+<!--
+The env-entry-name element contains the name of a web applications's
+environment entry.  The name is a JNDI name relative to the
+java:comp/env context.  The name must be unique within a web application.
+
+Example:
+
+<env-entry-name>minAmount</env-entry-name>
+
+Used in: env-entry
+-->
+<!ELEMENT env-entry-name (#PCDATA)>
+
+<!--
+The env-entry-type element contains the fully-qualified Java type of
+the environment entry value that is expected by the web application's
+code.
+
+The following are the legal values of env-entry-type:
+
+	java.lang.Boolean
+	java.lang.Byte
+	java.lang.Character
+	java.lang.String
+	java.lang.Short
+	java.lang.Integer
+	java.lang.Long
+	java.lang.Float
+	java.lang.Double
+
+Used in: env-entry
+-->
+<!ELEMENT env-entry-type (#PCDATA)>
+
+<!--
+The env-entry-value element contains the value of a web application's
+environment entry. The value must be a String that is valid for the
+constructor of the specified type that takes a single String
+parameter, or for java.lang.Character, a single character.
+
+Example:
+
+<env-entry-value>100.00</env-entry-value>
+
+Used in: env-entry
+-->
+<!ELEMENT env-entry-value (#PCDATA)>
+
+<!--
+The error-code contains an HTTP error code, ex: 404
+
+Used in: error-page
+-->
+<!ELEMENT error-code (#PCDATA)>
+
+<!--
+The error-page element contains a mapping between an error code
+or exception type to the path of a resource in the web application
+
+Used in: web-app
+-->
+<!ELEMENT error-page ((error-code | exception-type), location)>
+
+<!--
+The exception type contains a fully qualified class name of a
+Java exception type.
+
+Used in: error-page
+-->
+<!ELEMENT exception-type (#PCDATA)>
+
+<!--
+The extension element contains a string describing an
+extension. example: "txt"
+
+Used in: mime-mapping
+-->
+<!ELEMENT extension (#PCDATA)>
+
+<!--
+Declares a filter in the web application. The filter is mapped to
+either a servlet or a URL pattern in the filter-mapping element, using
+the filter-name value to reference. Filters can access the
+initialization parameters declared in the deployment descriptor at
+runtime via the FilterConfig interface.
+
+Used in: web-app
+-->
+<!ELEMENT filter (icon?, filter-name, display-name?, description?,
+filter-class, init-param*)>
+
+<!--
+The fully qualified classname of the filter.
+
+Used in: filter
+-->
+<!ELEMENT filter-class (#PCDATA)>
+
+<!--
+Declaration of the filter mappings in this web application. The
+container uses the filter-mapping declarations to decide which filters
+to apply to a request, and in what order. The container matches the
+request URI to a Servlet in the normal way. To determine which filters
+to apply it matches filter-mapping declarations either on servlet-name,
+or on url-pattern for each filter-mapping element, depending on which
+style is used. The order in which filters are invoked is the order in
+which filter-mapping declarations that match a request URI for a
+servlet appear in the list of filter-mapping elements.The filter-name
+value must be the value of the <filter-name> sub-elements of one of the
+<filter> declarations in the deployment descriptor.
+
+Used in: web-app
+-->
+<!ELEMENT filter-mapping (filter-name, (url-pattern | servlet-name))>
+
+<!--
+The logical name of the filter. This name is used to map the filter.
+Each filter name is unique within the web application.
+
+Used in: filter, filter-mapping
+-->
+<!ELEMENT filter-name (#PCDATA)>
+
+<!--
+The form-error-page element defines the location in the web app
+where the error page that is displayed when login is not successful
+can be found. The path begins with a leading / and is interpreted
+relative to the root of the WAR.
+
+Used in: form-login-config
+-->
+<!ELEMENT form-error-page (#PCDATA)>
+
+<!--
+The form-login-config element specifies the login and error pages
+that should be used in form based login. If form based authentication
+is not used, these elements are ignored.
+
+Used in: login-config
+-->
+<!ELEMENT form-login-config (form-login-page, form-error-page)>
+
+<!--
+The form-login-page element defines the location in the web app
+where the page that can be used for login can be found. The path
+begins with a leading / and is interpreted relative to the root of the WAR.
+
+Used in: form-login-config
+-->
+<!ELEMENT form-login-page (#PCDATA)>
+
+<!--
+The home element contains the fully-qualified name of the enterprise
+bean's home interface.
+
+Used in: ejb-ref
+
+Example:
+
+<home>com.aardvark.payroll.PayrollHome</home>
+-->
+<!ELEMENT home (#PCDATA)>
+
+<!--
+The http-method contains an HTTP method (GET | POST |...).
+
+Used in: web-resource-collection
+-->
+<!ELEMENT http-method (#PCDATA)>
+
+<!--
+The icon element contains small-icon and large-icon elements that
+specify the file names for small and a large GIF or JPEG icon images
+used to represent the parent element in a GUI tool.
+
+Used in: filter, servlet, web-app
+-->
+<!ELEMENT icon (small-icon?, large-icon?)>
+
+<!--
+The init-param element contains a name/value pair as an
+initialization param of the servlet
+
+Used in: filter, servlet
+-->
+<!ELEMENT init-param (param-name, param-value, description?)>
+
+<!--
+The jsp-file element contains the full path to a JSP file within
+the web application beginning with a `/'.
+
+Used in: servlet
+-->
+<!ELEMENT jsp-file (#PCDATA)>
+
+<!--
+The large-icon element contains the name of a file
+containing a large (32 x 32) icon image. The file
+name is a relative path within the web application's
+war file.
+
+The image may be either in the JPEG or GIF format.
+The icon can be used by tools.
+
+Used in: icon
+
+Example:
+
+<large-icon>employee-service-icon32x32.jpg</large-icon>
+-->
+<!ELEMENT large-icon (#PCDATA)>
+
+<!--
+The listener element indicates the deployment properties for a web
+application listener bean.
+
+Used in: web-app
+-->
+<!ELEMENT listener (listener-class)>
+
+<!--
+The listener-class element declares a class in the application must be
+registered as a web application listener bean. The value is the fully qualified classname of the listener class.
+
+
+Used in: listener
+-->
+<!ELEMENT listener-class (#PCDATA)>
+
+<!--
+The load-on-startup element indicates that this servlet should be
+loaded (instantiated and have its init() called) on the startup
+of the web application. The optional contents of
+these element must be an integer indicating the order in which
+the servlet should be loaded. If the value is a negative integer,
+or the element is not present, the container is free to load the
+servlet whenever it chooses. If the value is a positive integer
+or 0, the container must load and initialize the servlet as the
+application is deployed. The container must guarantee that
+servlets marked with lower integers are loaded before servlets
+marked with higher integers. The container may choose the order
+of loading of servlets with the same load-on-start-up value.
+
+Used in: servlet
+-->
+<!ELEMENT load-on-startup (#PCDATA)>
+
+<!--
+
+The local element contains the fully-qualified name of the
+enterprise bean's local interface.
+
+Used in: ejb-local-ref
+
+-->
+<!ELEMENT local (#PCDATA)>
+
+<!--
+
+The local-home element contains the fully-qualified name of the
+enterprise bean's local home interface.
+
+Used in: ejb-local-ref
+-->
+<!ELEMENT local-home (#PCDATA)>
+
+<!--
+The location element contains the location of the resource in the web
+application relative to the root of the web application. The value of
+the location must have a leading `/'.
+
+Used in: error-page
+-->
+<!ELEMENT location (#PCDATA)>
+
+<!--
+The login-config element is used to configure the authentication
+method that should be used, the realm name that should be used for
+this application, and the attributes that are needed by the form login
+mechanism.
+
+Used in: web-app
+-->
+<!ELEMENT login-config (auth-method?, realm-name?, form-login-config?)>
+
+<!--
+The mime-mapping element defines a mapping between an extension
+and a mime type.
+
+Used in: web-app
+-->
+<!ELEMENT mime-mapping (extension, mime-type)>
+
+<!--
+The mime-type element contains a defined mime type. example:
+"text/plain"
+
+Used in: mime-mapping
+-->
+<!ELEMENT mime-type (#PCDATA)>
+
+<!--
+The param-name element contains the name of a parameter. Each parameter
+name must be unique in the web application.
+
+
+Used in: context-param, init-param
+-->
+<!ELEMENT param-name (#PCDATA)>
+
+<!--
+The param-value element contains the value of a parameter.
+
+Used in: context-param, init-param
+-->
+<!ELEMENT param-value (#PCDATA)>
+
+<!--
+The realm name element specifies the realm name to use in HTTP
+Basic authorization.
+
+Used in: login-config
+-->
+<!ELEMENT realm-name (#PCDATA)>
+
+<!--
+The remote element contains the fully-qualified name of the enterprise
+bean's remote interface.
+
+Used in: ejb-ref
+
+Example:
+
+<remote>com.wombat.empl.EmployeeService</remote>
+-->
+<!ELEMENT remote (#PCDATA)>
+
+<!--
+The res-auth element specifies whether the web application code signs
+on programmatically to the resource manager, or whether the Container
+will sign on to the resource manager on behalf of the web application. In the
+latter case, the Container uses information that is supplied by the
+Deployer.
+
+The value of this element must be one of the two following:
+
+	<res-auth>Application</res-auth>
+	<res-auth>Container</res-auth>
+
+Used in: resource-ref
+-->
+<!ELEMENT res-auth (#PCDATA)>
+
+<!--
+The res-ref-name element specifies the name of a resource manager
+connection factory reference.  The name is a JNDI name relative to the
+java:comp/env context.  The name must be unique within a web application.
+
+Used in: resource-ref
+-->
+<!ELEMENT res-ref-name (#PCDATA)>
+
+<!--
+The res-sharing-scope element specifies whether connections obtained
+through the given resource manager connection factory reference can be
+shared. The value of this element, if specified, must be one of the
+two following:
+
+	<res-sharing-scope>Shareable</res-sharing-scope>
+	<res-sharing-scope>Unshareable</res-sharing-scope>
+
+The default value is Shareable.
+
+Used in: resource-ref
+-->
+<!ELEMENT res-sharing-scope (#PCDATA)>
+
+<!--
+The res-type element specifies the type of the data source. The type
+is specified by the fully qualified Java language class or interface
+expected to be implemented by the data source.
+
+Used in: resource-ref
+-->
+<!ELEMENT res-type (#PCDATA)>
+
+<!--
+The resource-env-ref element contains a declaration of a web application's
+reference to an administered object associated with a resource
+in the web application's environment.  It consists of an optional
+description, the resource environment reference name, and an
+indication of the resource environment reference type expected by
+the web application code.
+
+Used in: web-app
+
+Example:
+
+<resource-env-ref>
+    <resource-env-ref-name>jms/StockQueue</resource-env-ref-name>
+    <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
+</resource-env-ref>
+-->
+<!ELEMENT resource-env-ref (description?, resource-env-ref-name,
+		resource-env-ref-type)>
+
+<!--
+The resource-env-ref-name element specifies the name of a resource
+environment reference; its value is the environment entry name used in
+the web application code.  The name is a JNDI name relative to the
+java:comp/env context and must be unique within a web application.
+
+Used in: resource-env-ref
+-->
+<!ELEMENT resource-env-ref-name (#PCDATA)>
+
+<!--
+The resource-env-ref-type element specifies the type of a resource
+environment reference.  It is the fully qualified name of a Java
+language class or interface.
+
+Used in: resource-env-ref
+-->
+<!ELEMENT resource-env-ref-type (#PCDATA)>
+
+<!--
+The resource-ref element contains a declaration of a web application's
+reference to an external resource. It consists of an optional
+description, the resource manager connection factory reference name,
+the indication of the resource manager connection factory type
+expected by the web application code, the type of authentication
+(Application or Container), and an optional specification of the
+shareability of connections obtained from the resource (Shareable or
+Unshareable).
+
+Used in: web-app
+
+Example:
+
+    <resource-ref>
+	<res-ref-name>jdbc/EmployeeAppDB</res-ref-name>
+	<res-type>javax.sql.DataSource</res-type>
+	<res-auth>Container</res-auth>
+	<res-sharing-scope>Shareable</res-sharing-scope>
+    </resource-ref>
+-->
+<!ELEMENT resource-ref (description?, res-ref-name, res-type, res-auth,
+		res-sharing-scope?)>
+
+<!--
+The role-link element is a reference to a defined security role. The
+role-link element must contain the name of one of the security roles
+defined in the security-role elements.
+
+Used in: security-role-ref
+-->
+<!ELEMENT role-link (#PCDATA)>
+
+<!--
+The role-name element contains the name of a security role.
+
+The name must conform to the lexical rules for an NMTOKEN.
+
+Used in: auth-constraint, run-as, security-role, security-role-ref
+-->
+<!ELEMENT role-name (#PCDATA)>
+
+<!--
+The run-as element specifies the run-as identity to be used for the
+execution of the web application. It contains an optional description, and
+the name of a security role.
+
+Used in: servlet
+-->
+<!ELEMENT run-as (description?, role-name)>
+
+<!--
+The security-constraint element is used to associate security
+constraints with one or more web resource collections
+
+Used in: web-app
+-->
+<!ELEMENT security-constraint (display-name?, web-resource-collection+,
+auth-constraint?, user-data-constraint?)>
+
+<!--
+The security-role element contains the definition of a security
+role. The definition consists of an optional description of the
+security role, and the security role name.
+
+Used in: web-app
+
+Example:
+
+    <security-role>
+	<description>
+	    This role includes all employees who are authorized
+	    to access the employee service application.
+	</description>
+	<role-name>employee</role-name>
+    </security-role>
+-->
+<!ELEMENT security-role (description?, role-name)>
+
+<!--
+The security-role-ref element contains the declaration of a security
+role reference in the web application's code. The declaration consists
+of an optional description, the security role name used in the code,
+and an optional link to a security role. If the security role is not
+specified, the Deployer must choose an appropriate security role.
+
+The value of the role-name element must be the String used as the
+parameter to the EJBContext.isCallerInRole(String roleName) method
+or the HttpServletRequest.isUserInRole(String role) method.
+
+Used in: servlet
+
+-->
+<!ELEMENT security-role-ref (description?, role-name, role-link?)>
+
+<!--
+The servlet element contains the declarative data of a
+servlet. If a jsp-file is specified and the load-on-startup element is
+present, then the JSP should be precompiled and loaded.
+
+Used in: web-app
+-->
+<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
+(servlet-class|jsp-file), init-param*, load-on-startup?, run-as?, security-role-ref*)>
+
+<!--
+The servlet-class element contains the fully qualified class name
+of the servlet.
+
+Used in: servlet
+-->
+<!ELEMENT servlet-class (#PCDATA)>
+
+<!--
+The servlet-mapping element defines a mapping between a servlet
+and a url pattern
+
+Used in: web-app
+-->
+<!ELEMENT servlet-mapping (servlet-name, url-pattern)>
+
+<!--
+The servlet-name element contains the canonical name of the
+servlet. Each servlet name is unique within the web application.
+
+Used in: filter-mapping, servlet, servlet-mapping
+-->
+<!ELEMENT servlet-name (#PCDATA)>
+
+<!--
+The session-config element defines the session parameters for
+this web application.
+
+Used in: web-app
+-->
+<!ELEMENT session-config (session-timeout?)>
+
+<!--
+The session-timeout element defines the default session timeout
+interval for all sessions created in this web application. The
+specified timeout must be expressed in a whole number of minutes.
+If the timeout is 0 or less, the container ensures the default
+behaviour of sessions is never to time out.
+
+Used in: session-config
+-->
+<!ELEMENT session-timeout (#PCDATA)>
+
+<!--
+The small-icon element contains the name of a file
+containing a small (16 x 16) icon image. The file
+name is a relative path within the web application's
+war file.
+
+The image may be either in the JPEG or GIF format.
+The icon can be used by tools.
+
+Used in: icon
+
+Example:
+
+<small-icon>employee-service-icon16x16.jpg</small-icon>
+-->
+<!ELEMENT small-icon (#PCDATA)>
+
+<!--
+The taglib element is used to describe a JSP tag library.
+
+Used in: web-app
+-->
+<!ELEMENT taglib (taglib-uri, taglib-location)>
+
+<!--
+the taglib-location element contains the location (as a resource
+relative to the root of the web application) where to find the Tag
+Libary Description file for the tag library.
+
+Used in: taglib
+-->
+<!ELEMENT taglib-location (#PCDATA)>
+
+<!--
+The taglib-uri element describes a URI, relative to the location
+of the web.xml document, identifying a Tag Library used in the Web
+Application.
+
+Used in: taglib
+-->
+<!ELEMENT taglib-uri (#PCDATA)>
+
+<!--
+The transport-guarantee element specifies that the communication
+between client and server should be NONE, INTEGRAL, or
+CONFIDENTIAL. NONE means that the application does not require any
+transport guarantees. A value of INTEGRAL means that the application
+requires that the data sent between the client and server be sent in
+such a way that it can't be changed in transit. CONFIDENTIAL means
+that the application requires that the data be transmitted in a
+fashion that prevents other entities from observing the contents of
+the transmission. In most cases, the presence of the INTEGRAL or
+CONFIDENTIAL flag will indicate that the use of SSL is required.
+
+Used in: user-data-constraint
+-->
+<!ELEMENT transport-guarantee (#PCDATA)>
+
+<!--
+The url-pattern element contains the url pattern of the mapping. Must
+follow the rules specified in Section 11.2 of the Servlet API
+Specification.
+
+Used in: filter-mapping, servlet-mapping, web-resource-collection
+-->
+<!ELEMENT url-pattern (#PCDATA)>
+
+<!--
+The user-data-constraint element is used to indicate how data
+communicated between the client and container should be protected.
+
+Used in: security-constraint
+-->
+<!ELEMENT user-data-constraint (description?, transport-guarantee)>
+
+<!--
+The web-resource-collection element is used to identify a subset
+of the resources and HTTP methods on those resources within a web
+application to which a security constraint applies. If no HTTP methods
+are specified, then the security constraint applies to all HTTP
+methods.
+
+Used in: security-constraint
+-->
+<!ELEMENT web-resource-collection (web-resource-name, description?,
+url-pattern*, http-method*)>
+
+<!--
+The web-resource-name contains the name of this web resource
+collection.
+
+Used in: web-resource-collection
+-->
+<!ELEMENT web-resource-name (#PCDATA)>
+
+<!--
+The welcome-file element contains file name to use as a default
+welcome file, such as index.html
+
+Used in: welcome-file-list
+-->
+<!ELEMENT welcome-file (#PCDATA)>
+
+<!--
+The welcome-file-list contains an ordered list of welcome files
+elements.
+
+Used in: web-app
+-->
+<!ELEMENT welcome-file-list (welcome-file+)>
+
+<!--
+The ID mechanism is to allow tools that produce additional deployment
+information (i.e., information beyond the standard deployment
+descriptor information) to store the non-standard information in a
+separate file, and easily refer from these tool-specific files to the
+information in the standard deployment descriptor.
+
+Tools are not allowed to add the non-standard information into the
+standard deployment descriptor.
+-->
+
+<!ATTLIST auth-constraint id ID #IMPLIED>
+<!ATTLIST auth-method id ID #IMPLIED>
+<!ATTLIST context-param id ID #IMPLIED>
+<!ATTLIST description id ID #IMPLIED>
+<!ATTLIST display-name id ID #IMPLIED>
+<!ATTLIST distributable id ID #IMPLIED>
+<!ATTLIST ejb-link id ID #IMPLIED>
+<!ATTLIST ejb-local-ref id ID #IMPLIED>
+<!ATTLIST ejb-ref id ID #IMPLIED>
+<!ATTLIST ejb-ref-name id ID #IMPLIED>
+<!ATTLIST ejb-ref-type id ID #IMPLIED>
+<!ATTLIST env-entry id ID #IMPLIED>
+<!ATTLIST env-entry-name id ID #IMPLIED>
+<!ATTLIST env-entry-type id ID #IMPLIED>
+<!ATTLIST env-entry-value id ID #IMPLIED>
+<!ATTLIST error-code id ID #IMPLIED>
+<!ATTLIST error-page id ID #IMPLIED>
+<!ATTLIST exception-type id ID #IMPLIED>
+<!ATTLIST extension id ID #IMPLIED>
+<!ATTLIST filter id ID #IMPLIED>
+<!ATTLIST filter-class id ID #IMPLIED>
+<!ATTLIST filter-mapping id ID #IMPLIED>
+<!ATTLIST filter-name id ID #IMPLIED>
+<!ATTLIST form-error-page id ID #IMPLIED>
+<!ATTLIST form-login-config id ID #IMPLIED>
+<!ATTLIST form-login-page id ID #IMPLIED>
+<!ATTLIST home id ID #IMPLIED>
+<!ATTLIST http-method id ID #IMPLIED>
+<!ATTLIST icon id ID #IMPLIED>
+<!ATTLIST init-param id ID #IMPLIED>
+<!ATTLIST jsp-file id ID #IMPLIED>
+<!ATTLIST large-icon id ID #IMPLIED>
+<!ATTLIST listener id ID #IMPLIED>
+<!ATTLIST listener-class id ID #IMPLIED>
+<!ATTLIST load-on-startup id ID #IMPLIED>
+<!ATTLIST local id ID #IMPLIED>
+<!ATTLIST local-home id ID #IMPLIED>
+<!ATTLIST location id ID #IMPLIED>
+<!ATTLIST login-config id ID #IMPLIED>
+<!ATTLIST mime-mapping id ID #IMPLIED>
+<!ATTLIST mime-type id ID #IMPLIED>
+<!ATTLIST param-name id ID #IMPLIED>
+<!ATTLIST param-value id ID #IMPLIED>
+<!ATTLIST realm-name id ID #IMPLIED>
+<!ATTLIST remote id ID #IMPLIED>
+<!ATTLIST res-auth id ID #IMPLIED>
+<!ATTLIST res-ref-name id ID #IMPLIED>
+<!ATTLIST res-sharing-scope id ID #IMPLIED>
+<!ATTLIST res-type id ID #IMPLIED>
+<!ATTLIST resource-env-ref id ID #IMPLIED>
+<!ATTLIST resource-env-ref-name id ID #IMPLIED>
+<!ATTLIST resource-env-ref-type id ID #IMPLIED>
+<!ATTLIST resource-ref id ID #IMPLIED>
+<!ATTLIST role-link id ID #IMPLIED>
+<!ATTLIST role-name id ID #IMPLIED>
+<!ATTLIST run-as id ID #IMPLIED>
+<!ATTLIST security-constraint id ID #IMPLIED>
+<!ATTLIST security-role id ID #IMPLIED>
+<!ATTLIST security-role-ref id ID #IMPLIED>
+<!ATTLIST servlet id ID #IMPLIED>
+<!ATTLIST servlet-class id ID #IMPLIED>
+<!ATTLIST servlet-mapping id ID #IMPLIED>
+<!ATTLIST servlet-name id ID #IMPLIED>
+<!ATTLIST session-config id ID #IMPLIED>
+<!ATTLIST session-timeout id ID #IMPLIED>
+<!ATTLIST small-icon id ID #IMPLIED>
+<!ATTLIST taglib id ID #IMPLIED>
+<!ATTLIST taglib-location id ID #IMPLIED>
+<!ATTLIST taglib-uri id ID #IMPLIED>
+<!ATTLIST transport-guarantee id ID #IMPLIED>
+<!ATTLIST url-pattern id ID #IMPLIED>
+<!ATTLIST user-data-constraint id ID #IMPLIED>
+<!ATTLIST web-app id ID #IMPLIED>
+<!ATTLIST web-resource-collection id ID #IMPLIED>
+<!ATTLIST web-resource-name id ID #IMPLIED>
+<!ATTLIST welcome-file id ID #IMPLIED>
+<!ATTLIST welcome-file-list id ID #IMPLIED>

Added: incubator/beehive/netui/external/tomcat/4x/catalina.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/tomcat/4x/servlet.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/tomcat/4x/tomcat-coyote.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/xdoclet/xdoclet-1.2b4.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/xdoclet/xdoclet-web-module-1.2b4.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/external/xdoclet/xjavadoc-1.0.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/local-build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/local-build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+
+<!-- 
+-->
+<project name="Beehive/NetUI to Workshop Integration" default="build" basedir=".">
+
+    <property environment="os"/>
+    <property file="../beehive.properties"/>
+
+    <property name="dest.dir" location="c:/tmp/beehive-netui-distro"/>
+
+    <target name="package">
+
+        <echo>===== Build the NetUI source</echo>
+        <ant target="clean" inheritAll="false"/>
+        <ant target="deploy" inheritAll="false"/>
+
+        <echo>===== Build the NetUI test source</echo>
+        <ant dir="test/ant" target="test.clean" inheritAll="false"/>
+        <ant dir="test/ant" target="test.build" inheritAll="false"/>
+    
+        <echo>===== Build the NetUI DRT source</echo>
+        <ant antfile="${beehive.dir}/netui/test/webapps/drt/build.xml" target="package.drts" inheritAll="false"/>
+
+        <delete dir="${dest.dir}"/>
+
+        <copy todir="${dest.dir}/test">
+            <fileset dir="build/test-lib"/>
+        </copy>
+
+        <copy todir="${dest.dir}/webapp">
+            <fileset dir="build/dist/webapp"/>
+        </copy>
+
+        <copy todir="${dest.dir}/drt">
+            <fileset dir="build/drt"/>
+        </copy>
+    </target>
+
+    <target name="checkout">
+        <p4edit view="//depot/dev/src/wlw/netui/lib/beehive-netui/..."/>
+    </target>
+
+    <target name="overwrite">
+        <copy todir="${os.DEV_ROOT}/wlw/netui/lib/beehive-netui">
+            <fileset dir="${dest.dir}"/>
+        </copy>
+    </target>
+
+</project>
\ No newline at end of file

Added: incubator/beehive/netui/src/bootstrap/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/Bootstrap" default="compile" basedir=".">
+
+    <property name="this.dir" location="${src.dir}/${bootstrap.module.name}"/>
+    <property name="this.output.dir" location="${classes.dir}/${bootstrap.module.name}"/>
+    <property name="xdoclet.metainf.dir" location="${this.output.dir}/META-INF"/>
+    <property name="xdoclet.template" location="${this.dir}/xdoclet-xml.xdt"/>
+
+    <!-- Bootstrap JAR dependencies -->
+    <property name="module.classpath" value="${ant.jar};${tools.xdoclet.gen.classpath}"/>
+
+    <target name="compile">
+
+        <echo>compile module: ${bootstrap.module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${this.output.dir}"/>
+
+        <javac srcdir="${this.dir}/"
+               destdir="${this.output.dir}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${this.output.dir}">
+            <fileset dir="${this.dir}" includes="**/*.properties"/>
+            <fileset dir="${this.dir}" includes="**/*.xml"/>
+            <fileset dir="${this.dir}" includes="**/*.xdt"/>
+            <fileset dir="${this.dir}" includes="**/*.xdoclet"/>
+        </copy>
+
+        <echo>tools.xdoclet.gen.classpath: ${tools.xdoclet.gen.classpath}</echo>
+        <taskdef name="xdoclet" classname="xdoclet.DocletTask" classpath="${tools.xdoclet.gen.classpath}"/>
+        <mkdir dir="${xdoclet.metainf.dir}"/>
+        <xdoclet destdir="${xdoclet.metainf.dir}" verbose="true">
+            <fileset dir="${this.dir}">
+                <include name="org/apache/beehive/netui/tools/**/*TagsHandler.java" />
+                <include name="org/apache/beehive/netui/tools/**/*SubTask.java" />
+            </fileset>
+            <template templateFile="${xdoclet.template}" destinationFile="xdoclet.xml"/>
+        </xdoclet>
+
+        <jar jarfile="${bootstrap.jar}" basedir="${this.output.dir}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${bootstrap.module.name}"/>
+        <delete dir="${dist.dir}/${bootstrap.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <echo>Packages: ${javadoc.packages}</echo>
+        <mkdir dir="${javadoc.dir}/${bootstrap.module.name}"/>
+        <javadoc packagenames="${javadoc.packages}"
+                 sourcepath="."
+                 destdir="${javadoc.dir}/${bootstrap.module.name}"
+                 version="true"
+                 windowtitle="${javadoc.windowtitle}"
+                 >
+            <link href="${j2ee.docs}"/>
+        </javadoc>
+    </target>
+
+    <target name="clean.javadoc">
+        <delete dir="${javadoc.dir}/${bootstrap.module.name}" includeEmptyDirs="true"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/NetUITldTagsHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/NetUITldTagsHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,515 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools;
+
+// java imports
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+// internal imports
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+// external imports
+import xdoclet.DocletSupport;
+import xdoclet.XDocletException;
+import xdoclet.XDocletMessages;
+import xdoclet.XDocletTagSupport;
+import xdoclet.tagshandler.AbstractProgramElementTagsHandler;
+import xdoclet.tagshandler.ConfigTagsHandler;
+import xdoclet.tagshandler.TypeTagsHandler;
+import xdoclet.util.Translator;
+import xdoclet.util.TypeConversionUtil;
+
+import xjavadoc.*;
+
+/**
+ *
+ * @xdoclet.taghandler namespace="NetUITldGen"
+ */
+public class NetUITldTagsHandler
+    extends AbstractProgramElementTagsHandler
+{
+    private static final Log logger = LogFactory.getLog(NetUITldTagsHandler.class);
+    private static final boolean DEBUG = true; //logger.isDebugEnabled();
+
+    private static final String NETUI_TAG = "netui:tag";
+    private static final String NETUI_TLDX_TAG = "netui.tldx:tag";
+    private static final String NETUI_ATTRIBUTE = "netui:attribute";
+    private static final String NETUI_TLDX_ATTRIBUTE = "netui.tldx:attribute";
+
+    private static final String EMPTY_STRING = "";
+
+    private String currentTagName;
+
+    /**
+     * @doc:tag type="block"
+     * @doc:param name="paramName" description="The parameter name"
+     */
+    public void ifHasTagValue(String template, Properties attributes) 
+        throws XDocletException
+    {
+        String value = paramValue(attributes);
+        if(value != null)
+            generate(template);
+    }
+
+    /**
+     * @doc:tag type="content"
+     * @doc:param name="paramName" description="The parameter name"
+     * @doc.param name="values" 
+     *            description="The valid values for the parameter, comma separated. An error message is printed if the parameter value is not one of the values."
+     */
+    public String paramValue(Properties attributes)
+        throws XDocletException
+    {
+        XTag cTag = getCurrentClassTag();
+        XTag mTag = getCurrentMethodTag();
+
+        String validValues = attributes.getProperty("values");
+        String paramName = attributes.getProperty("paramName");
+        String tagName = getCurrentTagName();
+
+        if(DEBUG) logger.debug("current class: " + getCurrentClass().getName());
+        if(DEBUG) logger.debug("cTag value for attribute \"" + 
+                                            attributes.getProperty("paramName") + "\" is " + 
+                                            (cTag != null ? cTag.getAttributeValue(attributes.getProperty("paramName")) : "null"));
+
+        XProgramElement member = null;
+        String value = null;
+        if(cTag != null)
+        {
+            value = cTag.getAttributeValue(paramName);
+            member = getCurrentClass();
+        }
+        else if(mTag != null) 
+        {
+            value = mTag.getAttributeValue(paramName);
+            member = getCurrentMethod();
+        }
+
+        // a value was found. perform sanity checks on valid values
+        if (validValues != null) 
+        {
+            if(DEBUG) logger.debug("validValues: " + validValues);
+            // check if the value is among the valid values
+            StringTokenizer st = new StringTokenizer(validValues, ",");
+            boolean valid = false;
+            while (st.hasMoreTokens()) 
+            {
+                if (st.nextToken().equals(value)) 
+                    valid = true;
+            }
+
+            if(!valid)
+            {
+                if(DEBUG) logger.debug("FOUND AN INVALID VALUE: " + value);
+
+                if(member instanceof XMethod)
+                {
+                    throw new XDocletException
+                        (Translator.getString(XDocletMessages.class, 
+                                              XDocletMessages.INVALID_TAG_PARAM_VALUE_METHOD,
+                                              new String[]{value, 
+                                                           paramName, 
+                                                           tagName, 
+                                                           ((XMethod)member).getName(), 
+                                                           ((XMethod)member).getContainingClass().getQualifiedName(), 
+                                                           validValues}));
+                }
+                else if(member instanceof XClass)
+                {
+                    throw new XDocletException(Translator.getString(XDocletMessages.class, 
+                                                                    XDocletMessages.INVALID_TAG_PARAM_VALUE_CLASS,
+                                                                    new String[]{value, 
+                                                                                 paramName, 
+                                                                                 tagName, ((XClass)member).getQualifiedName(), 
+                                                                                 validValues}));
+                }
+            }
+
+            // it's ridiculous that this is private in the base class
+            //invalidParamValueFound(doc, paramName, "", value, validValues);
+        }
+        
+        return value;
+    }
+
+    /**
+     * @doc.tag                     type="block"
+     * @doc.param                   name="abstract" optional="true" values="true,false" description="If true then accept
+     *      abstract classes also; otherwise don't."
+     * @doc.param                   name="type" optional="true" description="For all classes by the type."
+     * @doc.param                   name="extent" optional="true" values="concrete-type,superclass,hierarchy"
+     *      description="Specifies the extent of the type search. If concrete-type then only check the concrete type, if
+     *      superclass then check also superclass, if hierarchy then search the whole hierarchy and find if the class is
+     *      of the specified type. Default is hierarchy."
+     */
+    public void forAllClasses(String template, Properties attributes)
+        throws XDocletException
+    {
+        String abstractStr = attributes.getProperty("abstract");
+        boolean acceptAbstractClasses = TypeConversionUtil.stringToBoolean(abstractStr, true);
+        String typeName = attributes.getProperty("type");
+        String extentStr = attributes.getProperty("extent");
+        int extent = TypeTagsHandler.extractExtentType(extentStr);
+
+        Object obj = getDocletContext().getConfigParam(getDocletContext().getActiveSubTask().getSubTaskName() + ".packageName");
+        String packageName = (obj != null && !obj.equals(EMPTY_STRING) ? obj.toString() : null);
+
+        if (DEBUG) 
+        {
+            logger.debug("filter on package name: " + packageName);
+            logger.debug("acceptAbstractClasses=" + acceptAbstractClasses);
+            logger.debug("typeName=" + typeName);
+            logger.debug("extentStr=" + extentStr);
+            logger.debug("extent=" + extent);
+        }
+
+        //System.out.println("packageName: " + packageName);
+
+        Collection classes = getAllClasses();
+        ClassIterator ci = XCollections.classIterator(classes);
+        
+        // sort alphabetically
+        Iterator i = sort(ci);
+        while(i.hasNext())
+        {
+            XClass currentClass = (XClass)i.next();
+            
+            if(packageName != null && !currentClass.getQualifiedName().startsWith(packageName))
+                continue;
+
+//             System.out.println("currentClass=" + currentClass.getQualifiedName());
+//             System.out.println(" packageName: " + packageName);
+//             System.out.println(" startsWith: " + currentClass.getQualifiedName().startsWith(packageName));
+
+            setCurrentClass(currentClass);
+
+            if (DocletSupport.isDocletGenerated(getCurrentClass()) || (getCurrentClass().isAbstract() && acceptAbstractClasses == false)) 
+            {
+                logger.debug("isDocletGenerated or isAbstract");
+                continue;
+            }
+
+            if (typeName != null) 
+            {
+                if (TypeTagsHandler.isOfType(currentClass, typeName, extent)) 
+                {
+                    logger.debug("isOfType true, generate().");
+                    
+                    if(DEBUG) logger.debug("handling type: "  + currentClass.getQualifiedName());
+
+                    generate(template);
+                }
+                else if(DEBUG) logger.debug("isOfType false, generate().");
+            }
+            else 
+            {
+                if(DEBUG) logger.debug("typeName=null, generate().");
+                generate(template);
+            }
+        }
+    }
+
+    /**
+     * @param template              Describe what the parameter does
+     * @param attributes            Describe what the parameter does
+     * @param forType               Describe what the parameter does
+     * @exception XDocletException  Describe the exception
+     * @doc:tag                     type="block"
+     * @doc:tag name="tagName" optional="false" values="netui.tldx:attribute,netui-tld:attribute"
+     * @doc:param name="superclasses" optional="true" values="true,false" 
+     *            description="If true then traverse superclasses also, otherwise look up the tag in current concrete class only."
+     */
+    public void forAllAttributes(String template, Properties attributes) throws XDocletException
+    {
+        String tagName = attributes.getProperty("tagName");
+        
+        if(DEBUG) logger.debug("Handling tagName: " + tagName);
+        //System.out.println("type: " + getCurrentClass().getQualifiedName());
+
+        setCurrentTagName(tagName);
+        
+        boolean genTldx = getCurrentTagName().equals(NETUI_TLDX_ATTRIBUTE);
+
+        try
+        {
+            XClass currentClass = getCurrentClass();
+            
+            if(DEBUG) 
+            {
+                logger.debug("handle class: " + currentClass.getName());
+                XClass parent = currentClass.getSuperclass();
+                while(parent != null)
+                {
+                    logger.debug("superclass: " + parent.getName());
+                    if(parent.getName().equals("DataSourceTag"))
+                    {
+                        Iterator tmp = parent.getMethods().iterator();
+                        if(tmp.hasNext())
+                        {
+                            logger.debug("found methods on DataSourceTag");
+                            while(tmp.hasNext())
+                            {
+                                logger.debug("method: " + tmp.next());
+                            }
+                        }
+                        else logger.debug("found NO methods on DataSourceTag");
+                    }
+                    
+                    parent = parent.getSuperclass();
+                }
+            }
+
+            if (currentClass == null) 
+                throw new XDocletException("currentClass == null!!!");
+
+            // need to check all methods
+            Collection members = currentClass.getMethods(true);
+            
+            // sort fields, but we should make a copy first, because members is not a new copy, it's shared by all
+            List sortedMembers = new ArrayList(members);
+            Collections.sort(sortedMembers, memberComparator);
+            members = sortedMembers;
+            
+            // for all XMethods
+            Iterator methods = members.iterator();
+            while(methods.hasNext())
+            {
+                XMethod xm = (XMethod)methods.next();
+                
+                if(DEBUG) logger.debug("handle method: " + xm.getName());
+                
+                // if(DEBUG) logger.debug("found @jsp:attribute tag on method: " + tldAttribute);
+                
+                // to create a TLD entry
+                // 1) @netui:attribute
+                // 2) @netui:attribute name="propName" -- use this for a class-level attribute when there can't be a method level one
+
+                // to create a TLDX entry
+                // 0) @netui:attribute -- there are not TLDX properties, but the attribute still needs to be created
+                // 1) @netui.tldx:attribute -- specify TLDX properties
+                // 2) @netui.tldx:attribute name="propName" -- use this for a class-level attribute when there can't be a method level one
+
+                // get all @netui:attribute annotated methods
+                XTag tldAttribute = getFirstTag(getCurrentClass(), xm.getName(), NETUI_ATTRIBUTE);
+
+                //if(tldAttribute == null) continue;
+                //setCurrentMethod(xm);
+
+                // @netui.tldx:attribute
+                if(tldAttribute != null)
+                {
+                    if(genTldx)
+                    {
+                        // if the attribute has been omitted in the TLD, omit in the TLDX
+                        // 
+                        // @todo: this needs to happen from the class-level
+                        // 
+                        XTag classTldOverride = getOverrideClassTag(xm.getPropertyName(), NETUI_ATTRIBUTE, getCurrentClass());
+                        if(classTldOverride != null && TypeConversionUtil.stringToBoolean(classTldOverride.getAttributeValue("hide"), false))
+                            continue;
+
+                        // get the first @netui.tldx:attribute tag if it exists
+                        XTag tldxAttribute = getFirstTag(getCurrentClass(), xm.getName(), NETUI_TLDX_ATTRIBUTE);
+                        
+                        // if(DEBUG) logger.debug("found @netui.tldx:attribute tag on method: " + tldxAttribute);
+                        
+                        if(tldxAttribute != null)
+                            setCurrentMethodTag(tldxAttribute);
+                    }
+                    // @netui-tld:attribute
+                    else if(tldAttribute != null)
+                        setCurrentMethodTag(tldAttribute);
+                     
+                    XTag tag = getOverrideClassTag(xm.getPropertyName(), getCurrentTagName(), getCurrentClass());
+                    
+                    if(tag != null)
+                        setCurrentClassTag(tag);
+
+                    setCurrentMethod(xm);
+                }
+                else
+                {
+//                     System.out.println("***** search for class override: " + xm.getPropertyName());
+//                     XTag tag = getOverrideClassTag(xm.getPropertyName(), getCurrentTagName(), getCurrentClass());
+//                     System.out.println("method: " + xm.getName() + " found class override: " + tag);
+
+//                     if(tag != null)
+//                     {
+//                         setCurrentMethod(xm);
+//                         setCurrentClassTag(tag);
+//                     }
+                }
+                    
+                if(getCurrentMethod() != null)
+                {
+                    if(getCurrentClassTag() == null ||
+                       !TypeConversionUtil.stringToBoolean(getCurrentClassTag().getAttributeValue("hide"), false))
+                    {
+                        generate(template);
+                    }
+                }
+
+                setCurrentMethodTag(null);
+                setCurrentClassTag(null);
+                setCurrentMethod(null);
+            }
+            setCurrentClass(currentClass);
+        }
+        catch(Exception e)
+        {
+            e.printStackTrace();
+            throw new XDocletException(e, "An error occurred in the forAllAttributes tag: " + e);
+        }
+    }
+
+    private XTag getOverrideClassTag(String name, String tagName, XClass currentClass)
+    {
+        // look for a class override for either netui:attribute or netui.tldx:attribute, depending on the current tagName
+        Iterator iterator = currentClass.getDoc().getTags(tagName, false).iterator();
+        while(iterator.hasNext())
+        {
+            XTag tag = (XTag)iterator.next();
+//             System.out.println("check class-level tag named " + tag.getName() + " with name attribute " + tag.getAttributeValue("name") + " searching for: " + name);
+            
+            if(tag.getAttributeValue("name").equals(name))
+            {
+                // if(DEBUG) logger.debug("setting class tag");
+                return tag;
+            }
+        }
+        
+        return null;
+    }
+
+    private XTag getFirstTag(XClass clazz, String methodName, String tagName)
+        throws XDocletException
+    {
+        List methods = clazz.getMethods(false);
+        
+        //if(DEBUG) logger.debug("getFirstTag from class: " + clazz.getName() + " with method " + methodName + " and tag " + tagName);
+
+        for(int i = 0; i < methods.size(); i++)
+        {
+            XMethod method = (XMethod)methods.get(i);
+            
+            //if(DEBUG) logger.debug("check method: " + method.getName());
+
+            if(method.getName().equals(methodName))
+            {
+                Collection coll = method.getDoc().getTags(tagName, false);
+                if(coll.size() == 1)
+                {
+                    //if(DEBUG) logger.debug("found matching tag; return");
+                    // return the matching XTag
+                    return (XTag)coll.iterator().next();
+                }
+                else if(coll.size() == 0 && clazz.getSuperclass() != null)
+                {
+                    //if(DEBUG) logger.debug("no tag found; check superclass");
+
+                    return getFirstTag(clazz.getSuperclass(), methodName, tagName);
+                }
+                else 
+                {
+                    throw new XDocletException("Found " + coll.size() + " tags for the class/method/tag " + clazz.getName() + "/" + methodName + "/" + tagName);
+                }
+            }
+        }
+
+        if(clazz.getSuperclass() != null)
+        {
+            return getFirstTag(clazz.getSuperclass(), methodName, tagName);
+        }
+
+        return null;
+    }
+    
+    private void setCurrentTagName(String tagName)
+    {
+        currentTagName = tagName;
+    }
+    
+    private String getCurrentTagName()
+    {
+        return currentTagName;
+    }
+
+//     private static final void debug(String msg)
+//     {
+//         if(DEBUG) 
+//             System.out.println(msg);
+//     }
+
+    private final static Comparator memberComparator =
+        new Comparator()
+        {
+            public int compare(Object o1, Object o2)
+            {
+                XMember m1 = (XMember) o1;
+                XMember m2 = (XMember) o2;
+
+                return m1.getName().compareTo(m2.getName());
+            }
+
+            public boolean equals(Object obj)
+            {
+                // dumb
+                return obj == this;
+            }
+        };
+
+    private Iterator sort(ClassIterator iterator)
+    {
+        List sorted = new ArrayList();
+        
+        while(iterator.hasNext())
+        {
+            XClass clazz = (XClass)iterator.next();
+            
+            sorted.add(clazz);
+        }
+
+        java.util.Collections.sort(sorted, new java.util.Comparator() 
+            {
+                public int compare(Object o1, Object o2)
+                {
+                    return ((XClass)o1).getName().compareTo(((XClass)o2).getName());
+                }
+                
+                public boolean equals(Object obj)
+                {
+                    if(this == obj)
+                        return true;
+                    else return false;
+                }
+            }
+                                   );
+        
+        return sorted.iterator();
+    }
+}

Added: incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/ant/BuildModules.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/ant/BuildModules.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,180 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools.ant;
+
+import java.io.File;
+import java.util.*;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.Ant;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+import org.apache.tools.ant.Task;
+
+/**
+ * Execute a given task over each of the directories
+ * specified in the locations property.
+ */
+public class BuildModules 
+    extends Task 
+{
+    private static final boolean DEBUG = false;
+    private static final boolean ECHO  = true;
+    private static final String EMPTY_STRING = "";
+    private static final String DELIMITER = ",";    
+    private static final String DEFAULT_BUILD_FILE = "build.xml";
+    
+    private List   locations = null;  // List<String>
+    private String target = null;
+    private String startdir = null;
+    private String propertyKey = "buildmodules.current.dir";
+    private String antFile = null;
+
+    public BuildModules() 
+    {
+        locations = new Vector();
+        target    = null;
+    }
+
+    public void setLocations(String s) 
+    {
+        if(DEBUG) 
+            log("SET locations = " + s);
+
+        StringTokenizer tok = new StringTokenizer(s, DELIMITER);
+
+        locations = new Vector();
+
+        while(tok.hasMoreTokens()) 
+        {
+            locations.add(tok.nextToken().trim());
+        }
+    }
+    
+    public void setTarget(String s) 
+    {
+        if(DEBUG) log("SET target = " + s);
+
+        target = s;
+    }
+
+    public void setStartdir(String s) 
+    {
+        if(DEBUG) 
+            log("SET startdir = " + s);
+
+        startdir = s;
+    }
+    
+    public void setPropertyKey(String propertyKey)
+    {
+        this.propertyKey = propertyKey;
+    }
+
+    public void setAntFile(String antFile)
+    {
+        this.antFile = antFile;
+    }
+
+    public void execute() 
+        throws BuildException 
+    {        
+        if(locations.isEmpty()) 
+        {
+            throw new BuildException("You must set at least one location!", location);
+        }
+
+        if(target == null) 
+        {
+            target = this.getOwningTarget().getName();
+
+            if(DEBUG) 
+                log("EXECUTE owningTarget = " + this.getOwningTarget());
+        }
+
+        File baseDir = null;
+        if(startdir == null) 
+        {
+            baseDir = project.getBaseDir();
+        } 
+        else 
+        {
+            baseDir = new File(startdir);
+            //baseDir = new File(project.getBaseDir(), startdir);
+        }
+        
+        Iterator it = locations.iterator();
+        while(it.hasNext()) 
+        {
+            String dirName =(String) it.next();
+            File dir = new File(baseDir, dirName);            
+
+            if(DEBUG)
+            {
+                log("set location(" + location + ")");
+                log("project base dir (" + project.getBaseDir() + ")");
+                log("set ant file(" + antFile + ")");
+                log("set dir(" + dirName + ")");
+                log("set target(" + target + ")");
+                log("set property key(" + propertyKey + ")");
+            }
+            
+            if(ECHO) 
+            {
+                log("Enter build file: " + dir + File.separator + DEFAULT_BUILD_FILE);
+                log("Process '" + dirName + "' location with '" + target + "' target ...");
+            }
+
+            Ant ant =(Ant)project.createTask("ant");
+            ant.init();
+            ant.setAntfile(createBuildFilename(dirName));
+            ant.setLocation(location);
+            ant.setDir(dir);
+            ant.setTarget(target);
+            
+            if(DEBUG) 
+                log("--> next [ " + target + " ] " + dir.getAbsolutePath());
+
+            getProject().setProperty(propertyKey, dirName);
+            
+            ant.execute();
+
+            getProject().setProperty(propertyKey, EMPTY_STRING);
+
+            if(ECHO)
+            {
+                //log("Leave build file: " + dir + File.separator + DEFAULT_BUILD_FILE);
+            }
+            
+        }
+    }
+
+    private static String createBuildFilename(String dir)
+    {
+        String buildFile = null;
+        
+        if(dir == null || dir.length() <= 0)
+            throw new BuildException("The module name (" + dir + ") is badly specified.");
+
+        buildFile = "build.xml";
+
+        return buildFile;
+    }    
+}

Added: incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/JspTaglibSubTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/JspTaglibSubTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,464 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools.tld;
+
+import xdoclet.XDocletException;
+import xdoclet.XDocletMessages;
+
+import xdoclet.XmlSubTask;
+import xdoclet.util.Translator;
+
+/**
+ * Generates taglib.tld deployment descriptor for JSP taglibs.
+ *
+ * @author        Ara Abrahamian (ara_e@email.com)
+ * @created       July 12, 2001
+ * @ant.element   display-name="JSP Taglib" name="netuitldgen" parent="xdoclet.modules.web.WebDocletTask"
+ * @version       $Revision: 1.12 $
+ */
+public class JspTaglibSubTask extends XmlSubTask
+{
+    private static String DEFAULT_TEMPLATE_FILE = "xdoclet/tld.xdt";
+
+    private static String TLD_PUBLICID_1_2 = "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN";
+
+    private static String TLD_PUBLICID_1_1 = "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN";
+
+    private static String TLD_SYSTEMID_1_2 = "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd";
+
+    private static String TLD_SYSTEMID_1_1 = "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd";
+
+    private static String TLD_DTD_FILE_NAME_1_2 = "xdoclet/modules/web/resources/web-jsptaglibrary_1_2.dtd";
+
+    private static String TLD_DTD_FILE_NAME_1_1 = "xdoclet/modules/web/resources/web-jsptaglibrary_1_1.dtd";
+
+    protected String taglibversion = "1.0";
+
+    protected String jspversion = JspVersionTypes.VERSION_1_2;
+
+    protected String shortname = "";
+
+    protected String uri = "";
+
+    protected String displayname = "";
+
+    protected String smallicon = "";
+
+    protected String largeicon = "";
+
+    protected String description = "";
+
+    protected String filename = "taglib.tld";
+
+    private String packageName = null;
+
+    /**
+     * Describe what the JspTaglibSubTask constructor does
+     */
+    public JspTaglibSubTask()
+    {
+        setTemplateURL(getClass().getResource(DEFAULT_TEMPLATE_FILE));
+        setDestinationFile(filename);
+
+        setPublicId(TLD_PUBLICID_1_2);
+        setSystemId(TLD_SYSTEMID_1_2);
+        setDtdURL(getClass().getResource(TLD_DTD_FILE_NAME_1_2));
+    }
+
+    public void setPackageName(String packageName)
+    {
+        this.packageName = packageName;
+    }
+
+    public String getPackageName()
+    {
+        return packageName;
+    }
+
+    /**
+     * Gets the Jspversion attribute of the JspTaglibSubTask object
+     *
+     * @return   The Jspversion value
+     */
+    public String getJspversion()
+    {
+        return jspversion;
+    }
+
+    /**
+     * Gets the Taglibversion attribute of the JspTaglibSubTask object
+     *
+     * @return   The Taglibversion value
+     */
+    public String getTaglibversion()
+    {
+        return taglibversion;
+    }
+
+    /**
+     * Gets the Shortname attribute of the JspTaglibSubTask object
+     *
+     * @return   The Shortname value
+     */
+    public String getShortname()
+    {
+        return shortname;
+    }
+
+    /**
+     * Gets the Uri attribute of the JspTaglibSubTask object
+     *
+     * @return   The Uri value
+     */
+    public String getUri()
+    {
+        return uri;
+    }
+
+    /**
+     * Gets the Displayname attribute of the JspTaglibSubTask object
+     *
+     * @return   The Displayname value
+     */
+    public String getDisplayname()
+    {
+        return displayname;
+    }
+
+    /**
+     * Gets the Smallicon attribute of the JspTaglibSubTask object
+     *
+     * @return   The Smallicon value
+     */
+    public String getSmallicon()
+    {
+        return smallicon;
+    }
+
+    /**
+     * Gets the Largeicon attribute of the JspTaglibSubTask object
+     *
+     * @return   The Largeicon value
+     */
+    public String getLargeicon()
+    {
+        return largeicon;
+    }
+
+    /**
+     * Gets the Description attribute of the JspTaglibSubTask object
+     *
+     * @return   The Description value
+     */
+    public String getDescription()
+    {
+        return description;
+    }
+
+    /**
+     * Gets the Filename attribute of the JspTaglibSubTask object
+     *
+     * @return   The Filename value
+     */
+    public String getFilename()
+    {
+        return filename;
+    }
+
+    /**
+     * Sets the Jspversion attribute of the JspTaglibSubTask object
+     *
+     * @param jspversion  The new Jspversion value
+     */
+    public void setJspversion(JspVersionTypes jspversion)
+    {
+        this.jspversion = jspversion.getValue();
+    }
+
+    /**
+     * Sets the Taglibversion attribute of the JspTaglibSubTask object
+     *
+     * @param taglibversion  The new Taglibversion value
+     */
+    public void setTaglibversion(String taglibversion)
+    {
+        this.taglibversion = taglibversion;
+    }
+
+    /**
+     * Sets the Shortname attribute of the JspTaglibSubTask object
+     *
+     * @param shortname  The new Shortname value
+     */
+    public void setShortname(String shortname)
+    {
+        this.shortname = shortname;
+    }
+
+    /**
+     * Sets the Uri attribute of the JspTaglibSubTask object
+     *
+     * @param uri  The new Uri value
+     */
+    public void setUri(String uri)
+    {
+        this.uri = uri;
+    }
+
+    /**
+     * Sets the Displayname attribute of the JspTaglibSubTask object
+     *
+     * @param new_display_name  The new Displayname value
+     */
+    public void setDisplayname(String new_display_name)
+    {
+        displayname = new_display_name;
+    }
+
+    /**
+     * Sets the Smallicon attribute of the JspTaglibSubTask object
+     *
+     * @param new_icon  The new Smallicon value
+     */
+    public void setSmallicon(String new_icon)
+    {
+        smallicon = new_icon;
+    }
+
+    /**
+     * Sets the Largeicon attribute of the JspTaglibSubTask object
+     *
+     * @param new_icon  The new Largeicon value
+     */
+    public void setLargeicon(String new_icon)
+    {
+        largeicon = new_icon;
+    }
+
+    /**
+     * Sets the Description attribute of the JspTaglibSubTask object
+     *
+     * @param new_description  The new Description value
+     */
+    public void setDescription(String new_description)
+    {
+        description = new_description;
+    }
+
+    /**
+     * Sets the Filename attribute of the JspTaglibSubTask object
+     *
+     * @param new_filename  The new Filename value
+     */
+    public void setFilename(String new_filename)
+    {
+        filename = new_filename;
+        setDestinationFile(filename);
+    }
+
+    /**
+     * Called to validate configuration parameters.
+     *
+     * @exception XDocletException
+     */
+    public void validateOptions() throws XDocletException
+    {
+        super.validateOptions();
+
+        if (getShortname() == null || getShortname().trim().equals("")) {
+            throw new XDocletException(Translator.getString(XDocletMessages.class, XDocletMessages.PARAMETER_MISSING_OR_EMPTY, new String[]{"shortName"}));
+        }
+    }
+
+    /**
+     * Describe what the method does
+     *
+     * @exception XDocletException
+     */
+    public void execute() throws XDocletException
+    {
+        if (getJspversion().equals(JspVersionTypes.VERSION_1_1)) {
+            setPublicId(TLD_PUBLICID_1_1);
+            setSystemId(TLD_SYSTEMID_1_1);
+            setDtdURL(getClass().getResource(TLD_DTD_FILE_NAME_1_1));
+        }
+        else {
+            setPublicId(TLD_PUBLICID_1_2);
+            setSystemId(TLD_SYSTEMID_1_2);
+            setDtdURL(getClass().getResource(TLD_DTD_FILE_NAME_1_2));
+        }
+
+        startProcess();
+    }
+
+    /**
+     * Describe what the method does
+     *
+     * @exception XDocletException
+     */
+    protected void engineStarted() throws XDocletException
+    {
+        System.out.println(Translator.getString(XDocletMessages.class, XDocletMessages.GENERATING_SOMETHING, new String[]{getDestinationFile().toString()}));
+    }
+
+    /**
+     * @author    Aslak Hellesoy
+     * @created   July 28, 2001
+     */
+    public static class ContextParam implements java.io.Serializable
+    {
+        private String paramName = null;
+        private String paramValue = null;
+        private String description = "";
+
+        /**
+         * Gets the Name attribute of the ContextParam object
+         *
+         * @return   The Name value
+         */
+        public String getName()
+        {
+            return paramName;
+        }
+
+        /**
+         * Gets the Value attribute of the ContextParam object
+         *
+         * @return   The Value value
+         */
+        public String getValue()
+        {
+            return paramValue;
+        }
+
+        /**
+         * Gets the Description attribute of the ContextParam object
+         *
+         * @return   The Description value
+         */
+        public String getDescription()
+        {
+            return description;
+        }
+
+        /**
+         * Sets the Name attribute of the ContextParam object
+         *
+         * @param name  The new Name value
+         */
+        public void setName(String name)
+        {
+            paramName = name;
+        }
+
+        /**
+         * Sets the Value attribute of the ContextParam object
+         *
+         * @param value  The new Value value
+         */
+        public void setValue(String value)
+        {
+            paramValue = value;
+        }
+
+        /**
+         * Sets the Description attribute of the ContextParam object
+         *
+         * @param desc  The new Description value
+         */
+        public void setDescription(String desc)
+        {
+            description = desc;
+        }
+    }
+
+    /**
+     * @author    Aslak Hellesoy
+     * @created   July 28, 2001
+     */
+    public static class TagLib implements java.io.Serializable
+    {
+        private String taglibURI = null;
+        private String taglibLocation = null;
+
+        /**
+         * Gets the URI attribute of the TagLib object
+         *
+         * @return   The URI value
+         */
+        public String getURI()
+        {
+            return taglibURI;
+        }
+
+        /**
+         * Gets the Location attribute of the TagLib object
+         *
+         * @return   The Location value
+         */
+        public String getLocation()
+        {
+            return taglibLocation;
+        }
+
+        /**
+         * Sets the URI attribute of the TagLib object
+         *
+         * @param uri  The new URI value
+         */
+        public void setURI(String uri)
+        {
+            taglibURI = uri;
+        }
+
+        /**
+         * Sets the Location attribute of the TagLib object
+         *
+         * @param location  The new Location value
+         */
+        public void setLocation(String location)
+        {
+            taglibLocation = location;
+        }
+    }
+
+    /**
+     * @author    Ara Abrahamian (ara_e@email.com)
+     * @created   July 19, 2001
+     */
+    public static class JspVersionTypes extends org.apache.tools.ant.types.EnumeratedAttribute
+    {
+        public final static String VERSION_1_1 = "1.1";
+        public final static String VERSION_1_2 = "1.2";
+        public final static String VERSION_2_0 = "2.0";
+
+        // We're getting there!
+
+        /**
+         * Gets the Values attribute of the JspVersionTypes object
+         *
+         * @return   The Values value
+         */
+        public String[] getValues()
+        {
+            return (new String[]{VERSION_1_1, VERSION_1_2, VERSION_2_0});
+        }
+    }
+
+}

Added: incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/tld.xdt
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/tld.xdt	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="<XDtConfig:configParameterValue paramName='Xmlencoding'/>"?>
+<!DOCTYPE taglib PUBLIC "<XDtXml:publicId/>" "<XDtXml:systemId/>">
+
+<taglib>
+  <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.1">
+    <tlibversion><XDtConfig:configParameterValue paramName="Taglibversion"/></tlibversion>
+    <jspversion><XDtConfig:configParameterValue paramName="Jspversion"/></jspversion>
+    <shortname><XDtConfig:configParameterValue paramName="Shortname"/></shortname>
+  </XDtConfig:ifConfigParamEquals>
+  <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="1.2">
+    <tlib-version><XDtConfig:configParameterValue paramName="Taglibversion"/></tlib-version>
+    <jsp-version><XDtConfig:configParameterValue paramName="Jspversion"/></jsp-version>
+    <short-name><XDtConfig:configParameterValue paramName="Shortname"/></short-name>
+  </XDtConfig:ifConfigParamGreaterOrEquals>
+
+  <XDtConfig:ifConfigParamNotEquals paramName="Uri" value="">
+    <uri><XDtConfig:configParameterValue paramName="Uri"/></uri>
+  </XDtConfig:ifConfigParamNotEquals>
+
+  <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="1.2">
+  <XDtConfig:ifConfigParamNotEquals paramName="Displayname" value="">
+    <display-name><XDtConfig:configParameterValue paramName="Displayname"/></display-name>
+  </XDtConfig:ifConfigParamNotEquals>
+  <XDtConfig:ifConfigParamNotEquals paramName="Smallicon" value="">
+    <small-icon><XDtConfig:configParameterValue paramName="Smallicon"/></small-icon>
+  </XDtConfig:ifConfigParamNotEquals>
+  <XDtConfig:ifConfigParamNotEquals paramName="Largeicon" value="">
+    <large-icon><XDtConfig:configParameterValue paramName="Largeicon"/></large-icon>
+  </XDtConfig:ifConfigParamNotEquals>
+  <XDtConfig:ifConfigParamNotEquals paramName="Description" value="">
+    <description><![CDATA[<XDtConfig:configParameterValue paramName="Description"/>]]></description>
+  </XDtConfig:ifConfigParamNotEquals>
+  </XDtConfig:ifConfigParamGreaterOrEquals>
+
+  <XDtClass:forAllClasses type="javax.servlet.jsp.tagext.TagLibraryValidator" abstract="false">
+    <validator>
+        <validator-class><XDtClass:fullClassName/></validator-class>
+     <XDtClass:forAllClassTags tagName="netui:validator-init-param">
+        <init-param>
+            <param-name><XDtClass:classTagValue tagName="netui:validator-init-param" paramName="name"/></param-name>
+            <param-value><XDtClass:classTagValue tagName="netui:validator-init-param" paramName="value"/></param-value>
+        <XDtClass:ifHasClassTag tagName="netui:validator-init-param" paramName="description">
+            <description><![CDATA[<XDtClass:classTagValue tagName="netui:validator-init-param" paramName="description"/>]]></description>
+        </XDtClass:ifHasClassTag>
+        </init-param>
+     </XDtClass:forAllClassTags>
+      <description><![CDATA[<XDtClass:firstSentenceDescription/>]]></description>
+    </validator>
+  </XDtClass:forAllClasses>
+
+  <XDtClass:forAllClasses type="javax.servlet.http.HttpSessionActivationListener,javax.servlet.http.HttpSessionAttributeListener,javax.servlet.http.HttpSessionBindingListener,javax.servlet.http.HttpSessionListener,javax.servlet.ServletContextAttributeListener,javax.servlet.ServletContextListener" abstract="false">
+    <listener>
+        <listener-class><XDtClass:fullClassName/></listener-class>
+    </listener>
+  </XDtClass:forAllClasses>
+
+  <XDtNetUITldGen:forAllClasses 
+         type="javax.servlet.jsp.tagext.Tag,javax.servlet.jsp.tagext.TagSupport,javax.servlet.jsp.tagext.BodyTagSupport,org.apache.beehive.netui.tags.AbstractBaseTag,org.apache.beehive.netui.tags.DataSourceTag,org.apache.beehive.netui.tags.databinding.base.StructuredBaseTag,org.apache.beehive.netui.tags.html.HtmlBaseTag" 
+         abstract="false"
+         extent="hierarchy">
+   <XDtClass:ifHasClassTag tagName="netui:tag">
+    <tag>
+
+    <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.1">
+        <name><XDtClass:classTagValue tagName="netui:tag" paramName="name"/></name>
+        <tagclass><XDtClass:fullClassName/></tagclass>
+     <XDtClass:ifHasClassTag tagName="netui:tag" paramName="tei-class">
+        <teiclass><XDtClass:classTagValue tagName="netui:tag" paramName="tei-class"/></teiclass>
+     </XDtClass:ifHasClassTag>
+     <XDtClass:ifHasClassTag tagName="netui:tag" paramName="body-content" values="JSP,empty,tagdependent">
+        <bodycontent><XDtClass:classTagValue tagName="netui:tag" paramName="body-content"/></bodycontent>
+     </XDtClass:ifHasClassTag>
+    </XDtConfig:ifConfigParamEquals>
+
+    <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="1.2">
+        <name><XDtClass:classTagValue tagName="netui:tag" paramName="name"/></name>
+        <tag-class><XDtClass:fullClassName/></tag-class>
+     <XDtClass:ifHasClassTag tagName="netui:tag" paramName="tei-class">
+        <tei-class><XDtClass:classTagValue tagName="netui:tag" paramName="tei-class"/></tei-class>
+     </XDtClass:ifHasClassTag>
+     <XDtClass:ifHasClassTag tagName="netui:tag" paramName="body-content" values="JSP,empty,tagdependent">
+        <body-content><XDtClass:classTagValue tagName="netui:tag" paramName="body-content"/></body-content>
+     </XDtClass:ifHasClassTag>
+     <XDtClass:ifHasClassTag tagName="netui:tag" paramName="description">
+        <description><![CDATA[<XDtClass:classTagValue tagName="netui:tag" paramName="description"/>]]></description>
+     </XDtClass:ifHasClassTag>
+    </XDtConfig:ifConfigParamGreaterOrEquals>
+
+     <XDtClass:ifHasClassTag tagName="netui:tag" paramName="display-name">
+        <display-name><XDtClass:classTagValue tagName="netui:tag" paramName="display-name"/></display-name>
+     </XDtClass:ifHasClassTag>
+     <XDtClass:ifHasClassTag tagName="netui:tag" paramName="small-icon">
+        <small-icon><XDtClass:classTagValue tagName="netui:tag" paramName="small-icon"/></small-icon>
+     </XDtClass:ifHasClassTag>
+     <XDtClass:ifHasClassTag tagName="netui:tag" paramName="large-icon">
+        <large-icon><XDtClass:classTagValue tagName="netui:tag" paramName="large-icon"/></large-icon>
+     </XDtClass:ifHasClassTag>
+
+     <XDtClass:forAllClassTags tagName="netui:variable">
+        <variable>
+       <XDtClass:ifHasClassTag tagName="netui:variable" paramName="name-given">
+            <name-given><XDtClass:classTagValue tagName="netui:variable" paramName="name-given"/></name-given>
+       </XDtClass:ifHasClassTag>
+       <XDtClass:ifDoesntHaveClassTag tagName="netui:variable" paramName="name-given">
+        <XDtClass:ifHasClassTag tagName="netui:variable" paramName="name-from-attribute">
+            <name-from-attribute><XDtClass:classTagValue tagName="netui:variable" paramName="name-from-attribute"/></name-from-attribute>
+        </XDtClass:ifHasClassTag>
+       </XDtClass:ifDoesntHaveClassTag>
+       <XDtClass:ifHasClassTag tagName="netui:variable" paramName="class">
+            <variable-class><XDtClass:classTagValue tagName="netui:variable" paramName="class"/></variable-class>
+       </XDtClass:ifHasClassTag>
+       <XDtClass:ifHasClassTag tagName="netui:variable" paramName="declare">
+            <declare><XDtClass:classTagValue tagName="netui:variable" paramName="declare" values="true,false,yes,no"/></declare>
+       </XDtClass:ifHasClassTag>
+       <XDtClass:ifHasClassTag tagName="netui:variable" paramName="scope">
+            <scope><XDtClass:classTagValue tagName="netui:variable" paramName="scope" values="NESTED,AT_BEGIN,AT_END"/></scope>
+       </XDtClass:ifHasClassTag>
+        <XDtClass:ifHasClassTag tagName="netui:variable" paramName="description">
+            <description><![CDATA[<XDtClass:classTagValue tagName="netui:variable" paramName="description"/>]]></description>
+        </XDtClass:ifHasClassTag>
+      </variable>
+     </XDtClass:forAllClassTags>
+
+<XDtNetUITldGen:forAllAttributes tagName="netui:attribute">
+        <attribute>
+            <name><XDtMethod:propertyName/></name>
+        <XDtNetUITldGen:ifHasTagValue paramName="required">
+            <required><XDtNetUITldGen:paramValue paramName="required" values="true,false,yes,no"/></required>
+        </XDtNetUITldGen:ifHasTagValue>
+        <XDtNetUITldGen:ifHasTagValue paramName="rtexprvalue">
+            <rtexprvalue><XDtNetUITldGen:paramValue paramName="rtexprvalue" values="true,false,yes,no"/></rtexprvalue>
+        </XDtNetUITldGen:ifHasTagValue>
+        <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="1.2">
+          <XDtNetUITldGen:ifHasTagValue paramName="type">
+            <type><XDtNetUITldGen:paramValue paramName="type"/></type>
+          </XDtNetUITldGen:ifHasTagValue>
+          <XDtNetUITldGen:ifHasTagValue paramName="description">
+            <description><![CDATA[<XDtNetUITldGen:paramValue paramName="description"/>]]></description>
+          </XDtNetUITldGen:ifHasTagValue>
+        </XDtConfig:ifConfigParamGreaterOrEquals>
+        </attribute>
+</XDtNetUITldGen:forAllAttributes>
+    </tag>
+  </XDtClass:ifHasClassTag>
+  </XDtNetUITldGen:forAllClasses>
+</taglib>
+

Added: incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/TldxConfigTagsHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/TldxConfigTagsHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,104 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools.tldx;
+
+// java imports
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+// internal imports
+import org.apache.commons.logging.Log;
+
+// external imports
+import xdoclet.DocletSupport;
+import xdoclet.XDocletException;
+import xdoclet.XDocletTagSupport;
+import xdoclet.tagshandler.ConfigTagsHandler;
+import xdoclet.tagshandler.TypeTagsHandler;
+import xdoclet.util.LogUtil;
+import xdoclet.util.TypeConversionUtil;
+
+import xjavadoc.*;
+
+/**
+ *
+ * @xdoclet.taghandler namespace="NetUITldxConfig"
+ */
+public class TldxConfigTagsHandler
+    extends ConfigTagsHandler
+{
+    private static final String HTML_URI = "http://beehive.apache.org/netui/tags-html-1.0";
+    private static final String TEMPLATE_URI = "http://beehive.apache.org/netui/tags-template-1.0";
+    private static final String DATABINDING_URI = "http://beehive.apache.org/netui/tags-databinding-1.0";
+    private static final String DATAGRID_URI = "http://beehive.apache.org/netui/tags-datagrid-1.0";
+
+    // map short names to a list of taglib links
+    private static final Map links = new HashMap();
+
+    static
+    {
+        links.put(TEMPLATE_URI, new String[] {"netui", "data"});
+        links.put(HTML_URI, new String[] {"data", "temp", "datagrid"});
+        links.put(DATABINDING_URI, new String[] {"netui", "temp"});
+        links.put(DATAGRID_URI, new String[] {"netui", "temp", "data"});
+    }
+
+    public String generateLinks(Properties properties)
+        throws XDocletException
+    {
+        Object uri = getConfigParameter("uri");
+        System.out.println("uri: " + uri);
+
+        StringBuffer buf = new StringBuffer(128);
+
+        String[] l = (String[])links.get(uri);
+        if(l == null)
+            throw new XDocletException("Don't know how to create TLDX links for the taglib URI: " + uri);
+        
+        for(int i = 0; i < l.length; i++)
+        {
+            buf.append(makeLink(l[i]));
+        }
+
+        return buf.toString();
+    }
+
+    private String makeLink(String shortName)
+    {
+        String uri = null;
+
+        if(shortName.equals("netui"))
+            uri = HTML_URI;
+        else if(shortName.equals("data"))
+            uri = DATABINDING_URI;
+        else if(shortName.equals("temp"))
+            uri = TEMPLATE_URI;
+        else if(shortName.equals("datagrid"))
+            uri = DATAGRID_URI;
+
+        StringBuffer buf = new StringBuffer(64);
+        buf.append("    <link>\n");
+        buf.append("        <prefix>" + shortName + "</prefix>\n");
+        buf.append("        <uri>" + uri + "</uri>\n");
+        buf.append("    </link>\n");
+
+        return buf.toString();
+    }
+}

Added: incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/TldxSubTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/TldxSubTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,155 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools.tldx;
+
+import xdoclet.TemplateSubTask;
+import xdoclet.XDocletException;
+import xdoclet.util.Translator;
+
+/**
+ * Generate the DatabaseControl class for a given JavaBean class, and an optional messages properties bundle to go with it.
+ *
+ * @ant.element name="netuitldxgen" display-name="Generate TLDX Class" parent="xdoclet.DocletTask"
+ */
+public class TldxSubTask 
+    extends TemplateSubTask
+{
+    /**
+     * Default template to use for TLDX files
+     */
+    private static String DEFAULT_TLDX_TEMPLATE_FILE = "xdoclet/tldx.xdt";
+
+    /**
+     * Pattern for generation of TLDX files
+     */
+    private static String GENERATED_TLDX_FILE_NAME = "taglib.tldx";
+
+    private String filename = null;
+    private String paletteGenerator = null;
+    private String uri = null;
+    private String tldxVersion = null;
+    private String xmlEncoding = null;
+    private String packageName = null;
+
+    /**
+     * Constructor for the TLDX sub task object
+     */
+    public TldxSubTask()
+    {
+        super();
+    }
+
+    public void setPackageName(String packageName)
+    {
+        this.packageName = packageName;
+    }
+
+    public String getPackageName()
+    {
+        return packageName;
+    }
+
+    public void setXmlEncoding(String xmlEncoding)
+    {
+        this.xmlEncoding = xmlEncoding;
+    }
+
+    public String getXmlEncoding()
+    {
+        return xmlEncoding;
+    }
+
+    public void setTldxVersion(String tldxVersion)
+    {
+        this.tldxVersion = tldxVersion;
+    }
+
+    public String getTldxVersion()
+    {
+        return tldxVersion;
+    }
+
+    public void setUri(String uri)
+    {
+        this.uri = uri;
+    }
+
+    public String getUri()
+    {
+        return uri;
+    }
+
+    public void setPaletteGenerator(String paletteGenerator)
+    {
+        this.paletteGenerator = paletteGenerator;
+    }
+
+    public String getPaletteGenerator()
+    {
+        return paletteGenerator;
+    }
+
+    /**
+     * Get the destination filename of the TldxSubTask.
+     */
+    public String getFilename()
+    {
+        return filename;
+    }
+    
+    /**
+     * Set the destination filename.
+     */
+    public void setFilename(String filename)
+    {
+        this.filename = filename;
+    }
+
+    /**
+     * Called to validate configuration parameters.
+     *
+     * @exception XDocletException  Description of Exception
+     */
+    public void validateOptions() throws XDocletException
+    {
+        // JavaBeans does not require a template url or a destination file
+        //
+        // super.validateOptions();
+    }
+
+    /**
+     * @exception XDocletException  Description of Exception
+     */
+    public void execute() throws XDocletException
+    {
+        setTemplateURL(getClass().getResource(DEFAULT_TLDX_TEMPLATE_FILE));
+        setDestinationFile(filename != null ? filename : GENERATED_TLDX_FILE_NAME);
+        startProcess();
+    }
+
+    /**
+     * Called when the engine is started
+     *
+     * @exception XDocletException  Thrown in case of problem
+     */
+    protected void engineStarted() throws XDocletException
+    {
+        System.out.println("Starting TLDX generation for URI: " + getUri());
+    }
+}

Added: incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/xdoclet/tldx.xdt
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/org/apache/beehive/netui/tools/tldx/xdoclet/tldx.xdt	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="<XDtConfig:configParameterValue paramName='Xmlencoding'/>"?>
+
+<taglib>
+    <uri><XDtConfig:configParameterValue paramName="Uri"/></uri>
+    <palettegenerator><XDtConfig:configParameterValue paramName="PaletteGenerator"/></palettegenerator>
+<XDtNetUITldxConfig:generateLinks/>
+<XDtNetUITldGen:forAllClasses 
+    type="javax.servlet.jsp.tagext.Tag,javax.servlet.jsp.tagext.TagSupport,javax.servlet.jsp.tagext.BodyTagSupport,org.apache.beehive.netui.tags.AbstractBaseTag,org.apache.beehive.netui.tags.DataSourceTag,org.apache.beehive.netui.tags.databinding.base.StructuredBaseTag" 
+    extent="hierarchy">
+<XDtClass:ifHasClassTag tagName="netui.tldx:tag">
+<XDtClass:ifHasClassTag tagName="netui:tag">
+    <tag>
+    <XDtConfig:ifConfigParamEquals paramName="tldxVersion" value="1.0">
+        <name><XDtClass:classTagValue tagName="netui:tag" paramName="name"/></name>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="requiredparent">
+        <requiredparent><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="requiredparent"/></requiredparent>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="requiredchild">
+        <requiredchild><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="requiredchild"/></requiredchild>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="illegalancestor">
+        <illegalancestor><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="illegalancestor"/></illegalancestor>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="renderer">
+        <renderer><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="renderer"/></renderer>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="whitespace">
+        <whitespace><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="whitespace"/></whitespace>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="bodycontentpref">
+        <bodycontent-pref><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="bodycontentpref"/></bodycontent-pref>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="datapalettedriver">
+        <data-palette-driver><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="datapalettedriver"/></data-palette-driver>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="output">
+        <output><![CDATA[<XDtClass:classTagValue tagName="netui.tldx:tag" paramName="output"/>]]></output>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="netuiexpressioninfo" superclasses="false">
+        <netuiexpressioninfo><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="netuiexpressioninfo"/></netuiexpressioninfo>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="deprecated">
+        <deprecated><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="deprecated" values="true,false"/></deprecated>
+    </XDtClass:ifHasClassTag>
+    <XDtClass:ifHasClassTag tagName="netui.tldx:tag" paramName="hidden">
+        <hidden><XDtClass:classTagValue tagName="netui.tldx:tag" paramName="hidden" values="true,false"/></hidden>
+    </XDtClass:ifHasClassTag>
+
+<XDtNetUITldGen:forAllAttributes tagName="netui.tldx:attribute">
+        <attribute>
+            <name><XDtMethod:propertyName/></name>
+    <XDtNetUITldGen:ifHasTagValue paramName="propertyclass">
+            <propertyclass><XDtNetUITldGen:paramValue paramName="propertyclass"/></propertyclass>
+    </XDtNetUITldGen:ifHasTagValue>
+    <XDtNetUITldGen:ifHasTagValue paramName="language">
+            <language><XDtNetUITldGen:paramValue paramName="language" values="netuiexpression"/></language>
+    </XDtNetUITldGen:ifHasTagValue>
+    <XDtNetUITldGen:ifHasTagValue paramName="extype">
+            <extype><XDtNetUITldGen:paramValue paramName="extype"/></extype>
+    </XDtNetUITldGen:ifHasTagValue>
+    <XDtNetUITldGen:ifHasTagValue paramName="category">
+            <category><XDtNetUITldGen:paramValue paramName="category"/></category>
+    </XDtNetUITldGen:ifHasTagValue>
+    <XDtNetUITldGen:ifHasTagValue paramName="reftype">
+            <reftype><XDtNetUITldGen:paramValue paramName="reftype"/></reftype>
+    </XDtNetUITldGen:ifHasTagValue>
+    <XDtNetUITldGen:ifHasTagValue paramName="deprecated">
+            <deprecated><XDtNetUITldGen:paramValue paramName="deprecated" values="true,false"/></deprecated>
+    </XDtNetUITldGen:ifHasTagValue>
+    <XDtNetUITldGen:ifHasTagValue paramName="hidden">
+            <hidden><XDtNetUITldGen:paramValue paramName="hidden" values="true,false"/></hidden>
+    </XDtNetUITldGen:ifHasTagValue>
+        </attribute>
+</XDtNetUITldGen:forAllAttributes>
+    </XDtConfig:ifConfigParamEquals>        
+    </tag>
+</XDtClass:ifHasClassTag>
+</XDtClass:ifHasClassTag>
+</XDtNetUITldGen:forAllClasses>
+</taglib>
\ No newline at end of file

Added: incubator/beehive/netui/src/bootstrap/xdoclet-xml.xdt
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/bootstrap/xdoclet-xml.xdt	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+<!DOCTYPE xdoclet-module PUBLIC "-//XDoclet Team//DTD XDoclet Module 1.0//EN" "http://xdoclet.sourceforge.net/dtd/xdoclet-module_1_0.dtd">
+-->
+
+<XDtComment:comment>
+This template builds the deployment descriptor for modules
+</XDtComment:comment>
+
+<xdoclet-module>
+    <!--
+    <XDtClass:forAllClasses>
+    <XDtClass:fullClassName/>
+    </XDtClass:forAllClasses>
+    -->
+
+   <XDtClass:forAllClasses type="xdoclet.template.TemplateTagHandler" abstract="false">
+    <taghandler
+        namespace="<XDtClass:classTagValue tagName="xdoclet.taghandler" paramName="namespace" mandatory="true"/>"
+        class="<XDtClass:fullClassName/>"
+    />
+   </XDtClass:forAllClasses>
+
+   <XDtClass:forAllClasses type="xdoclet.SubTask" abstract="false">
+    <subtask
+        name="<XDtClass:classTagValue tagName="ant.element" paramName="name"  mandatory="true"/>"
+        implementation-class="<XDtClass:fullClassName/>"
+        parent-task-class="<XDtClass:classTagValue tagName="ant.element" paramName="parent" mandatory="true"/>"
+    />
+   </XDtClass:forAllClasses>
+</xdoclet-module>

Added: incubator/beehive/netui/src/compiler/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+#
+# This configures APT so the ControlProcessorFactory can be used to process Control annotations
+#
+org.apache.beehive.netui.compiler.apt.PageFlowAnnotationProcessorFactory

Added: incubator/beehive/netui/src/compiler/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Compiler" default="compile" basedir=".">
+
+    <property name="module.classpath" location="${xbean.jar};${jsr173.jar}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <antcall target="compile.schemas"/>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+               source="${compile.source.1.5}">
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+            <fileset dir="." includes="**/*.xml"/>
+            <fileset dir="." includes="META-INF/**"/>
+        </copy>
+
+        <jar jarfile="${build.lib.dir}/${compiler.jar.name}" basedir="${classes.dir}/${module.name}"/>
+    </target>
+
+    <target name="compile.schemas">
+        <!-- run the XMLBean compiler for the struts-config schema -->
+        <ant antfile="${netui.ant.dir}/xmlBean.xml">
+            <property name="xsd.root.dir" value="schema/struts-config"/>
+            <property name="class.output.dir" value="${classes.dir}/${module.name}"/>
+            <property name="xbean.inputs" value="${src.dir}/${module.name}/schema/struts-config/*.xsd*"/>
+            <property name="xbean.output" value="${build.lib.dir}/${compiler.jar.name}"/>
+        </ant>
+
+        <!-- run the XMLBean compiler for the struts-validator schema -->
+        <ant antfile="${netui.ant.dir}/xmlBean.xml">
+            <property name="xsd.root.dir" value="schema/struts-validator"/>
+            <property name="class.output.dir" value="${classes.dir}/${module.name}"/>
+            <property name="xbean.inputs" value="schema/struts-validator/*.xsd*"/>
+            <property name="xbean.output" value="${build.lib.dir}/${compiler.jar.name}"/>
+        </ant>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete file="${build.lib.dir}/${compiler.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Compiler"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/AnnotationGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/AnnotationGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,350 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.Declaration;
+
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PAGEFLOW_RUNTIME_JAR;
+
+
+/**
+ * Our base class for customizable annotation tag grammars.  It has stock behavior for basic
+ * things like making sure required attributes exist, and provides plugin points for more
+ * complex checks.
+ */ 
+public abstract class AnnotationGrammar
+{
+    /**
+     * If this tag requires a particular runtime version...
+     */ 
+    private String _requiredRuntimeVersion = null;
+    private RuntimeVersionChecker _runtimeVersionChecker;
+    private AnnotationProcessorEnvironment _env;
+    private Diagnostics _diagnostics;
+    private Map _memberGrammars = new HashMap();
+    private Map _memberArrayGrammars = new HashMap();
+    private Map _memberTypes = new HashMap();
+    
+
+    /**
+     * @param requiredRuntimeVersion causes an error to be produced if the version in the manifest of beehive-netui-pageflow.jar
+     *            is not high enough.
+     */ 
+    public AnnotationGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, String requiredRuntimeVersion,
+                              RuntimeVersionChecker runtimeVersionChecker )
+    {
+        _env = env;
+        _diagnostics = diags;
+        _runtimeVersionChecker = runtimeVersionChecker;
+        _requiredRuntimeVersion = requiredRuntimeVersion;
+    }
+
+    public AnnotationProcessorEnvironment getEnv()
+    {
+        return _env;
+    }
+    
+    public Diagnostics getDiagnostics()
+    {
+        return _diagnostics;
+    }
+
+    public final Object check( AnnotationMirror annotation, MemberDeclaration classMember )
+    {
+        if ( ! beginCheck( annotation, classMember ) )
+        {
+            return null;
+        }
+        
+        Map< AnnotationTypeElementDeclaration, AnnotationValue > valuesPresent = annotation.getElementValues();
+        HashSet wasPresent = new HashSet();
+        HashMap checkResults = new HashMap();
+        
+        for ( Map.Entry< AnnotationTypeElementDeclaration, AnnotationValue > i : valuesPresent.entrySet() )
+        {
+            AnnotationTypeElementDeclaration decl = i.getKey();
+            AnnotationValue value = i.getValue();
+            String memberName = decl.getSimpleName();
+            
+            wasPresent.add( memberName );
+            onCheckMember( decl, value, annotation, classMember );
+            Object grammarOrType = null;
+            
+            if ( ( grammarOrType = _memberGrammars.get( memberName ) ) != null )
+            {
+                AnnotationGrammar childGrammar = ( AnnotationGrammar ) grammarOrType;
+                
+                if ( childGrammar != null )   // it will be non-null unless there are other, more basic, errors
+                {
+                    Object result = childGrammar.check( ( AnnotationMirror ) value.getValue(), classMember );
+                    
+                    if ( result != null )
+                    {
+                        checkResults.put( memberName, result );
+                    }
+                }
+            }
+            else if ( ( grammarOrType = _memberArrayGrammars.get( memberName ) ) != null )
+            {
+                AnnotationGrammar arrayGrammar = ( AnnotationGrammar ) grammarOrType;
+            
+                if ( arrayGrammar != null )
+                {
+                    List< AnnotationMirror > annotations = CompilerUtils.getAnnotationArray( value );
+                
+                    for ( AnnotationMirror ann : annotations )
+                    {
+                        arrayGrammar.check( ann, classMember );
+                    }
+                }
+            }
+            else
+            {
+                AnnotationMemberType memberType = ( AnnotationMemberType ) _memberTypes.get( memberName );
+                
+                if ( memberType != null )   // it will be non-null unless there are other, more basic, errors
+                {
+                    Object result = memberType.check( decl, value, annotation, classMember );
+                    
+                    if ( result != null )
+                    {
+                        checkResults.put( memberName, result );
+                    }
+                }                
+            }
+        }
+        
+        return endCheck( annotation, classMember, wasPresent, checkResults );
+    }
+    
+    public final boolean beginCheck( AnnotationMirror annotation, MemberDeclaration classMember )
+    {
+        //
+        // First check to see if there's a required runtime version.
+        //
+        if ( ! _runtimeVersionChecker.checkRuntimeVersion( _requiredRuntimeVersion, annotation, _diagnostics,
+                                                           "error.required-runtime-version-annotation",
+                                                           PAGEFLOW_RUNTIME_JAR ) )
+        {
+            return false;
+        }
+        
+        return onBeginCheck( annotation, classMember );  // for derived classes
+    }
+
+    protected void addError( Declaration element, String key, Object ... args )
+    {
+        getDiagnostics().addError( element, key, args );
+    }
+    
+    protected void addError( AnnotationValue element, String key, Object ... args )
+    {
+        getDiagnostics().addError( element, key, args );
+    }
+    
+    protected void addError( AnnotationMirror element, String key, Object ... args )
+    {
+        getDiagnostics().addError( element, key, args );
+    }
+    
+    protected void addWarning( Declaration element, String key, Object ... args )
+    {
+        getDiagnostics().addWarning( element, key, args );
+    }
+    
+    protected void addWarning( AnnotationValue element, String key, Object ... args )
+    {
+        getDiagnostics().addWarning( element, key, args );
+    }
+    
+    protected void addWarning( AnnotationMirror element, String key, Object ... args )
+    {
+        getDiagnostics().addWarning( element, key, args );
+    }
+    
+    /**
+     * @return a result (any Object) that will be passed back to the parent checker.  May be <code>null</code>.
+     */ 
+    public final Object endCheck( AnnotationMirror annotation, MemberDeclaration classMember, Set wasPresent, Map checkResults )
+    {
+        //
+        // Check mutually-exclusive attributes and child annotations.
+        //
+        String[][] mutuallyExclusiveAttrs = getMutuallyExclusiveAttrs();
+        for ( int i = 0; mutuallyExclusiveAttrs != null && i < mutuallyExclusiveAttrs.length; ++i )
+        {
+            String alreadyFound = null;
+            
+            for ( int j = 0; j < mutuallyExclusiveAttrs[i].length; ++j )
+            {
+                String thisAttr = mutuallyExclusiveAttrs[i][j];
+                
+                if ( wasPresent.contains( thisAttr ) )
+                {
+                    if ( alreadyFound == null )
+                    {
+                        alreadyFound = thisAttr;
+                    }
+                    else
+                    {
+                        String errorKey = "error.atmost-one-may-exist-" + mutuallyExclusiveAttrs[i].length;
+                        getDiagnostics().addErrorArrayArgs( annotation, errorKey, mutuallyExclusiveAttrs[i] );
+                    }
+                }
+            }
+        }
+        
+        //
+        // Check required attributes and child annotations.
+        //
+        String[][] requiredAttrs = getRequiredAttrs();
+        for ( int i = 0; requiredAttrs != null && i < requiredAttrs.length; ++i )
+        {
+            boolean foundOne = false;
+            
+            for ( int j = 0; j < requiredAttrs[i].length; ++j )
+            {
+                String thisAttr = requiredAttrs[i][j];
+                
+                if ( wasPresent.contains( thisAttr ) )
+                {
+                    foundOne = true;
+                    break;
+                }
+            }
+
+            if ( ! foundOne )
+            {
+                String errorKey = "error.atleast-one-must-exist-" + requiredAttrs[i].length;
+                getDiagnostics().addErrorArrayArgs( annotation, errorKey, requiredAttrs[i] );
+            }
+        }
+        
+        //
+        // Check inter-dependencies for attributes and child annotations.
+        //
+        String[][] attrDependencies = getAttrDependencies();
+        for ( int i = 0; attrDependencies != null && i < attrDependencies.length; ++i )
+        {
+            String thisAttr = attrDependencies[i][0];
+            
+            if ( wasPresent.contains( thisAttr ) )
+            {
+                boolean foundOne = false;
+                
+                for ( int j = 1; j < attrDependencies[i].length; ++j )
+                {
+                    if ( wasPresent.contains( attrDependencies[i][j] ) )
+                    {
+                        foundOne = true;
+                        break;
+                    }
+                }
+                
+                if ( ! foundOne )
+                {
+                    String key = "error.attr-dependency-not-found-" + ( attrDependencies[i].length - 1 );
+                    getDiagnostics().addErrorArrayArgs( annotation, key, attrDependencies[i] );
+                }                
+            }
+        }
+        
+        return onEndCheck( annotation, classMember, checkResults );   // for derived classes
+    }
+
+    protected boolean onBeginCheck( AnnotationMirror annotation, MemberDeclaration classMember )
+    {
+        return true;
+    }
+    
+    /**
+     * @param checkResults map of member-name (String) -> result-from-checking (Object)
+     * @return a result (any Object) that will be passed back to the parent checker.  May be <code>null</code>.
+     */ 
+    protected Object onEndCheck( AnnotationMirror annotation, MemberDeclaration classMember, Map checkResults )
+    {
+        return null;
+    }
+    
+    protected void onCheckMember( AnnotationTypeElementDeclaration memberDecl, AnnotationValue member,
+                                  AnnotationMirror annotation, MemberDeclaration classMember )
+    {
+    }
+    
+    /**
+     * Each entry in this array (a String[]) lists mutually exclusive attributes.
+     */ 
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return null;
+    }
+    
+    /**
+     * Each entry in this array (a String[]) lists attributes of which one must exist in this tag.
+     */ 
+    public String[][] getRequiredAttrs()
+    {
+        return null;
+    }
+    
+    /**
+     * Each entry in this array (a String[]) is an array whose first element is an attribute that
+     * requires at least one of the subsequent elements to exist as an attribute.
+     */ 
+    public String[][] getAttrDependencies()
+    {
+        return null;
+    }
+    
+    protected void addMemberGrammar( String memberName, AnnotationGrammar grammar )
+    {
+        _memberGrammars.put( memberName, grammar );
+    }
+    
+    protected void addMemberArrayGrammar( String memberName, AnnotationGrammar grammar )
+    {
+        _memberArrayGrammars.put( memberName, grammar );
+    }
+    
+    protected void addMemberType( String memberName, AnnotationMemberType type )
+    {
+        _memberTypes.put( memberName, type );
+    }
+
+    public String getRequiredRuntimeVersion()
+    {
+        return _requiredRuntimeVersion;
+    }
+
+    public RuntimeVersionChecker getRuntimeVersionChecker()
+    {
+        return _runtimeVersionChecker;
+    }
+}      

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/AnnotationMemberType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/AnnotationMemberType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,111 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PAGEFLOW_RUNTIME_JAR;
+
+
+public class AnnotationMemberType
+        implements JpfLanguageConstants
+{
+    /** set if this entire attribute type requires a particular runtime version. */
+    private String _requiredRuntimeVersion = null;
+    private AnnotationGrammar _parentGrammar;
+    
+
+    public AnnotationMemberType( String requiredRuntimeVersion, AnnotationGrammar parentGrammar )
+    {
+        _requiredRuntimeVersion = requiredRuntimeVersion;
+        _parentGrammar = parentGrammar;
+    }
+    
+    /**
+     * @return a result (any Object) that will be passed back to the parent checker.  May be <code>null</code>.
+     */ 
+    public final Object check( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                               AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        //
+        // First check to see if this attribute requires a particular runtime version.
+        //
+        String valueName = valueDecl.getSimpleName();
+        Diagnostics diags = _parentGrammar.getDiagnostics();
+        _parentGrammar.getRuntimeVersionChecker().checkRuntimeVersion(
+                _requiredRuntimeVersion, value, diags, "error.required-runtime-version-attribute", valueName,
+                PAGEFLOW_RUNTIME_JAR );
+        
+        return onCheck( valueDecl, value, parentAnnotation, classMember );    // for derived classes
+    }
+
+    /**
+     * @return a result (any Object) that will be passed back to the parent checker.  May be <code>null</code>.
+     */ 
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue member,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        return null;
+    }
+    
+    protected void addError( AnnotationValue value, String errorKey, Object ... args )
+    {
+        _parentGrammar.addError( value, errorKey, args );
+    }
+    
+    protected void addError( AnnotationMirror ann, String errorKey, Object ... args )
+    {
+        _parentGrammar.addError( ann, errorKey, args );
+    }
+    
+    protected void addError( Declaration decl, String errorKey, Object ... args )
+    {
+        _parentGrammar.addError( decl, errorKey, args );
+    }
+    
+    protected void addWarning( AnnotationValue value, String errorKey, Object ... args )
+    {
+        _parentGrammar.addWarning( value, errorKey, args );
+    }
+    
+    protected void addWarning( AnnotationMirror ann, String errorKey, Object ... args )
+    {
+        _parentGrammar.addWarning( ann, errorKey, args );
+    }
+    
+    protected void addWarning( Declaration decl, String errorKey, Object ... args )
+    {
+        _parentGrammar.addWarning( decl, errorKey, args );
+    }
+    
+    protected AnnotationGrammar getParentGrammar()
+    {
+        return _parentGrammar;
+    }
+    
+    protected AnnotationProcessorEnvironment getEnv()
+    {
+        return _parentGrammar.getEnv();
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/BaseChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/BaseChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.TypeDeclaration;
+
+import java.util.Collection;
+import java.io.File;
+
+import org.apache.beehive.netui.compiler.model.StrutsApp;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+
+abstract class BaseChecker
+{
+    private AnnotationProcessorEnvironment _env;
+    private Diagnostics _diagnostics;
+    private RuntimeVersionChecker _runtimeVersionChecker;
+    private File _webappRoot = null;
+
+    protected BaseChecker( AnnotationProcessorEnvironment env, Diagnostics diagnostics )
+    {
+        _env = env;
+        _diagnostics = diagnostics;
+        
+        //
+        // Get a RuntimeVersionChecker (which looks at the manifest of beehive-netui-pageflow.jar).
+        //
+        try
+        {
+            Collection< TypeDeclaration > typeDeclarations = env.getTypeDeclarations();
+            
+            if ( typeDeclarations.size() > 0 )  // there will be other errors if not
+            {
+                File sourceFile = CompilerUtils.getOriginalFile( typeDeclarations.iterator().next() );
+                _webappRoot = StrutsApp.getWebappRootFromJpf( sourceFile );
+                setRuntimeVersionChecker( new RuntimeVersionChecker( _webappRoot ) );
+            }
+        }
+        catch ( NoWebInfDirectoryException e )
+        {
+            // Silently fail here.  The no-webinf error will be caught elsewhere.
+            setRuntimeVersionChecker( new RuntimeVersionChecker() );
+        }
+    }
+
+    protected AnnotationProcessorEnvironment getEnv()
+    {
+        return _env;
+    }
+
+    protected Diagnostics getDiagnostics()
+    {
+        return _diagnostics;
+    }
+
+    protected RuntimeVersionChecker getRuntimeVersionChecker()
+    {
+        return _runtimeVersionChecker;
+    }
+
+    protected void setRuntimeVersionChecker( RuntimeVersionChecker runtimeVersionChecker )
+    {
+        _runtimeVersionChecker = runtimeVersionChecker;
+    }
+
+    protected File getWebappRoot()
+    {
+        return _webappRoot;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/CompilerUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/CompilerUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,822 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.declaration.*;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.type.ClassType;
+import com.sun.mirror.type.ReferenceType;
+import com.sun.mirror.type.TypeMirror;
+import com.sun.mirror.type.DeclaredType;
+import com.sun.mirror.type.InterfaceType;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import java.util.List;
+import java.util.Iterator;
+import java.io.File;
+
+
+public class CompilerUtils
+        implements JpfLanguageConstants
+{
+    public static boolean isJpfAnnotation( AnnotationMirror annotation, String unqualifiedName )
+    {
+        String annotationName = annotation.getAnnotationType().getDeclaration().getQualifiedName();
+        return annotationName.equals( ANNOTATION_QUALIFIER + unqualifiedName );
+    }
+    
+    public static AnnotationMirror getAnnotation( Declaration element, String unqualifiedName )
+    {
+        Collection< AnnotationMirror > annotations = element.getAnnotationMirrors();
+        unqualifiedName = ANNOTATION_QUALIFIER + unqualifiedName;
+        
+        for ( AnnotationMirror i : annotations )
+        {
+            String iName = i.getAnnotationType().getDeclaration().getQualifiedName();
+            if ( unqualifiedName.equals( iName ) ) return i;
+        }
+        
+        return null;
+    }
+    
+    public static AnnotationValue getAnnotationValue( Declaration element, String annotationName, String valueName )
+    {
+        AnnotationMirror ann = getAnnotation( element, annotationName );
+        return ann != null ? getAnnotationValue( ann, valueName, true ) : null;
+    }
+    
+    /**
+     * If the given annotation exists, assert that the given member is not <code>null</code>, and return it; otherwise,
+     * if the given annotation does not exist, return <code>null</code>.
+     */ 
+    private static AnnotationValue assertAnnotationValue( Declaration element, String annotationName, String valueName,
+                                                          boolean defaultIsNull )
+    {
+        AnnotationMirror ann = getAnnotation( element, annotationName );
+        
+        if ( ann == null )
+        {
+            return null;
+        }
+        else
+        {
+            return getAnnotationValue( ann, valueName, defaultIsNull );
+        }
+    }
+    
+    public static String getStringValue( Declaration element, String annotationName, String memberName,
+                                         boolean defaultIsNull )
+    {
+        return ( String ) getValue( element, annotationName, memberName, defaultIsNull );
+    }
+    
+    public static AnnotationValue getAnnotationValue( AnnotationMirror annotation, String memberName,
+                                                      boolean defaultIsNull )
+    {
+        Map< AnnotationTypeElementDeclaration, AnnotationValue > valuesPresent = annotation.getElementValues();
+        
+        for ( Map.Entry< AnnotationTypeElementDeclaration, AnnotationValue > i : valuesPresent.entrySet() )
+        {
+            if ( memberName.equals( i.getKey().getSimpleName() ) ) return i.getValue();
+        }
+        
+        //
+        // We didn't find it.  If necessary, look for the default value.
+        //
+        if ( defaultIsNull ) return null;
+        
+        for ( AnnotationTypeElementDeclaration j : annotation.getAnnotationType().getDeclaration().getMethods() )
+        {
+            if ( memberName.equals( j.getSimpleName() ) ) return j.getDefaultValue();
+        }
+        
+        assert false : "Member " + memberName + " not found on annotation type " + getQualifiedName( annotation );
+        return null;
+    }
+    
+    public static List< String > getStringArrayValue( Declaration element, String annotationName, String memberName,
+                                                      boolean defaultIsNull )
+    {
+        AnnotationValue value = assertAnnotationValue( element, annotationName, memberName, defaultIsNull );
+        if ( value == null ) return null;
+        ArrayList< String > ret = new ArrayList< String >();
+        getValues( value, ret, false );
+        return ret;
+    }
+    
+    public static Boolean getBooleanValue( Declaration element, String annotationName, String memberName,
+                                           boolean defaultIsNull )
+    {
+        AnnotationValue value = assertAnnotationValue( element, annotationName, memberName, defaultIsNull );
+        return value != null ? ( Boolean ) value.getValue() : null;
+    }
+    
+    public static String getString( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return value != null ? ( String ) value.getValue() : null;
+    }
+    
+    public static String getEnumFieldName( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return value != null ? getEnumFieldName( value ) : null;
+    }
+    
+    public static List< String > getStringArray( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        if ( value == null ) return null;
+        ArrayList< String > ret = new ArrayList< String >();
+        getValues( value, ret, false );
+        return ret;
+    }
+    
+    public static ClassType getClassType( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return value != null ? ( ClassType ) value.getValue() : null;
+    }
+    
+    public static ReferenceType getReferenceType( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return value != null ? ( ReferenceType ) value.getValue() : null;
+    }
+    
+    public static Integer getInteger( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return value != null ? ( Integer ) value.getValue() : null;
+    }
+    
+    public static Float getFloat( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return value != null ? ( Float ) value.getValue() : null;
+    }
+    
+    public static Boolean getBoolean( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return value != null ? ( Boolean ) value.getValue() : null;
+    }
+    
+    public static Object getValue( Declaration element, String annotationName, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = assertAnnotationValue( element, annotationName, memberName, defaultIsNull );
+        return value != null ? value.getValue() : null;
+    }
+    
+    public static List< AnnotationMirror > getAnnotationArrayValue( Declaration element, String annotationName,
+                                                                    String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = assertAnnotationValue( element, annotationName, memberName, defaultIsNull );
+        if ( value == null ) return null;
+        ArrayList< AnnotationMirror > ret = new ArrayList< AnnotationMirror >();
+        getValues( value, ret, true );
+        return ret;
+    }
+    
+    public static List< AnnotationMirror > getAnnotationArray( AnnotationMirror annotation, String memberName,
+                                                               boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return getAnnotationArray( value );
+    }
+    
+    public static List< AnnotationMirror > getAnnotationArray( AnnotationValue value )
+    {
+        if ( value == null ) return null;
+        ArrayList< AnnotationMirror > ret = new ArrayList< AnnotationMirror >();
+        getValues( value, ret, true );
+        return ret;
+    }
+    
+    private static void getValues( AnnotationValue arrayValue, List translatedValues, boolean weedOutErrorType )
+    {
+        /* TODO: uncomment the following method implementation after CR188654 is fixed
+        List< AnnotationValue > values = ( List< AnnotationValue > ) arrayValue.getValue();
+        
+        for ( AnnotationValue i : values )
+        {
+            Object value = i.getValue();
+            if ( ! weedOutErrorType || ! ERROR_TYPE_STR.equals( value ) ) translatedValues.add( value );
+        }
+        */
+        
+        List values  = ( List ) arrayValue.getValue();
+        for ( Object i : values )
+        {
+            Object value = i instanceof AnnotationValue ? ( ( AnnotationValue ) i ).getValue() : i;
+            if ( ! weedOutErrorType || ! ERROR_TYPE_STR.equals( value ) ) translatedValues.add( value );
+        }
+    }
+    
+    public static String getQualifiedName( AnnotationMirror annotation )
+    {
+        return annotation.getAnnotationType().getDeclaration().getQualifiedName();
+    }
+    
+    public static String getSimpleName( AnnotationMirror annotation )
+    {
+        return annotation.getAnnotationType().getDeclaration().getSimpleName();
+    }
+    
+    public static AnnotationMirror getAnnotation( AnnotationMirror annotation, String memberName, boolean defaultIsNull )
+    {
+        AnnotationValue value = getAnnotationValue( annotation, memberName, defaultIsNull );
+        return value != null ? ( AnnotationMirror ) value.getValue() : null;
+    }
+    
+    public static boolean hasModifier( Declaration decl, Modifier modifier )
+    {
+        for ( Modifier i : decl.getModifiers() )
+        {
+            if ( i.equals( modifier ) ) return true;
+        }
+        
+        return false;
+    }
+    
+    public static MethodDeclaration getClassMethod( TypeDeclaration jclass, String methodName, String desiredAnnotation )
+    {
+        return getClassMethod( jclass, methodName, desiredAnnotation, false );
+    }
+    
+    private static MethodDeclaration getClassMethod( TypeDeclaration type, String methodName, String desiredAnnotation,
+                                                     boolean onlyPublicOrProtected )
+    {
+        if ( ! ( type instanceof ClassDeclaration ) ) return null;
+        
+        ClassDeclaration jclass = ( ClassDeclaration ) type;
+        Collection< MethodDeclaration > methods = jclass.getMethods();
+        
+        for ( MethodDeclaration method : methods )
+        {
+            if ( ! onlyPublicOrProtected || hasModifier( method, Modifier.PROTECTED )
+                 || hasModifier( method, Modifier.PUBLIC ) )
+            {
+                if ( methodName.equals( method.getSimpleName() )
+                     && ( desiredAnnotation == null || getAnnotation( method, desiredAnnotation ) != null ) )
+                {
+                    return method;
+                }
+            }
+        }
+        
+        ClassType superclass = jclass.getSuperclass();
+        
+        if ( superclass != null )
+        {
+            return getClassMethod( superclass.getDeclaration(), methodName, desiredAnnotation, true );
+        }
+        
+        return null;
+    }
+    
+    public static FieldDeclaration getClassField( TypeDeclaration jclass, String fieldName, String desiredAnnotation )
+    {
+        return getClassField( jclass, fieldName, desiredAnnotation, false );
+    }
+    
+    private static FieldDeclaration getClassField( TypeDeclaration type, String fieldName, String desiredAnnotation,
+                                                   boolean onlyPublicOrProtected )
+    {
+        if ( ! ( type instanceof ClassDeclaration ) ) return null;
+        
+        ClassDeclaration jclass = ( ClassDeclaration ) type;
+        Collection< FieldDeclaration > fields = jclass.getFields();
+        
+        for ( FieldDeclaration field : fields )
+        {
+            if ( ! onlyPublicOrProtected || hasModifier( field, Modifier.PROTECTED )
+                || hasModifier( field, Modifier.PUBLIC ) )
+            {
+                if ( fieldName.equals( field.getSimpleName() )
+                     && ( desiredAnnotation == null || getAnnotation( field, desiredAnnotation ) != null ) )
+                {
+                    return field;
+                }
+            }
+        }
+        
+        ClassType superclass = jclass.getSuperclass();
+        
+        if ( superclass != null )
+        {
+            return getClassField( superclass.getDeclaration(), fieldName, desiredAnnotation, true );
+        }
+        
+        return null;
+    }
+        
+    public static Collection< MethodDeclaration > getClassMethods( TypeDeclaration jclass, String desiredAnnotation )
+    {
+        Collection< MethodDeclaration > results = new ArrayList< MethodDeclaration >();
+        getClassMethods( jclass, desiredAnnotation, false, results );
+        return results;
+    }
+    
+    private static void getClassMethods( TypeDeclaration type, String desiredAnnotation, boolean onlyPublicOrPrivate,
+                                         Collection< MethodDeclaration > results )
+    {
+        if ( ! ( type instanceof ClassDeclaration ) ) return;
+        
+        ClassDeclaration jclass = ( ClassDeclaration ) type;
+        Collection< MethodDeclaration > methods = jclass.getMethods();
+        
+        for ( MethodDeclaration method : methods )
+        {
+            if ( ! onlyPublicOrPrivate || hasModifier( method, Modifier.PROTECTED )
+                 || hasModifier( method, Modifier.PUBLIC ) )
+            {
+                if ( desiredAnnotation == null || getAnnotation( method, desiredAnnotation ) != null )
+                {
+                    results.add( method );
+                }
+            }
+        }
+        
+        ClassType superclass = jclass.getSuperclass();
+        
+        if ( superclass != null )
+        {
+            getClassMethods( superclass.getDeclaration(), desiredAnnotation, true, results );
+        }
+    }
+    
+    public static Collection< FieldDeclaration > getClassFields( TypeDeclaration jclass )
+    {
+        Collection< FieldDeclaration > results = new ArrayList< FieldDeclaration >();
+        getClassFields( jclass, false, results );
+        return results;
+    }
+    
+    private static void getClassFields( TypeDeclaration type, boolean onlyPublicOrPrivate,
+                                        Collection< FieldDeclaration > results )
+    {
+        if ( ! ( type instanceof ClassDeclaration ) ) return;
+        
+        ClassDeclaration jclass = ( ClassDeclaration ) type;
+        Collection< FieldDeclaration > fields = jclass.getFields();
+        
+        for ( FieldDeclaration field : fields )
+        {
+            if ( ! onlyPublicOrPrivate || hasModifier( field, Modifier.PROTECTED )
+                 || hasModifier( field, Modifier.PUBLIC ) )
+            {
+                results.add( field );
+            }
+        }
+        
+        ClassType superclass = jclass.getSuperclass();
+        
+        if ( superclass != null )
+        {
+            getClassFields( superclass.getDeclaration(), true, results );
+        }
+    }
+    
+    public static Collection< TypeDeclaration > getClassNestedTypes( TypeDeclaration jclass )
+    {
+        Collection< TypeDeclaration > results = new ArrayList< TypeDeclaration >();
+        getClassNestedTypes( jclass, false, results );
+        return results;
+    }
+    
+    private static void getClassNestedTypes( TypeDeclaration type, boolean onlyPublicOrPrivate,
+                                             Collection< TypeDeclaration > results )
+    {
+        if ( ! ( type instanceof ClassDeclaration ) ) return;
+        
+        ClassDeclaration jclass = ( ClassDeclaration ) type;
+        Collection< TypeDeclaration > nestedTypes = jclass.getNestedTypes();
+        
+        for ( TypeDeclaration nestedType : nestedTypes )
+        {
+            if ( ! onlyPublicOrPrivate || hasModifier( nestedType, Modifier.PROTECTED )
+                 || hasModifier( nestedType, Modifier.PUBLIC ) )
+            {
+                results.add( nestedType );
+            }
+        }
+        
+        ClassType superclass = jclass.getSuperclass();
+        
+        if ( superclass != null )
+        {
+            getClassNestedTypes( superclass.getDeclaration(), true, results );
+        }
+    }
+        
+    /**
+     * Get a Class.forName-able string for the given type signature.  
+     */
+    public static String getFormClassName( ClassDeclaration jclass, AnnotationProcessorEnvironment env )
+    {
+        if ( isAssignableFrom( FORM_CLASS_NAME, jclass, env ) )
+        {
+            return getLoadableName( jclass );
+        }
+        else if ( isAssignableFrom( BEA_XMLOBJECT_CLASS_NAME, jclass, env ) )
+        {
+            return XML_FORM_CLASS_NAME;
+        }
+        else if ( isAssignableFrom( APACHE_XMLOBJECT_CLASS_NAME, jclass, env ) )
+        {
+            return XML_FORM_CLASS_NAME;
+        }
+        else
+        {
+            return ANY_FORM_CLASS_NAME;
+        }
+    }
+    
+    public static String getFormClassName( ClassType jclass, AnnotationProcessorEnvironment env )
+    {
+        return getFormClassName( jclass.getDeclaration(), env );
+    }
+    
+    public static boolean isAbsoluteURL( String path )
+    {
+        try
+        {
+            return new URI( path ).getScheme() != null;
+        }
+        catch ( URISyntaxException e )
+        {
+            return false;
+        }
+    }  
+    
+    public static boolean isAssignableFrom( String className, TypeMirror type, AnnotationProcessorEnvironment env )
+    {
+        if ( ! ( type instanceof DeclaredType ) ) return false;
+        return isAssignableFrom( className, ( ( DeclaredType ) type ).getDeclaration(), env );
+    }
+    
+    public static boolean isAssignableFrom( TypeDeclaration base, TypeDeclaration typeDecl )
+    {
+        if ( base != null && typeDecl != null )
+        {
+            if ( typesAreEqual( typeDecl, base ) ) return true;
+            
+            if ( typeDecl instanceof ClassDeclaration )
+            {
+                ClassType superclass = ( ( ClassDeclaration ) typeDecl ).getSuperclass();
+                if ( superclass != null && isAssignableFrom( base, superclass.getDeclaration() ) ) return true;
+            }
+            
+            Collection< InterfaceType > superInterfaces = typeDecl.getSuperinterfaces();
+            for ( InterfaceType superInterface : superInterfaces )
+            {
+                if ( isAssignableFrom( base, superInterface.getDeclaration() ) ) return true;
+            }
+        }
+        
+        return false;
+    }
+    
+    public static boolean isAssignableFrom( TypeMirror base, TypeDeclaration cl )
+    {
+        if ( ! ( base instanceof DeclaredType ) ) return false;
+        return isAssignableFrom( ( ( DeclaredType ) base ).getDeclaration(), cl );
+    }
+    
+    public static boolean isAssignableFrom( TypeDeclaration base, TypeMirror cl )
+    {
+        if ( ! ( cl instanceof DeclaredType ) ) return false;
+        return isAssignableFrom( base, ( ( DeclaredType ) cl ).getDeclaration() );
+    }
+    
+    public static boolean isAssignableFrom( String className, TypeDeclaration cl, AnnotationProcessorEnvironment env )
+    {
+        TypeDeclaration base = env.getTypeDeclaration( className );
+        return isAssignableFrom( base, cl );
+    }
+    
+    public static boolean isOfClass( TypeMirror type, String className, AnnotationProcessorEnvironment env )
+    {
+        if ( ! ( type instanceof DeclaredType ) ) return false;
+        return typesAreEqual( ( ( DeclaredType ) type ).getDeclaration(), env.getTypeDeclaration( className ) );
+    }
+    
+    // TODO: this method will be unnecessary when CRXXXX is fixed.
+    public static boolean typesAreEqual( TypeDeclaration t1, TypeDeclaration t2 )
+    {
+        assert t1 != null;
+        if ( t2 == null ) return false;
+        return t1.getQualifiedName().equals( t2.getQualifiedName() );
+    }
+    
+    public static TypeDeclaration getOuterClass( MemberDeclaration classMember )
+    {
+        return classMember instanceof ClassDeclaration
+                   ? ( ClassDeclaration ) classMember
+                   : classMember.getDeclaringType();
+    }
+    
+    public static TypeDeclaration getOutermostClass( MemberDeclaration classMember )
+    {
+        TypeDeclaration containingClass;
+        while ( ( containingClass = classMember.getDeclaringType() ) != null )
+        {
+            classMember = containingClass;
+        }
+        
+        assert classMember instanceof ClassDeclaration : classMember.getClass().getName();
+        return ( ClassDeclaration ) classMember;
+    } 
+    
+    public static boolean isInNestedPageFlow( MemberDeclaration classMember )
+    {
+        AnnotationValue val = getAnnotationValue( getOuterClass( classMember ), CONTROLLER_TAG_NAME, NESTED_ATTR );
+        return val != null && ( ( Boolean ) val.getValue() ).booleanValue();
+    }
+    
+    public static boolean hasDefaultConstructor( TypeDeclaration jclass )
+    {
+        if ( ! ( jclass instanceof ClassDeclaration ) ) return false;
+        
+        Collection< ConstructorDeclaration > constructors = ( ( ClassDeclaration ) jclass ).getConstructors();
+        
+        for ( ConstructorDeclaration ctor : constructors )
+        {
+            if ( ctor.getParameters().size() == 0 ) return true;
+        }
+        
+        return false;
+    }
+    
+    private static Declaration findElement( Collection elements, String elementName )
+    {
+        for ( Object element : elements )
+        {
+            Declaration decl = ( Declaration ) element;
+            if (  decl.getSimpleName().equals( elementName ) ) return decl;
+        }
+        
+        return null;
+    }
+    
+    public static FieldDeclaration findField( TypeDeclaration jclass, String fieldName )
+    {
+        return ( FieldDeclaration ) findElement( getClassFields( jclass ), fieldName );
+    }
+    
+    public static ClassDeclaration findInnerClass( TypeDeclaration jclass, String innerClassName )
+    {
+        return ( ClassDeclaration ) findElement( getClassNestedTypes( jclass ), innerClassName );
+    }
+    
+    public static String getEnumFieldName( AnnotationValue enumMember )
+    {
+        if ( enumMember == null || enumMember.getValue() == null )
+            return "";
+        else
+            return enumMember.getValue().toString();
+    }
+    
+    /**
+     * Get the qualified name of the given class, with '$' used to separate inner classes; the returned string can be
+     * used with Class.forName().
+     */ 
+    public static String getLoadableName( TypeDeclaration jclass )
+    {
+        TypeDeclaration containingClass = jclass.getDeclaringType();
+        
+        if ( containingClass == null )
+        {
+            return jclass.getQualifiedName();
+        }
+        else
+        {
+            return getLoadableName( containingClass ) + '$' + jclass.getSimpleName();
+        }
+    }
+    
+    public static String getLoadableName( ClassType jclass )
+    {
+        return getLoadableName( jclass.getDeclaration() );
+    }
+    
+    public static boolean getMethodOrClassFlag( AnnotationMirror methodAnnotation, ClassDeclaration jclass,
+                                                String attrName )
+    {
+        Boolean flag = CompilerUtils.getBoolean( methodAnnotation, attrName, true );
+        if ( flag == null ) flag = CompilerUtils.getBooleanValue( jclass, CONTROLLER_TAG_NAME, attrName, true );
+        return flag != null && flag.booleanValue();
+    }
+    
+    /**
+     * Get the original filename, inferred from the current temporary file being compiled.
+     */ 
+    public static File getOriginalFile( Declaration decl )
+    {
+        String path = decl.getPosition().file().getPath();
+        int pos = path.indexOf( TMP_SRC_DIR );
+        File retVal = null;
+        
+        if ( pos != -1 )
+        {
+            String prefix = path.substring( 0, pos );
+            String suffix = path.substring( pos + TMP_SRC_DIR.length() );
+            int extensionPos = suffix.lastIndexOf( JAVA_FILE_EXTENSION_DOT );
+            assert extensionPos != -1 : "expected a .java file: " + path;
+            
+            // See if we can find the file by chopping out the temp-dir.
+            retVal = new File( prefix + suffix );
+            
+            if ( ! retVal.exists() )
+            {
+                // See if we need to replace ".java" with ".jpf" or ".jpfs".
+                suffix = suffix.substring( 0, extensionPos );
+                retVal = new File( prefix + suffix + JPF_FILE_EXTENSION_DOT );
+                if ( ! retVal.exists() ) retVal = new File( prefix + suffix + SHARED_FLOW_FILE_EXTENSION_DOT );
+                
+                // See if the .java file lives in WEB-INF/src.
+                if ( ! retVal.exists() )
+                {
+                    StringBuilder retValPath = new StringBuilder( prefix );
+                    retValPath.append( WEBINF_DIR_NAME ).append( File.separatorChar );
+                    retValPath.append( "src" ).append( File.separatorChar );
+                    retValPath.append( suffix ).append( JAVA_FILE_EXTENSION_DOT );
+                    retVal = new File( retValPath.toString() );
+                }
+            }
+        }
+        else
+        {
+            retVal = new File( path );
+        }
+        
+        return retVal;
+    }
+    
+    
+    public static boolean annotationsAreEqual( AnnotationMirror a1, AnnotationMirror a2 ) 
+    {
+        assert a1 != null;
+        if ( a2 == null ) return false;
+        
+        Map< AnnotationTypeElementDeclaration, AnnotationValue > vals1 = a1.getElementValues();
+        Map< AnnotationTypeElementDeclaration, AnnotationValue > vals2 = a2.getElementValues();
+        
+        if ( vals1.size() != vals2.size() ) return false;
+        
+        
+        Iterator< Map.Entry< AnnotationTypeElementDeclaration, AnnotationValue > > ents1 = vals1.entrySet().iterator();
+        Iterator< Map.Entry< AnnotationTypeElementDeclaration, AnnotationValue > > ents2 = vals2.entrySet().iterator();
+        while ( ents1.hasNext() )
+        {
+            Map.Entry< AnnotationTypeElementDeclaration, AnnotationValue > entry1 = ents1.next();
+            Map.Entry< AnnotationTypeElementDeclaration, AnnotationValue > entry2 = ents2.next();
+            
+            if ( ! entry1.getKey().getSimpleName().equals( entry2.getKey().getSimpleName() ) ) return false;
+            Object val1 = entry1.getValue().getValue();
+            Object val2 = entry2.getValue().getValue();
+            
+            if ( val1 instanceof Collection )
+            {
+                if ( ! ( val2 instanceof Collection ) ) return false;
+                Collection< AnnotationValue > list1 = ( Collection< AnnotationValue > ) val1;
+                Collection< AnnotationValue > list2 = ( Collection< AnnotationValue > ) val2;
+                if ( list1.size() != list2.size() ) return false;
+                Iterator< AnnotationValue > j1 = list1.iterator();
+                Iterator< AnnotationValue > j2 = list2.iterator();
+                
+                while ( j1.hasNext() )
+                {
+                    Object o1 = j1.next().getValue();
+                    Object o2 = j2.next().getValue();
+                    
+                    if ( o1 instanceof AnnotationMirror )
+                    {
+                        if ( ! ( o2 instanceof AnnotationMirror ) ) return false;
+                        if ( ! annotationsAreEqual( ( AnnotationMirror ) o1, ( AnnotationMirror ) o2 ) ) return false;
+                    }
+                    else
+                    {
+                        if ( ! o1.equals( o2 ) ) return false;
+                    }
+                }
+            }
+            else if ( ! val1.equals( val2 ) )
+            {
+                return false;
+            }
+        }
+        
+        return true;
+    }
+    
+    public static class BeanPropertyDescriptor
+    {
+        private String _propertyName;
+        private String _type;
+        
+        public BeanPropertyDescriptor( String propertyName, String type )
+        {
+            _propertyName = propertyName;
+            _type = type;
+        }
+        
+        public String getPropertyName()
+        {
+            return _propertyName;
+        }
+        
+        public String getType()
+        {
+            return _type;
+        }
+    }
+    
+    public static BeanPropertyDescriptor getBeanProperty( String methodName, String returnType, int argCount )
+    {
+        if ( ! returnType.equals( "void" ) )
+        {
+            // TODO: more naive code that will have to be fixed
+            if ( methodName.startsWith( GETTER_PREFIX ) && methodName.length() > 3 && argCount == 0 )
+            {
+                String propertyName = Character.toLowerCase( methodName.charAt( 3 ) ) + methodName.substring( 4 );
+                return new BeanPropertyDescriptor( propertyName, returnType );
+            }
+        }
+        
+        return null;
+    }
+    
+    public static BeanPropertyDescriptor getBeanProperty( MethodDeclaration method )
+    {
+        if ( CompilerUtils.hasModifier( method, Modifier.PUBLIC )
+             && ! CompilerUtils.hasModifier( method, Modifier.STATIC ) )
+        {
+            return getBeanProperty( method.getSimpleName(), method.getReturnType().toString(),
+                                    method.getParameters().size() );
+        }
+        
+        return null;
+    }
+    
+    public static Collection< BeanPropertyDeclaration > getBeanProperties( ClassDeclaration type,
+                                                                           boolean getInheritedProperties )
+    {
+        Collection< MethodDeclaration > methods = 
+                getInheritedProperties ? CompilerUtils.getClassMethods( type, null ) : type.getMethods();
+        ArrayList< BeanPropertyDeclaration > ret = new ArrayList< BeanPropertyDeclaration >();
+        
+        for ( MethodDeclaration method : methods )
+        {
+            if ( hasModifier( method, Modifier.PUBLIC ) )
+            {
+                CompilerUtils.BeanPropertyDescriptor bpd =
+                        getBeanProperty( method.getSimpleName(), method.getReturnType().toString(),
+                                         method.getParameters().size() );
+                
+                if ( bpd != null ) ret.add( new BeanPropertyDeclaration( bpd, method ) );
+            }
+        }
+        
+        return ret;
+    }
+    
+    public static class BeanPropertyDeclaration
+            extends BeanPropertyDescriptor
+    {
+        private MethodDeclaration _getter;
+        
+        
+        public BeanPropertyDeclaration( BeanPropertyDescriptor bpd, MethodDeclaration getter )
+        {
+            super( bpd.getPropertyName(), bpd.getType() );
+            _getter = getter;
+        }
+        
+        public MethodDeclaration getGetter()
+        {
+            return _getter;
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/Diagnostics.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/Diagnostics.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+
+import java.util.ResourceBundle;
+import java.text.MessageFormat;
+
+public class Diagnostics
+{
+    private AnnotationProcessorEnvironment _env;
+    private ResourceBundle _messages;
+    private boolean _hadErrors = false;
+    
+    public Diagnostics( AnnotationProcessorEnvironment env )
+    {
+        _env = env;
+        _messages = ResourceBundle.getBundle( "org.apache.beehive.netui.compiler.diagnostics" );
+    }
+    
+    public void addError( Declaration decl, String messageKey, Object ... args )
+    {
+        _env.getMessager().printError( decl.getPosition(), getMessage( messageKey, args ) );
+        _hadErrors = true;
+    }
+    
+    public void addError( AnnotationMirror ann, String messageKey, Object ... args )
+    {
+        // @TODO need something from mirror here -- need to get the SourcePosition of an annotation
+        System.err.println( "error on annotation " + ann + ": " + getMessage( messageKey, args ) );
+        _hadErrors = true;
+    }
+    
+    public void addErrorArrayArgs( AnnotationMirror ann, String messageKey, Object [] args )
+    {
+        // @TODO need something from mirror here -- need to get the SourcePosition of an annotation
+        System.err.println( "error on annotation " + ann + ": " + getMessage( messageKey, args ) );
+        _hadErrors = true;
+    }
+    
+    public void addError( AnnotationValue annVal, String messageKey, Object ... args )
+    {
+        // @TODO need something from mirror here -- need to get the SourcePosition of an annotation
+        System.err.println( "error on annotation value " + annVal + ": " + getMessage( messageKey, args ) );
+        _hadErrors = true;
+    }
+    
+    public void addWarning( Declaration decl, String messageKey, Object ... args )
+    {
+        _env.getMessager().printWarning( decl.getPosition(), getMessage( messageKey, args ) );
+    }
+    
+    public void addWarning( AnnotationMirror ann, String messageKey, Object ... args )
+    {
+        // @TODO need something from mirror here -- need to get the SourcePosition of an annotation
+        System.err.println( "warning on annotation " + ann + ": " + getMessage( messageKey, args ) );
+    }
+    
+    public void addWarning( AnnotationValue annVal, String messageKey, Object ... args )
+    {
+        // @TODO need something from mirror here -- need to get the SourcePosition of an annotation
+        System.err.println( "warning on annotation value " + annVal + ": " + getMessage( messageKey, args ) );
+    }
+    
+    private String getMessage( String key, Object ... args )
+    {
+        String message = _messages.getString( key );
+        return MessageFormat.format( message, args );
+    }
+
+    public boolean hadErrors()
+    {
+        return _hadErrors;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,443 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import org.apache.beehive.netui.compiler.grammar.ActionGrammar;
+import org.apache.beehive.netui.compiler.grammar.ExceptionHandlerGrammar;
+import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
+import org.apache.beehive.netui.compiler.model.StrutsApp;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.xmlbeans.XmlException;
+import com.sun.mirror.declaration.*;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.type.TypeMirror;
+import com.sun.mirror.type.DeclaredType;
+import com.sun.mirror.type.ClassType;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.ArrayList;
+
+
+public abstract class FlowControllerChecker
+        extends BaseChecker
+        implements JpfLanguageConstants
+{
+    private FlowControllerInfo _fcInfo;
+    private AnnotationGrammar _controllerGrammar;
+    private AnnotationGrammar _actionGrammar;
+    private AnnotationGrammar _exceptionHandlerGrammar;
+    private FormBeanChecker _formBeanChecker;
+    
+    public FlowControllerChecker( AnnotationProcessorEnvironment env, Diagnostics diags, FlowControllerInfo fcInfo )    
+    {
+        super( env, diags );
+        _fcInfo = fcInfo;
+
+      
+        _controllerGrammar = getControllerGrammar();
+        _actionGrammar = new ActionGrammar( getEnv(), getDiagnostics(), getRuntimeVersionChecker(), _fcInfo );
+        _exceptionHandlerGrammar =
+                new ExceptionHandlerGrammar( getEnv(), getDiagnostics(), getRuntimeVersionChecker(), _fcInfo );
+        _formBeanChecker = new FormBeanChecker( env, diags );
+        fcInfo.setWebappRoot( getWebappRoot() );
+    }
+    
+    protected void doAdditionalClassChecks( ClassDeclaration jpfClass, File webappRoot )
+    {
+    }
+    
+    protected abstract String getDesiredBaseClass();
+    
+    protected abstract AnnotationGrammar getControllerGrammar();
+    
+    public void check( ClassDeclaration jclass )
+    {
+        //
+        // Check the base class.
+        //
+        String desiredBaseClass = getDesiredBaseClass();
+        if ( desiredBaseClass != null && ! CompilerUtils.isAssignableFrom( desiredBaseClass, jclass, getEnv() ) )
+        {
+            getDiagnostics().addError( jclass, "error.does-not-extend-base", getDesiredBaseClass() );
+        }
+        
+        //
+        // Check the annotations on the class.
+        //
+        startCheckClass( jclass );
+        
+        //
+        // Check the fields.  Note that we're checking public and protected inherited fields, too.
+        //
+        Collection< FieldDeclaration > fields = CompilerUtils.getClassFields( jclass );
+        
+        for ( FieldDeclaration field : fields )
+        {
+            checkField( field, jclass );
+        }
+
+        //
+        // Check the methods.  Note that we're checking public and protected inherited methods, too.
+        //
+        Collection< MethodDeclaration > methods = CompilerUtils.getClassMethods( jclass, null );
+        
+        for ( MethodDeclaration method : methods )
+        {
+            checkMethod( method, jclass );
+        }
+
+        //
+        // Check the inner classes.
+        //
+        Collection< TypeDeclaration > innerTypes = CompilerUtils.getClassNestedTypes( jclass );
+        
+        for ( TypeDeclaration innerType : innerTypes )
+        {
+            if ( innerType instanceof ClassDeclaration ) checkInnerClass( ( ClassDeclaration ) innerType );
+        }
+        
+        //
+        // Run additional .jpf- or .app-specific checks.
+        //
+        File sourceFile = CompilerUtils.getOriginalFile( jclass );
+        try
+        {
+            doAdditionalClassChecks( jclass, StrutsApp.getWebappRootFromJpf( sourceFile ) );
+        }
+        catch ( NoWebInfDirectoryException e )
+        {
+            getDiagnostics().addError( jclass, "error.web-inf-not-found", sourceFile.getPath() );
+        }
+        
+        endCheckClass( jclass );
+    }
+    
+    protected void endCheckClass( ClassDeclaration jclass )
+    {
+    
+        //
+        // Now do some rudimentary code analysis to catch unresolvable forwards.
+        //
+        // @TODO enable when it's supported
+        // checkActionMethodForwards( ( ILangNode ) first.getNode() );        
+    }
+    
+    protected abstract GenStrutsApp createStrutsApp( File sourceFile, String containingPackage )
+        throws XmlException, IOException, NoWebInfDirectoryException;
+    
+    protected void startCheckClass( ClassDeclaration jclass )
+    {
+        File sourceFile = CompilerUtils.getOriginalFile( jclass );
+        
+        //
+        // Check for basic things like writability of the struts-config file.
+        //
+        try
+        {
+            GenStrutsApp strutsApp = null;
+            File strutsConfigFile = null;
+            
+            //
+            // Make sure we can write to the struts-config XML file.
+            //
+            try
+            {
+                strutsApp = createStrutsApp( sourceFile, jclass.getPackage().getQualifiedName() );
+                strutsConfigFile = strutsApp.getStrutsConfigFile();
+            }
+            catch ( XmlException e )
+            {
+                // will be reported at generate time
+            }
+            catch ( IOException e )
+            {
+                // will be reported at generate time
+            }
+            
+            if ( strutsConfigFile != null )
+            {
+                File parentDir = strutsConfigFile.getParentFile();
+        
+                if ( ! parentDir.isDirectory() )
+                {
+                    //
+                    // The second call to isDirectory below accounts for the possibility that another thread has created
+                    // the directory.  Filesystem-based double-checked-locking... works.  We don't need to have
+                    // compiler-wide contention around this check.
+                    //
+                    if ( ! parentDir.mkdirs() && ! parentDir.isDirectory() )
+                    {
+                        getDiagnostics().addError( jclass, "error.invalid-parent-directory", parentDir );
+                    }
+                }
+        
+                if ( strutsConfigFile.exists() && strutsApp != null && ! strutsApp.canWrite() )
+                {
+                    getDiagnostics().addError( jclass, "error.struts-config-not-writable", strutsConfigFile );
+                }
+            }
+            
+            getRuntimeVersionChecker().checkRuntimeVersion( VERSION_8_SP2_STRING, jclass, getDiagnostics(),
+                                                            "warning.runtime-version", PAGEFLOW_RUNTIME_JAR );
+        }
+        catch ( NoWebInfDirectoryException e )
+        {
+            getDiagnostics().addError( jclass, "error.web-inf-not-found", sourceFile );
+        }
+
+
+        //
+        // Check the Jpf.Controller annotation.
+        //
+        Collection< AnnotationMirror > annotations = jclass.getAnnotationMirrors();
+
+        for ( AnnotationMirror annotation : annotations )
+        {
+            if ( annotation.getAnnotationType().getDeclaration().getSimpleName().equals( CONTROLLER_TAG_NAME ) )
+            {
+                _controllerGrammar.check( annotation, jclass );
+            }
+        }
+    }
+
+    protected void checkField( FieldDeclaration field, TypeDeclaration jclass )
+    {
+        //
+        // Only warn about nonserializable member data that's defined in this particular class.
+        //
+        if ( CompilerUtils.typesAreEqual( field.getDeclaringType(), jclass ) )
+        {
+            TypeMirror type = field.getType();
+            
+            if ( ! CompilerUtils.hasModifier( field, Modifier.TRANSIENT )
+                 && ! CompilerUtils.hasModifier( field, Modifier.STATIC )
+                 && type instanceof ClassType
+                 && ! CompilerUtils.isAssignableFrom( SERIALIZABLE_CLASS_NAME, type, getEnv() ) )
+            {
+                getDiagnostics().addWarning( field, "warning.nonserializable-member-data" );
+            }
+        }
+    }
+    
+    protected void checkMethod( MethodDeclaration method, ClassDeclaration jclass )
+    {
+        Collection< AnnotationMirror > annotations = method.getAnnotationMirrors();
+        
+        for ( AnnotationMirror annotation : annotations )
+        {
+            String annotationName = annotation.getAnnotationType().getDeclaration().getSimpleName();
+            
+            if ( annotationName.equals( ACTION_TAG_NAME ) )
+            {
+                _actionGrammar.check( annotation, method );
+                checkActionMethod( method, jclass, annotation );
+            }
+            else if ( annotationName.equals( EXCEPTION_HANDLER_TAG_NAME ) )
+            {
+                _exceptionHandlerGrammar.check( annotation, method );
+                checkExceptionHandlerMethod( method );
+            }
+        }
+    }
+    
+    protected void checkInnerClass( ClassDeclaration innerClass )
+    {
+        _formBeanChecker.check( innerClass );
+    }
+    
+    private void checkActionMethod( MethodDeclaration method, ClassDeclaration jclass, AnnotationMirror annotation )
+    {
+        if ( ! CompilerUtils.isAssignableFrom( FORWARD_CLASS_NAME, method.getReturnType(), getEnv() ) )
+        {
+            getDiagnostics().addError( method, "error.method-wrong-return-type", FORWARD_CLASS_NAME );
+        }
+
+        Collection< ParameterDeclaration > parameters = method.getParameters();
+        int nParameters = parameters.size();
+        TypeDeclaration argTypeDecl = null;
+        
+        if ( nParameters > 0 )
+        {
+            TypeMirror argType = parameters.iterator().next().getType();
+
+            if ( ! ( argType instanceof DeclaredType ) )
+            {
+                getDiagnostics().addError( method, "error.action-method-invalid-argument-type" );
+                argType = null;
+            }
+            else
+            {
+                argTypeDecl = ( ( DeclaredType ) argType ).getDeclaration();
+                
+                if ( ! CompilerUtils.hasDefaultConstructor( argTypeDecl )
+                        && ! CompilerUtils.isAssignableFrom( BEA_XMLOBJECT_CLASS_NAME, argType, getEnv() )
+                        && ! CompilerUtils.isAssignableFrom( APACHE_XMLOBJECT_CLASS_NAME, argType, getEnv() ) )
+                {
+                    getDiagnostics().addError( method, "error.action-method-arg-no-default-constructor",
+                                           argTypeDecl.getQualifiedName() );
+                }
+                
+                if ( ! CompilerUtils.hasModifier( argTypeDecl, Modifier.PUBLIC ) )
+                {
+                    getDiagnostics().addError( method, "error.action-method-arg-not-public",
+                                           argTypeDecl.getQualifiedName() );
+                }
+                
+                if ( argTypeDecl.getDeclaringType() != null
+                     && ! CompilerUtils.hasModifier( argTypeDecl, Modifier.STATIC ) )
+                {
+                    getDiagnostics().addError( method, "error.action-method-arg-not-static",
+                                           argTypeDecl.getQualifiedName() );
+                }
+                
+                if ( CompilerUtils.getAnnotationValue( annotation, VALIDATION_ERROR_FORWARD_ATTR, true ) == null
+                     && hasValidationAnnotations( argTypeDecl ) )
+                {
+                    getDiagnostics().addWarning( method, "warning.validatable-formbean-no-forward",
+                                                 ANNOTATION_INTERFACE_PREFIX + ACTION_TAG_NAME, VALIDATION_ERROR_FORWARD_ATTR,
+                                                 VALIDATION_ERROR_FORWARD_ATTR, argTypeDecl.getQualifiedName() );
+                }
+            }
+        }
+        
+        _fcInfo.addAction( method.getSimpleName(), argTypeDecl != null ? argTypeDecl.getQualifiedName() : null );
+
+        if ( nParameters > 1 )
+        {
+            getDiagnostics().addError( method, "error.action-method-wrong-arg" );
+        }
+
+        //
+        // Check to make sure the "form" attribute (member variable) matches the form declared as an
+        // argument to the action method.
+        //
+        String formMemberName = CompilerUtils.getStringValue( method, ACTION_TAG_NAME, USE_FORM_BEAN_ATTR, true );
+
+        if ( formMemberName != null )
+        {
+            FieldDeclaration memberForm = CompilerUtils.findField( jclass, formMemberName );
+
+            if ( memberForm != null )
+            {
+                TypeMirror memberFormType = memberForm.getType();
+                String memberFormTypeName = ( memberFormType instanceof DeclaredType )
+                                            ? ( ( DeclaredType ) memberFormType ).getDeclaration().getQualifiedName()
+                                            : memberFormType.toString();
+                
+                if ( nParameters == 0 )
+                {
+                    getDiagnostics().addError( method, "error.action-mismatched-form", USE_FORM_BEAN_ATTR,
+                                               formMemberName, memberFormTypeName );
+                }
+                else
+                {
+                    if ( ! CompilerUtils.isAssignableFrom( argTypeDecl, memberForm.getType() ))
+                    {
+                        getDiagnostics().addError( method, "error.action-mismatched-form", USE_FORM_BEAN_ATTR,
+                                                   formMemberName, memberFormTypeName );
+                    }
+                }
+            }
+        }
+    }
+    
+    private boolean hasValidationAnnotations( TypeDeclaration type )
+    {
+        // Could cache this if it's a performance problem.
+        
+        Collection< ? extends MethodDeclaration > methods = type.getMethods();
+        
+        for ( MethodDeclaration method : methods )
+        {
+            Collection< AnnotationMirror > annotations = method.getAnnotationMirrors();
+            
+            for ( AnnotationMirror ann : annotations )
+            {
+                String annotationName = ann.getAnnotationType().getDeclaration().getQualifiedName();
+                int pos = annotationName.indexOf( ANNOTATION_QUALIFIER );
+                
+                if ( pos != -1 )
+                {
+                    if ( annotationName.substring( pos + ANNOTATION_QUALIFIER.length() ).startsWith( "Validat" ) )
+                    {
+                        return true;
+                    }
+                }
+            }
+        }
+        
+        return false;
+    }
+    
+    private void checkExceptionHandlerMethod( MethodDeclaration method )
+    {
+        if ( ! CompilerUtils.isAssignableFrom( FORWARD_CLASS_NAME, method.getReturnType(), getEnv() ) )
+        {
+            getDiagnostics().addError( method, "error.method-wrong-return-type", FORWARD_CLASS_NAME );
+        }
+
+        List< ParameterDeclaration > parameters = new ArrayList< ParameterDeclaration >( method.getParameters() );
+        
+        
+        if ( parameters.size() == 4 )
+        {
+            if ( ! CompilerUtils.isAssignableFrom( THROWABLE_CLASS_NAME, parameters.get( 0 ).getType(), getEnv() ) )
+            {
+                getDiagnostics().addError( method, "error.exception-method-wrong-exception-arg", THROWABLE_CLASS_NAME );
+            }
+
+            checkExceptionHandlerArgType( method, parameters, 1, STRING_CLASS_NAME );
+            checkExceptionHandlerArgType( method, parameters, 2, STRING_CLASS_NAME );
+
+            //
+            // The use of org.apache.struts.action.ActionForm or org.apache.beehive.netui.pageflow.FormData as the
+            // fourth argument is deprecated.  Forms can be any Object type now.
+            //
+            if ( CompilerUtils.isAssignableFrom( FORM_CLASS_NAME, parameters.get( 3 ).getType(), getEnv() ) )
+            {
+                getDiagnostics().addWarning( method, "warning.exception-method-deprecated-form-arg" );
+            }
+            else
+            {
+                checkExceptionHandlerArgType( method, parameters, 3, OBJECT_CLASS_NAME );
+            }
+        }
+        else
+        {
+            getDiagnostics().addError( method, "error.exception-method-wrong-arg-count", 4 );
+        }        
+    }
+    
+    private void checkExceptionHandlerArgType( MethodDeclaration method, List< ParameterDeclaration > parameters,
+                                               int index, String className )
+    {
+        if ( ! CompilerUtils.isOfClass( parameters.get( index ).getType(), className, getEnv() ) )
+        {
+            getDiagnostics().addError( method, "error.exception-method-wrong-arg-type", index + 1, className );
+        }
+    }
+    
+    protected FlowControllerInfo getFlowControllerInfo()
+    {
+        return _fcInfo;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerGenerator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,129 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+
+import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
+import org.apache.beehive.netui.compiler.genmodel.GenValidationModel;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.xmlbeans.XmlException;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.PackageDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+
+
+public abstract class FlowControllerGenerator
+{
+    private static long _compilerJarTimestamp = -1;
+    private static final boolean ALWAYS_GENERATE = 
+            System.getProperty( "pageflow.always-generate-struts-config" ) != null;
+    
+    private AnnotationProcessorEnvironment _env;
+    private Diagnostics _diagnostics;
+    
+    
+    public FlowControllerGenerator( AnnotationProcessorEnvironment env )
+    {
+        _env = env;
+        _diagnostics = new Diagnostics( env );
+    }
+    
+    protected abstract GenStrutsApp createStrutsApp( File sourceFile, String containingPackage, ClassDeclaration cl )
+            throws XmlException, IOException, NoWebInfDirectoryException;
+    
+    public void generate( ClassDeclaration publicClass )
+    {
+        PackageDeclaration pkg = publicClass.getPackage();
+        String pkgName = pkg != null ? pkg.getQualifiedName() : null;
+        GenStrutsApp app = null;
+        
+        try
+        {
+            app = createStrutsApp( CompilerUtils.getOriginalFile( publicClass ), pkgName, publicClass );
+            GenValidationModel validationModel = new GenValidationModel( publicClass, app );
+            
+            if ( ! validationModel.isEmpty() )
+            {
+                app.setValidationModel( validationModel );
+                validationModel.writeToFile();
+            }
+            
+            generateStrutsConfig( app, publicClass );
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace();    // @TODO log
+            assert e instanceof NoWebInfDirectoryException || e instanceof XmlException || e instanceof IOException
+                   || e instanceof FileNotFoundException;
+            _diagnostics.addError( publicClass, "error.could-not-generate-struts-config",
+                                   app != null ? app.getStrutsConfigFile() : null );
+        }
+    }
+
+    protected void generateStrutsConfig( GenStrutsApp app, ClassDeclaration publicClass )
+    {
+        File strutsConfigFile = null;
+        
+        try
+        {
+            strutsConfigFile = app.getStrutsConfigFile();
+
+            if ( ALWAYS_GENERATE || app.isStale() )
+            {
+                // @TODO logger.info( "Writing Struts module: " + _strutsConfig.getStrutsConfigFile() );
+                app.writeToFile();
+            }
+            else if ( _compilerJarTimestamp > strutsConfigFile.lastModified() )
+            {
+                // @TODO logger.info( _compilerJarName + " has been updated; writing Struts module "
+                //          + _strutsConfig.getStrutsConfigFile() );
+                app.writeToFile();
+            }
+            else
+            {
+                // @TODO logger.info( "Struts module " + _strutsConfig.getStrutsConfigFile() + " is up-to-date." );
+            }
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace();    // @TODO get rid of this
+            assert e instanceof NoWebInfDirectoryException
+                   || e instanceof FileNotFoundException
+                   || e instanceof IOException
+                   || e instanceof XmlException;
+            
+            _env.getMessager().printError( publicClass.getPosition(), "" );
+            _diagnostics.addError( publicClass, "error.could-not-generate-struts-config",
+                                   strutsConfigFile != null ? new Object[]{ strutsConfigFile.getPath() } : null,
+                                   null );
+        }
+    }
+
+    protected AnnotationProcessorEnvironment getEnv()
+    {
+        return _env;
+    }
+    
+
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerInfo.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FlowControllerInfo.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,246 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.declaration.TypeDeclaration;
+
+import java.util.Set;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.io.File;
+
+
+public class FlowControllerInfo
+{
+    private Set< ActionInfo > _actions = new HashSet< ActionInfo >();
+    private boolean _nested = false;
+    private Set _returnActions = null;
+    private File _webappRoot = null;
+    private TypeDeclaration _sharedFlowType = null;
+    private File _sharedFlowFile = null;
+    private List< File > _referencedPageFlows = new ArrayList< File >();
+    private File _sourceFile;
+    private boolean _isBuilding = false;
+    private String _controllerClassName = null;
+
+    
+    public static class ActionInfo
+    {
+        private String _name;
+        private String _beanType = null;
+
+        public ActionInfo( String name )
+        {
+            _name = name;
+        }
+        
+        public ActionInfo( String name, String beanType )
+        {
+            _name = name;
+            _beanType = beanType;
+        }
+        
+        public void setBeanType( String beanType )
+        {
+            _beanType = beanType;
+        }
+
+        public String getName()
+        {
+            return _name;
+        }
+
+        public String getBeanType()
+        {
+            return _beanType;
+        }
+        
+        public boolean equals( Object o )
+        {
+            if ( o == null || ! ( o instanceof ActionInfo ) )
+            {
+                return false;
+            }
+            
+            ActionInfo other = ( ActionInfo ) o;
+            if ( ! _name.equals( other.getName() ) ) return false;
+            String otherBeanType = other.getBeanType();
+            return ( ( _beanType == null && otherBeanType == null )
+                     || ( _beanType != null && otherBeanType != null && _beanType.equals( otherBeanType ) ) );
+        }
+        
+        public int hashCode()
+        {
+            if ( _beanType == null ) return _name.hashCode();
+            return _beanType.hashCode() % _name.hashCode();
+        }
+    }
+    
+    
+    public FlowControllerInfo( File sourceFile )
+    {
+        _sourceFile = sourceFile;
+    }
+    
+    void reset()
+    {
+        _actions = new HashSet();
+        _nested = false;
+        _returnActions = null;
+    }
+    
+    void startBuild()
+    {
+        _isBuilding = true;
+    }
+    
+    void endBuild()
+    {
+        _isBuilding = false;
+        _sharedFlowType = null;     // don't hang onto the ClassDeclaration
+    }
+    
+    public ActionInfo[] getActions()
+    {
+        return _actions.toArray( new ActionInfo[ _actions.size() ] );
+    }
+
+    public boolean isNested()
+    {
+        return _nested;
+    }
+
+    public ActionInfo[] getReturnActions()
+    {
+        if ( _returnActions == null )
+        {
+            return new ActionInfo[0];
+        }
+        
+        return ( ActionInfo[] ) _returnActions.toArray( new ActionInfo[ _returnActions.size() ] );
+    }
+    
+    public String getFormBeanType( String actionName )
+    {
+        String bestType = null;
+        
+        for ( ActionInfo actionInfo : _actions )
+        {
+            if ( actionInfo.getName().equals( actionName ) )
+            {
+                String beanType = actionInfo.getBeanType();
+                
+                //
+                // In the case of overloaded actions, the non-form-bean action takes precedence.  Otherwise,
+                // we look at the bean type names in alphabetical order.
+                //
+                if ( beanType == null ) return null;
+                else if ( bestType == null ) bestType = beanType;
+                else if ( beanType.compareTo( bestType ) < 0 ) bestType = beanType;
+            }
+        }
+        
+        return bestType;
+    }
+
+    int countReturnActions()
+    {
+        return _returnActions != null ? _returnActions.size() : 0;
+    }
+
+    public void addAction( String actionName, String formBeanType )
+    {
+        _actions.add( new ActionInfo( actionName, formBeanType ) );
+    }
+    
+    public void setNested( boolean nested )
+    {
+        _nested = nested;
+    }
+    
+    public void addReturnAction( String returnActionName, String formBeanType )
+    {
+        if ( _returnActions == null )
+        {
+            _returnActions = new HashSet();
+        }
+        
+        _returnActions.add( new ActionInfo( returnActionName, formBeanType ) );
+    }
+    
+    /**
+     * Get a list of referenced page flows (page flows that appear in Jpf.Forward paths).
+     */ 
+    public List< File > getReferencedPageFlows()
+    {
+        return _referencedPageFlows;
+    }
+    
+    /**
+     * @param uri the webapp-relative URI (or, if not prefixed by '/', a URI relative to the current source file ) to
+     *     the referenced page flow.
+     */ 
+    public void addReferencedPageFlowURI( String uri )
+    {
+        File parentFile = uri.startsWith( "/" ) ? _webappRoot : _sourceFile.getParentFile();
+        File file = new File( parentFile.getPath() + File.separatorChar + uri );
+        
+        //
+        // The file may not exist.  This is OK -- there will be a compiler warning.  But we don't need to add a
+        // dependency on a nonexistant file.
+        //
+        if ( file.exists() && ! file.equals( _sourceFile ) )
+        {
+            _referencedPageFlows.add( file );
+        }
+    }
+    
+    public File getSharedFlowFile()
+    {
+        return _sharedFlowFile;
+    }
+
+    void setSharedFlowType( TypeDeclaration sharedFlowType )
+    {
+        _sharedFlowType = sharedFlowType;
+        if ( sharedFlowType != null ) _sharedFlowFile = CompilerUtils.getOriginalFile( _sharedFlowType );
+    }
+
+    public TypeDeclaration getSharedFlowType()
+    {
+        assert _isBuilding;
+        return _sharedFlowType;
+    }
+
+    public File getWebappRoot()
+    {
+        return _webappRoot;
+    }
+
+    void setWebappRoot( File webappRoot )
+    {
+        _webappRoot = webappRoot;
+    }
+
+    File getSourceFile()
+    {
+        return _sourceFile;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FormBeanChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/FormBeanChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,145 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.Modifier;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.MemberDeclaration;
+
+import java.util.Collection;
+
+import org.apache.beehive.netui.compiler.grammar.ValidationFieldGrammar;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATABLE_PROPERTY_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.FORM_CLASS_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PROPERTY_NAME_ATTR;
+
+
+public class FormBeanChecker
+        extends BaseChecker
+{
+    private GetterValidatablePropertyGrammar _validatablePropertyGrammar;
+    
+    
+    public FormBeanChecker( AnnotationProcessorEnvironment env, Diagnostics diags )
+    {
+        super( env, diags );
+        _validatablePropertyGrammar = new GetterValidatablePropertyGrammar();
+    }
+    
+    public void check( ClassDeclaration jclass )
+    {
+        boolean hasOne = false;
+        
+        //
+        // Look for ValidationField annotations on the methods.
+        //
+        Collection< MethodDeclaration > methods = CompilerUtils.getClassMethods( jclass, null );
+        
+        for ( MethodDeclaration method : methods )
+        {
+            hasOne |= checkValidationAnnotation( method, VALIDATABLE_PROPERTY_TAG_NAME, _validatablePropertyGrammar );
+            // We don't currently support validation rule annotations directly on getter methods.
+            /*
+            hasOne |= checkValidationAnnotation( method, LOCALE_RULES_ATTR, _validationLocaleRulesGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_REQUIRED_TAG_NAME, _baseValidationRuleGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_RANGE_TAG_NAME, _validateRangeGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_MIN_LENGTH_TAG_NAME, _baseValidationRuleGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_MAX_LENGTH_TAG_NAME, _baseValidationRuleGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_CREDIT_CARD_TAG_NAME, _baseValidationRuleGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_EMAIL_TAG_NAME, _baseValidationRuleGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_MASK_TAG_NAME, _baseValidationRuleGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_DATE_TAG_NAME, _baseValidationRuleGrammar );
+            hasOne |= checkValidationAnnotation( method, VALIDATE_TYPE_TAG_NAME, _validateTypeGrammar );
+            */
+        }
+        
+        //
+        // Make sure ActionForm subclasses are public static, and that they have default
+        // constructors.
+        //
+        if ( hasOne || CompilerUtils.isAssignableFrom( FORM_CLASS_NAME, jclass, getEnv() ) )
+        {
+            if ( jclass.getDeclaringType() != null && ! CompilerUtils.hasModifier( jclass, Modifier.STATIC ) )
+            {
+                getDiagnostics().addError( jclass, "error.form-not-static" );
+            }
+            
+            if ( ! CompilerUtils.hasModifier( jclass, Modifier.PUBLIC ) )
+            {
+                getDiagnostics().addError( jclass, "error.form-not-public" );
+            }
+            
+            if ( ! CompilerUtils.hasDefaultConstructor( jclass ) )
+            {
+               getDiagnostics().addError( jclass, "error.form-no-default-constructor" );
+            }
+        }
+        
+    }
+
+    private boolean checkValidationAnnotation( MethodDeclaration method, String annotationTagName,
+                                               AnnotationGrammar grammar )
+    {
+        AnnotationMirror annotation = CompilerUtils.getAnnotation( method, annotationTagName );
+        
+        if ( annotation != null )
+        {
+            if ( CompilerUtils.getBeanProperty( method ) == null )
+            {
+                getDiagnostics().addError( annotation, "error.validation-field-on-non-getter" );
+            }
+            
+            grammar.check( annotation, method );
+            
+            return true;
+        }
+        
+        return false;
+    }
+        
+    private class GetterValidatablePropertyGrammar
+            extends ValidationFieldGrammar
+    {
+        public GetterValidatablePropertyGrammar()
+        {
+            super( FormBeanChecker.this.getEnv(), FormBeanChecker.this.getDiagnostics(),
+                   FormBeanChecker.this.getRuntimeVersionChecker() );
+        }
+        
+        public String[][] getRequiredAttrs()
+        {
+            return null;  // This override causes the 'propertyName' attribute *not* to be required
+        }
+        
+        protected void onCheckMember( AnnotationTypeElementDeclaration memberDecl, AnnotationValue member,
+                                      AnnotationMirror annotation, MemberDeclaration classMember )
+        {
+            if ( memberDecl.getSimpleName().equals( PROPERTY_NAME_ATTR ) )
+            {
+                addError( member, "error.validatable-field-property-name-not-allowed" );
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/JpfLanguageConstants.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/JpfLanguageConstants.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,191 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import java.io.File;
+
+public interface JpfLanguageConstants
+{
+    public static final String NETUI_PACKAGE = "org.apache.beehive.netui";
+    public static final String PAGEFLOW_PACKAGE = NETUI_PACKAGE + ".pageflow";
+    public static final String ANNOTATIONS_CLASSNAME = PAGEFLOW_PACKAGE + ".annotations.Jpf";
+    
+    public static final String ACTION_TAG_NAME = "Action";
+    public static final String EXCEPTION_HANDLER_TAG_NAME = "ExceptionHandler";
+    public static final String FORWARD_TAG_NAME = "Forward";
+    public static final String CATCH_TAG_NAME = "Catch";
+    public static final String CONTROLLER_TAG_NAME = "Controller";
+    public static final String MESSAGE_RESOURCE_TAG_NAME = "MessageResource";
+    public static final String VIEW_PROPERTIES_TAG_NAME = "ViewProperties";
+    public static final String VALIDATION_LOCALE_RULES_TAG_NAME = "ValidationLocaleRules";
+    public static final String VALIDATION_BEAN_TAG_NAME = "ValidationBean";
+    public static final String VALIDATABLE_PROPERTY_TAG_NAME = "ValidatableProperty";
+    public static final String FORM_BEAN_TAG_NAME = "FormBean";
+    public static final String ACTION_OUTPUT_TAG_NAME = "ActionOutput";
+    
+    public static final String VALIDATE_REQUIRED_TAG_NAME = "ValidateRequired";
+    public static final String VALIDATE_RANGE_TAG_NAME = "ValidateRange";
+    public static final String VALIDATE_MIN_LENGTH_TAG_NAME = "ValidateMinLength";
+    public static final String VALIDATE_MAX_LENGTH_TAG_NAME = "ValidateMaxLength";
+    public static final String VALIDATE_CREDIT_CARD_TAG_NAME = "ValidateCreditCard";
+    public static final String VALIDATE_EMAIL_TAG_NAME = "ValidateEmail";
+    public static final String VALIDATE_MASK_TAG_NAME = "ValidateMask";
+    public static final String VALIDATE_DATE_TAG_NAME = "ValidateDate";
+    public static final String VALIDATE_TYPE_TAG_NAME = "ValidateType";
+    public static final String VALIDATE_VALID_WHEN_TAG_NAME = "ValidateValidWhen";
+    public static final String VALIDATE_CUSTOM_TAG_NAME = "ValidateCustom";
+
+    public static final String BEGIN_ACTION_NAME = "begin";
+    public static final String JPF_FILE_EXTENSION = "jpf";
+    public static final String JAVA_FILE_EXTENSION = "java";
+    public static final String JSP_FILE_EXTENSION = "jsp";
+    public static final String XJSP_FILE_EXTENSION = "jspx";
+    public static final String ACTION_EXTENSION = "do";
+    public static final String JPF_FILE_EXTENSION_DOT = "." + JPF_FILE_EXTENSION;
+    public static final String ACTION_EXTENSION_DOT = "." + ACTION_EXTENSION;
+    public static final String JAVA_FILE_EXTENSION_DOT = "." + JAVA_FILE_EXTENSION;
+    public static final String SHARED_FLOW_FILE_EXTENSION = "jpfs";
+    public static final String GLOBALAPP_FILE_EXTENSION = "app";
+    public static final String GLOBALAPP_FILE_EXTENSION_DOT = "." + GLOBALAPP_FILE_EXTENSION;
+    public static final String SHARED_FLOW_FILE_EXTENSION_DOT = "." + SHARED_FLOW_FILE_EXTENSION;
+    public static final String SHARED_FLOW_CLASSNAME = "SharedFlow";
+    public static final String FLOWCONTROLLER_BASE_CLASS = PAGEFLOW_PACKAGE + ".FlowController";
+    public static final String JPF_BASE_CLASS = PAGEFLOW_PACKAGE + ".PageFlowController";
+    public static final String SHARED_FLOW_BASE_CLASS = PAGEFLOW_PACKAGE + ".SharedFlow";
+    public static final String GLOBALAPP_BASE_CLASS = PAGEFLOW_PACKAGE + ".GlobalApp";
+    public static final String GLOBALAPP_PACKAGE = "global";
+    public static final String SHARED_FLOW_FILENAME = "SharedFlow.jpfs";
+    public static final String GLOBALAPP_CLASSNAME = "Global";
+    public static final String GLOBALAPP_FULL_CLASSNAME = GLOBALAPP_PACKAGE + "." + GLOBALAPP_CLASSNAME;
+    public static final String WEBINF_DIR_NAME = "WEB-INF";
+    public static final String WEBINF_SRC_DIR = "/" + WEBINF_DIR_NAME + "/src";
+    public static final String TMP_SRC_DIR = "WEB-INF" + File.separatorChar + ".tmpbeansrc" + File.separatorChar;
+    public static final String ANNOTATION_QUALIFIER = PAGEFLOW_PACKAGE + ".annotations.Jpf.";
+    public static final String ANNOTATION_INTERFACE_PREFIX = "Jpf.";
+    public static final String NAVIGATE_TO_ENUM = "NavigateTo";
+    public static final String DEFAULT_VALIDATION_MESSAGE_BUNDLE = PAGEFLOW_PACKAGE + ".validation.defaultMessages";
+    public static final String DEFAULT_VALIDATION_MESSAGE_BUNDLE_KEY = "_defaultValidationMessages";
+    public static final String DEFAULT_SIMPLE_ACTION_FORWARD_NAME = "_defaultForward";
+
+    public static final String NESTED_ATTR = "nested";
+    public static final String SINGLETON_ATTR = "singleton";
+    public static final String STRUTSMERGE_ATTR = "strutsMerge";
+    public static final String LOGIN_REQUIRED_ATTR = "loginRequired";
+    public static final String ROLES_ALLOWED_ATTR = "rolesAllowed";
+    public static final String NAME_ATTR = "name";
+    public static final String PATH_ATTR = "path";
+    public static final String OUTPUT_FORM_BEAN_TYPE_ATTR = "outputFormBeanType";
+    public static final String OUTPUT_FORM_BEAN_ATTR = "outputFormBean";
+    public static final String NAVIGATE_TO_ATTR = "navigateTo";
+    public static final String RETURN_ACTION_ATTR = "returnAction";
+    public static final String MESSAGE_ATTR = "message";
+    public static final String MESSAGE_KEY_ATTR = "messageKey";
+    public static final String ARG0_ATTR = "arg0";
+    public static final String ARG0_KEY_ATTR = "arg0Key";
+    public static final String ARG1_ATTR = "arg1";
+    public static final String ARG1_KEY_ATTR = "arg1Key";
+    public static final String ARG2_ATTR = "arg2";
+    public static final String ARG2_KEY_ATTR = "arg2Key";
+    public static final String ARG3_ATTR = "arg3";
+    public static final String ARG3_KEY_ATTR = "arg3Key";
+    public static final String DISPLAY_NAME_ATTR = "displayName";
+    public static final String DISPLAY_NAME_KEY_ATTR = "displayNameKey";
+    public static final String METHOD_ATTR = "method";
+    public static final String TYPE_ATTR = "type";
+    public static final String REDIRECT_ATTR = "redirect";
+    public static final String BUNDLE_KEY_ATTR = "bundleKey";
+    public static final String ACTION_OUTPUTS_ATTR = "actionOutputs";
+    public static final String NULLABLE_ATTR = "nullable";
+    public static final String USE_FORM_BEAN_ATTR = "useFormBean";
+    public static final String READONLY_ATTR = "readOnly";
+    public static final String RESTORE_QUERY_STRING_ATTR = "restoreQueryString";
+    public static final String VALUE_ATTR = "value";    // this is the default annotation member
+    public static final String MESSAGE_RESOURCES_ATTR = "messageResources";
+    public static final String FORWARDS_ATTR = "forwards";
+    public static final String CATCHES_ATTR = "catches";
+    public static final String VALIDATION_ERROR_FORWARD_ATTR = "validationErrorForward";
+    public static final String LANGUAGE_ATTR = "language";
+    public static final String COUNTRY_ATTR = "country";
+    public static final String VARIANT_ATTR = "variant";
+    public static final String VALIDATE_REQUIRED_ATTR = "validateRequired";
+    public static final String VALIDATE_RANGE_ATTR = "validateRange";
+    public static final String VALIDATE_MIN_LENGTH_ATTR = "validateMinLength";
+    public static final String VALIDATE_MAX_LENGTH_ATTR = "validateMaxLength";
+    public static final String VALIDATE_CREDIT_CARD_ATTR = "validateCreditCard";
+    public static final String VALIDATE_EMAIL_ATTR = "validateEmail";
+    public static final String VALIDATE_MASK_ATTR = "validateMask";
+    public static final String VALIDATE_DATE_ATTR = "validateDate";
+    public static final String VALIDATE_TYPE_ATTR = "validateType";
+    public static final String VALIDATE_VALID_WHEN_ATTR = "validateValidWhen";
+    public static final String VALIDATE_CUSTOM_ATTR = "validateCustom";
+    public static final String VALIDATABLE_PROPERTIES_ATTR = "validatableProperties";
+    public static final String DEFAULT_MESSAGE_RESOURCES_ATTR = "defaultMessageBundle";
+    public static final String APPLY_TO_UNHANDLED_LOCALES_ATTR = "applyToUnhandledLocales";
+    public static final String VALIDATION_BEANS_ATTR = "validationBeans";
+    
+    public static final String MIN_INT_ATTR = "minInt";
+    public static final String MAX_INT_ATTR = "maxInt";
+    public static final String MIN_FLOAT_ATTR = "minFloat";
+    public static final String MAX_FLOAT_ATTR = "maxFloat";
+    public static final String CHARS_ATTR = "chars";
+    public static final String STRICT_ATTR = "strict";
+    public static final String REGEX_ATTR = "regex";
+    public static final String PATTERN_ATTR = "pattern";
+    public static final String PROPERTY_NAME_ATTR = "propertyName";
+    public static final String LOCALE_RULES_ATTR = "localeRules";
+    public static final String VALIDATABLE_BEANS_ATTR = "validatableBeans";
+    public static final String FIELDS_ATTR = "fields";
+    public static final String KEY_ATTR = "key";
+    public static final String VALIDATION_MESSAGES_ATTR = "validationMessages";
+    public static final String SIMPLE_ACTIONS_ATTR = "simpleActions";
+    public static final String CONDITION_ATTR = "condition";
+    public static final String CONDITIONAL_FORWARDS_ATTR = "conditionalForwards";
+    
+    public static final String FORWARD_CLASS_NAME = PAGEFLOW_PACKAGE + ".Forward";
+    public static final String FORM_CLASS_NAME = "org.apache.struts.action.ActionForm";
+    public static final String BEA_XMLOBJECT_CLASS_NAME = "com.bea.xml.XmlObject";
+    public static final String APACHE_XMLOBJECT_CLASS_NAME = "org.apache.xmlbeans.XmlObject";
+    public static final String XML_FORM_CLASS_NAME = PAGEFLOW_PACKAGE + ".internal.XmlBeanActionForm";
+    public static final String ANY_FORM_CLASS_NAME = PAGEFLOW_PACKAGE + ".internal.AnyBeanActionForm";
+    public static final String STRING_CLASS_NAME = String.class.getName();
+    public static final String THROWABLE_CLASS_NAME = Throwable.class.getName();
+    public static final String OBJECT_CLASS_NAME = Object.class.getName();
+    public static final String SERIALIZABLE_CLASS_NAME = "java.io.Serializable";
+    
+    public static final String NAVIGATE_TO_CURRENT_PAGE_STR = "currentPage";
+    public static final String NAVIGATE_TO_PREVIOUS_PAGE_STR = "previousPage";
+    public static final String NAVIGATE_TO_PAGE_LEGACY_STR = "page";
+    public static final String NAVIGATE_TO_PREVIOUS_ACTION_STR = "previousAction";
+    
+    public static final String ARRAY_TYPE_SUFFIX = "[]";    
+    public static final String GETTER_PREFIX = "get";
+    
+    public static final String PAGEFLOW_RUNTIME_JAR = "/" + WEBINF_DIR_NAME + "/lib/beehive-netui-pageflow.jar";    
+    public static final String RUNTIME_VERSION_ATTRIBUTE = "PageFlow-Runtime-Version";
+    
+    public static final String VERSION_8_SP2_STRING = "2";
+    public static final String VERSION_9_0_STRING = "3";
+    
+    public enum ExtraInfoKeys
+    {
+        flowControllerInfo
+    }
+
+    public static final String ERROR_TYPE_STR = "<error>";
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,254 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import org.apache.beehive.netui.compiler.grammar.ControllerGrammar;
+import org.apache.beehive.netui.compiler.grammar.WebappPathOrActionType;
+import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.xmlbeans.XmlException;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.PackageDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+
+import java.util.ArrayList;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+
+
+public class PageFlowChecker
+        extends FlowControllerChecker
+        implements JpfLanguageConstants
+{
+    public PageFlowChecker( AnnotationProcessorEnvironment env, Diagnostics diagnostics, FlowControllerInfo fcInfo )    
+    {
+        super( env, diagnostics, fcInfo );
+    }
+
+    public static class PageFlowFileFilter implements FilenameFilter
+    {
+        public boolean accept( File dir, String name )
+        {
+            return name.endsWith( JPF_FILE_EXTENSION_DOT );
+        }
+    }
+
+    protected void startCheckClass( ClassDeclaration jclass )
+    {
+        //
+        // First, find the SharedFlow.jpfs file (or Global.app, for legacy apps).  Crawl up through the directories,
+        // looking for SharedFlow.jpfs files.  The first one found is the applicable one.
+        //
+        PackageDeclaration outerTypePackage = jclass.getPackage();
+        TypeDeclaration sharedFlowType = null;
+        
+        assert outerTypePackage != null;
+        String packageName = outerTypePackage.getQualifiedName();
+        assert packageName != null;
+        if ( ! packageName.equals( "" ) )
+        {
+            while ( true )
+            {
+                sharedFlowType = getEnv().getTypeDeclaration( packageName + '.' + SHARED_FLOW_CLASSNAME );
+                if ( sharedFlowType != null ) break;
+                int lastDot = packageName.lastIndexOf( '.' );
+                if ( lastDot == -1 ) break;
+                packageName = packageName.substring( 0, lastDot );
+            }
+        }
+        
+        if ( sharedFlowType == null )
+        {
+            sharedFlowType = getEnv().getTypeDeclaration( SHARED_FLOW_CLASSNAME );
+        }
+        
+        if ( sharedFlowType == null )
+        {
+            //
+            // Finally, look for it in Global.app.
+            //
+            sharedFlowType = getEnv().getTypeDeclaration( GLOBALAPP_FULL_CLASSNAME );
+        }
+        
+        getFlowControllerInfo().setSharedFlowType( sharedFlowType );
+        
+        super.startCheckClass( jclass );
+    }
+
+    protected void doAdditionalClassChecks( ClassDeclaration jpfClass, File webappRoot )
+    {
+        PackageDeclaration pkg = jpfClass.getPackage();
+        File jpfFile = CompilerUtils.getOriginalFile( jpfClass );
+        
+        //
+        // jpfPackage is null when there's a class with the same name as the type's package.
+        //
+        String jpfPackageName = pkg != null ? pkg.getQualifiedName().toString() : null;
+
+        //
+        // Make sure there are no other page flows in this directory (they may not be
+        // in the package as far as the compiler can see).
+        //
+        ArrayList overlapping = new ArrayList();
+        File[] files = jpfFile.getAbsoluteFile().getParentFile().listFiles( new PageFlowFileFilter() );
+
+        if ( files != null )
+        {
+            for ( int i = 0; i < files.length; i++ )
+            {
+                File file = files[i];
+                if ( ! file.getPath().equals( jpfFile.getPath() ) )
+                {
+                    overlapping.add( file.getName() );
+                }
+            }
+        }
+            
+        int len = overlapping.size();
+        if ( len > 0 )
+        {
+            if ( len > 3 )
+            {
+                getDiagnostics().addError( jpfClass, "error.overlapping-pageflows", overlapping.toArray() );
+            }
+            else
+            {
+                getDiagnostics().addError( jpfClass, "error.overlapping-pageflows" + len, overlapping.toArray() );
+            }
+        }
+
+        //
+        // Check the package name.
+        //
+        File parentDir = jpfFile.getAbsoluteFile().getParentFile();
+        if ( parentDir.equals( webappRoot.getPath() ) )
+        {
+            if ( jpfPackageName != null && jpfPackageName.length() > 0 )
+            {
+                getDiagnostics().addError( jpfClass, "error.root-level-package" );
+            }
+        }
+        else
+        {
+            String expectedPackage = parentDir.getPath().substring( webappRoot.getPath().length() );
+            expectedPackage = expectedPackage.replace( '\\', '/' );
+            
+            //
+            // We support .jpf in WEB-INF/src.
+            //
+            if ( expectedPackage.startsWith( WEBINF_SRC_DIR ) )
+            {
+                expectedPackage = expectedPackage.substring( WEBINF_SRC_DIR.length() );
+            }
+                
+            assert expectedPackage.length() != 1 : expectedPackage;
+            if ( expectedPackage.length() > 1 ) expectedPackage = expectedPackage.substring( 1 ).replace( '/', '.' );
+            if ( jpfPackageName != null && ! jpfPackageName.equals( expectedPackage ) )
+            {
+                getDiagnostics().addError( jpfClass, "error.wrong-package", expectedPackage );
+            }
+        }
+
+        //
+        // Issue a warning if the class name is the same as the parent package name.
+        // This causes ambiguity when resolving inner classes.
+        //
+        if ( pkg != null && jpfClass.getSimpleName().equals( pkg.getSimpleName() ) )
+        {
+            getDiagnostics().addWarning( jpfClass, "warning.classname-same-as-package" );
+        }
+        
+        //
+        // Make sure every .jpf has a begin action.
+        //
+        if ( ! WebappPathOrActionType.actionExists( BEGIN_ACTION_NAME, jpfClass, null ) )
+        {
+            getDiagnostics().addError( jpfClass, "error.no-begin-action" );
+        }
+
+        //
+        // Make sure every nested pageflow has a returnAction.
+        //
+        if ( CompilerUtils.isInNestedPageFlow( jpfClass ) )
+        {
+            getFlowControllerInfo().setNested( true );
+            
+            if ( getFlowControllerInfo().countReturnActions() == 0 )
+            {
+                getDiagnostics().addError( jpfClass, "error.no-return-action",
+                                           ANNOTATION_INTERFACE_PREFIX + FORWARD_TAG_NAME );
+            }                
+        }        
+    }
+    
+    protected String getDesiredBaseClass()
+    {
+        return JPF_BASE_CLASS;
+    }
+
+    protected GenStrutsApp createStrutsApp( File sourceFile, String containingPackage )
+        throws XmlException, IOException, NoWebInfDirectoryException
+    {
+        return new GenStrutsApp( sourceFile, containingPackage, null, getEnv() );
+    }
+
+    protected AnnotationGrammar getControllerGrammar()
+    {
+        return new JpfControllerGrammar();
+    }
+    
+    private class JpfControllerGrammar
+        extends ControllerGrammar
+    {
+        public JpfControllerGrammar()
+        {
+            super( PageFlowChecker.this.getEnv(), PageFlowChecker.this.getDiagnostics(),
+                   PageFlowChecker.this.getRuntimeVersionChecker(), getFlowControllerInfo() );
+            addMemberType( NESTED_ATTR, new AnnotationMemberType( null, this ) );
+            addMemberType( SINGLETON_ATTR, new SingletonAttrType() );
+        }
+        
+        protected class SingletonAttrType
+            extends AnnotationMemberType
+        {
+            public SingletonAttrType()
+            {
+                super( VERSION_9_0_STRING, JpfControllerGrammar.this );
+            }
+
+            protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                                      AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+            {
+                boolean isSingleton = ( ( Boolean ) value.getValue() ).booleanValue();
+                if ( isSingleton && CompilerUtils.isInNestedPageFlow( classMember ) )
+                {
+                    addError( value, "error.nested-singleton" );
+                }
+            
+                return null;
+            }
+        }        
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowGenerator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowGenerator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
+import org.apache.beehive.netui.compiler.FlowControllerGenerator;
+import org.apache.xmlbeans.XmlException;
+
+
+public class PageFlowGenerator
+        extends FlowControllerGenerator
+{
+    public PageFlowGenerator( AnnotationProcessorEnvironment env )
+    {
+        super( env );
+    }
+
+    protected GenStrutsApp createStrutsApp( File sourceFile, String containingPackage, ClassDeclaration jclass )
+                 
+        throws XmlException, IOException, NoWebInfDirectoryException
+    {
+        return new GenStrutsApp( sourceFile, containingPackage, jclass, getEnv() );
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/RuntimeVersionChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/RuntimeVersionChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,144 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.AnnotationMirror;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.jar.Manifest;
+import java.util.jar.JarFile;
+import java.util.jar.Attributes;
+
+public class RuntimeVersionChecker
+        implements JpfLanguageConstants
+{
+    private String _runtimeVersion;
+    
+    /**
+     * This package-protected constructor allows a RuntimeVersionChecker to be created even if there's
+     * no webapp root.  This will cause other compile errors -- in this case we'll just assume the version
+     * is high enough.
+     */ 
+    RuntimeVersionChecker()
+    {
+        _runtimeVersion = getHighVersion();
+    }
+    
+    public RuntimeVersionChecker( File webappRoot )
+    {
+        File pageflowJar = new File( webappRoot.getPath() + PAGEFLOW_RUNTIME_JAR );
+                
+        if ( pageflowJar.exists() )
+        {
+            try
+            {
+                Manifest mf = new JarFile( pageflowJar ).getManifest();
+                        
+                if ( mf != null )
+                {
+                    Attributes attrs = mf.getMainAttributes();
+                            
+                    if ( attrs != null )
+                    {
+                        String version = attrs.getValue( RUNTIME_VERSION_ATTRIBUTE );
+                        _runtimeVersion = ( version != null ? version : "0" );
+                    }
+                }
+            }
+            catch ( IOException e )
+            {
+                // 
+                // This will cause other compile errors.  Just assume that the version is high enough.
+                //
+                _runtimeVersion = getHighVersion();
+            }
+        }
+        else
+        {
+            // 
+            // This will cause other compile errors.  Just assume that the version is high enough.
+            //
+            _runtimeVersion = getHighVersion();
+        }
+    }
+    
+    private String getHighVersion()
+    {
+        return new Integer( Integer.MAX_VALUE ).toString();
+    }
+    
+    int getRuntimeVersion()
+    {
+        return Integer.parseInt( _runtimeVersion );
+    }
+    
+    public boolean checkRuntimeVersion( String requiredRuntimeVersion, AnnotationValue value, Diagnostics diags,
+                                        String errMsg, Object ... errMsgParams )
+    {
+        if ( requiredRuntimeVersion != null )
+        {
+            int runtimeVersion = getRuntimeVersion();
+            
+            if ( Integer.parseInt( requiredRuntimeVersion ) > runtimeVersion )
+            {
+                diags.addError( value, errMsg, errMsgParams );
+                return false;
+            }
+        } 
+        
+        return true;
+    }
+    
+    public boolean checkRuntimeVersion( String requiredRuntimeVersion, Declaration element, Diagnostics diags,
+                                        String errMsg, Object ... errMsgParams )
+    {
+        if ( requiredRuntimeVersion != null )
+        {
+            int runtimeVersion = getRuntimeVersion();
+            
+            if ( Integer.parseInt( requiredRuntimeVersion ) > runtimeVersion )
+            {
+                diags.addError( element, errMsg, errMsgParams );
+                return false;
+            }
+        } 
+        
+        return true;
+    }
+    
+    public boolean checkRuntimeVersion( String requiredRuntimeVersion, AnnotationMirror element, Diagnostics diags,
+                                        String errMsg, Object ... errMsgParams )
+    {
+        if ( requiredRuntimeVersion != null )
+        {
+            int runtimeVersion = getRuntimeVersion();
+        
+            if ( Integer.parseInt( requiredRuntimeVersion ) > runtimeVersion )
+            {
+                diags.addError( element, errMsg, errMsgParams );
+                return false;
+            }
+        } 
+        
+        return true;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/SharedFlowChecker.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/SharedFlowChecker.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import org.apache.beehive.netui.compiler.grammar.ControllerGrammar;
+import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
+import org.apache.beehive.netui.compiler.genmodel.GenSharedFlowStrutsApp;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.xmlbeans.XmlException;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.PackageDeclaration;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+
+public class SharedFlowChecker
+        extends FlowControllerChecker
+{
+    public SharedFlowChecker( AnnotationProcessorEnvironment env, Diagnostics diagnostics, FlowControllerInfo fcInfo )
+    {
+        super( env, diagnostics, fcInfo );
+    }
+    
+    protected void doAdditionalClassChecks( ClassDeclaration jclass, File webappRoot )
+    {
+        //
+        // If it's Global.app, make sure the package is "global", and that it's in /WEB-INf/src/global.
+        //
+        if ( CompilerUtils.isAssignableFrom( GLOBALAPP_BASE_CLASS, jclass, getEnv() ) )
+        {
+            PackageDeclaration pkg = jclass.getPackage();              
+            if ( pkg == null || ! pkg.getQualifiedName().toString().equals( GLOBALAPP_PACKAGE ) )
+            {
+                getDiagnostics().addError( jclass, "error.wrong-package", GLOBALAPP_PACKAGE );
+            }
+        }
+    }
+    
+    protected String getDesiredBaseClass()
+    {
+        Collection< TypeDeclaration > typeDecls = getEnv().getTypeDeclarations();
+        if ( typeDecls.size() == 0 ) return null;
+        File sourceFile = CompilerUtils.getOriginalFile( typeDecls.iterator().next() );
+        if ( sourceFile.getName().endsWith( GLOBALAPP_FILE_EXTENSION_DOT ) ) return GLOBALAPP_BASE_CLASS;
+        if ( sourceFile.getName().endsWith( SHARED_FLOW_FILE_EXTENSION_DOT ) ) return SHARED_FLOW_BASE_CLASS;
+        return null;
+    }
+
+    protected boolean isSharedFlow()
+    {
+        return true;
+    }
+
+    protected GenStrutsApp createStrutsApp( File sourceFile, String containingPackage )
+        throws XmlException, IOException, NoWebInfDirectoryException
+    {
+        return new GenSharedFlowStrutsApp( sourceFile, containingPackage, null, getEnv() );
+    }
+
+    protected AnnotationGrammar getControllerGrammar()
+    {
+        return new ControllerGrammar( getEnv(), getDiagnostics(), getRuntimeVersionChecker(), getFlowControllerInfo() );
+    }    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/SharedFlowGenerator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.beehive.netui.compiler.FlowControllerGenerator;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
+import org.apache.beehive.netui.compiler.genmodel.GenSharedFlowStrutsApp;
+import org.apache.xmlbeans.XmlException;
+
+
+public class SharedFlowGenerator
+    extends FlowControllerGenerator
+{
+    public SharedFlowGenerator( AnnotationProcessorEnvironment env )
+    {
+        super( env );
+    }
+
+    protected GenStrutsApp createStrutsApp( File sourceFile, String containingPackage, ClassDeclaration jclass )
+            throws XmlException, IOException, NoWebInfDirectoryException
+    {
+        return new GenSharedFlowStrutsApp( sourceFile, containingPackage, jclass, getEnv() );
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.apt;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.util.SimpleDeclarationVisitor;
+
+
+import org.apache.beehive.netui.compiler.PageFlowGenerator;
+import org.apache.beehive.netui.compiler.PageFlowChecker;
+import org.apache.beehive.netui.compiler.FlowControllerInfo;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.FlowControllerChecker;
+import org.apache.beehive.netui.compiler.FlowControllerGenerator;
+import org.apache.beehive.netui.compiler.SharedFlowChecker;
+import org.apache.beehive.netui.compiler.SharedFlowGenerator;
+import org.apache.beehive.netui.compiler.Diagnostics;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.JPF_BASE_CLASS;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.SHARED_FLOW_BASE_CLASS;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.GLOBALAPP_BASE_CLASS;
+
+
+public class PageFlowAnnotationProcessor
+        implements AnnotationProcessor
+{
+    private final AnnotationProcessorEnvironment _env;
+
+    PageFlowAnnotationProcessor( AnnotationProcessorEnvironment env )
+    {
+        _env = env;
+    }
+
+    public void process()
+    {
+        for ( TypeDeclaration typeDecl : _env.getSpecifiedTypeDeclarations() )
+        {
+            typeDecl.accept( new ListClassVisitor() );
+        }
+    }
+
+    private class ListClassVisitor extends SimpleDeclarationVisitor
+    {
+        public void visitTypeDeclaration( TypeDeclaration decl )
+        {
+            if ( decl instanceof ClassDeclaration )
+            {
+                ClassDeclaration classDecl = ( ClassDeclaration ) decl;
+                FlowControllerInfo fcInfo = new FlowControllerInfo( CompilerUtils.getOriginalFile( decl ) );
+                Diagnostics diagnostics = new Diagnostics( _env );
+                FlowControllerChecker checker = null;
+                FlowControllerGenerator generator = null;
+                
+                if ( CompilerUtils.isAssignableFrom( JPF_BASE_CLASS, decl, _env ) )
+                {
+                    checker = new PageFlowChecker( _env, diagnostics, fcInfo );
+                    generator = new PageFlowGenerator( _env );
+                }
+                else if ( CompilerUtils.isAssignableFrom( SHARED_FLOW_BASE_CLASS, decl, _env )
+                          || CompilerUtils.isAssignableFrom( GLOBALAPP_BASE_CLASS, decl, _env ) )
+                {
+                    checker = new SharedFlowChecker( _env, diagnostics, fcInfo );
+                    generator = new SharedFlowGenerator( _env );
+                }
+                
+                if ( checker != null )
+                {
+                    checker.check( classDecl );
+                    if ( ! diagnostics.hadErrors() ) generator.generate( classDecl );
+                }
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessorFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessorFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.apt;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorFactory;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+
+import java.util.Set;
+import java.util.Collection;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.ArrayList;
+
+public class PageFlowAnnotationProcessorFactory
+        implements AnnotationProcessorFactory
+{
+    public Collection<String> supportedAnnotationTypes()
+    {
+        return Collections.unmodifiableCollection( Arrays.asList( new String[]{ "*" } ) );
+    }
+
+    public Collection< String > supportedOptions()
+    {
+        return new ArrayList< String >();
+    }
+
+    public AnnotationProcessor getProcessorFor( Set< AnnotationTypeDeclaration > annotationTypeDeclarations,
+                                                AnnotationProcessorEnvironment env )
+    {
+        return new PageFlowAnnotationProcessor( env );
+    }
+    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,132 @@
+# Descriptions for Page Flow compile errors.
+
+extra-info.business-control-member = {0}
+
+error.atleast-one-must-exist-1 = Attribute "{0}" must be present.
+error.atleast-one-must-exist-2 = At least one of attributes "{0}" or "{1}" must be present.
+error.atleast-one-must-exist-3 = At least one of attributes "{0}", "{1}", or "{2}" must be present.
+error.atmost-one-may-exist-2 = Only one of attributes "{0}" or "{1}" may be present.
+error.atmost-one-may-exist-3 = Only one of attributes "{0}", "{1}", "{2}" may be present.
+error.attr-dependency-not-found-1 = Attribute "{0}" may only be present when attribute "{1}" is present.
+error.attr-dependency-not-found-2 = Attribute "{0}" may only be present when attribute "{1}" or "{2}" is present.
+error.unresolved-exception-handler = No exception handler method named "{0}" could be found.
+error.web-inf-not-found = The web application root directory could not be found for "{0}".
+error.invalid-parent-directory = Could not create parent directory "{0}".
+error.struts-config-not-writable = Cannot write to "{0}".
+error.does-not-extend-base = This class must derive from {0}.
+error.no-begin-action = There is no begin action defined for this PageFlowController.
+
+error.no-return-action = \
+There is no {0} annotation with the returnAction attribute defined for this nested PageFlowController.
+
+warning.file-not-found = File "{0}" could not be found in the web application.
+error.file-not-found = File "{0}" could not be found in the web application.
+error.only-valid-in-nested = Attribute "{0}" is only valid in a nested PageFlowController.
+error.action-method-wrong-arg = Expected a single argument.
+error.action-method-arg-no-default-constructor = Argument type {0} has no default constructor defined.
+error.action-method-invalid-argument-type = This type is not valid as the argument to an action method.
+error.action-method-arg-not-public = Argument type {0} is not public.
+error.action-method-arg-not-static = Argument type {0} is a non-static inner class.
+error.method-wrong-return-type = Expected a return type of {0}.
+error.exception-method-wrong-exception-arg = The first argument must have a type that derives from {0}.
+error.exception-method-wrong-arg-type = Argument {0} must be of type {1}.
+error.exception-method-wrong-arg-type2 = Argument {0} must be of type {1} or {2}.
+error.exception-method-wrong-arg-count = Expected {0} arguments on this method.
+error.wrong-package = The package must be "{0}".
+error.wrong-classname = The class name must be "{0}".
+
+warning.classname-same-as-package = \
+The class name is the same as the package name.  This will cause problems when resolving inner types in this class.
+
+error.root-level-package = A page flow at the root of the web application must be in the default package.
+error.global-app-wrong-dir = {0} must be in the {1} directory.
+error.duplicate-attr = Duplicate {0} tag with {1}="{2}".
+error.duplicate-attr2 = Duplicate {0} tag on method {3} (referenced from {4}) with {1}="{2}".
+warning.nonserializable-member-data = Member data should be Serializable or transient.
+error.incompatible-exception-handler = Method {0} cannot handle type {1}.
+error.overlapping-pageflows = \
+There are other page flows in this directory ({0}, {1}, {2}, ...).  There may only be one PageFlowController per directory.
+
+error.overlapping-pageflows3 =\
+There are other page flows in this directory ({0}, {1}, {2}).  There may only be one PageFlowController per directory.
+
+error.overlapping-pageflows2 = \
+There are other page flows in this directory ({0}, {1}).  There may only be one PageFlowController per directory.
+
+error.overlapping-pageflows1 = \
+There is another page flow in this directory ({0}).  There may only be one PageFlowController per directory.
+
+error.unresolved-field = Field {0} does not exist.
+error.wrong-field-type = Field {0} must be of a type derived from {1}.
+error.form-not-public = Form classes must be public.
+error.form-not-static = Form classes must be static.
+error.form-no-default-constructor = Form classes must have default constructors.
+
+error.xml-parse-error = Error while parsing {0} (line {1}, column {2}): {3}
+error.xml-parse-error-nocolumn = Error while parsing {0} (line {1}): {2}
+error.xml-parse-error-nolinecolumn = Error while parsing {0}: {1}
+error.xml-read-error = Could not load {0}: {1}.
+
+error.invalid-uri = This URI is invalid: {0}
+error.relative-uri = This attribute requires a relative path.
+
+error.duplicate-exception-handler = Exception handler methods must be uniquely named.
+warning.return-to-page-deprecated = The "{0}" value is deprecated.
+warning.return-to-action-deprecated = The "{0}" value is deprecated.
+
+error.action-mismatched-form = \
+The "{0}" attribute points to member {1}, which requires that this action method accept an argument of type {2}.
+
+error.required-runtime-version-enumval = \
+The "{0}" value requires an up-to-date version of {1}.
+
+error.required-runtime-version-attribute = \
+The "{0}" attribute requires an up-to-date version of {1}.
+
+error.required-runtime-version-annotation = \
+This annotation requires an up-to-date version of {0}.
+
+warning.runtime-version = The runtime library {0} is out of date.
+error.readonly-writable-field-value = The "{0}" attribute may not be used on read-only actions.
+
+error.duplicate-exception-handler-forwards = \
+The specified exception-handler method {0} contains a forward named "{2}" which conflicts with a forward in \
+exception-handler {1}.
+
+error.empty-string-not-allowed = This value may not be an empty string.
+error.nested-singleton = A nested page flow may not be a singleton.
+warning.unresolvable-forward = There is no forward named "{0}" declared on this method or on this class.
+
+error.validation-field-on-non-getter = This annotation may only be present on a public, non-static getter method.
+
+warning.exception-method-deprecated-form-arg = This ExceptionHandler method signature is deprecated. \
+Use the new signature: (<exception-type>, String actionName, String message, Object formBean).
+
+error.invalid-java-identifier-start = The character ''{0}'' may not be used as the first character of this identifier.
+error.invalid-java-identifier-part = The character ''{0}'' may not be used in this identifier.
+error.array-type-not-allowed = This value may not be an array type.
+error.primitive-type-not-allowed = This value may not be an primitive type.
+error.must-be-primitive-type = This value must be a primitive Class, e.g. int.class.
+error.invalid-type = This type is not allowed here.
+warning.action-not-found = Action "{0}" was not found.
+error.no-public-class = There is no public class defined in this file.
+
+warning.missing-validation-message = \
+There is a list of {0} annotations defined for this class, but message key "{1}" is not present in it.
+
+error.duplicate-action = Duplicate action "{0}".
+error.could-not-generate-struts-config = Could not generate output file {0}.
+error.invalid-member-form-type = Member field {0} is not a valid form bean class type.
+
+warning.validation-annotations-no-forward = \
+The {0} annotation does not have a {1} value.  Without a {1}, this validation annotation will have no effect.
+
+warning.validatable-formbean-no-forward = \
+The {0} annotation does not have a {1} value.  Without a {1}, the validation annotations on form bean \
+{2} will have no effect.
+
+error.validatable-field-property-name-not-allowed = \
+The {0} attribute is not allowed here. The property name is inferred from the getter method name.
+
+error.incompatible-locale-annotations = The attribute "{0}" may not be present when attribute "{1}" is true.
+error.missing-locale-annotations = The attribute "{0}" must be present when attribute "{1}" is false.

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/DefaultValidatorRuleFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/DefaultValidatorRuleFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,138 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.validation.ValidatorRule;
+import org.apache.beehive.netui.compiler.model.validation.ValidatorRuleRange;
+import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+
+import java.util.Map;
+import java.util.HashMap;
+
+// Constants
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_REQUIRED_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_CREDIT_CARD_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_EMAIL_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_RANGE_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_MIN_LENGTH_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_MAX_LENGTH_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_MASK_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_DATE_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_TYPE_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MIN_FLOAT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MAX_FLOAT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MIN_INT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MAX_INT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.CHARS_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.REGEX_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.STRICT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PATTERN_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.TYPE_ATTR;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.type.PrimitiveType;
+
+
+public class DefaultValidatorRuleFactory
+        implements ValidatorRuleFactory, ValidatorConstants
+{
+    private static final Map< PrimitiveType.Kind, String > VALIDATE_TYPE_RULES =
+            new HashMap< PrimitiveType.Kind, String >();
+    
+    static
+    {
+        VALIDATE_TYPE_RULES.put( PrimitiveType.Kind.INT, RULENAME_INTEGER );
+        VALIDATE_TYPE_RULES.put( PrimitiveType.Kind.FLOAT, RULENAME_FLOAT );
+        VALIDATE_TYPE_RULES.put( PrimitiveType.Kind.LONG, RULENAME_LONG );
+        VALIDATE_TYPE_RULES.put( PrimitiveType.Kind.DOUBLE, RULENAME_DOUBLE );
+        VALIDATE_TYPE_RULES.put( PrimitiveType.Kind.BYTE, RULENAME_BYTE );
+        VALIDATE_TYPE_RULES.put( PrimitiveType.Kind.SHORT, RULENAME_SHORT );
+    }
+    
+    public ValidatorRule getFieldRule( String entityName, String propertyName, AnnotationMirror ruleAnnotation )
+    {
+        ValidatorRule rule = null;
+        String annName = CompilerUtils.getSimpleName( ruleAnnotation );
+        
+        if ( annName.equals( VALIDATE_REQUIRED_TAG_NAME ) ) rule = new ValidatorRule( RULENAME_REQUIRED );
+        else if ( annName.equals( VALIDATE_CREDIT_CARD_TAG_NAME ) ) rule = new ValidatorRule( RULENAME_CREDIT_CARD );
+        else if ( annName.equals( VALIDATE_EMAIL_TAG_NAME ) ) rule = new ValidatorRule( RULENAME_EMAIL );
+        else if ( annName.equals( VALIDATE_RANGE_TAG_NAME ) )
+        {
+            Float minFloat = CompilerUtils.getFloat( ruleAnnotation, MIN_FLOAT_ATTR, true );
+            
+            if ( minFloat != null )
+            {
+                Float maxFloat = CompilerUtils.getFloat( ruleAnnotation, MAX_FLOAT_ATTR, true );
+                assert maxFloat != null;  // checker should catch this
+                rule = new ValidatorRuleRange( minFloat, maxFloat );
+            }
+            else
+            {
+                Integer minInt = CompilerUtils.getInteger( ruleAnnotation, MIN_INT_ATTR, true );
+                Integer maxInt = CompilerUtils.getInteger( ruleAnnotation, MAX_INT_ATTR, true );
+                assert minInt != null;  // checker should catch this
+                assert maxInt != null;  // checker should catch this
+                rule = new ValidatorRuleRange( minInt, maxInt );
+            }
+        }
+        else if ( annName.equals( VALIDATE_MIN_LENGTH_TAG_NAME ) )
+        {
+            Integer nChars = CompilerUtils.getInteger( ruleAnnotation, CHARS_ATTR, true );
+            assert nChars != null;
+            rule = new ValidatorRule( RULENAME_MINLENGTH );
+            rule.setVar( VARNAME_MINLENGTH, nChars.toString() );
+        }
+        else if ( annName.equals( VALIDATE_MAX_LENGTH_TAG_NAME ) )
+        {
+            Integer nChars = CompilerUtils.getInteger( ruleAnnotation, CHARS_ATTR, true );
+            assert nChars != null;
+            rule = new ValidatorRule( RULENAME_MAXLENGTH );
+            rule.setVar( VARNAME_MAXLENGTH, nChars.toString() );
+        }
+        else if ( annName.equals( VALIDATE_MASK_TAG_NAME ) )
+        {
+            String regex = CompilerUtils.getString( ruleAnnotation, REGEX_ATTR, true );
+            assert regex != null;
+            rule = new ValidatorRule( RULENAME_MASK );
+            rule.setVar( VARNAME_MASK, regex );
+        }
+        else if ( annName.equals( VALIDATE_DATE_TAG_NAME ) )
+        {
+            boolean strict = CompilerUtils.getBoolean( ruleAnnotation, STRICT_ATTR, false ).booleanValue();
+            String pattern = CompilerUtils.getString( ruleAnnotation, PATTERN_ATTR, true );
+            assert pattern != null;
+            rule = new ValidatorRule( RULENAME_DATE );
+            rule.setVar( strict ? VARNAME_DATE_PATTERN_STRICT : VARNAME_DATE_PATTERN, pattern );
+        }
+        else if ( annName.equals( VALIDATE_TYPE_TAG_NAME ) )
+        {
+            AnnotationValue annotationValue = CompilerUtils.getAnnotationValue( ruleAnnotation, TYPE_ATTR, true );
+            assert annotationValue != null;
+            Object value = annotationValue.getValue();
+            assert value instanceof PrimitiveType : value.getClass().getName();  // TODO: checker enforces this
+            String typeName = VALIDATE_TYPE_RULES.get( ( ( PrimitiveType ) value ).getKind() );
+            assert typeName != null : ( ( PrimitiveType ) value ).getKind().toString();  // TODO: checker enforces this
+            rule = new ValidatorRule( typeName );
+        }
+ 
+        return rule;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenActionModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenActionModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,196 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.ActionModel;
+import org.apache.beehive.netui.compiler.model.ForwardModel;
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+
+import java.util.HashSet;
+import java.util.Collection;
+import java.util.List;
+import java.util.Iterator;
+
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.ParameterDeclaration;
+import com.sun.mirror.type.TypeMirror;
+import com.sun.mirror.type.ClassType;
+
+
+public class GenActionModel
+        extends ActionModel
+        implements JpfLanguageConstants
+{
+    public GenActionModel( Declaration sourceElement, GenStrutsApp parentApp, ClassDeclaration jclass )
+    {
+        super( parentApp );
+        
+        // Get the form class from the method argument.
+        setFormBeanName( getFormBean( sourceElement, parentApp ) );
+        init( getActionName( sourceElement ), getActionAnnotation( sourceElement ), parentApp, jclass );
+    }
+    
+    protected GenActionModel( String actionName, AnnotationMirror ann, GenStrutsApp parentApp, ClassDeclaration jclass )
+    {
+        super( parentApp );
+        init( actionName, ann, parentApp, jclass );
+    }
+    
+    private void init( String actionName, AnnotationMirror annotation, GenStrutsApp parentApp, ClassDeclaration jclass )
+    {
+        setPath( "/" + actionName );
+        
+        //
+        // loginRequired
+        //
+        setLoginRequired( CompilerUtils.getMethodOrClassFlag( annotation, jclass, LOGIN_REQUIRED_ATTR ) );
+        
+        //
+        // readOnly
+        //
+        setReadonly( CompilerUtils.getMethodOrClassFlag( annotation, jclass, READONLY_ATTR ) );
+        
+        //
+        // rolesAllowed
+        //
+        setRolesAllowed( annotation, jclass );
+        
+        //
+        // type (Action class, which is the FlowController)
+        //
+        setType( jclass.getQualifiedName() );
+        
+        //
+        // form bean member -- the page-flow-scoped form referenced by the action (a member variable)
+        //
+        setFormMember( CompilerUtils.getString( annotation, USE_FORM_BEAN_ATTR, true ) );
+        
+        //
+        // forwards
+        //
+        getForwards( annotation, jclass, parentApp );
+        
+        //
+        // validationErrorForward -- the forward used when validation fails
+        //
+        AnnotationMirror validateErrFwd = CompilerUtils.getAnnotation( annotation, VALIDATION_ERROR_FORWARD_ATTR, true );
+        if ( validateErrFwd != null )
+        {
+            ForwardModel fwd = new GenForwardModel( parentApp, validateErrFwd, jclass, " (validationErrorForward)" );
+            addForward( fwd );
+            setInput( fwd.getName() );
+        }
+
+        //
+        // exception-catches
+        //
+        GenExceptionModel.addCatches( annotation, this, jclass, parentApp, this );
+    }
+    
+    private void setRolesAllowed( AnnotationMirror annotation, ClassDeclaration jclass )
+    {
+        List< String > rolesAllowed = CompilerUtils.getStringArray( annotation, ROLES_ALLOWED_ATTR, true );
+        List< String > classLevelRA =
+                CompilerUtils.getStringArrayValue( jclass, CONTROLLER_TAG_NAME, ROLES_ALLOWED_ATTR, true );
+        Iterator< String > it = null;
+        
+        if ( rolesAllowed != null && classLevelRA != null )
+        {
+            HashSet< String > merged = new HashSet< String >();
+            for ( String role : rolesAllowed ) merged.add( role );
+            for ( String classLevelRole : classLevelRA ) merged.add( classLevelRole );
+            it = merged.iterator();
+        }
+        else if ( rolesAllowed != null )
+        {
+            it = rolesAllowed.iterator();
+        }
+        else if ( classLevelRA != null )
+        {
+            it = classLevelRA.iterator();
+        }
+        
+        if ( it != null && it.hasNext() )
+        {
+            StringBuffer rolesAllowedStr = new StringBuffer( it.next() );
+            
+            while ( it.hasNext() )
+            {
+                rolesAllowedStr.append( ',' ).append( it.next().trim() );
+            }
+            
+            setRoles( rolesAllowedStr.toString() );
+        }
+    }
+    
+    protected String getActionName( Declaration sourceElement )
+    {
+        return sourceElement.getSimpleName();
+    }
+    
+    /**
+     * @return the Struts name of the form bean.
+     */ 
+    protected String getFormBean( Declaration sourceElement, GenStrutsApp parentApp )
+    {
+        assert sourceElement instanceof MethodDeclaration : sourceElement.getClass().getName();
+        Collection< ParameterDeclaration > params = ( ( MethodDeclaration ) sourceElement ).getParameters();
+        String formBeanName = null;
+        
+        if ( params.size() > 0 )
+        {
+            assert params.size() == 1 : params.size();  // checker should catch this
+            formBeanName = addFormBean( params.iterator().next().getType(), parentApp );
+        }
+        
+        return formBeanName;
+    }
+    
+    protected String addFormBean( TypeMirror paramType, GenStrutsApp parentApp )
+    {
+        assert paramType instanceof ClassType : paramType.getClass().getName();  // checker should enforce this
+        ClassDeclaration decl = ( ( ClassType ) paramType ).getDeclaration();
+        String formBeanName = parentApp.addFormBean( decl, this );
+        
+        //
+        // If this isn't an ActionForm-derived argument, keep track of the classname for the runtime.
+        //
+        if ( ! CompilerUtils.isAssignableFrom( FORM_CLASS_NAME, decl, parentApp.getEnv() ) )
+        {
+            setFormClass( CompilerUtils.getLoadableName( decl ) );
+        }
+        
+        return formBeanName;
+    }
+    
+    protected AnnotationMirror getActionAnnotation( Declaration sourceElement )
+    {
+        assert sourceElement instanceof MethodDeclaration : sourceElement.getClass().getName();
+        return CompilerUtils.getAnnotation( ( MethodDeclaration ) sourceElement, ACTION_TAG_NAME );
+    }
+    
+    protected void getForwards( AnnotationMirror annotation, ClassDeclaration jclass, GenStrutsApp parentApp )
+    {
+        GenForwardModel.addForwards( annotation, this, jclass, parentApp, null );
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenActionOutputModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenActionOutputModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.ActionOutputModel;
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.type.ClassType;
+import com.sun.mirror.type.ArrayType;
+import com.sun.mirror.type.TypeMirror;
+
+
+public class GenActionOutputModel
+        extends ActionOutputModel
+        implements JpfLanguageConstants
+{
+    public GenActionOutputModel( AnnotationMirror annotation, ClassDeclaration jclass )
+    {
+        setName( CompilerUtils.getString( annotation, NAME_ATTR, true ) );
+        setNullable( CompilerUtils.getBoolean( annotation, NULLABLE_ATTR, false ).booleanValue() );
+        
+        //
+        // Get the base type, and add "[]" to it for arrays.
+        //
+        TypeMirror baseType = CompilerUtils.getReferenceType( annotation, TYPE_ATTR, true );
+        StringBuffer arrayDimensions = new StringBuffer();
+        while ( baseType instanceof ArrayType )
+        {
+            arrayDimensions.append( ARRAY_TYPE_SUFFIX );
+            baseType = ( ( ArrayType ) baseType ).getComponentType();
+        }
+        
+        assert baseType instanceof ClassType : baseType.getClass().getName();   // checker should enforce this
+        String typeName = CompilerUtils.getLoadableName( ( ClassType ) baseType ) + arrayDimensions.toString();
+        setType( typeName.toString() );
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenExceptionModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenExceptionModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,82 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.ExceptionModel;
+import org.apache.beehive.netui.compiler.model.ForwardContainer;
+import org.apache.beehive.netui.compiler.model.ExceptionContainer;
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.ClassDeclaration;
+
+import java.util.List;
+
+
+public class GenExceptionModel
+        extends ExceptionModel
+        implements JpfLanguageConstants
+{
+    public GenExceptionModel( GenStrutsApp parentApp, AnnotationMirror annotation, ClassDeclaration jclass,
+                              ForwardContainer forwardContainer )
+    {
+        super( parentApp );
+        
+        setType( CompilerUtils.getLoadableName( CompilerUtils.getClassType( annotation, TYPE_ATTR, true ) ) );
+        setPath( CompilerUtils.getString( annotation, PATH_ATTR, true ) );
+        setMessage( CompilerUtils.getString( annotation, MESSAGE_ATTR, true ) );
+        setMessageKey( CompilerUtils.getString( annotation, MESSAGE_KEY_ATTR, true ) );
+        String methodName = CompilerUtils.getString( annotation, METHOD_ATTR, true );
+        setHandlerMethod( methodName );
+        
+            
+        //
+        // Now get the forwards (@Jpf.Forward) from the handler method, and add them as global or local
+        // forwards, as appropriate.
+        //
+        if ( methodName != null )
+        {
+            MethodDeclaration method = CompilerUtils.getClassMethod( jclass, methodName, EXCEPTION_HANDLER_TAG_NAME );
+            AnnotationMirror exHandlerAnnotation = CompilerUtils.getAnnotation( method, EXCEPTION_HANDLER_TAG_NAME );
+            GenForwardModel.addForwards( exHandlerAnnotation, forwardContainer, jclass, parentApp,
+                                         " from exception-handler " + methodName );  // @TODO I18N the comment
+                    
+            //
+            // Also, if the exception-handler was marked "read-only", note this on the <exception> tag.
+            //
+            setReadonly( CompilerUtils.getMethodOrClassFlag( exHandlerAnnotation, jclass, READONLY_ATTR ) );
+        }
+    }
+    
+    static void addCatches( AnnotationMirror annotation, ExceptionContainer container, ClassDeclaration jclass,
+                            GenStrutsApp strutsApp, ForwardContainer forwardContainer )
+    {
+        List< AnnotationMirror > catches =
+                CompilerUtils.getAnnotationArray( annotation, CATCHES_ATTR, true );
+        
+        if ( catches != null )
+        {
+            for ( AnnotationMirror i : catches )
+            {
+                container.addException( new GenExceptionModel( strutsApp, i, jclass, forwardContainer ) );
+            }
+        }
+    }    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenForwardModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenForwardModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,163 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.ForwardModel;
+import org.apache.beehive.netui.compiler.model.ForwardContainer;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.type.ClassType;
+
+import java.util.List;
+
+public class GenForwardModel
+        extends ForwardModel
+        implements JpfLanguageConstants
+{
+    public GenForwardModel( GenStrutsApp parent, AnnotationMirror annotation, ClassDeclaration jclass,
+                            String commentSuffix )
+    {
+        super( parent );
+        
+        setName( CompilerUtils.getString( annotation, NAME_ATTR, true ) );
+        setRedirect( CompilerUtils.getBoolean( annotation, REDIRECT_ATTR, false ).booleanValue() );
+        
+        //
+        // returnForm/returnFormType
+        //
+        ClassType returnFormType = CompilerUtils.getClassType( annotation, OUTPUT_FORM_BEAN_TYPE_ATTR, true );
+        String returnFormMember = CompilerUtils.getString( annotation, OUTPUT_FORM_BEAN_ATTR, true );
+        if ( returnFormMember != null )
+        {
+            FieldDeclaration field = CompilerUtils.getClassField( jclass, returnFormMember, null );
+            assert returnFormType == null;  // checker should catch this
+            assert field != null;           // checker should catch this
+            assert field.getType() instanceof ClassType : field.getType().getClass().getName(); // checker enforces
+            returnFormType = ( ClassType ) field.getType();
+        }
+        setReturnFormMember( returnFormMember );
+        String formClassName =
+                returnFormType != null ? CompilerUtils.getFormClassName( returnFormType, parent.getEnv() ): null;
+        setReturnFormType( formClassName );
+        
+        //
+        // path, navigateTo, returnAction (mutually exclusive)
+        //
+        String returnAction = CompilerUtils.getString( annotation, RETURN_ACTION_ATTR, true );
+        String navigateTo = CompilerUtils.getEnumFieldName( annotation, NAVIGATE_TO_ATTR, true );
+        String path = CompilerUtils.getString( annotation, PATH_ATTR, true );
+        
+        if ( returnAction != null )
+        {
+            assert navigateTo == null;
+            assert path == null;
+            setIsNestedReturn( true );
+            setPath( returnAction );    // set the returnAction as the path -- the runtime expects it there
+        }
+        else if ( navigateTo != null )
+        {
+            assert returnAction == null;
+            assert path == null;
+            
+            if ( navigateTo.equals( NAVIGATE_TO_PAGE_LEGACY_STR )
+                 || navigateTo.equals( NAVIGATE_TO_CURRENT_PAGE_STR )
+                 || navigateTo.equals( NAVIGATE_TO_PREVIOUS_PAGE_STR ) )
+            {
+                setReturnToPage( true );
+            }
+            else if ( navigateTo.equals( NAVIGATE_TO_PREVIOUS_ACTION_STR ) )
+            {
+                setReturnToAction( true );
+                boolean restore =
+                        CompilerUtils.getBoolean( annotation, RESTORE_QUERY_STRING_ATTR, false ).booleanValue();
+                setRestoreQueryString( restore );
+            }
+            else
+            {
+                assert false : "unknown value for navigateTo: \"" + navigateTo + "\"";
+            }
+
+            setPath( navigateTo );    // set the actual navigateTo value as the path -- the runtime expects it there
+        }
+        else
+        {
+            assert path != null;      // checker should enforce this
+            
+            //
+            // Translate our relative-path convention (normal) to the Struts convention, which adds a '/'
+            // to any module-relative path.
+            //
+            boolean contextRelative = true;
+            if ( ! path.startsWith( "/" ) )
+            {
+                contextRelative = false;
+                
+                 //
+                // If it's an absolute URL, then the path shouldn't have a slash inserted in front of it.
+                // URL.
+                //
+                if ( ! CompilerUtils.isAbsoluteURL( path ) )
+                {
+                    path = "/" + path;
+                }
+            }
+            
+            setPath( path );
+            setContextRelative( contextRelative );
+        }
+
+        addActionOutputs( annotation, jclass );
+        
+        if ( commentSuffix != null )
+        {
+            setComment( "forward \"" + getName() + "\"" + commentSuffix );  // @TODO I18N the comment
+        }        
+    }
+    
+    static void addForwards( AnnotationMirror annotation, ForwardContainer container, ClassDeclaration jclass,
+                             GenStrutsApp strutsApp, String commentSuffix )
+    {
+        List< AnnotationMirror > forwards = CompilerUtils.getAnnotationArray( annotation, FORWARDS_ATTR, true );
+        
+        if ( forwards != null )
+        {
+            for ( AnnotationMirror ann : forwards )
+            {
+                container.addForward( new GenForwardModel( strutsApp, ann, jclass, commentSuffix ) );
+            }
+        }
+    }
+        
+    protected void addActionOutputs( AnnotationMirror annotation, ClassDeclaration jclass )
+    {
+        List< AnnotationMirror > actionOutputs =
+                CompilerUtils.getAnnotationArray( annotation, ACTION_OUTPUTS_ATTR, true );
+        
+        if ( actionOutputs != null )
+        {
+            for ( AnnotationMirror ann : actionOutputs )
+            {
+                addActionOutput( new GenActionOutputModel( ann, jclass ) );
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenMessageResourcesModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenMessageResourcesModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.MessageResourcesModel;
+import org.apache.beehive.netui.compiler.model.StrutsApp;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import com.sun.mirror.declaration.AnnotationMirror;
+
+public class GenMessageResourcesModel extends MessageResourcesModel
+        implements JpfLanguageConstants
+{
+    public GenMessageResourcesModel( StrutsApp parent, AnnotationMirror annotation )
+    {
+        super( parent );
+        
+        setParameter( CompilerUtils.getString( annotation, NAME_ATTR, true ) );
+        setKey( CompilerUtils.getString( annotation, BUNDLE_KEY_ATTR, true ) );
+        setReturnNull( true );
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.xmlbeans.XmlException;
+
+import java.io.File;
+import java.io.IOException;
+
+public class GenSharedFlowStrutsApp
+        extends GenStrutsApp
+{
+    private static final String SHAREDFLOW_MODULE_PREFIX = "shared";
+    
+    private boolean _isGlobalApp;
+    
+    
+    public GenSharedFlowStrutsApp( File sourceFile, String containingPackage, ClassDeclaration jclass, AnnotationProcessorEnvironment env )
+            throws NoWebInfDirectoryException, XmlException, IOException
+    {
+        super( sourceFile, containingPackage, jclass, env );
+        _isGlobalApp = GLOBALAPP_PACKAGE.equals( containingPackage ) && sourceFile.getName().startsWith( GLOBALAPP_CLASSNAME );
+        recalculateStrutsConfigFile();  // it changes based on _isGlobalApp
+    }
+    
+    protected boolean isModuleDeclaredInWebXml()
+    {
+        return _isGlobalApp;
+    }
+    
+    protected void prefixModuleFileName( StringBuffer strutsFileName )
+    {
+        strutsFileName.append( STRUTS_CONFIG_SEPARATOR );
+        
+        if ( ! _isGlobalApp )
+        {
+            strutsFileName.append( SHAREDFLOW_MODULE_PREFIX );
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenSimpleActionModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenSimpleActionModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,116 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.model.ForwardModel;
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.declaration.AnnotationMirror;
+
+import java.util.List;
+
+
+public class GenSimpleActionModel
+        extends GenActionModel
+        implements JpfLanguageConstants
+{
+    public GenSimpleActionModel( AnnotationMirror annotation, GenStrutsApp parentApp, ClassDeclaration jclass )
+    {
+        super( CompilerUtils.getString( annotation, NAME_ATTR, true ), annotation, parentApp, jclass );
+        
+        setSimpleAction( true );
+        addForwards( annotation, parentApp, jclass );
+        
+        String formMember = getFormMember();
+        if ( formMember != null )
+        {
+            FieldDeclaration field = CompilerUtils.findField( jclass, formMember );
+            assert field != null;  // checker should prevent this
+            setFormBeanName( addFormBean( field.getType(), parentApp ) );
+        }
+        else
+        {
+            setReadonly( true );     // can't modify member state; mark as read-only
+        }
+    }
+
+    protected String getFormBean( Declaration sourceElement, GenStrutsApp parentApp )
+    {
+        return null;
+    }
+
+    protected void getForwards( AnnotationMirror annotation, ClassDeclaration jclass, GenStrutsApp parentApp )
+    {
+    }
+
+    private void addForwards( AnnotationMirror annotation, GenStrutsApp parentApp, ClassDeclaration jclass )
+    {
+        //
+        // First add the default forward -- the one that is parsed from the simple action annotation itself.
+        //
+        ForwardModel fwd = new SimpleActionForward( DEFAULT_SIMPLE_ACTION_FORWARD_NAME, parentApp, annotation, jclass );
+        
+        if ( fwd.getPath() != null || fwd.isReturnToAction() || fwd.isReturnToPage() || fwd.isNestedReturn() )
+        {
+            addForward( fwd );
+        }
+        
+        List< AnnotationMirror > conditionalFwdAnnotations =
+                CompilerUtils.getAnnotationArray( annotation, CONDITIONAL_FORWARDS_ATTR, true );
+        
+        if ( conditionalFwdAnnotations != null )
+        {
+            int anonCount = 0;
+            
+            for ( AnnotationMirror conditionalFwdAnnotation : conditionalFwdAnnotations )
+            {
+                ForwardModel conditionalFwd = new SimpleActionForward( parentApp, conditionalFwdAnnotation, jclass );
+                String expression = CompilerUtils.getString( conditionalFwdAnnotation, CONDITION_ATTR, true );
+                assert expression != null;
+                
+                if ( conditionalFwd.getName() == null ) conditionalFwd.setName( "_anon" + ++anonCount );
+                addForward( conditionalFwd );
+                addConditionalForward( expression, conditionalFwd.getName() );
+            }
+        }
+    }
+    
+    private static class SimpleActionForward extends GenForwardModel
+    {
+        public SimpleActionForward( GenStrutsApp parent, AnnotationMirror annotation, ClassDeclaration jclass )
+        {
+            super( parent, annotation, jclass, null );
+        }
+        
+        public SimpleActionForward( String name, GenStrutsApp parent, AnnotationMirror annotation, ClassDeclaration jclass )
+        {
+            super( parent, annotation, jclass, null );
+            setName( name );
+        }
+
+        protected void addActionOutputs( AnnotationMirror annotation, ClassDeclaration jclass )
+        {
+            // do nothing -- there are no action outputs on simple actions
+        }
+    }
+}
+

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,589 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.StrutsApp;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.beehive.netui.compiler.model.FormBeanModel;
+import org.apache.beehive.netui.compiler.model.MessageResourcesModel;
+import org.apache.beehive.netui.compiler.model.ActionModel;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.util.Date;
+import java.util.Collection;
+import java.util.List;
+
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.Modifier;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.ParameterDeclaration;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.type.ClassType;
+import com.sun.mirror.type.TypeMirror;
+
+
+public class GenStrutsApp
+        extends StrutsApp
+        implements JpfLanguageConstants
+{
+    private ClassDeclaration _jclass;
+    private String _containingPackage;
+    private File _strutsConfigFile;
+    private File _sourceFile;
+    private File _webappRoot;
+    private AnnotationProcessorEnvironment _env;
+    
+    protected void recalculateStrutsConfigFile()
+        throws XmlException, IOException
+    {
+        _strutsConfigFile = calculateStrutsConfigFile(); // caching this
+    }
+    
+    public GenStrutsApp( File sourceFile, String containingPackage, ClassDeclaration jclass,
+                         AnnotationProcessorEnvironment env )
+        throws NoWebInfDirectoryException, XmlException, IOException
+    {
+        super();
+        
+        _jclass = jclass;
+        _containingPackage = containingPackage;
+        _sourceFile = sourceFile;
+        _webappRoot = getWebappRootFromJpf( sourceFile ).getAbsoluteFile();
+        _env = env;
+        
+        recalculateStrutsConfigFile();
+        
+        if ( _jclass != null )
+        {
+            AnnotationMirror controllerAnnotation = CompilerUtils.getAnnotation( jclass, CONTROLLER_TAG_NAME );
+            
+            if ( controllerAnnotation != null )
+            {
+                boolean nested = CompilerUtils.getBoolean( controllerAnnotation, NESTED_ATTR, false ).booleanValue();
+                boolean single = CompilerUtils.getBoolean( controllerAnnotation, SINGLETON_ATTR, false ).booleanValue();
+                setNestedPageFlow( nested );
+                setSingletonPageFlow( single );
+                addMessageResources( controllerAnnotation );
+                addValidationMessages( controllerAnnotation );
+                addSimpleActions( controllerAnnotation );
+                GenForwardModel.addForwards( controllerAnnotation, this, _jclass, this, null );
+                GenExceptionModel.addCatches( controllerAnnotation, this, _jclass, this, this );
+            }
+            
+            addActionMethods();
+            addFormBeans( _jclass );
+        }
+    }
+    
+    private void addFormBeans( ClassDeclaration jclass )
+    {
+        Collection< TypeDeclaration > innerTypes = CompilerUtils.getClassNestedTypes( jclass );
+        
+        for ( TypeDeclaration innerType : innerTypes )
+        {
+            if ( innerType instanceof ClassDeclaration )
+            {
+                ClassDeclaration innerClass = ( ClassDeclaration ) innerType;
+                
+                if ( CompilerUtils.hasModifier( innerType, Modifier.PUBLIC ) 
+                     && CompilerUtils.isAssignableFrom( FORM_CLASS_NAME, innerClass, _env ) )
+                {
+                    addFormBean( innerClass, null );
+                }
+            }
+        }
+        
+    }    
+    
+    String addFormBean( ClassDeclaration formType, ActionModel usedByAction )
+    {
+        String formClass = CompilerUtils.getFormClassName( formType, _env );
+
+        //
+        // See if the app already has a form-bean of this type.  If so,
+        // we'll just use it; otherwise, we need to create it.
+        //
+        FormBeanModel existingBean = getFormBeanByType( formClass );
+        String formBeanName;
+
+        if ( existingBean != null )
+        {
+            formBeanName = existingBean.getName();
+        }
+        else
+        {
+            formBeanName = getFormNameForType( formClass );
+            addFormBean( new FormBeanModel( formBeanName, formClass, this ) );
+            getMessageResourcesFromForm( formType, usedByAction );
+        }
+        
+        return formBeanName;
+    }
+    
+    private void addMessageResources( AnnotationMirror controllerAnnotation )
+    {
+        List< AnnotationMirror > messageResources = 
+                CompilerUtils.getAnnotationArray( controllerAnnotation, MESSAGE_RESOURCES_ATTR, true );
+        
+        if ( messageResources != null )
+        {
+            for ( AnnotationMirror ann : messageResources )
+            {
+                addMessageResources( new GenMessageResourcesModel( this, ann ) );
+            }
+        }
+    }
+    
+    private void addValidationMessages( AnnotationMirror controllerAnnotation )
+    {
+        List< AnnotationMirror > validationMessages =
+                CompilerUtils.getAnnotationArray( controllerAnnotation, VALIDATION_MESSAGES_ATTR, true );
+        
+        if ( validationMessages != null )
+        {
+            String packagePrefix = _jclass.getPackage().getQualifiedName();
+            if ( packagePrefix != null ) packagePrefix += '.';
+        }
+    }
+    
+    private void addSimpleActions( AnnotationMirror controllerAnnotation )
+    {
+        List< AnnotationMirror > simpleActionAnnotations =
+                CompilerUtils.getAnnotationArray( controllerAnnotation, SIMPLE_ACTIONS_ATTR, true );
+        
+        if ( simpleActionAnnotations != null )
+        {
+            for ( AnnotationMirror ann : simpleActionAnnotations )
+            {
+                addActionMapping( new GenSimpleActionModel( ann, this, _jclass ) );
+            }
+        }
+    }
+    
+    private void addActionMethods()
+    {
+        Collection< MethodDeclaration > actionMethods = CompilerUtils.getClassMethods( _jclass, ACTION_TAG_NAME );
+        
+        for ( MethodDeclaration actionMethod : actionMethods )
+        {
+            ActionModel actionModel = new GenActionModel( actionMethod, this, _jclass );
+            addActionMapping( actionModel );
+            Collection< ParameterDeclaration > params = actionMethod.getParameters();
+            
+            if ( params.size() > 0 )
+            {
+                ParameterDeclaration param1 = params.iterator().next();
+                TypeMirror paramType = param1.getType();
+                
+                if ( paramType instanceof ClassType )
+                {
+                    getMessageResourcesFromForm( ( ( ClassType ) paramType ).getDeclaration(), actionModel );
+                }
+            }
+        }
+    }
+    
+    private void getMessageResourcesFromForm( ClassDeclaration formClassType, ActionModel actionModel )
+    {
+        AnnotationMirror ann = CompilerUtils.getAnnotation( formClassType, FORM_BEAN_TAG_NAME );
+        
+        if ( ann != null )
+        {
+            String defaultMessageResources = CompilerUtils.getString( ann, DEFAULT_MESSAGE_RESOURCES_ATTR, true );
+            
+            if ( defaultMessageResources != null )
+            {
+                for ( MessageResourcesModel i : getMessageResourcesList() )
+                {
+                    if ( i.getParameter().equals( defaultMessageResources ) ) return;
+                }
+                
+                MessageResourcesModel mrm = new MessageResourcesModel( this );
+                String key = "formMessages:" + CompilerUtils.getLoadableName( formClassType );  // TODO: constant
+                mrm.setKey( key );
+                mrm.setParameter( defaultMessageResources );
+                mrm.setReturnNull( true );
+                addMessageResources( mrm );
+                if ( actionModel != null ) actionModel.setFormBeanMessageResourcesKey( key );
+            }
+        }
+    }
+    
+    protected String getMergeFileName()
+    {
+        return CompilerUtils.getStringValue( _jclass, CONTROLLER_TAG_NAME, STRUTSMERGE_ATTR, true );
+    }
+    
+    public void writeToFile()
+        throws NoWebInfDirectoryException, FileNotFoundException, IOException, XmlException
+    {
+        writeToFile( getMergeFile( getMergeFileName() ) );
+    }
+    
+    public boolean isStale()
+        throws NoWebInfDirectoryException
+    {
+        return isStale( getMergeFile( getMergeFileName() ) );
+    }
+    
+    protected boolean isModuleDeclaredInWebXml()
+    {
+        String webappRelativeSourceFile = getWebappRelativeSourceFile();
+        return webappRelativeSourceFile.lastIndexOf( '/' ) == 0;
+    }
+    
+    protected void prefixModuleFileName( StringBuffer moduleFileName )
+    {
+    }
+    
+    /**
+     * Get the webapp-relative URI of the output file, with the given basename.
+     */ 
+    String getOutputFileURI( String fileBaseName )
+    {
+        StringBuffer strutsFileName = new StringBuffer( STRUTSCONFIG_OUTPUT_DIR );
+        strutsFileName.append( '/' ).append( fileBaseName );
+        
+        // Allow derived class to add pieces to the filename.
+        prefixModuleFileName( strutsFileName );
+        
+        if ( _containingPackage != null && _containingPackage.length() > 0 )
+        {
+            strutsFileName.append( STRUTS_CONFIG_SEPARATOR );
+            strutsFileName.append( _containingPackage.replace( '.', STRUTS_CONFIG_SEPARATOR ) );
+        }
+        
+        strutsFileName.append( STRUTS_CONFIG_EXTENSION );
+        return strutsFileName.toString();
+    }
+    
+    File getOutputFileForModule( String fileBaseName )
+    {
+        return new File( _webappRoot.getPath() + getOutputFileURI( fileBaseName ) );
+    }
+    
+    private File calculateStrutsConfigFile()
+        throws XmlException, IOException
+    {
+        File strutsConfigFile = getOutputFileForModule( STRUTS_CONFIG_PREFIX );
+        
+        //
+        // For the root Controller.jpf and for Global.app, we have to look in web.xml to get the output location.
+        // See the comment on getAlternateLocation for a rationale...
+        //
+        if ( isModuleDeclaredInWebXml() )
+        {
+            String alternateLocation = getAlternateLocation( strutsConfigFile, _webappRoot );
+                            
+            if ( alternateLocation != null )
+            {
+                return new File( _webappRoot.getPath() + alternateLocation );
+            }
+        }
+        
+        return strutsConfigFile;
+    }
+    
+    /**
+     * Tell whether the struts output file (jpf-struts-config-*.xml) is out of date, based on the
+     * file times of the source file and the (optional) struts-merge file.
+     */ 
+    public boolean isStale( File mergeFile )
+        throws NoWebInfDirectoryException
+    {
+        //
+        // We always write the root-level JPF and Global.app, because the struts XML
+        // config files for these modules are provided by default, and may be out of
+        // date, even if the file modification times don't indicate that this is true.
+        //
+        if ( isModuleDeclaredInWebXml() )
+        {
+            return true;
+        }
+        
+        //
+        // We can write to the file if it doesn't exist yet.
+        //
+        if ( ! _strutsConfigFile.exists() )
+        {
+            return true;
+        }
+        
+        long lastWrite = _strutsConfigFile.lastModified();
+        
+        if ( mergeFile != null && mergeFile.exists() && mergeFile.lastModified() > lastWrite )
+        {
+            return true;
+        }
+        
+        if ( _sourceFile.lastModified() > lastWrite )
+        {
+            return true;
+        }
+        
+        return false;
+    }
+    /**
+     * In some cases, canWrite() does not guarantee that a FileNotFoundException will not
+     * be thrown when trying to write to a file.  This method actually tries to overwrite
+     * the file as a test to see whether it's possible.
+     */ 
+    public boolean canWrite()
+    {
+        if ( ! _strutsConfigFile.canWrite() )
+        {
+            return false;
+        }
+        
+        try
+        {
+            //
+            // @TODO this appears to be the only way to predict whether the file can actually be
+            // written to; it may be that canWrite() returns true, but the file permissions
+            // (NTFS only?) will cause an exception to be thrown.  But is this worth the cost?
+            //
+            new FileOutputStream( _strutsConfigFile, true ).close();
+        }
+        catch ( FileNotFoundException e )
+        {
+            return false;
+        }
+        catch ( IOException e )
+        {
+            return false;
+        }
+        
+        return true;
+    }
+        
+    
+    public void writeToFile( File strutsMergeFile )
+        throws FileNotFoundException, IOException, XmlException, NoWebInfDirectoryException
+    {
+        _strutsConfigFile.getParentFile().mkdirs();
+        PrintStream out = new PrintStream( new FileOutputStream( _strutsConfigFile ) );
+        writeXml( out, strutsMergeFile, _webappRoot );
+        out.close();
+    }    
+    
+    public File getStrutsConfigFile()
+    {
+        return _strutsConfigFile;
+    }
+    
+    private static boolean isAtElement( XmlCursor curs, String localName )
+    {
+        return curs.getName().getLocalPart().equals( localName );
+    }
+    
+    /**
+     * Two special files, the module configs for the root module and "-global", are registered in
+     * web.xml explicitly.  If the user is pointing to an alternate (e.g., old) location for these
+     * files, we need to compile to that location.
+     */ 
+    private static String getAlternateLocation( File strutsConfigFile, File webappRoot )
+        throws XmlException, IOException
+    {
+        File webXmlFile = new File( webappRoot.getPath() + "/" + StrutsApp.WEBINF_DIR_NAME + "/web.xml" );
+        
+        if ( ! webXmlFile.canRead() )
+        {
+            // @TODO log this
+            return null;
+        }
+        
+        String strutsConfigFileName = strutsConfigFile.getName();
+        
+        //
+        // We're going to parse web.xml in a "loose" way, so we can accept both the Servlet 2.3 and Servlet 2.4 versions
+        // (and beyond) of the schema.  We're looking for this fragment:
+        //    <servlet>
+        //        <servlet-name>action</servlet-name>
+        //            <init-param>
+        //                <param-name>config</param-name>
+        //                <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml</param-value>
+        //            </init-param>
+        //            ...
+        //
+        // If this refers to the basename of our generated struts-config file, we'll use it to determine (override) the
+        // location of the output file.
+        //
+        XmlObject webXmlDoc = XmlObject.Factory.parse( webXmlFile );
+        XmlCursor curs = webXmlDoc.newCursor();
+        if ( curs.toFirstChild() && curs.toFirstChild() )
+        {
+            do
+            {
+                if ( isAtElement( curs, "servlet" ) )
+                {
+                    XmlCursor i = curs.newCursor();
+                    i.toFirstChild();
+                    do
+                    {
+                        if ( isAtElement( i, "servlet-name" ) && i.getTextValue().equals( "action" ) )
+                        {
+                            XmlCursor j = curs.newCursor();
+                            j.toFirstChild();
+                            
+                            do
+                            {
+                                if ( isAtElement( j, "init-param" ) )
+                                {
+                                    XmlCursor k = j.newCursor();
+                                    k.toFirstChild();
+                                    boolean isConfig = false;
+                                    String alternateLocation = null;
+                                    
+                                    do
+                                    {
+                                        if ( isAtElement( k, "param-name" ) && k.getTextValue().startsWith( "config" ) )
+                                        {
+                                            isConfig = true;
+                                        }
+                                        else if ( isAtElement( k, "param-value" ) )
+                                        {
+                                            alternateLocation =
+                                                parseAlternateLocation( k.getTextValue(), strutsConfigFileName );
+                                        }
+                                    } while ( k.toNextSibling() );
+                                    
+                                    if ( isConfig && alternateLocation != null )
+                                    {
+                                        return alternateLocation;
+                                    }
+                                }
+                            } while ( j.toNextSibling() );
+                            
+                            //
+                            // We found the action servlet, but no init-param gave an alternate location for our
+                            // struts-config output file.
+                            //
+                            return null;
+                        }
+                    } while ( i.toNextSibling() );
+                }
+            } while ( curs.toNextSibling() );
+        }
+        
+        return null;
+    }
+    
+    private static String parseAlternateLocation( String paramValue, String strutsConfigFileName )
+    {
+        //
+        // If the referenced struts-config file has the same name as the file
+        // we're going to generate, use the referenced file (its location may be
+        // different than our default location).
+        //
+        if ( paramValue.indexOf( strutsConfigFileName ) != -1 )
+        {
+            //
+            // This may be a comma-separated list of files.  Find the right one.
+            //
+            if ( paramValue.indexOf( "," ) != -1 )
+            {
+                String[] files = paramValue.split( "," );
+                for ( int k = 0; k < files.length; ++k )
+                {
+                    if ( files[k].indexOf( strutsConfigFileName ) != -1 )
+                    {
+                        return files[k].trim();
+                    }
+                }
+            }
+            else
+            {
+                return paramValue;
+            }
+        }
+        
+        return null;
+    }
+    
+    public File getMergeFile( String mergeFileName )
+        throws NoWebInfDirectoryException
+    {
+        if ( mergeFileName != null )
+        {
+            if ( mergeFileName.startsWith( "/" ) )
+            {
+                return new File( _webappRoot.getPath() + mergeFileName );
+            }
+            else
+            {
+                return new File( _sourceFile.getParentFile() + File.separator + mergeFileName );
+            }
+        }
+        
+        return null;
+    }
+
+    public String getWebappRelativeSourceFile()
+    {
+        return getWebappRelativePath( _sourceFile );
+    }
+
+    public File getSourceFile()
+    {
+        return _sourceFile;
+    }
+    
+    protected String getHeaderComment( File mergeFile )
+    {
+        StringBuffer comment = new StringBuffer( " Generated from " );
+        comment.append( getWebappRelativeSourceFile() );
+        if ( mergeFile != null )
+        {
+            comment.append( " and " ).append( getWebappRelativePath( mergeFile ) );
+        }
+        comment.append( " on " ).append( new Date().toString() ).append( " " );
+        return comment.toString();
+    }
+    
+    private String getWebappRelativePath( File file )
+    {
+        String webappRoot = _webappRoot.toString();
+        file = file.getAbsoluteFile();
+        
+        if ( file.toString().startsWith( webappRoot ) )
+        {
+            return file.toString().substring( webappRoot.length() ).replace( '\\', '/' );
+        }
+        else
+        {
+            return file.toString();
+        }
+    }
+    
+    AnnotationProcessorEnvironment getEnv()
+    {
+        return _env;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,391 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.validation.ValidationModel;
+import org.apache.beehive.netui.compiler.model.validation.ValidatorRule;
+import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
+import org.apache.beehive.netui.compiler.model.validation.ValidationModel.RuleInfo;
+import org.apache.beehive.netui.compiler.model.FormBeanModel;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.apache.xmlbeans.XmlException;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.Modifier;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.type.ClassType;
+
+import java.util.Locale;
+import java.util.Collection;
+import java.util.Map;
+import java.io.File;
+import java.io.PrintStream;
+import java.io.FileOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+public class GenValidationModel
+        extends ValidationModel
+        implements JpfLanguageConstants, ValidatorConstants
+{
+    private static final String STRUTS_VALIDATION_PREFIX = "jpf-validation";
+    private static final ValidatorRuleFactory VALIDATOR_RULE_FACTORY = new DefaultValidatorRuleFactory();
+    
+    private GenStrutsApp _strutsApp;
+
+
+    public GenValidationModel( ClassDeclaration jclass, GenStrutsApp strutsApp )
+    {
+        _strutsApp = strutsApp;
+        addRulesFromBeans( jclass );
+        addRulesFromActions( jclass );
+        addRulesFromClass( jclass );
+    }
+    
+    private void addRulesFromBeans( ClassDeclaration jclass )
+    {
+        //
+        // Read validation rules from public static inner classes (beans).
+        //
+        Collection< TypeDeclaration > innerTypes = CompilerUtils.getClassNestedTypes( jclass );
+        
+        for ( TypeDeclaration innerType : innerTypes )
+        {
+            if ( innerType instanceof ClassDeclaration
+                 && CompilerUtils.hasModifier( innerType, Modifier.PUBLIC )
+                 && CompilerUtils.hasModifier( innerType, Modifier.STATIC ) )
+            {
+                addRulesFromBeanClass( ( ClassDeclaration ) innerType );
+            }
+        }
+    }
+    
+    private void addRulesFromBeanClass( ClassDeclaration beanClass )
+    {
+        Collection< CompilerUtils.BeanPropertyDeclaration > properties =
+                CompilerUtils.getBeanProperties( beanClass, true );
+        
+        for ( CompilerUtils.BeanPropertyDeclaration property : properties )
+        {
+            MethodDeclaration getter = property.getGetter();
+            String propertyName = property.getPropertyName();
+            String formName = getFormBeanName( beanClass );
+            
+            if ( getter != null )
+            {
+                //
+                // Parse validation annotations on each getter.
+                //
+                Collection< AnnotationMirror > annotations = getter.getAnnotationMirrors();
+                
+                if ( annotations != null )
+                {
+                    for ( AnnotationMirror ann : annotations )
+                    {
+                        if ( CompilerUtils.isJpfAnnotation( ann, VALIDATABLE_PROPERTY_TAG_NAME ) )
+                        {
+                            //
+                            // Add field rules from the Jpf.ValidationLocaleRules annotation.
+                            //
+                            addRulesFromAnnotation( ann, formName, propertyName );
+                        }
+                        else
+                        {
+                            // We don't currently support rule annotations directly on getters.
+                            
+                            /*
+                            //
+                            // Add a field rule (which will apply to all locales.
+                            //
+                            ValidatorRule rule = getFieldRule( formName, propertyName, ann );
+                            
+                            if ( rule != null )
+                            {
+                            addFieldRuleForAllLocales( formName, propertyName, rule );
+                            setEmpty( false );
+                            }
+                            */
+                        }
+                    }
+                }
+            }
+        }
+    }
+    
+    
+    private void addRulesFromAnnotation( AnnotationMirror validationFieldAnn, String entityName, String propertyName )
+    {
+        //
+        // Add rules from the FieldValidationRules annotations in the "localeRules" member.
+        //
+        Collection< AnnotationMirror > localeRulesAnnotations =
+                CompilerUtils.getAnnotationArray( validationFieldAnn, LOCALE_RULES_ATTR, false );
+        String displayName = CompilerUtils.getString( validationFieldAnn, DISPLAY_NAME_ATTR, true );
+        String displayNameKey = CompilerUtils.getString( validationFieldAnn, DISPLAY_NAME_KEY_ATTR, true );
+        RuleInfo ruleInfo = new RuleInfo( entityName, propertyName, displayName, displayNameKey );
+                
+        
+        for ( AnnotationMirror ann : localeRulesAnnotations )
+        {
+            addFieldRules( ann, ruleInfo, false );
+        } 
+        
+        addFieldRules( validationFieldAnn, ruleInfo, true );
+    }
+    
+    private void addRulesFromActions( ClassDeclaration jclass )
+    {
+        Collection< MethodDeclaration > methods = CompilerUtils.getClassMethods( jclass, ACTION_TAG_NAME );
+        
+        for ( MethodDeclaration method : methods )
+        {
+            AnnotationMirror actionAnnotation = CompilerUtils.getAnnotation( method, ACTION_TAG_NAME );
+            
+            assert actionAnnotation != null;
+            Collection< AnnotationMirror > validationFieldAnnotations =
+                    CompilerUtils.getAnnotationArray( actionAnnotation, VALIDATABLE_PROPERTIES_ATTR, false );
+            String actionPath = "/" + method.getSimpleName();   // Struts validator needs the slash in front
+            
+            for ( AnnotationMirror validationFieldAnnotation : validationFieldAnnotations )
+            {
+                String propertyName = CompilerUtils.getString( validationFieldAnnotation, PROPERTY_NAME_ATTR, true );
+                assert propertyName != null;            // TODO: checker must enforce this
+                assert ! propertyName.equals( "" );     // TODO: checker must enforce this
+                
+                //
+                // Add the rules, and associate them with the action path ("/" + the action name).
+                //
+                addRulesFromAnnotation( validationFieldAnnotation, actionPath, propertyName );
+            }
+        }
+    }
+    
+    private String getFormBeanName( ClassDeclaration beanType )
+    {
+        String beanClassName = CompilerUtils.getLoadableName( beanType );
+        boolean isActionFormDerived =
+                CompilerUtils.isAssignableFrom( FORM_CLASS_NAME, beanType, _strutsApp.getEnv() );
+        
+        if ( isActionFormDerived )
+        {
+            FormBeanModel formBean = _strutsApp.getFormBeanByType( beanClassName );
+            
+            if ( formBean == null )
+            {
+                String formName = _strutsApp.getFormNameForType( beanClassName );
+                formBean = new FormBeanModel( formName, beanClassName, _strutsApp );
+                _strutsApp.addFormBean( formBean );
+                return formName;
+            }
+            
+            return formBean.getName();
+        }
+        else
+        {
+            return beanClassName;
+        }
+    }
+    
+    private void addRulesFromClass( ClassDeclaration jclass )
+    {
+        AnnotationMirror controllerAnnotation = CompilerUtils.getAnnotation( jclass, CONTROLLER_TAG_NAME );
+        
+        if ( controllerAnnotation != null )
+        {
+            Collection< AnnotationMirror > validationBeanAnnotations = 
+                    CompilerUtils.getAnnotationArray( controllerAnnotation, VALIDATABLE_BEANS_ATTR, false );
+            
+            for ( AnnotationMirror validationBeanAnnotation : validationBeanAnnotations )
+            {
+                ClassType beanType = CompilerUtils.getClassType( validationBeanAnnotation, TYPE_ATTR, true );
+                assert beanType != null;    // checker should enforce this
+                
+                Collection< AnnotationMirror > validationFieldAnnotations =
+                        CompilerUtils.getAnnotationArray( validationBeanAnnotation, FIELDS_ATTR, false );
+                
+                for ( AnnotationMirror validationFieldAnnotation : validationFieldAnnotations )
+                {
+                    String propName = CompilerUtils.getString( validationFieldAnnotation, PROPERTY_NAME_ATTR, true );
+                    assert propName != null;            // checker should enforce this
+                    assert ! propName.equals( "" );     // TODO: get checker to enforce this
+                    
+                    //
+                    // Add the rules.  If the bean is derived from ActionForm, associate the rules with the *name* of
+                    // the form; otherwise, associate them with the classname of the bean type.
+                    //
+                    String formName = getFormBeanName( beanType.getDeclaration() );
+                    addRulesFromAnnotation( validationFieldAnnotation, formName, propName );
+                }
+            }
+        }
+    }
+    
+    /**
+     * Add field rules from either a Jpf.ValidationField or a Jpf.ValidationLocaleRules annotation.
+     */ 
+    private void addFieldRules( AnnotationMirror rulesContainerAnnotation, RuleInfo ruleInfo,
+                                boolean applyToAllLocales )
+    {
+        //
+        // First parse the locale from the wrapper annotation.  This will apply to all rules inside.
+        //
+        Locale locale = null;
+        
+        if ( ! applyToAllLocales )
+        {
+            String language = CompilerUtils.getString( rulesContainerAnnotation, LANGUAGE_ATTR, true );
+            
+            //
+            // If there's no language specified, then this rule will only apply for the default ruleset
+            // (i.e., if there are explicit rules for the requested locale, this rule will not be run).
+            //
+            if ( language != null )
+            {
+                String country = CompilerUtils.getString( rulesContainerAnnotation, COUNTRY_ATTR, true );
+                String variant = CompilerUtils.getString( rulesContainerAnnotation, VARIANT_ATTR, true );
+                
+                if ( country != null && variant != null ) locale = new Locale( language, country, variant );
+                else if ( country != null ) locale = new Locale( language, country );
+                else locale = new Locale( language );
+            }
+        }
+        
+        Map< AnnotationTypeElementDeclaration, AnnotationValue > valuesPresent =
+                rulesContainerAnnotation.getElementValues();
+        
+        for ( Map.Entry< AnnotationTypeElementDeclaration, AnnotationValue > entry : valuesPresent.entrySet() )
+        {
+            Object val = entry.getValue().getValue();
+            
+            if ( val instanceof AnnotationMirror )
+            {
+                AnnotationMirror annotationVal = ( AnnotationMirror ) val;
+                ValidatorRule rule = getFieldRule( ruleInfo.getEntityName(), ruleInfo.getFieldName(), annotationVal );
+                
+                if ( rule != null )
+                {
+                    if ( applyToAllLocales )
+                    {
+                        addFieldRuleForAllLocales( ruleInfo, rule );
+                    }
+                    else
+                    {
+                        addFieldRule( ruleInfo, rule, locale );
+                    }
+                }
+            }
+        } 
+        
+        setEmpty( false );  // this ValidationModel is only "empty" if there are no rules.
+    }
+    
+    private ValidatorRule getFieldRule( String entityName, String propertyName, AnnotationMirror ruleAnnotation )
+    {
+        ValidatorRule rule = VALIDATOR_RULE_FACTORY.getFieldRule( entityName, propertyName, ruleAnnotation );
+        
+        if ( rule != null )
+        {
+            //
+            // message/message-key
+            //
+            rule.setMessage( CompilerUtils.getString( ruleAnnotation, MESSAGE_ATTR, true ) );
+            rule.setMessageKey( CompilerUtils.getString( ruleAnnotation, MESSAGE_KEY_ATTR, true ) );
+            if ( rule.getMessage() != null ) assert rule.getMessageKey() == null;   // TODO: checker should enforce
+            
+            //
+            // arg0
+            //
+            String arg0 = CompilerUtils.getString( ruleAnnotation, ARG0_ATTR, true );
+            if ( arg0 != null )
+            {
+                rule.setArg0( arg0, false );
+            }
+            else
+            {
+                String arg0Key = CompilerUtils.getString( ruleAnnotation, ARG0_KEY_ATTR, true );
+                if ( arg0Key != null ) rule.setArg0( arg0Key, true );
+            }
+            
+            //
+            // arg1
+            //
+            String arg1 = CompilerUtils.getString( ruleAnnotation, ARG1_ATTR, true );
+            if ( arg1 != null )
+            {
+                rule.setArg1( arg1, false );
+            }
+            else
+            {
+                String arg1Key = CompilerUtils.getString( ruleAnnotation, ARG1_KEY_ATTR, true );
+                if ( arg1Key != null ) rule.setArg1( arg1Key, true );
+            }
+            
+            //
+            // arg2
+            //
+            String arg2 = CompilerUtils.getString( ruleAnnotation, ARG2_ATTR, true );
+            if ( arg2 != null )
+            {
+                rule.setArg2( arg2, false );
+            }
+            else
+            {
+                String arg2Key = CompilerUtils.getString( ruleAnnotation, ARG2_KEY_ATTR, true );
+                if ( arg2Key != null ) rule.setArg2( arg2Key, true );
+            }
+            
+            //
+            // arg3
+            //
+            String arg3 = CompilerUtils.getString( ruleAnnotation, ARG3_ATTR, true );
+            if ( arg3 != null )
+            {
+                rule.setArg3( arg3, false );
+            }
+            else
+            {
+                String arg3Key = CompilerUtils.getString( ruleAnnotation, ARG3_KEY_ATTR, true );
+                if ( arg3Key != null ) rule.setArg3( arg3Key, true );
+            }
+        }
+        
+        return rule;
+    }
+
+    protected String getHeaderComment( File mergeFile )
+    {
+        return _strutsApp.getHeaderComment( mergeFile );
+    }
+
+    public void writeToFile()
+        throws FileNotFoundException, XmlException, IOException
+    {
+        File outputFile = _strutsApp.getOutputFileForModule( STRUTS_VALIDATION_PREFIX );
+        writeXml( new PrintStream( new FileOutputStream( outputFile ) ), null );    // @TODO need to pass in the merge file
+    }
+
+    public String getOutputFileURI()
+    {
+        return _strutsApp.getOutputFileURI( STRUTS_VALIDATION_PREFIX );
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/ValidatorRuleFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/genmodel/ValidatorRuleFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.genmodel;
+
+import org.apache.beehive.netui.compiler.model.validation.ValidatorRule;
+import com.sun.mirror.declaration.AnnotationMirror;
+
+
+public interface ValidatorRuleFactory
+{
+    public ValidatorRule getFieldRule( String entityName, String propertyName, AnnotationMirror ruleAnnotation );
+}
+

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ActionGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ActionGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.FlowControllerInfo;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.*;
+
+
+public class ActionGrammar
+        extends AnnotationGrammar
+{
+    private static String[][] MUTUALLY_EXCLUSIVE_ATTRS = { { ROLES_ALLOWED_ATTR, LOGIN_REQUIRED_ATTR } };
+
+    
+    public ActionGrammar( AnnotationProcessorEnvironment env, Diagnostics diags,
+                          RuntimeVersionChecker rvc, FlowControllerInfo fcInfo )
+    {
+        super( env, diags, null, rvc );
+        
+        addMemberType( LOGIN_REQUIRED_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( ROLES_ALLOWED_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( READONLY_ATTR, new AnnotationMemberType( VERSION_8_SP2_STRING, this ) );
+        addMemberType( USE_FORM_BEAN_ATTR,
+                       new WritableFieldType( OBJECT_CLASS_NAME, USE_FORM_BEAN_ATTR, VERSION_8_SP2_STRING, this ) );
+        
+        addMemberArrayGrammar( FORWARDS_ATTR, new ForwardGrammar( env, diags, null, rvc, fcInfo ) );
+        addMemberArrayGrammar( CATCHES_ATTR, new CatchGrammar( env, diags, null, rvc, ACTION_TAG_NAME, fcInfo ) );
+        addMemberArrayGrammar( VALIDATABLE_PROPERTIES_ATTR, new ValidationFieldGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATION_ERROR_FORWARD_ATTR, new ForwardGrammar( env, diags, null, rvc, fcInfo ) );
+    }
+
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return MUTUALLY_EXCLUSIVE_ATTRS;
+    }
+
+    public String[][] getRequiredAttrs()
+    {
+        return null;
+    }    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+* B E A   S Y S T E M S
+* Copyright 2002-2004  BEA Systems, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* 
+*     http://www.apache.org/licenses/LICENSE-2.0
+* 
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* $Header:$
+*/
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VERSION_9_0_STRING;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MESSAGE_KEY_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MESSAGE_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ARG0_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ARG0_KEY_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ARG1_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ARG1_KEY_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ARG2_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ARG2_KEY_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ARG3_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ARG3_KEY_ATTR;
+
+
+public class BaseValidationRuleGrammar
+        extends AnnotationGrammar
+{
+    private static final String[][] MUTUALLY_EXCLUSIVE_ATTRS =
+            {
+                { MESSAGE_KEY_ATTR, MESSAGE_ATTR },
+                { ARG0_KEY_ATTR, ARG0_ATTR },
+                { ARG1_KEY_ATTR, ARG1_ATTR },
+                { ARG2_KEY_ATTR, ARG2_ATTR },
+                { ARG3_KEY_ATTR, ARG3_ATTR },
+                { ARG0_KEY_ATTR, MESSAGE_ATTR },
+                { ARG1_KEY_ATTR, MESSAGE_ATTR },
+                { ARG2_KEY_ATTR, MESSAGE_ATTR },
+                { ARG3_KEY_ATTR, MESSAGE_ATTR },
+            };
+    
+    
+    public BaseValidationRuleGrammar( AnnotationProcessorEnvironment env, Diagnostics diags,
+                                      RuntimeVersionChecker runtimeVersionChecker )
+    {
+        super( env, diags, VERSION_9_0_STRING, runtimeVersionChecker );
+        
+        addMemberType( MESSAGE_KEY_ATTR, new MessageKeyType( null, this ) );
+    }
+
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return MUTUALLY_EXCLUSIVE_ATTRS;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/CatchGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/CatchGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,199 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.FlowControllerInfo;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.ParameterDeclaration;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.type.TypeMirror;
+import com.sun.mirror.type.ClassType;
+
+import java.util.Map;
+import java.util.Collection;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.*;
+
+
+public class CatchGrammar
+        extends AnnotationGrammar
+{
+    private static String[][] MUTUALLY_EXCLUSIVE_ATTRS = { { PATH_ATTR, METHOD_ATTR } };
+    private static String[][] REQUIRED_ATTRS = { { TYPE_ATTR }, { PATH_ATTR, METHOD_ATTR } };
+
+    private String _annotationRootName;
+    
+    
+    public CatchGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, String requiredRuntimeVersion,
+                         RuntimeVersionChecker runtimeVersionChecker, String annotationRootName,
+                         FlowControllerInfo fcInfo )
+    {
+        super( env, diags, requiredRuntimeVersion, runtimeVersionChecker );
+        
+        _annotationRootName = annotationRootName;   // the parent of the list of @Jpf.Catch annotations.
+        addMemberType( METHOD_ATTR, new CatchTagMethodType() );
+        addMemberType( TYPE_ATTR, new TypeNameType( THROWABLE_CLASS_NAME, false, null, this ) );
+        addMemberType( PATH_ATTR, new WebappPathOrActionType( false, null, this, fcInfo ) );
+        addMemberType( MESSAGE_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( MESSAGE_KEY_ATTR, new AnnotationMemberType( null, this ) );
+    }
+    
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return MUTUALLY_EXCLUSIVE_ATTRS;
+    }
+
+    public String[][] getRequiredAttrs()
+    {
+        return REQUIRED_ATTRS;
+    }
+
+    /**
+     * @param checkResults map of member-name (String) -> result-from-checking (Object)
+     * @return a result (any Object) that will be passed back to the parent checker.  May be <code>null</code>.
+     */
+    protected Object onEndCheck( AnnotationMirror annotation, MemberDeclaration classMember, Map checkResults )
+    {
+        MethodDeclaration handlerMethod = ( MethodDeclaration ) checkResults.get( METHOD_ATTR );
+        ClassType exceptionType = ( ClassType ) checkResults.get( TYPE_ATTR );
+        
+        //
+        // If either of these are null, then there was another already-reported error (e.g., type was unresolved).
+        //
+        if ( handlerMethod == null || exceptionType == null )
+        {
+            return null;
+        }
+        
+        //
+        // Make sure the given handler method can catch the right kind of exception.
+        //
+        Collection< ParameterDeclaration > parameters = handlerMethod.getParameters();
+                
+        //
+        // If the method's arguments are wrong in any way, don't worry about it -- the exception-handler checker will
+        // report an error.
+        //
+        if ( parameters.size() > 0 )
+        {
+            TypeMirror handledExceptionType = parameters.iterator().next().getType();
+            
+            if ( ! CompilerUtils.isAssignableFrom( handledExceptionType, exceptionType.getDeclaration() ) )
+            {
+                addError( annotation, "error.incompatible-exception-handler", handlerMethod.getSimpleName(),
+                          exceptionType.getDeclaration().getQualifiedName() );
+            }
+        }
+
+        return null;
+    }
+    
+    private class CatchTagMethodType
+            extends MemberMethodType
+    {
+        public CatchTagMethodType()
+        {
+            super( EXCEPTION_HANDLER_TAG_NAME, "error.unresolved-exception-handler", null,  CatchGrammar.this );
+        }
+
+        /**
+         * Derived classes can plug in here to do additional checks.
+         */
+        protected void checkMethod( MethodDeclaration methodBeingChecked, AnnotationValue value, AnnotationMirror parentAnnotation,
+                                    MemberDeclaration classMember )
+        {
+            //
+            // Make sure the current entity (class or action method) doesn't have two @jpf:catch annotations
+            // that refer to methods with duplicate @jpf:forwards.
+            //
+            Collection< AnnotationMirror > catches =
+                    CompilerUtils.getAnnotationArrayValue( classMember, _annotationRootName, CATCHES_ATTR, true );
+            TypeDeclaration outerType = CompilerUtils.getOuterClass( classMember );
+            
+            if ( catches == null )
+            {
+                return;
+            }
+            
+            for ( AnnotationMirror catchAnnotation : catches )
+            {
+                //
+                // Find the method referred to in this annotation.  If we can't find it, do nothing -- this
+                // will get caught elsewhere in the checking.
+                //
+                String methodName = CompilerUtils.getString( catchAnnotation, METHOD_ATTR, false );
+            
+                if ( methodName.length() > 0 && ! methodName.equals( methodBeingChecked.getSimpleName() ) )
+                {
+                    MethodDeclaration otherMethod = findMethod( methodName, outerType );
+                    
+                    if ( otherMethod != null )
+                    {
+                        //
+                        // Look through this other method's forwards.  None may have the same name (and different path)
+                        // as the current one.
+                        //
+                        Collection< AnnotationMirror > otherForwards =
+                                CompilerUtils.getAnnotationArrayValue( otherMethod, EXCEPTION_HANDLER_TAG_NAME,
+                                                                          FORWARDS_ATTR, false );
+                        
+                        for ( AnnotationMirror otherForward : otherForwards )
+                        {
+                            String otherForwardName = CompilerUtils.getString( otherForward, NAME_ATTR, true );
+                            String otherForwardPath = CompilerUtils.getString( otherForward, PATH_ATTR, true );
+                            String otherFwdReturnTo =
+                                    CompilerUtils.getEnumFieldName( otherForward, NAVIGATE_TO_ATTR, true );
+                        
+                            Collection< AnnotationMirror > forwards = 
+                                    CompilerUtils.getAnnotationArrayValue( methodBeingChecked,
+                                                                              EXCEPTION_HANDLER_TAG_NAME,
+                                                                              FORWARDS_ATTR, false );
+                            
+                            for ( AnnotationMirror forward : forwards )
+                            {
+                                String forwardName = CompilerUtils.getString( forward, NAME_ATTR, true );
+                                String forwardPath = CompilerUtils.getString( forward, PATH_ATTR, true );
+                                String fwdReturnTo = CompilerUtils.getEnumFieldName( forward, NAVIGATE_TO_ATTR, true );
+                            
+                                if ( forwardName != null && forwardName.equals( otherForwardName ) )
+                                {
+                                    if ( ( forwardPath == null || ! forwardPath.equals( otherForwardPath ) )
+                                         && ( fwdReturnTo == null || ! fwdReturnTo.equals( otherFwdReturnTo ) ) )
+                                    {
+                                        addError( value, "error.duplicate-exception-handler-forwards",
+                                                  new Object[]{ methodBeingChecked.getSimpleName(), methodName, forwardName } );
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,78 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.FlowControllerInfo;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import org.apache.beehive.netui.compiler.model.schema.struts11.StrutsConfigDocument;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.LOGIN_REQUIRED_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ROLES_ALLOWED_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.READONLY_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.STRUTSMERGE_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.FORWARDS_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.CATCHES_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MESSAGE_RESOURCES_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.SIMPLE_ACTIONS_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.CONTROLLER_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VERSION_8_SP2_STRING;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATABLE_BEANS_ATTR;
+
+
+public class ControllerGrammar
+        extends AnnotationGrammar
+{    
+    private static String[][] MUTUALLY_EXCLUSIVE_ATTRS = { { ROLES_ALLOWED_ATTR, LOGIN_REQUIRED_ATTR } };
+ 
+    public ControllerGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc,
+                              FlowControllerInfo fcInfo )
+    {
+        super( env, diags, null, rvc );
+        
+        addMemberType( LOGIN_REQUIRED_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( ROLES_ALLOWED_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( READONLY_ATTR, new AnnotationMemberType( VERSION_8_SP2_STRING, this ) );
+        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType( StrutsConfigDocument.type, null, this ) );
+        
+        addMemberArrayGrammar( FORWARDS_ATTR, new ForwardGrammar( env, diags, null, rvc, fcInfo ) );
+        addMemberArrayGrammar( CATCHES_ATTR, new CatchGrammar( env, diags, null, rvc, CONTROLLER_TAG_NAME, fcInfo ) );
+        addMemberArrayGrammar( MESSAGE_RESOURCES_ATTR, new MessageResourcesGrammar( env, diags, null, rvc ) );
+        addMemberArrayGrammar( VALIDATABLE_BEANS_ATTR, new ValidationBeanGrammar( env, diags, rvc ) );
+        addMemberArrayGrammar( SIMPLE_ACTIONS_ATTR, new SimpleActionGrammar( env, diags, rvc, fcInfo ) );
+    }
+    
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return MUTUALLY_EXCLUSIVE_ATTRS;
+    }
+
+    public String[][] getRequiredAttrs()
+    {
+        return null;
+    }
+
+    public String[][] getAttrDependencies()
+    {
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/EnumType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/EnumType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,113 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+
+import java.util.Map;
+import java.util.HashMap;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PAGEFLOW_RUNTIME_JAR;
+
+
+/**
+ * Supports deprecated values and values that require particular runtime versions.
+ */ 
+public final class EnumType
+        extends AnnotationMemberType
+{
+    /** map of enum-val (String) -> required-runtime-version (String, may be null) */
+    private Map _enumRequiredRuntimeVersions = null;
+    
+    /** Map of deprecated-value (String) -> error message key (String) **/
+    private Map _deprecatedValues;
+    
+
+    public EnumType( String[][] enumValues, String[][] deprecatedValues, String requiredRuntimeVersion,
+                     AnnotationGrammar parentGrammar )
+    {
+        super( requiredRuntimeVersion, parentGrammar );
+        
+        if ( deprecatedValues != null )
+        {
+            _deprecatedValues = new HashMap();
+            
+            for ( int i = 0; i < deprecatedValues.length; ++i )
+            {
+                String[] valueAndDiagnostic = deprecatedValues[i];
+                assert valueAndDiagnostic.length == 2;
+                _deprecatedValues.put( valueAndDiagnostic[0], valueAndDiagnostic[1] );
+            }
+        }
+        
+        if ( enumValues != null )
+        {
+            _enumRequiredRuntimeVersions = new HashMap();
+            
+            for ( int i = 0; i < enumValues.length; i++ )
+            {
+                String[] valueAndRequiredRuntimeVersion = enumValues[i];
+                assert valueAndRequiredRuntimeVersion.length == 2;
+                String enumValue = valueAndRequiredRuntimeVersion[0];
+                String enumValRequiredRuntimeVersion = valueAndRequiredRuntimeVersion[1];
+                
+                if ( enumValRequiredRuntimeVersion != null )
+                {
+                    _enumRequiredRuntimeVersions.put( enumValue, enumValRequiredRuntimeVersion );
+                }
+            }
+        }
+    }
+    
+    public Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue member,
+                           AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        //
+        // Check deprecated values.
+        //
+        String val = CompilerUtils.getEnumFieldName( member );
+        String errorKey = _deprecatedValues != null ? ( String ) _deprecatedValues.get( val ) : null;
+        
+        if ( errorKey != null )
+        {
+            addWarning( member, errorKey, val );
+        }
+        
+        //
+        // Check required runtime version for enum values.
+        //
+        String ver = _enumRequiredRuntimeVersions != null ? ( String ) _enumRequiredRuntimeVersions.get( val ) : null;
+        
+        if ( ver != null )
+        {
+            getParentGrammar().getRuntimeVersionChecker().checkRuntimeVersion(
+                    ver, member, getParentGrammar().getDiagnostics(), "error.required-runtime-version-enumval", val,
+                    PAGEFLOW_RUNTIME_JAR );
+        }
+        
+        return super.onCheck( valueDecl, member, parentAnnotation, classMember );
+    }
+    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ExceptionHandlerGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ExceptionHandlerGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.FlowControllerInfo;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+
+import java.util.Collection;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.READONLY_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VERSION_8_SP2_STRING;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.EXCEPTION_HANDLER_TAG_NAME;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.FORWARDS_ATTR;
+
+
+public class ExceptionHandlerGrammar
+        extends AnnotationGrammar
+{
+    public ExceptionHandlerGrammar( AnnotationProcessorEnvironment env, Diagnostics diags,
+                                    RuntimeVersionChecker runtimeVersionChecker, FlowControllerInfo fcInfo )
+    {
+        super( env, diags, null, runtimeVersionChecker );
+        
+        addMemberType( READONLY_ATTR, new AnnotationMemberType( VERSION_8_SP2_STRING, this ) );
+        addMemberArrayGrammar( FORWARDS_ATTR, new ExceptionHandlerForwardGrammar( fcInfo ) );
+    }
+
+    protected boolean onBeginCheck( AnnotationMirror annotation, MemberDeclaration classMember )
+    {
+        TypeDeclaration outerType = CompilerUtils.getOuterClass( classMember );
+        String thisMethodName = classMember.getSimpleName();
+        Collection< MethodDeclaration > classMethods =
+                CompilerUtils.getClassMethods( outerType, EXCEPTION_HANDLER_TAG_NAME );
+        
+        for ( MethodDeclaration method : classMethods )
+        {
+            if ( ! method.equals( classMember ) && method.getSimpleName().equals( thisMethodName ) )
+            {
+                addError( annotation, "error.duplicate-exception-handler" );
+            }
+        }
+
+        return super.onBeginCheck( annotation, classMember );
+    }
+    
+    private class ExceptionHandlerForwardGrammar
+            extends ForwardGrammar
+    {
+        public ExceptionHandlerForwardGrammar( FlowControllerInfo fcInfo )
+        {
+            super( ExceptionHandlerGrammar.this.getEnv(), ExceptionHandlerGrammar.this.getDiagnostics(),
+                   ExceptionHandlerGrammar.this.getRequiredRuntimeVersion(),
+                   ExceptionHandlerGrammar.this.getRuntimeVersionChecker(), fcInfo );
+        }
+    
+        protected AnnotationMemberType getNameType()
+        {
+            return new UniqueValueType( FORWARDS_ATTR, false, false, null, this );
+        }
+    }
+    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ForwardGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ForwardGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,270 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.FlowControllerInfo;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.type.ClassType;
+import com.sun.mirror.type.TypeMirror;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.*;
+
+
+public class ForwardGrammar
+        extends AnnotationGrammar
+{
+    private static final String[][] NAVIGATE_TO_VALS = new String[][]
+            {
+                { NAVIGATE_TO_CURRENT_PAGE_STR, VERSION_8_SP2_STRING },
+                { NAVIGATE_TO_PREVIOUS_PAGE_STR, VERSION_8_SP2_STRING },
+                { NAVIGATE_TO_PAGE_LEGACY_STR, null },
+                { NAVIGATE_TO_PREVIOUS_ACTION_STR, VERSION_8_SP2_STRING },
+            };
+    
+    private static final String[][] DEPRECATED_NAVIGATE_TO_VALS = new String[][]
+            {
+                { NAVIGATE_TO_PAGE_LEGACY_STR, "warning.return-to-page-deprecated" },
+            };
+
+    private static String[][] MUTUALLY_EXCLUSIVE_ATTRS =
+            {
+                { PATH_ATTR, RETURN_ACTION_ATTR, NAVIGATE_TO_ATTR },
+                { OUTPUT_FORM_BEAN_TYPE_ATTR, OUTPUT_FORM_BEAN_ATTR }
+            };
+
+    private static String[][] REQUIRED_ATTRS =
+            {
+                { NAME_ATTR }, { PATH_ATTR, RETURN_ACTION_ATTR, NAVIGATE_TO_ATTR },
+            };
+
+    private static String[][] ATTR_DEPENDENCIES =
+            {
+                { OUTPUT_FORM_BEAN_TYPE_ATTR, RETURN_ACTION_ATTR },
+                { OUTPUT_FORM_BEAN_ATTR, RETURN_ACTION_ATTR },
+                { REDIRECT_ATTR, PATH_ATTR, NAVIGATE_TO_ATTR },
+                { RESTORE_QUERY_STRING_ATTR, NAVIGATE_TO_ATTR }
+            };
+    
+    private FlowControllerInfo _fcInfo;
+    
+    
+    public ForwardGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, String requiredRuntimeVersion,
+                           RuntimeVersionChecker runtimeVersionChecker, FlowControllerInfo fcInfo )
+    {
+        super( env, diags, requiredRuntimeVersion, runtimeVersionChecker );
+        _fcInfo = fcInfo;
+        
+        addMemberType( NAME_ATTR, getNameType() );
+        addMemberType( OUTPUT_FORM_BEAN_TYPE_ATTR, new TypeNameType( null, false, null, this ) );
+        addMemberType( OUTPUT_FORM_BEAN_ATTR, new MemberFieldType( null , null, this ) );
+        addMemberType( RETURN_ACTION_ATTR, new JavaIdentifierType( null, this ) );
+        addMemberType( PATH_ATTR, new WebappPathOrActionType( false, null, this, fcInfo ) );
+        addMemberType( REDIRECT_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( NAVIGATE_TO_ATTR, new EnumType( NAVIGATE_TO_VALS, DEPRECATED_NAVIGATE_TO_VALS, null, this ) );
+        addMemberType( RESTORE_QUERY_STRING_ATTR, new AnnotationMemberType( VERSION_9_0_STRING, this ) );
+    }
+
+    protected AnnotationMemberType getNameType()
+    {
+        return new ForwardNameType();
+    }
+    
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return MUTUALLY_EXCLUSIVE_ATTRS;
+    }
+
+    public String[][] getRequiredAttrs()
+    {
+        return REQUIRED_ATTRS;
+    }
+
+    public String[][] getAttrDependencies()
+    {
+        return ATTR_DEPENDENCIES;
+    }
+
+    protected void onCheckMember( AnnotationTypeElementDeclaration memberDecl, AnnotationValue value,
+                                  AnnotationMirror annotation, MemberDeclaration classMember )
+    {
+        String valueName = memberDecl.getSimpleName();
+        boolean isReturnAction = valueName.equals( RETURN_ACTION_ATTR );
+        
+        if ( isReturnAction || valueName.equals( OUTPUT_FORM_BEAN_TYPE_ATTR ) ||
+             valueName.equals( OUTPUT_FORM_BEAN_ATTR ) )
+        {
+            if ( ! CompilerUtils.isInNestedPageFlow( classMember ) )
+            {
+                addError( classMember, "error.only-valid-in-nested", new Object[]{ valueName } );
+            }
+        }
+        
+        //
+        // If this is a return-action, store its info in the FlowControllerInfo (which is eventually provided to tools.
+        //
+        if ( isReturnAction )
+        {
+            ClassType formBeanType = CompilerUtils.getClassType( annotation, OUTPUT_FORM_BEAN_TYPE_ATTR, true );
+            
+            if ( formBeanType == null )
+            {
+                String memberFieldName = CompilerUtils.getString( annotation, OUTPUT_FORM_BEAN_ATTR, true );
+                
+                if ( memberFieldName != null )
+                {
+                    FieldDeclaration field = 
+                            CompilerUtils.findField( CompilerUtils.getOuterClass( classMember ), memberFieldName );
+                    
+                    if ( field != null )
+                    {
+                        TypeMirror fieldType = field.getType();
+                        
+                        if ( ! ( fieldType instanceof ClassType ) )
+                        {
+                            addError( annotation, "error.invalid-form-member-type", field.getSimpleName() );
+                        }
+                        else
+                        {
+                            formBeanType = ( ClassType ) fieldType;
+                        }
+                    }
+                }
+            }
+            
+            String actionName = ( String ) value.getValue();
+            String formTypeName = formBeanType != null ? formBeanType.getDeclaration().getQualifiedName() : null;
+            _fcInfo.addReturnAction( actionName, formTypeName );
+        }
+        
+        //
+        // Keep track of referenced page flows.
+        //
+        if ( valueName.equals( PATH_ATTR ) )
+        {
+            String uri = ( String ) value.getValue();
+            
+            if ( uri.endsWith( JPF_FILE_EXTENSION_DOT ) && uri.indexOf( ':' ) == -1 )
+            {
+                _fcInfo.addReferencedPageFlowURI( uri );
+            }
+        }
+    }
+    
+    protected class ForwardNameType
+        extends UniqueValueType
+    {
+        public ForwardNameType()
+        {
+            this( FORWARDS_ATTR );
+        }
+        
+        protected ForwardNameType( String memberGroupName )
+        {
+            super( memberGroupName, false, false, null, ForwardGrammar.this );
+        }
+
+        /**
+         * @return a List of AnnotationMirror
+         */
+        protected List< AnnotationMirror > getAdditionalAnnotationsToCheck( MemberDeclaration classMember )
+        {
+            //
+            // curEntity will be either the pageflow class or an action method, where we'll look
+            // for @jpf:catch annotations that refer to exception-handler methods, which also have
+            // forwards that get rolled onto this entity.
+            //
+            List< AnnotationMirror > additionalEntities = new ArrayList< AnnotationMirror >();
+            
+            TypeDeclaration outerType = CompilerUtils.getOuterClass( classMember );
+            
+            Collection< AnnotationMirror > classLevelCatches =
+                    CompilerUtils.getAnnotationArrayValue( outerType, CONTROLLER_TAG_NAME, CATCHES_ATTR, true );
+            addAdditionalAnnotationsToCheck( classLevelCatches, outerType, additionalEntities );
+            
+            if ( classMember instanceof MethodDeclaration )
+            {
+                Collection< AnnotationMirror > methodLevelCatches = 
+                        CompilerUtils.getAnnotationArrayValue( classMember, ACTION_TAG_NAME, CATCHES_ATTR, true );
+                addAdditionalAnnotationsToCheck( methodLevelCatches, outerType, additionalEntities );
+            }
+            
+            return additionalEntities;
+        }
+        
+        private void addAdditionalAnnotationsToCheck( Collection< AnnotationMirror > catches,
+                                                      TypeDeclaration outerType, List additionalEntities )
+        {
+            //
+            // For each of the given @Jpf.Catch annotations, find the matching @Jpf.ExceptionHandler method and
+            // add all of its @Jpf.Forward annotations to the list.
+            //
+            if ( catches != null )
+            {
+                for ( AnnotationMirror catchAnnotation : catches )
+                {
+                    String methodName = CompilerUtils.getString( catchAnnotation, METHOD_ATTR, false );
+                    
+                    if ( methodName.length() > 0 )
+                    {
+                        Collection< MethodDeclaration > allMethods = CompilerUtils.getClassMethods( outerType, null );
+                        
+                        for ( MethodDeclaration method : allMethods )
+                        {
+                            AnnotationMirror exHandlerAnnotation =
+                                CompilerUtils.getAnnotation( method, EXCEPTION_HANDLER_TAG_NAME );
+                            
+                            if ( exHandlerAnnotation != null && method.getSimpleName().equals( methodName ) )
+                            {
+                                Collection< AnnotationMirror > forwardAnnotations =
+                                        CompilerUtils.getAnnotationArray( exHandlerAnnotation, FORWARDS_ATTR, false );
+                                
+                                for ( AnnotationMirror forwardAnnotation : forwardAnnotations )
+                                {
+                                    additionalEntities.add( forwardAnnotation );
+                                }
+                            }
+                        }
+                    }
+                    
+                }
+            }
+        }
+
+        protected String getErrorMessageExtraInfo()
+        {
+            return CATCH_TAG_NAME;
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/JavaIdentifierType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/JavaIdentifierType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+
+public class JavaIdentifierType
+        extends AnnotationMemberType
+{
+    public JavaIdentifierType( String requiredRuntimeVersion, AnnotationGrammar parentGrammar )
+    {
+        super( requiredRuntimeVersion, parentGrammar );
+    }
+
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        String val = ( String ) value.getValue();
+
+        if ( val.length() > 0 )
+        {
+            char firstChar = val.charAt( 0 );
+            
+            if ( ! Character.isJavaIdentifierStart( firstChar ) )
+            {
+                Object[] args = new Object[]{ new Character( firstChar ) };
+                addError( value, "error.invalid-java-identifier-start", args );
+            }
+            
+            for ( int i = 1; i < val.length(); i++ )
+            {
+                if ( ! Character.isJavaIdentifierPart( val.charAt( i ) ) )
+                {
+                    Object[] args = new Object[]{ new Character( val.charAt( i ) ) };
+                    addError( value, "error.invalid-java-identifier-part", args );
+                }
+            }
+        }
+        
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MemberFieldType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MemberFieldType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.FieldDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+
+import java.util.Collection;
+
+
+public class MemberFieldType
+        extends AnnotationMemberType
+{
+    private String _requiredSuperclassName;
+
+
+    public MemberFieldType( String requiredSuperclassName, String requiredRuntimeVersion,
+                            AnnotationGrammar parentGrammar )
+    {
+        super( requiredRuntimeVersion, parentGrammar );
+        _requiredSuperclassName = requiredSuperclassName;
+    }
+
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue member,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        String fieldName = ( String ) member.getValue();        
+        Collection< FieldDeclaration > fields =
+                CompilerUtils.getClassFields( CompilerUtils.getOuterClass( classMember ) );
+        
+        for ( FieldDeclaration field : fields )
+        {
+            if ( field.getSimpleName().equals( fieldName ) )
+            {
+                if ( _requiredSuperclassName != null
+                     && ! CompilerUtils.isAssignableFrom( _requiredSuperclassName, field.getType(), getEnv() ) )
+                {
+                    addError( member, "error.wrong-field-type",
+                              new Object[]{ fieldName, _requiredSuperclassName } );
+                    return null;
+                }
+                
+                return field;
+            }
+        }
+        
+        addError( member, "error.unresolved-field", fieldName );
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MemberMethodType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MemberMethodType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+
+import java.util.Collection;
+
+public class MemberMethodType
+        extends AnnotationMemberType
+{
+    private String _requiredMethodAnnotation;
+    private String _errorCode;
+
+    public MemberMethodType( String requiredMethodAnnotation, String errorCode, String requiredRuntimeVersion,
+                             AnnotationGrammar parentGrammar )
+    {
+        super( requiredRuntimeVersion, parentGrammar );
+        _requiredMethodAnnotation = requiredMethodAnnotation;
+        _errorCode = errorCode;
+    }
+
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        //
+        // Look through all the methods to see if there is one whose name matches the given value.
+        //
+        TypeDeclaration outerType = CompilerUtils.getOuterClass( classMember );
+        Collection< MethodDeclaration > methods = CompilerUtils.getClassMethods( outerType, null );
+        String methodName = ( String ) value.getValue();
+        
+        for ( MethodDeclaration method : methods )
+        {
+            if ( method.getSimpleName().equals( methodName ) )
+            {
+                if ( _requiredMethodAnnotation == null
+                     || CompilerUtils.getAnnotation( method, _requiredMethodAnnotation ) != null )
+                {
+                    checkMethod( method, value, parentAnnotation, classMember );
+                    return method;
+                }
+            }
+        }
+        
+        addError( value, _errorCode, methodName );
+        return null;
+    }
+    
+    protected MethodDeclaration findMethod( String methodName, TypeDeclaration outerType )
+    {
+        Collection< MethodDeclaration > methods = CompilerUtils.getClassMethods( outerType, null );
+        
+        for ( MethodDeclaration method : methods )
+        {
+            if ( method.getSimpleName().equals( methodName ) )
+            {
+                if ( _requiredMethodAnnotation == null
+                     || CompilerUtils.getAnnotation( method, _requiredMethodAnnotation ) != null )
+                {
+                    return method;
+                }
+            }
+        }
+        
+        return null;
+    }
+
+    /**
+     * Derived classes can plug in here to do additional checks.
+     */
+    protected void checkMethod( MethodDeclaration method, AnnotationValue member, AnnotationMirror parentAnnotation,
+                                MemberDeclaration classMember )
+    {
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MessageKeyType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MessageKeyType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+* B E A   S Y S T E M S
+* Copyright 2002-2004  BEA Systems, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* 
+*     http://www.apache.org/licenses/LICENSE-2.0
+* 
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* $Header:$
+*/
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+
+
+
+public class MessageKeyType
+        extends AnnotationMemberType
+{
+    public MessageKeyType( String requiredRuntimeVersion, AnnotationGrammar parentGrammar )
+    {
+        super( requiredRuntimeVersion, parentGrammar );
+    }
+    
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue member,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        // We're not currently supporting generation of validation messages.
+        /*
+        //
+        // If there is a list of (generated) validation messages, and if the current message key isn't in it,
+        // output a warning.
+        //
+        TypeDeclaration outerType = CompilerUtils.getOutermostClass( classMember );
+        Collection< AnnotationMirror > validationMessages = 
+                CompilerUtils.getAnnotationArrayValue( outerType, CONTROLLER_TAG_NAME, VALIDATION_MESSAGES_ATTR, true );
+        
+        if ( validationMessages != null )
+        {
+            String value = ( String ) member.getValue();
+            
+            for ( AnnotationMirror validationMessage : validationMessages )
+            {
+                String msgKey = CompilerUtils.getString( validationMessage, KEY_ATTR, true );
+                assert msgKey != null;
+                if ( value.equals( msgKey ) ) return null;  // ok, we found it.
+            }
+        
+            addWarning( member, "warning.missing-validation-message", VALIDATION_MESSAGE_TAG_NAME, value );
+        }
+        */
+        
+        return null;
+    }
+}
\ No newline at end of file

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MessageResourcesGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/MessageResourcesGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.NAME_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MESSAGE_RESOURCES_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.BUNDLE_KEY_ATTR;
+
+
+public class MessageResourcesGrammar
+        extends AnnotationGrammar
+{
+    private static String[][] REQUIRED_ATTRS = { { NAME_ATTR } };
+    
+    public MessageResourcesGrammar( AnnotationProcessorEnvironment env, Diagnostics diags,
+                                    String requiredRuntimeVersion, RuntimeVersionChecker runtimeVersionChecker )
+    {
+        super( env, diags, requiredRuntimeVersion, runtimeVersionChecker );
+        
+        addMemberType( NAME_ATTR,
+                       new UniqueValueType( MESSAGE_RESOURCES_ATTR, false, false, null, this ) );
+        addMemberType( BUNDLE_KEY_ATTR, new UniqueValueType( MESSAGE_RESOURCES_ATTR, true, true, null, this ) );
+    }
+
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return null;
+    }
+
+    public String[][] getRequiredAttrs()
+    {
+        return REQUIRED_ATTRS;
+    }
+
+    public String[][] getAttrDependencies()
+    {
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/SimpleActionGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/SimpleActionGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,121 @@
+/*
+* B E A   S Y S T E M S
+* Copyright 2002-2004  BEA Systems, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* 
+*     http://www.apache.org/licenses/LICENSE-2.0
+* 
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* $Header:$
+*/
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.FlowControllerInfo;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.*;
+
+
+public class SimpleActionGrammar
+        extends AnnotationGrammar
+{
+    private static String[][] MUTUALLY_EXCLUSIVE_ATTRS = { { ROLES_ALLOWED_ATTR, LOGIN_REQUIRED_ATTR } };
+    
+    private ForwardGrammar _forwardGrammar;
+    
+    
+    public SimpleActionGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc,
+                                FlowControllerInfo fcInfo )
+    {
+        super( env, diags, VERSION_9_0_STRING, rvc );
+        
+        addMemberType( LOGIN_REQUIRED_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( ROLES_ALLOWED_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( READONLY_ATTR, new AnnotationMemberType( VERSION_8_SP2_STRING, this ) );
+        addMemberType( USE_FORM_BEAN_ATTR,
+                       new WritableFieldType( OBJECT_CLASS_NAME, USE_FORM_BEAN_ATTR, VERSION_8_SP2_STRING, this ) );
+        
+        addMemberArrayGrammar( CONDITIONAL_FORWARDS_ATTR,
+                               new SimpleActionForwardGrammar( env, diags, null, rvc, fcInfo ) );
+        addMemberArrayGrammar( CATCHES_ATTR, new CatchGrammar( env, diags, null, rvc, ACTION_TAG_NAME, fcInfo ) );
+        addMemberArrayGrammar( VALIDATABLE_PROPERTIES_ATTR, new ValidationFieldGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATION_ERROR_FORWARD_ATTR, new ForwardGrammar( env, diags, null, rvc, fcInfo ) );
+        
+        _forwardGrammar = new ForwardGrammar( env, diags, null, rvc, fcInfo );
+    }
+    
+    protected boolean onBeginCheck( AnnotationMirror annotation, MemberDeclaration classMember )
+    {
+        String name = CompilerUtils.getString( annotation, NAME_ATTR, false );
+        
+        if ( WebappPathOrActionType.actionExists( name, CompilerUtils.getOuterClass( classMember ), annotation ) )
+        {
+            addError( annotation, "error.duplicate-action", new Object[]{ name } );
+        }
+        
+        //
+        // A simple action is really like a combination of an action and a forward.  We extend ActionGrammar and
+        // then delegate to a ForwardGrammar here.
+        //
+        _forwardGrammar.check( annotation, classMember );
+        
+        return super.onBeginCheck( annotation, classMember );
+    }
+    
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return MUTUALLY_EXCLUSIVE_ATTRS;
+    }
+    
+    public String[][] getRequiredAttrs()
+    {
+        return null;
+    }    
+    
+    private static class SimpleActionForwardGrammar
+            extends ForwardGrammar
+    {
+        private static String[][] REQUIRED_ATTRS = { { PATH_ATTR, RETURN_ACTION_ATTR, NAVIGATE_TO_ATTR } };
+        
+        public SimpleActionForwardGrammar( AnnotationProcessorEnvironment env, Diagnostics diags,
+                                           String requiredRuntimeVersion, RuntimeVersionChecker runtimeVersionChecker,
+                                           FlowControllerInfo fcInfo )
+        {
+            super( env, diags, requiredRuntimeVersion, runtimeVersionChecker, fcInfo );
+        }
+
+        public String[][] getRequiredAttrs()
+        {
+            return REQUIRED_ATTRS;
+        }
+
+        protected AnnotationMemberType getNameType()
+        {
+            return new SimpleActionForwardNameType();
+        }
+        
+        private class SimpleActionForwardNameType
+            extends ForwardNameType
+        {
+            public SimpleActionForwardNameType()
+            {
+                super( CONDITIONAL_FORWARDS_ATTR );
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/TypeNameType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/TypeNameType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.type.ArrayType;
+import com.sun.mirror.type.ReferenceType;
+import com.sun.mirror.type.PrimitiveType;
+
+public class TypeNameType
+        extends AnnotationMemberType
+{
+    private String _requiredSuperclassName;
+    private boolean _allowArrayType;
+
+
+    public TypeNameType( String requiredSuperclassName, boolean allowArrayType, String requiredRuntimeVersion,
+                         AnnotationGrammar parentGrammar )
+    {
+        super( requiredRuntimeVersion, parentGrammar );
+        _requiredSuperclassName = requiredSuperclassName;
+        _allowArrayType = allowArrayType;
+    }
+
+    /**
+     * @return the fully-qualified type (ClassDeclaration)
+     */ 
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        Object val = value.getValue();
+        
+        if ( val instanceof PrimitiveType )
+        {
+            addError( value, "error.primitive-type-not-allowed" );
+        }
+        
+        assert val instanceof ReferenceType : val.getClass().getName();
+        ReferenceType type = ( ReferenceType ) val;
+        
+        if ( ! _allowArrayType && type instanceof ArrayType )
+        {
+            addError( value, "error.array-type-not-allowed" );
+        }
+        
+        if ( _requiredSuperclassName != null )
+        {
+            if ( ! CompilerUtils.isAssignableFrom( _requiredSuperclassName, type, getEnv() ) )
+            {
+                addError( value, "error.does-not-extend-base", new Object[]{ _requiredSuperclassName } );
+                return null;
+            }                
+        }
+        
+        checkType( type, value );
+        return type;
+    }
+
+    /**
+     * Derived classes can plug in here to do further checks on the type.
+     */
+    protected void checkType( ReferenceType type, AnnotationValue member )
+    {
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/UniqueValueType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/UniqueValueType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,177 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+
+import java.util.List;
+import java.util.Collection;
+
+
+public class UniqueValueType
+        extends AnnotationMemberType
+{
+    private boolean _allowEmptyString;
+    private boolean _checkDefaultValues;
+    
+    /** the name of the attribute on the parent annotation that is the list of annotations to check for duplicates */
+    private String _memberGroupName;
+    
+
+    public UniqueValueType( String memberGroupName, boolean allowEmptyString, boolean checkDefaultValues,
+                            String requiredRuntimeVersion, AnnotationGrammar parentGrammar )
+    {
+        super( requiredRuntimeVersion, parentGrammar );
+
+        _allowEmptyString = allowEmptyString;
+        _memberGroupName = memberGroupName;
+        _checkDefaultValues = checkDefaultValues;
+    }
+
+    /**
+     * @return a result (any Object) that will be passed back to the parent checker.  May be <code>null</code>.
+     */
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        String val = ( String ) value.getValue();
+        
+        if ( ! _allowEmptyString && val.length() == 0 )
+        {
+            addError( value, "error.empty-string-not-allowed" );
+        }
+        
+        
+        // TODO: begin hack workaround for CR173674.
+        AnnotationMirror parentElement = CompilerUtils.getAnnotation( classMember, CONTROLLER_TAG_NAME );
+        if ( _memberGroupName.equals( CONDITIONAL_FORWARDS_ATTR ) )
+        {
+            Collection< AnnotationMirror > simpleActions = CompilerUtils.getAnnotationArray(
+                    ( AnnotationMirror ) parentElement, SIMPLE_ACTIONS_ATTR, false );
+            
+            for ( AnnotationMirror simpleAction : simpleActions )
+            {
+                Collection< AnnotationMirror > conditionalForwards =
+                        CompilerUtils.getAnnotationArray( simpleAction, CONDITIONAL_FORWARDS_ATTR, false );
+                
+                for ( AnnotationMirror conditionalForward : conditionalForwards )
+                {
+                    if ( conditionalForward.equals( parentAnnotation ) )
+                    {
+                        parentElement = simpleAction;
+                        break;
+                    }
+                }
+            }
+        }
+        if ( parentElement == null ) parentElement = CompilerUtils.getAnnotation( classMember, ACTION_TAG_NAME );
+        if ( parentElement == null ) parentElement = CompilerUtils.getAnnotation( classMember, EXCEPTION_HANDLER_TAG_NAME );
+        // TODO: end hack workaround for CR173674.  Delete the above lines and uncomment the line below.
+        //Declaration parentElement = parentAnnotation.getParent();
+        assert parentElement != null;
+        assert parentElement instanceof AnnotationMirror;
+        Collection< AnnotationMirror > memberGroup =
+                CompilerUtils.getAnnotationArray( parentElement, _memberGroupName, true );
+        
+        //
+        // If memberGroup is null, then this annotation was in the wrong place, and there will be other errors.
+        //
+        if ( memberGroup != null )
+        {
+            String valueName = valueDecl.getSimpleName();
+            checkForDuplicates( value, valueName, parentAnnotation, classMember, memberGroup, false );
+            
+            List< AnnotationMirror > additionalAnnsToCheck = getAdditionalAnnotationsToCheck( classMember );
+            
+            if ( additionalAnnsToCheck != null )
+            {
+                checkForDuplicates( value, valueName, parentAnnotation, classMember, additionalAnnsToCheck, true );
+                
+                for ( AnnotationMirror ann : additionalAnnsToCheck )
+                {
+                    AnnotationValue valueToCheck = CompilerUtils.getAnnotationValue( ann, valueName, true );
+                    checkForDuplicates( valueToCheck, valueName, ann, classMember, additionalAnnsToCheck, true );
+                }
+            }
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Plugin point for derived class -- if there should be no duplicates across another entity too.
+     * @return a List of AnnotationMirror
+     */ 
+    protected List< AnnotationMirror > getAdditionalAnnotationsToCheck( MemberDeclaration classMember )
+    {
+        return null;
+    }
+    
+    protected String getErrorMessageExtraInfo()
+    {
+        return null;
+    }
+    
+    protected void checkForDuplicates( AnnotationValue member, String memberName, AnnotationMirror parentAnnotation,
+                                       MemberDeclaration classMember, Collection< AnnotationMirror > annotationsToCheck,
+                                       boolean includeEntityInMsg )
+    {
+        Object memberValue = member.getValue();
+        
+        for ( AnnotationMirror annotation : annotationsToCheck )
+        {
+            if ( ! CompilerUtils.annotationsAreEqual( annotation, parentAnnotation ) )
+            {
+                AnnotationValue valueToCheck =
+                        CompilerUtils.getAnnotationValue( annotation, memberName, _checkDefaultValues );
+                
+                if ( valueToCheck != null && ! valueToCheck.equals( member )
+                     && valueToCheck.getValue().equals( memberValue ) )
+                {
+                    String annotationName = parentAnnotation.getAnnotationType().getDeclaration().getSimpleName();
+                    
+                    if ( includeEntityInMsg )
+                    {
+                        String extra = getErrorMessageExtraInfo();
+                        Object[] args = new Object[]
+                            { 
+                                annotationName,
+                                memberName, 
+                                memberValue, 
+                                classMember.getSimpleName(), 
+                                extra
+                            };
+                        addError( member, "error.duplicate-attr2", args );
+                    }
+                    else
+                    {
+                        addError( member, "error.duplicate-attr", 
+                                  new Object[]{ annotationName, memberName, memberValue } );
+                    }
+                }
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,196 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.xmlbeans.SchemaType;
+import org.apache.xmlbeans.XmlOptions;
+import org.apache.xmlbeans.XmlObject;
+import org.apache.xmlbeans.XmlError;
+import org.apache.xmlbeans.XmlException;
+import com.sun.mirror.declaration.AnnotationValue;
+
+import java.util.Map;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.io.File;
+
+
+public class ValidXmlFileType
+        extends WebappPathType
+{
+    private SchemaType _schema;
+    private static Map _parseResults = Collections.synchronizedMap( new HashMap() );
+    
+    public ValidXmlFileType( SchemaType schema, String requiredRuntimeVersion, AnnotationGrammar parentGrammar )
+    {
+        super( false, requiredRuntimeVersion, parentGrammar );
+        _schema = schema;
+    }
+
+    protected boolean checkAnyExtension()
+    {
+        return true;
+    }
+
+    protected boolean doFatalError()
+    {
+        return true;
+    }
+    
+    protected boolean ignoreDirectories()
+    {
+        return false;
+    }
+    
+    protected boolean mustBeInPageFlowDir()
+    {
+        return true;
+    }
+    
+    
+    protected void runAdditionalChecks( File file, AnnotationValue value )
+    {
+        try
+        {
+            //
+            // We cache the results of parsing the file until the file is actually modified,
+            // so we don't end up continually re-parsing it.
+            //
+            ParseResults prevResults = ( ParseResults ) _parseResults.get( file.getPath() );
+            
+            if ( prevResults == null || file.lastModified() > prevResults.getFileModTime() )
+            {
+                try
+                {
+                    XmlOptions options = new XmlOptions();
+                    options.setDocumentType( _schema );
+                    XmlObject xml = XmlObject.Factory.parse( file, options );
+                    List errorListener = new ArrayList();
+                    options.setErrorListener( errorListener );
+                    
+                    if ( !xml.validate( options ) )
+                    {
+                        assert !errorListener.isEmpty();
+
+                        XmlError err = ( XmlError ) errorListener.get( 0 );
+                        assert err != null;
+                        
+                        throw new XmlException( err.getMessage(), null, err );
+                    }
+                }
+                catch ( Exception e )
+                {
+                    _parseResults.put( file.getPath(), new ParseResults( file.lastModified(), e ) );
+                    throw e;
+                }
+                
+                _parseResults.put( file.getPath(), new ParseResults( file.lastModified(), null ) );
+            }
+            else
+            {
+                Exception e = prevResults.getException();
+                
+                if ( e != null )
+                {
+                    throw e;
+                }
+            }
+        }
+        catch ( XmlException e )
+        {
+            addErrorDiagnostic( e.getError(), value );
+        }
+        catch ( Exception e )
+        {
+            addError( value, "error.xml-read-error", new Object[]{ file.getPath(), e.getMessage() } );
+        }
+    }
+    
+    private void addErrorDiagnostic( XmlError err, AnnotationValue value )
+    {
+        if ( err.getColumn() != -1 && err.getLine() != -1 )
+        {
+            Object[] args =
+                    {
+                        err.getSourceName(),
+                        new Integer( err.getLine() ),
+                        new Integer( err.getColumn() ),
+                        err.getMessage()
+                    };
+                
+            addError( value, "error.xml-parse-error", args );
+        }
+        else if ( err.getLine() != -1 )
+        {
+            Object[] args =
+            {
+                err.getSourceName(),
+                new Integer( err.getLine() ),
+                err.getMessage()
+            };
+                
+            addError( value, "error.xml-parse-error-nocolumn", args );
+        }        
+        else
+        {
+            Object[] args =
+            {
+                err.getSourceName(),
+                err.getMessage()
+            };
+            
+            addError( value, "error.xml-parse-error-nolinecolumn", args );
+        }
+    }
+    
+    private static class ParseResults
+    {
+        private long _fileModTime;
+        private Exception _exception;
+
+        public ParseResults( long fileModTime, Exception exception )
+        {
+            _fileModTime = fileModTime;
+            _exception = exception;
+        }
+
+        public long getFileModTime()
+        {
+            return _fileModTime;
+        }
+
+        public void setFileModTime( long fileModTime )
+        {
+            _fileModTime = fileModTime;
+        }
+
+        public Exception getException()
+        {
+            return _exception;
+        }
+
+        public void setException( Exception exception )
+        {
+            _exception = exception;
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateRangeGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateRangeGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MIN_INT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MIN_FLOAT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MAX_INT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MAX_FLOAT_ATTR;
+
+
+public class ValidateRangeGrammar
+        extends BaseValidationRuleGrammar
+{
+    private static String[][] MUTUALLY_EXCLUSIVE_ATTRS =
+            { { MIN_INT_ATTR, MIN_FLOAT_ATTR }, { MAX_INT_ATTR, MAX_FLOAT_ATTR } };
+    
+    private static String[][] ATTR_DEPENDENCIES = 
+            {
+                { MIN_INT_ATTR, MAX_INT_ATTR },
+                { MIN_FLOAT_ATTR, MAX_FLOAT_ATTR },
+                { MAX_INT_ATTR, MIN_INT_ATTR },
+                { MAX_FLOAT_ATTR, MIN_FLOAT_ATTR }
+            };
+    
+    public ValidateRangeGrammar( AnnotationProcessorEnvironment env, Diagnostics diags,
+                                 RuntimeVersionChecker runtimeVersionChecker )
+    {
+        super( env, diags, runtimeVersionChecker );
+        
+        // No members need custom types/grammars.
+    }
+
+    public String[][] getMutuallyExclusiveAttrs()
+    {
+        return MUTUALLY_EXCLUSIVE_ATTRS;
+    }
+
+    public String[][] getRequiredAttrs()
+    {
+        return null;
+    }
+    
+    public String[][] getAttrDependencies()
+    {
+        return ATTR_DEPENDENCIES;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,70 @@
+/*
+* B E A   S Y S T E M S
+* Copyright 2002-2004  BEA Systems, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* 
+*     http://www.apache.org/licenses/LICENSE-2.0
+* 
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* $Header:$
+*/
+package org.apache.beehive.netui.compiler.grammar;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.type.PrimitiveType;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.TYPE_ATTR;
+
+
+public class ValidateTypeGrammar
+        extends BaseValidationRuleGrammar
+{
+    public ValidateTypeGrammar( AnnotationProcessorEnvironment env, Diagnostics diags,
+                         RuntimeVersionChecker runtimeVersionChecker )
+    {
+        super( env, diags, runtimeVersionChecker );
+        
+        addMemberType( TYPE_ATTR, new PrimitiveTypeType() );
+    }
+    
+    private class PrimitiveTypeType
+            extends AnnotationMemberType
+    {
+        public PrimitiveTypeType()
+        {
+            super( ValidateTypeGrammar.this.getRequiredRuntimeVersion(), ValidateTypeGrammar.this );
+        }
+
+        protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                                  AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+        {
+            Object val = value.getValue();
+            
+            if ( ! ( val instanceof PrimitiveType ) )
+            {
+                addError( value, "error.must-be-primitive-type" );
+            }
+            else if ( ( ( PrimitiveType ) val ).getKind().equals( PrimitiveType.Kind.BOOLEAN ) )
+            {
+                addError( value, "error.invalid-type" );
+            }
+            
+            return null;
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationBeanGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationBeanGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VERSION_9_0_STRING;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.FIELDS_ATTR;
+
+
+public class ValidationBeanGrammar
+        extends AnnotationGrammar
+{
+    public ValidationBeanGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc )
+    {
+        super( env, diags, VERSION_9_0_STRING, rvc );
+        
+        addMemberArrayGrammar( FIELDS_ATTR, new ValidationFieldGrammar( env, diags, rvc ) );
+        // TYPE_ATTR does not need a custom type
+    }
+}
+

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationFieldGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationFieldGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,84 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.*;
+
+
+public class ValidationFieldGrammar
+        extends AnnotationGrammar
+{
+    private static String[][] REQUIRED_ATTRS = { { PROPERTY_NAME_ATTR } };
+    
+    
+    public ValidationFieldGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc )
+    {
+        super( env, diags, VERSION_9_0_STRING, rvc );
+        
+        addMemberType( PROPERTY_NAME_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( DISPLAY_NAME_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( DISPLAY_NAME_KEY_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberArrayGrammar( LOCALE_RULES_ATTR, new ValidationLocaleRulesGrammar( env, diags, rvc ) );
+        
+        addMemberGrammar( VALIDATE_REQUIRED_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_RANGE_ATTR, new ValidateRangeGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_MIN_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_MAX_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_CREDIT_CARD_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_EMAIL_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_MASK_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_DATE_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_TYPE_ATTR, new ValidateTypeGrammar( env, diags, rvc ) );
+    }
+
+    /**
+     * This is overridable by derived classes, which is why it's not simply defined as required in
+     * {@link org.apache.beehive.netui.pageflow.annotations.Jpf}.
+     */ 
+    public String[][] getRequiredAttrs()
+    {
+        return REQUIRED_ATTRS;
+    }
+
+    protected boolean onBeginCheck( AnnotationMirror annotation, MemberDeclaration classMember )
+    {
+        AnnotationMirror actionAnnotation = CompilerUtils.getAnnotation( classMember, ACTION_TAG_NAME );
+        
+        if ( actionAnnotation != null )     // if it's null, we're in the Controller annotation -- no checks for that
+        {
+            if ( CompilerUtils.getAnnotationValue( actionAnnotation, VALIDATION_ERROR_FORWARD_ATTR, true ) == null )
+            {
+                addWarning( annotation, "warning.validation-annotations-no-forward",
+                            ANNOTATION_INTERFACE_PREFIX + ACTION_TAG_NAME, VALIDATION_ERROR_FORWARD_ATTR );
+            }
+        }
+        
+        return true;
+    }
+}
+

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationLocaleRulesGrammar.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationLocaleRulesGrammar.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_REQUIRED_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_RANGE_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_MIN_LENGTH_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_MAX_LENGTH_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_CREDIT_CARD_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_EMAIL_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_MASK_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_DATE_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_TYPE_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VERSION_9_0_STRING;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.LANGUAGE_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.COUNTRY_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VARIANT_ATTR;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.APPLY_TO_UNHANDLED_LOCALES_ATTR;
+
+
+public class ValidationLocaleRulesGrammar
+        extends AnnotationGrammar
+{
+    private static final String[][] REQUIRED_ATTRS = 
+            { 
+                { APPLY_TO_UNHANDLED_LOCALES_ATTR, LANGUAGE_ATTR }, 
+            };
+    
+    private static final String[][] ATTR_DEPENDENCIES =
+            { 
+                { COUNTRY_ATTR, LANGUAGE_ATTR },
+                { VARIANT_ATTR, LANGUAGE_ATTR }
+            };
+    
+    public ValidationLocaleRulesGrammar( AnnotationProcessorEnvironment env, Diagnostics diags,
+                                         RuntimeVersionChecker rvc )
+    {
+        super( env, diags, VERSION_9_0_STRING, rvc );
+        
+        // The only member that needs its own type is validateRange
+        addMemberGrammar( VALIDATE_REQUIRED_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_RANGE_ATTR, new ValidateRangeGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_MIN_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_MAX_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_CREDIT_CARD_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_EMAIL_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_MASK_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_DATE_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) );
+        addMemberGrammar( VALIDATE_TYPE_ATTR, new ValidateTypeGrammar( env, diags, rvc ) );
+        
+        addMemberType( LANGUAGE_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( COUNTRY_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( VARIANT_ATTR, new AnnotationMemberType( null, this ) );
+        addMemberType( APPLY_TO_UNHANDLED_LOCALES_ATTR, new ApplyToUnhandledLocalesType() );
+    }
+
+    public String[][] getRequiredAttrs()
+    {
+        return REQUIRED_ATTRS;
+    }
+
+    public String[][] getAttrDependencies()
+    {
+        return ATTR_DEPENDENCIES;
+    }
+    
+    private class ApplyToUnhandledLocalesType
+            extends AnnotationMemberType
+    {
+        public ApplyToUnhandledLocalesType()
+        {
+            super( null, ValidationLocaleRulesGrammar.this );
+        }
+
+        protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue member,
+                                  AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+        {
+            String language = CompilerUtils.getString( parentAnnotation, LANGUAGE_ATTR, true );
+            
+            if ( ( ( Boolean ) member.getValue() ).booleanValue() )
+            {
+                if ( language != null )
+                {
+                    addError( member, "error.incompatible-locale-annotations", LANGUAGE_ATTR,
+                              APPLY_TO_UNHANDLED_LOCALES_ATTR );
+                }
+            }
+            else
+            {
+                if ( language == null || language.length() == 0 )
+                {
+                    addError( member, "error.missing-locale-annotations", LANGUAGE_ATTR,
+                              APPLY_TO_UNHANDLED_LOCALES_ATTR );
+                }
+            }
+            
+            return null;
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,121 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.FlowControllerInfo;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+
+import java.util.Collection;
+
+public class WebappPathOrActionType
+        extends WebappPathType
+{
+    private FlowControllerInfo _fcInfo;
+    
+    public WebappPathOrActionType( boolean pathMustBeRelative, String requiredRuntimeVersion,
+                                   AnnotationGrammar parentGrammar, FlowControllerInfo fcInfo )
+    {
+        super( pathMustBeRelative, requiredRuntimeVersion, parentGrammar );
+        _fcInfo = fcInfo;
+    }
+
+    protected final Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                                    AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        String stringValue = ( String ) value.getValue();
+        if ( stringValue.endsWith( ACTION_EXTENSION_DOT ) && stringValue.indexOf( '/' ) == -1 )
+        {
+            TypeDeclaration outerType = CompilerUtils.getOuterClass( classMember );
+
+            if ( outerType != null )    // null in some error conditions
+            {
+                int extensionPos = stringValue.lastIndexOf( ACTION_EXTENSION_DOT );
+                String actionMethodName = stringValue.substring( 0, extensionPos );
+                boolean foundIt = actionExists( actionMethodName, outerType, null );
+
+                if ( ! foundIt )
+                {
+                    TypeDeclaration sharedFlowType = _fcInfo.getSharedFlowType();
+                    
+                    if ( sharedFlowType != null )
+                    {
+                        foundIt = actionExists( actionMethodName, sharedFlowType, null );
+                    }
+                }
+                
+                if ( ! foundIt )
+                {
+                    addWarning( value, "warning.action-not-found", actionMethodName );
+                }
+            }        
+        }
+        
+        return super.onCheck( valueDecl, value, parentAnnotation, classMember );
+    }
+    
+    public static boolean actionExists( String actionName, TypeDeclaration type, AnnotationMirror annotationToIgnore )
+    {
+        //
+        // First look through the action methods.
+        //
+        Collection< ? extends MethodDeclaration > methods = type.getMethods();
+        
+        for ( MethodDeclaration method : methods )
+        {
+            if ( method.getSimpleName().equals( actionName )
+                 && CompilerUtils.getAnnotation( method, ACTION_TAG_NAME ) != null )
+            {
+                return true;
+            }
+        }
+        
+        //
+        // Next, look through the simple actions (annotations).
+        //
+        AnnotationMirror controllerAnnotation = CompilerUtils.getAnnotation( type, CONTROLLER_TAG_NAME );
+        
+        if ( controllerAnnotation != null )
+        {
+            Collection< AnnotationMirror > simpleActionAnnotations =
+                    CompilerUtils.getAnnotationArray( controllerAnnotation, SIMPLE_ACTIONS_ATTR, true );
+            
+            if ( simpleActionAnnotations != null )
+            {
+                for ( AnnotationMirror ann : simpleActionAnnotations )
+                {
+                    String name = CompilerUtils.getString( ann, NAME_ATTR, false );
+                    
+                    if ( actionName.equals( name ) && ! CompilerUtils.annotationsAreEqual( ann, annotationToIgnore ) )
+                    {
+                        return true;
+                    }
+                }
+            }
+        }
+        
+        return false;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,231 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationMemberType;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.model.NoWebInfDirectoryException;
+import org.apache.beehive.netui.compiler.model.StrutsApp;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+
+import java.net.URISyntaxException;
+import java.io.File;
+
+/**
+ * String type that emits a warning if the given path does not exist in the webapp for this pageflow.
+ */
+public class WebappPathType
+        extends AnnotationMemberType
+{
+    private static final String[] CHECKABLE_EXTENSIONS =
+            {
+                JSP_FILE_EXTENSION, 
+                XJSP_FILE_EXTENSION, 
+                JPF_FILE_EXTENSION, 
+                "htm", 
+                "html" 
+            };
+    
+    private boolean _pathMustBeRelative = false;
+    
+    
+    public WebappPathType( boolean pathMustBeRelative, String requiredRuntimeVersion, AnnotationGrammar parentGrammar )
+    {
+        super( requiredRuntimeVersion, parentGrammar );
+        _pathMustBeRelative = pathMustBeRelative;
+    }
+
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        String stringValue = ( String ) value.getValue();
+        
+        //
+        // First make sure it's a valid URI.
+        //
+        try
+        {
+            new java.net.URI( stringValue );
+        }
+        catch ( URISyntaxException e )
+        {
+            addError( value, "error.invalid-uri", e.getLocalizedMessage() );
+        }
+        
+        //
+        // Make sure it's a filetype that should exist on the filesystem.  If not, ignore it.
+        //
+        if ( ! checkAnyExtension() )
+        {
+            boolean isCheckableExtension = false;
+            for ( int i = 0; i < CHECKABLE_EXTENSIONS.length; ++i )
+            {
+                if ( stringValue.endsWith( CHECKABLE_EXTENSIONS[i] ) )
+                {
+                    isCheckableExtension = true;
+                    break;
+                }
+            }
+    
+            if ( ! isCheckableExtension )
+            {
+                return null;
+            }
+        }
+
+        boolean fileExists = true;
+        File jpfFile = CompilerUtils.getOriginalFile( classMember );
+        File fileToCheck = null;
+
+        if ( stringValue.startsWith( "/" ) )  // relative to webapp root
+        {
+            if ( _pathMustBeRelative )
+            {
+                addError( value, "error.relative-uri" );
+            }
+            
+            if ( stringValue.endsWith( JPF_FILE_EXTENSION_DOT ) )
+            {
+                String className = stringValue.substring( 1, stringValue.length() - JPF_FILE_EXTENSION_DOT.length() );
+                className = className.replace( '/', '.' );
+                fileToCheck = checkJpf( className );
+                if ( fileToCheck == null ) fileExists = false;
+            }
+            else
+            {
+                try
+                {
+                    // @TODO cache the stringValue of getWebappRootFromJpf.  It's expensive to calculate.
+                    File webappRoot = StrutsApp.getWebappRootFromJpf( jpfFile );
+                    fileToCheck = new File( webappRoot + stringValue );
+                    
+                    if ( ! fileToCheck.exists() && ! ( ignoreDirectories() && fileToCheck.isDirectory() ) )
+                    {
+                        fileExists = false;
+                    }
+                }
+                catch ( NoWebInfDirectoryException e )
+                {
+                    // ignore
+                }
+            }
+        }
+        
+        //
+        // In certain error conditions, we can't determine the file.  In this case, just
+        // ignore.
+        //
+        else if ( jpfFile != null && stringValue.indexOf( '/' ) != 0 )  // under this pageflow's directory
+        {
+            if ( stringValue.endsWith( JPF_FILE_EXTENSION_DOT ) )
+            {
+                String className = stringValue.substring( 0, stringValue.length() - JPF_FILE_EXTENSION_DOT.length() );
+                className = classMember.getDeclaringType().getPackage().getQualifiedName()
+                            + '.' + className.replace( '/', '.' );
+                fileToCheck = checkJpf( className );
+                if ( fileToCheck == null ) fileExists = false;
+            }
+            else
+            {
+                String jpfFilePath = jpfFile.getPath();
+                File parentFile = jpfFile.getParentFile();
+                
+                //
+                // Check if this page flow is in WEB-INF/src.  If so, the "local" dir is actually out
+                // in the web-addressable part of the webapp, unless we're looking for a .jpf (in the
+                // case that there's a forward to the current page flow from within the page flow).
+                //
+                if ( ! mustBeInPageFlowDir() && ! stringValue.endsWith( JPF_FILE_EXTENSION ) )
+                {
+                    int webinfSrcPos = jpfFilePath.replace( '\\', '/' ).indexOf( WEBINF_SRC_DIR );
+                    if ( webinfSrcPos != -1 )
+                    {
+                        parentFile = new File( jpfFilePath.substring( 0, webinfSrcPos )
+                                               + jpfFilePath.substring( webinfSrcPos + WEBINF_SRC_DIR.length() ) );
+                        parentFile = parentFile.getParentFile();
+                    }
+                }
+                
+                fileToCheck = new File( parentFile, stringValue );
+                
+                if ( ! fileToCheck.exists() && ! ( ignoreDirectories() && fileToCheck.isDirectory() ) )
+                {
+                    fileExists = false;
+                }
+            }
+        }
+
+        if ( fileExists )
+        {
+            if ( fileToCheck != null ) runAdditionalChecks( fileToCheck, value );
+        }
+        else
+        {
+            if ( doFatalError() )
+            {
+                addError( value, "error.file-not-found", stringValue );
+            }
+            else
+            {
+                addWarning( value, "warning.file-not-found", stringValue );
+            }
+        }
+        
+        return null;
+    }
+    
+    private File checkJpf( String className )
+    {
+        TypeDeclaration type = getEnv().getTypeDeclaration( className );
+        return type != null ? CompilerUtils.getOriginalFile( type ) : null;
+    }
+    
+    protected boolean checkAnyExtension()
+    {
+        return false;
+    }
+    
+    protected boolean doFatalError()
+    {
+        return false;
+    }
+    
+    protected void runAdditionalChecks( File file, AnnotationValue member )
+    {
+    }
+    
+    protected boolean ignoreDirectories()
+    {
+        return true;
+    }
+    
+    /**
+     * Tell whether the file must be in the page flow directory.  If not, it is assumed to live in a webapp-addressable
+     * directory whose path corresponds to the page flow's package.  This is here to support page flows in WEB-INF.
+     */ 
+    protected boolean mustBeInPageFlowDir()
+    {
+        return false;
+    }    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WritableFieldType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WritableFieldType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.CompilerUtils;
+import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import com.sun.mirror.declaration.AnnotationValue;
+import com.sun.mirror.declaration.AnnotationMirror;
+import com.sun.mirror.declaration.MemberDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.declaration.TypeDeclaration;
+import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
+
+public class WritableFieldType
+        extends MemberFieldType
+        implements JpfLanguageConstants
+{
+    private String _attrName;
+    
+    
+    public WritableFieldType( String requiredSuperclassName, String attrName, String requiredRuntimeVersion,
+                              AnnotationGrammar parentGrammar )
+    {
+        super( requiredSuperclassName, requiredRuntimeVersion, parentGrammar );
+        _attrName = attrName;
+    }
+
+    protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value,
+                              AnnotationMirror parentAnnotation, MemberDeclaration classMember )
+    {
+        //
+        // Look for the "readOnly" attribute on the current action method or the current class.  If it's there,
+        // then this attribute cannot refer to the given field.
+        //
+        Boolean readonlyValue = null;
+        
+        if ( classMember instanceof MethodDeclaration )
+        {
+            readonlyValue = CompilerUtils.getBooleanValue( classMember, ACTION_TAG_NAME, READONLY_ATTR, true );
+        }
+        
+        if ( readonlyValue == null )
+        {
+            TypeDeclaration outerType = CompilerUtils.getOuterClass( classMember );
+            readonlyValue = CompilerUtils.getBooleanValue( outerType, CONTROLLER_TAG_NAME, READONLY_ATTR, true );
+        }
+        
+        if ( readonlyValue != null && readonlyValue.booleanValue() )
+        {
+            addError( value, "error.readonly-writable-field-value", _attrName );
+        }
+        
+        return super.onCheck( valueDecl, value, parentAnnotation, classMember );
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,122 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
+import org.apache.xmlbeans.XmlObject;
+
+import java.util.LinkedHashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+
+
+abstract class AbstractForwardContainer
+        extends StrutsElementSupport
+        implements ForwardContainer
+{
+    private LinkedHashMap _forwards = new LinkedHashMap();
+    
+    
+    public AbstractForwardContainer( StrutsApp parentApp )
+    {
+        super( parentApp );
+    }
+
+    public AbstractForwardContainer( AbstractForwardContainer src )
+    {
+        super( src.getParentApp() );
+        _forwards = ( LinkedHashMap ) src._forwards.clone();
+    }
+    
+    /**
+      * Implemented for {@link ForwardContainer}.
+      */
+     public void addForward( ForwardModel newActionForward )
+     {
+         if ( _forwards.containsKey( newActionForward.getName() ) )
+         {
+                 // TODO: Rich - replace this with something other than the knex logger so that the xdoclet compiler
+                 // won't require knex
+//                if ( ! fwd.getPath().equals( newActionForward.getPath() ) )
+//                {
+//                    logger.warn( "Could not add forward \"" + newActionForward.getName() + "\", path=\""
+//                                 + newActionForward.getPath() + "\" because there is already a forward with"
+//                                 + " the same name (path=\"" + fwd.getPath() + "\")." );
+//                }
+                
+                 return;
+         }
+        
+         //
+         // Optimizations for the runtime.
+         //
+         getParentApp().enableReturnTo( newActionForward );
+         _forwards.put( newActionForward.getName(), newActionForward );
+     }
+    
+    public ForwardModel findForward( String forwardName )
+    {
+        return ( ForwardModel ) _forwards.get( forwardName );
+    }
+    
+    public void writeForwards( ForwardDocument.Forward[] existingForwards, XmlObject xmlForwardContainer )
+    {
+        for ( Iterator i = _forwards.values().iterator(); i.hasNext(); )
+        {
+            ForwardModel fwd = ( ForwardModel ) i.next();
+            ForwardDocument.Forward fwdToEdit = null;
+                
+            for ( int j = 0; j < existingForwards.length; ++j )
+            {
+                if ( fwd.getName().equals( existingForwards[j].getName() ) )
+                {
+                    fwdToEdit = existingForwards[j];
+                    break;
+                }
+            }
+                
+            if ( fwdToEdit == null )
+            {
+                fwdToEdit = addNewForward( xmlForwardContainer );
+            }
+                
+            fwd.writeToXMLBean( fwdToEdit );
+        }
+    }
+    
+    public ForwardModel[] getForwards()
+    {
+        return ( ForwardModel[] ) _forwards.values().toArray( new ForwardModel[ _forwards.size() ] );
+    }
+
+    public List getForwardsAsList()
+    {
+        List ret = new ArrayList();
+        ret.addAll( _forwards.values() );
+        return ret;
+    }
+
+    public void deleteForward( ForwardModel forward )
+    {
+        _forwards.remove( forward.getName() );
+    }
+    
+    protected abstract ForwardDocument.Forward addNewForward( XmlObject xmlForwardContainer );
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ActionModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ActionModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,546 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.LinkedHashMap;
+import java.util.Iterator;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument.Action;
+import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
+import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
+import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
+import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument;
+import org.apache.xmlbeans.XmlObject;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PAGEFLOW_PACKAGE;
+
+
+/**
+ * Represents an ActionMapping in a Struts based web application or
+ * sub application.
+ */
+public class ActionModel
+        extends AbstractForwardContainer
+        implements ForwardContainer, ExceptionContainer
+{
+    public static final String DEFAULT_FORM_SCOPE = "request";
+
+    private static final String JPF_ACTION_MAPPING_CLASSNAME = PAGEFLOW_PACKAGE + ".config.PageFlowActionMapping";
+
+    
+    // Struts attributes.
+    private ArrayList _exceptionCatches = new ArrayList();
+    private String _attribute;
+    private String _className;
+    private String _forward;
+    private String _include;
+    private String _input;
+    private String _name;
+    private String _parameter;
+    private String _path;  // required to be set
+    private String _prefix;
+    private String _scope = DEFAULT_FORM_SCOPE;
+    private String _suffix;
+    private String _type;
+    private boolean _unknown;
+    private String _roles;
+
+    // Non-struts attributes.
+    private String _unqualifiedActionPath;
+    private boolean _loginRequired;
+    private boolean _isOverloaded;
+    private boolean _readonly;
+    private boolean _isSimpleAction = false;
+    private String _formMember;     // pageflow-scoped form
+    private String _formClass;      // applicable for non-ActionForm-derived types
+    private Map< String, String > _conditionalForwards;
+    private String _formBeanMessageResourcesKey;
+
+
+    public ActionModel( String path, StrutsApp parent )
+    {
+        this( path, null, parent );
+    }
+
+
+    public ActionModel( String path, String formName, StrutsApp parent )
+    {
+        super( parent );
+        this._path = path;
+        this._name = formName;
+    }
+    
+    protected ActionModel( StrutsApp parent )
+    {
+        this( null, null, parent );
+    }
+
+    /**
+     * Construct a copy of the given mapping, with the given path.
+     */ 
+    public ActionModel( ActionModel src, String newPath )
+    {
+        super( src );
+        this._path = newPath;
+        this._name = src._name;
+        _exceptionCatches = ( ArrayList ) src._exceptionCatches.clone();
+        _attribute = src._attribute;
+        _className = src._className;
+        _forward = src._forward;
+        _include = src._include;
+        _input = src._input;
+        _parameter = src._parameter;
+        _prefix = src._prefix;
+        _scope = src._scope;
+        _suffix = src._suffix;
+        _type = src._type;
+        _unknown = src._unknown;
+        _formMember = src._formMember;
+        _formClass = src._formClass;
+        _roles = src._roles;
+        _loginRequired = src._loginRequired;
+        _isSimpleAction = src._isSimpleAction;
+        _isOverloaded = src._isOverloaded;
+        _readonly = src._readonly;
+        _unqualifiedActionPath = src._unqualifiedActionPath;
+    }
+    
+    public void setFormBeanName( String formBeanName )
+    {
+        _name = formBeanName;
+    }
+    
+    public void writeToXMLBean( Action xb )
+    {
+        xb.setPath( _path );
+        
+        if ( xb.getName() == null && _name != null )
+        {
+            xb.setName( _name );
+        }
+
+        if ( xb.getClassName() == null && _className != null )
+        {
+            xb.setClassName( _className );
+        }
+        
+        if ( xb.getType() == null && _type != null )
+        {
+            xb.setType( _type );
+        }
+        
+        if ( xb.getAttribute() == null && _attribute != null )
+        {
+            xb.setAttribute( _attribute );
+        }
+        
+        if ( xb.getInput() == null && _input != null )
+        {
+            xb.setInput( _input );
+        }
+        
+        if ( xb.getParameter() == null && _parameter != null )
+        {
+            xb.setParameter( _parameter ); 
+        }
+        
+        if ( xb.getPrefix() == null && _prefix != null )
+        {
+            xb.setPrefix( _prefix );
+        }
+        
+        if ( xb.getSuffix() == null && _suffix != null )
+        {
+            xb.setSuffix( _suffix );
+        }
+        
+        if ( xb.getScope() == null )
+        {
+            if ( _scope != null )
+            {
+                if ( _scope.equals( "request" ) )
+                {
+                    xb.setScope( Action.Scope.REQUEST );
+                }
+                else if ( _scope.equals( "session" ) )
+                {
+                    xb.setScope( Action.Scope.SESSION );
+                }
+                else
+                {
+                    assert false : _scope;
+                }
+            }
+            else
+            {
+                xb.setScope( Action.Scope.REQUEST );
+            }
+        }
+        
+        if ( xb.getRoles() == null && _roles != null )
+        {
+            xb.setRoles( _roles );
+        }
+        
+        if ( xb.getForward2() == null &&  _forward != null )
+        {
+            xb.setForward2( _forward );
+        }
+        
+        if ( xb.getInclude() == null && _include != null )
+        {
+            xb.setInclude( _include );
+        }
+        
+        if ( xb.getUnknown() == null && _unknown )
+        {
+            xb.setUnknown( Action.Unknown.TRUE );
+        }
+        
+        if ( xb.getValidate() == null )
+        {
+            xb.setValidate( _input != null ? Action.Validate.TRUE : Action.Validate.FALSE );
+        }
+        
+        if (  _unqualifiedActionPath != null ) addSetProperty( xb, "unqualifiedActionPath", _unqualifiedActionPath );
+        if ( _formMember != null ) addSetProperty( xb, "formMember", _formMember );
+        if ( _formClass != null ) addSetProperty( xb, "formClass", _formClass );
+        if ( _loginRequired ) addSetProperty( xb, "loginRequired", _loginRequired );
+        if ( _isOverloaded ) addSetProperty( xb, "overloaded", _isOverloaded );
+        if ( _readonly ) addSetProperty( xb, "readonly", _readonly );
+        if ( _isSimpleAction ) addSetProperty( xb, "simpleAction", _isSimpleAction );
+        
+        if ( _conditionalForwards != null )
+        {
+            addSetProperty( xb, "conditionalForwards", getMapString( _conditionalForwards) );
+        }
+        
+        if ( _formBeanMessageResourcesKey != null )
+        {
+            addSetProperty( xb, "formBeanMessageResourcesKey", _formBeanMessageResourcesKey );
+        }
+                
+        if ( _exceptionCatches != null && ! _exceptionCatches.isEmpty() )
+        {
+            ExceptionDocument.Exception[] existingExceptions = xb.getExceptionArray();
+            
+            for ( int i = 0; i < _exceptionCatches.size(); ++i )
+            {
+                ExceptionModel ec = ( ExceptionModel ) _exceptionCatches.get( i );
+                ExceptionDocument.Exception exceptionToEdit = null;
+                
+                for ( int j = 0; j < existingExceptions.length; ++j )
+                {
+                    if ( ec.getType().equals( existingExceptions[j].getType() ) )
+                    {
+                        exceptionToEdit = existingExceptions[j];
+                        break;
+                    }
+                }
+                
+                if ( exceptionToEdit == null )
+                {
+                    exceptionToEdit = xb.addNewException();
+                }
+                
+                ec.writeToXMLBean( exceptionToEdit );
+            }
+        }
+                
+        //
+        // forwards
+        //
+        writeForwards( xb.getForwardArray(), xb );
+
+        addComment( xb );
+    }
+    
+    private void addSetProperty( ActionDocument.Action xb, String propertyName, boolean propertyValue )
+    {
+        addSetProperty( xb, propertyName, Boolean.toString( propertyValue ) );
+    }
+    
+    private void addSetProperty( ActionDocument.Action xb, String propertyName, String propertyValue )
+    {
+        SetProperty prop = xb.addNewSetProperty();
+        prop.setProperty( propertyName );
+        prop.setValue( propertyValue );
+        xb.setClassName( JPF_ACTION_MAPPING_CLASSNAME );
+    }
+    
+    protected ForwardDocument.Forward addNewForward( XmlObject xmlObject )
+    {
+        return ( ( Action ) xmlObject ).addNewForward();
+    }
+    
+    /**
+     * Implemented for {@link ExceptionContainer}.
+     */
+    public void addException( ExceptionModel em )
+    {
+        _exceptionCatches.add( em );
+    }
+
+    public String getAttribute()
+    {
+        return _attribute;
+    }
+
+    public void setAttribute( String attribute )
+    {
+        this._attribute = attribute;
+    }
+
+    public String getClassName()
+    {
+        return _className;
+    }
+
+    public void setClassName( String className )
+    {
+        this._className = className;
+    }
+
+    public String getForward()
+    {
+        return _forward;
+    }
+
+    public void setForward( String forward )
+    {
+        this._forward = forward;
+    }
+
+    public String getInclude()
+    {
+        return _include;
+    }
+
+    public void setInclude( String include )
+    {
+        this._include = include;
+    }
+
+    public String getInput()
+    {
+        return _input;
+    }
+
+    public void setInput( String input )
+    {
+        this._input = input;
+    }
+
+    public String getName()
+    {
+        return _name;
+    }
+
+    public void setName( String name )
+    {
+        this._name = name;
+    }
+
+    public String getParameter()
+    {
+        return _parameter;
+    }
+
+    public void setParameter( String parameter )
+    {
+        this._parameter = parameter;
+    }
+
+    public String getPath()
+    {
+        return _path;
+    }
+    
+    public String getPath( boolean useUnqualifiedPath )
+    {
+        if ( useUnqualifiedPath && _unqualifiedActionPath != null )
+        {
+            return _unqualifiedActionPath;
+        }
+        else
+        {
+            return _path;
+        }
+    }
+
+    public void setPath( String path )
+    {
+        this._path = path;
+    }
+
+    public String getPrefix()
+    {
+        return _prefix;
+    }
+
+    public void setPrefix( String prefix )
+    {
+        this._prefix = prefix;
+    }
+
+    public String getScope()
+    {
+        return _scope == null ? DEFAULT_FORM_SCOPE : _scope;
+    }
+
+    public void setScope( String scope )
+    {
+        this._scope = scope;
+    }
+
+    public String getSuffix()
+    {
+        return _suffix;
+    }
+
+    public void setSuffix( String suffix )
+    {
+        this._suffix = suffix;
+    }
+
+    public String getType()
+    {
+        return _type;
+    }
+
+    public void setType( String type )
+    {
+        this._type = type;
+    }
+
+    public boolean isUnknown()
+    {
+        return _unknown;
+    }
+
+    public void setUnknown( boolean unknown )
+    {
+        this._unknown = unknown;
+    }
+
+    public String getUnqualifiedActionPath()
+    {
+        return _unqualifiedActionPath;
+    }
+
+    public void setUnqualifiedActionPath( String unqualifiedActionPath )
+    {
+        this._unqualifiedActionPath = unqualifiedActionPath;
+    }
+
+    public String getRoles()
+    {
+        return _roles;
+    }
+
+    public void setRoles( String roles )
+    {
+        _roles = roles;
+    }
+
+    public boolean isLoginRequired()
+    {
+        return _loginRequired;
+    }
+
+    public void setLoginRequired( boolean loginRequired )
+    {
+        _loginRequired = loginRequired;
+    }
+
+    public boolean isSimpleAction()
+    {
+        return _isSimpleAction;
+    }
+
+    public void setSimpleAction( boolean simpleAction )
+    {
+        _isSimpleAction = simpleAction;
+    }
+
+    public boolean isOverloaded()
+    {
+        return _isOverloaded;
+    }
+
+    public void setOverloaded( boolean overloaded )
+    {
+        _isOverloaded = overloaded;
+    }
+
+    public String getFormMember()
+    {
+        return _formMember;
+    }
+
+    public void setFormMember( String formMember )
+    {
+        _formMember = formMember;
+    }
+
+    public String getFormClass()
+    {
+        return _formClass;
+    }
+
+    public void setFormClass( String formClass )
+    {
+        _formClass = formClass;
+    }
+
+    public boolean isReadonly()
+    {
+        return _readonly;
+    }
+
+    public void setReadonly( boolean readonly )
+    {
+        _readonly = readonly;
+    }
+    
+    public void addConditionalForward( String expression, String forwardName )
+    {
+        if ( _conditionalForwards == null ) _conditionalForwards = new LinkedHashMap< String, String >();
+        _conditionalForwards.put( expression, forwardName );
+    }
+    
+    private static String getMapString( Map< String, String > map )
+    {
+        StringBuilder retVal = new StringBuilder();
+        
+        for ( Iterator<Map.Entry<String, String>> i = map.entrySet().iterator(); i.hasNext(); )
+        {
+            Map.Entry< String, String > entry = i.next();
+            retVal.append( entry.getValue() ).append( ":" ).append( entry.getKey() ).append( ";" );
+        }
+        
+        return retVal.toString();
+    }
+
+    public void setFormBeanMessageResourcesKey( String formBeanMessageResourcesKey )
+    {
+        _formBeanMessageResourcesKey = formBeanMessageResourcesKey;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ActionOutputModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ActionOutputModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+
+/**
+ * Represents an Action Output (NetUI, not a Struts concept) that will be attached to a forward ({@link ForwardModel}).
+ */
+public class ActionOutputModel
+{
+    String _name;
+    String _type;
+    boolean _isNullable;
+    
+    protected ActionOutputModel()
+    {
+    }
+    
+    public ActionOutputModel( String name, String type, boolean isNullable )
+    {
+        _name = name;
+        _type = type;
+        _isNullable = isNullable;
+    }
+
+    public String getName()
+    {
+        return _name;
+    }
+
+    public String getType()
+    {
+        return _type;
+    }
+
+    public boolean getNullable()
+    {
+        return _isNullable;
+    }
+
+    public void setName( String name )
+    {
+        assert name != null;
+        _name = name;
+    }
+
+    public void setType( String type )
+    {
+        assert type != null;
+        _type = type;
+    }
+
+    public void setNullable( boolean nullable )
+    {
+        _isNullable = nullable;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ExceptionContainer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ExceptionContainer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+/**
+ * Interface for objects that can hold a collection of ExceptionModels.
+ */
+public interface ExceptionContainer
+{
+    public void addException( ExceptionModel em );
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ExceptionModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ExceptionModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,191 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
+import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PAGEFLOW_PACKAGE;
+
+public class ExceptionModel
+        extends StrutsElementSupport
+{
+    private String _type;
+    private String _path;
+    private String _handlerMethod;
+    private String _message;
+    private String _messageKey;
+    private String _handlerClass;
+    private boolean _readonly = false;
+
+    private static final String JPF_EXCEPTION_CONFIG_CLASSNAME = PAGEFLOW_PACKAGE + ".config.PageFlowExceptionConfig";
+    
+    
+    protected ExceptionModel( StrutsApp parentApp )
+    {
+        super( parentApp );
+    }
+    
+    public ExceptionModel( String type, String path, String handlerMethod, String message,
+                           String messageKey, StrutsApp parentApp )
+    {
+        super( parentApp );
+        
+        _type = type;
+        _path = path;
+        _handlerMethod = handlerMethod;
+        _message = message;
+        _messageKey = messageKey;
+    }
+
+    public String getType()
+    {
+        return _type;
+    }
+
+    public void setType( String type )
+    {
+        _type = type;
+    }
+
+    public String getPath()
+    {
+        return _path;
+    }
+
+    public void setPath( String path )
+    {
+        _path = path;
+    }
+
+    public String getHandlerMethod()
+    {
+        return _handlerMethod;
+    }
+
+    public void setHandlerMethod( String handlerMethod )
+    {
+        _handlerMethod = handlerMethod;
+    }
+
+    public String getMessage()
+    {
+        return _message;
+    }
+
+    public void setMessage( String message )
+    {
+        _message = message;
+    }
+
+    public String getMessageKey()
+    {
+        return _messageKey;
+    }
+
+    public void setMessageKey( String messageKey )
+    {
+        _messageKey = messageKey;
+    }
+
+    public String getHandlerClass()
+    {
+        return _handlerClass;
+    }
+
+    public void setHandlerClass( String handlerClass )
+    {
+        _handlerClass = handlerClass;
+    }
+
+    public void writeToXMLBean( ExceptionDocument.Exception xb )
+
+    {
+        xb.setType( _type );
+
+        if ( xb.getPath() == null && _path != null )
+        {
+            boolean relativeToModule = ! _path.startsWith( "/" );
+            
+            if ( relativeToModule )
+            {
+                xb.setPath( "/" + _path );  // struts wants "/" -- assumes this is module-relative path
+            }
+            else
+            {
+                xb.setPath( _path );
+                SetProperty prop = xb.addNewSetProperty();
+                prop.setProperty( "isPathContextRelative" );
+                prop.setValue( "true" );
+                xb.setClassName( JPF_EXCEPTION_CONFIG_CLASSNAME );
+            }
+        }
+        
+        if ( xb.getKey() == null && _messageKey != null )
+        {
+            xb.setKey( _messageKey );
+        }
+        
+        if ( xb.getKey() == null )
+        {
+            xb.setKey( "" );
+        }
+        
+        if ( _message != null )
+        {
+            SetProperty prop = xb.addNewSetProperty();
+            prop.setProperty( "defaultMessage" );
+            prop.setValue( _message );
+            xb.setClassName( JPF_EXCEPTION_CONFIG_CLASSNAME );
+        }
+        //
+        // Note that we're setting the handler *method* as the handler.  This would break Struts.
+        //
+        if ( xb.getHandler() == null && _handlerMethod != null && _handlerClass == null )
+        {
+            xb.setHandler( _handlerMethod );
+            SetProperty prop = xb.addNewSetProperty();
+            prop.setProperty( "isHandlerMethod" );
+            prop.setValue( "true" );
+            xb.setClassName( JPF_EXCEPTION_CONFIG_CLASSNAME );
+        }
+        
+        if ( _readonly )
+        {
+            SetProperty prop = xb.addNewSetProperty();
+            prop.setProperty( "readonly" );
+            prop.setValue( "true" );
+            xb.setClassName( JPF_EXCEPTION_CONFIG_CLASSNAME );
+        }
+        
+        if ( xb.getHandler() == null && _handlerClass != null )
+        {
+            xb.setHandler( _handlerClass );
+        }
+    }
+
+    public boolean isReadonly()
+    {
+        return _readonly;
+    }
+
+    public void setReadonly( boolean readonly )
+    {
+        _readonly = readonly;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/FormBeanModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/FormBeanModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,255 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.FormBeanDocument;
+
+
+/**
+ * Represents a form bean in a Struts application.
+ */
+public class FormBeanModel extends StrutsElementSupport
+{
+    public static class Property
+    {
+        String name;
+        String type;
+        boolean required;
+        boolean multiValue;
+
+        public Property( String name, String type, boolean required, boolean multival )
+        {
+            this.name = name;
+            this.type = type;
+            this.required = required;
+            this.multiValue = multival;
+        }
+
+        public String getName()
+        {
+            return name;
+        }
+
+        public void setName( String name )
+        {
+            this.name = name;
+        }
+
+        public String getType()
+        {
+            return type;
+        }
+
+        public void setType( String type )
+        {
+            this.type = type;
+        }
+
+        public boolean isRequired()
+        {
+            return required;
+        }
+
+        public void setRequired( boolean required )
+        {
+            this.required = required;
+        }
+
+        public boolean isMultiValue ()
+        {
+            return multiValue;
+        }
+
+        public void setMultiValue ( boolean multi )
+        {
+            this.multiValue = multi;
+        }
+    }
+
+
+    private String _id = "";  // NOI18N
+    private String _className = null;
+    private boolean _dynamic = false;
+    private String _name = null;  // required to be set
+    private String _type = null;  // required to be set
+
+    private ArrayList _properties = new ArrayList();
+
+    public FormBeanModel( String name, String type, StrutsApp parent )
+    {
+        super( parent );
+        this._name = name;
+        this._type = type;
+    }
+
+    public void writeToXMLBean( FormBeanDocument.FormBean xb )
+    {
+        xb.setName( _name );
+        
+        if ( xb.getType() == null )
+        {
+            xb.setType( _type );
+        }
+        
+        if ( xb.getId() == null && _id != null && _id.length() > 0 )
+        {
+            xb.setId( _id );
+        }
+        
+        if ( xb.getClassName() == null &&_className != null )
+        {
+            xb.setClassName( _className ); 
+        }
+        
+        if ( xb.getDynamic() == null && _dynamic )
+        {
+            xb.setDynamic( FormBeanDocument.FormBean.Dynamic.TRUE );
+        }
+    }
+    
+    public String getId()
+    {
+        return _id;
+    }
+
+    public void setId( String id )
+    {
+        this._id = id;
+    }
+
+    public String getClassName()
+    {
+        return _className;
+    }
+
+    public void setClassName( String className )
+    {
+        if ( className != null )
+        {
+            if ("org.apache.struts.action.DynaActionForm".equals( className ) )  // NOI18N
+                _dynamic = true;
+
+            this._className = className;
+        }
+    }
+
+    public boolean isDynamic()
+    {
+        return _dynamic;
+    }
+
+    public void setDynamic( boolean dynamic )
+    {
+        this._dynamic = dynamic;
+    }
+
+    public String getName()
+    {
+        return _name;
+    }
+
+    public void setName( String name )
+    {
+        this._name = name;
+    }
+
+    public String getType()
+    {
+        return _type;
+    }
+
+    public void setType( String type )
+    {
+        this._type = type;
+    }
+
+    public void addProperty( String name, String type, boolean required, boolean multival )
+    {
+        _properties.add( new Property( name, type, required, multival ) );
+    }
+
+    /**
+     * Sets the collection of properties for a form bean to a new collection.
+     */
+    public void updateProperties( Collection newProps )
+    {
+        _properties = new ArrayList();
+
+        if ( newProps != null )
+        {
+            _properties.addAll( newProps );
+        }
+    }
+
+    public Property[] getProperties()
+    {
+        return ( Property[] ) _properties.toArray( new Property[]{} );
+    }
+
+    public void deleteProperty( String name )
+    {
+        for ( int i = 0; i < _properties.size(); ++i )
+        {
+            Property prop = ( Property ) _properties.get( i );
+
+            if ( prop.getName().equals( name ) )
+            {
+                _properties.remove( i-- );
+            }
+        }
+    }
+
+    public void deleteProperty( Property prop )
+    {
+        _properties.remove( prop );
+    }
+
+    public Property findProperty( String name )
+    {
+        int index = findPropertyIndex( name );
+        return ( index != -1 ? ( Property ) _properties.get( index ) : null );
+    }
+
+    protected int findPropertyIndex( String name )
+    {
+        for ( int i = 0; i < _properties.size(); ++i )
+        {
+            Property prop = ( Property ) _properties.get( i );
+
+            if ( prop.getName().equals( name ) )
+            {
+                return i;
+            }
+        }
+
+        return -1;
+    }
+
+    /**
+     * Returns a clone (shallow copy) of the internal properties list.
+     */
+    protected final List getPropertyList()
+    {
+        return ( List ) _properties.clone();
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ForwardContainer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ForwardContainer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+/**
+ * Interface for objects that can hold a collection of ForwardModels.
+ */
+public interface ForwardContainer
+{
+    public void addForward( ForwardModel forwardToAdd );
+    
+    public ForwardModel findForward( String forwardName );
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ForwardModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/ForwardModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,326 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument.Forward;
+import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PAGEFLOW_PACKAGE;
+
+/**
+ * Represents an action forward in a Struts application.
+ */
+public class ForwardModel extends StrutsElementSupport
+{
+    private static final String JPF_ACTION_FWD_CLASSNAME = PAGEFLOW_PACKAGE + ".config.PageFlowActionForward";
+    
+    private boolean _isNestedReturn = false;
+    private boolean _contextRelative = false;
+    private String _name;  // required to be set
+    private String _path;  // required to be set
+    private boolean _redirect = false;
+    private boolean _returnToPage = false;
+    private boolean _returnToAction = false;
+    private String _returnFormType;
+    private String _returnFormMember;
+    private boolean _hasExplicitRedirectValue = false;
+    private List _actionOutputs = null;    // list of ActionOutputModel
+    private boolean _restoreQueryString = false;
+    
+
+    protected ForwardModel( StrutsApp parent )
+    {
+        super( parent );
+    }
+    
+    public ForwardModel( String name, String path, StrutsApp parent )
+    {
+        super( parent );
+        this._name = name;
+        this._path = path;
+    }
+
+    public void writeToXMLBean( Forward xb )
+    {
+        assert _name != null;
+
+        xb.setName( _name );
+        
+        if ( xb.getPath() == null )
+        {
+            xb.setPath( _path == null ? "" : _path );
+        }
+        
+        if ( xb.getContextRelative() == null && _contextRelative )
+        {
+            xb.setContextRelative( Forward.ContextRelative.TRUE );
+        }
+        
+        if ( xb.getRedirect() == null && _redirect )
+        {
+            xb.setRedirect( Forward.Redirect.TRUE );
+        }
+        
+        //
+        // "returnToPage" is set using set-property, which requires us to override the
+        // ActionForward class.
+        //
+        if ( _returnToPage )
+        {
+            SetProperty prop = xb.addNewSetProperty();
+            prop.setProperty( "returnToPage" );
+            prop.setValue( "true" );
+            xb.setClassName( JPF_ACTION_FWD_CLASSNAME );
+        }
+
+        //
+        // "returnToAction" is set using set-property, which requires us to override the
+        // ActionForward class.
+        //
+        if ( _returnToAction )
+        {
+            SetProperty prop = xb.addNewSetProperty();
+            prop.setProperty( "returnToAction" );
+            prop.setValue( "true" );
+            xb.setClassName( JPF_ACTION_FWD_CLASSNAME );
+        }
+
+        if ( _hasExplicitRedirectValue )
+        {
+            SetProperty prop = xb.addNewSetProperty();
+            prop.setProperty( "hasExplicitRedirectValue" );
+            prop.setValue( "true" );
+            xb.setClassName( JPF_ACTION_FWD_CLASSNAME );
+        }
+
+        if ( _restoreQueryString )
+        {
+            SetProperty prop = xb.addNewSetProperty();
+            prop.setProperty( "restoreQueryString" );
+            prop.setValue( "true" );
+            xb.setClassName( JPF_ACTION_FWD_CLASSNAME );
+        }
+        
+        if ( _actionOutputs != null && _actionOutputs.size() > 0 )
+        {
+            xb.setClassName( JPF_ACTION_FWD_CLASSNAME );
+
+            int n = _actionOutputs.size();
+            SetProperty countProp = xb.addNewSetProperty();
+            countProp.setProperty( "actionOutputCount" );
+            countProp.setValue( new Integer( n ).toString() );
+            
+            for ( int i = 0; i < n; ++i )
+            {
+                ActionOutputModel pi = ( ActionOutputModel ) _actionOutputs.get( i );
+                SetProperty prop = xb.addNewSetProperty();
+                prop.setProperty( "actionOutput" + i );
+                prop.setValue( pi.getType() + "|" + pi.getNullable() + "|" + pi.getName() );
+            }
+        }
+        
+        //
+        // "nestedReturn" is set using set-property, which requires us to override the
+        // ActionForward class.
+        //
+        if ( _isNestedReturn )
+        {
+            SetProperty prop = xb.addNewSetProperty();
+            prop.setProperty( "nestedReturn" );
+            prop.setValue( "true" );
+
+            if ( _returnFormType != null )
+            {
+                prop = xb.addNewSetProperty();
+                prop.setProperty( "returnFormType" );
+                prop.setValue( _returnFormType );
+            }
+            
+            if ( _returnFormMember != null )
+            {
+                prop = xb.addNewSetProperty();
+                prop.setProperty( "returnFormMember" );
+                prop.setValue( _returnFormMember );
+            }
+            
+            xb.setClassName( JPF_ACTION_FWD_CLASSNAME );
+        }
+        
+        addComment( xb );
+    }    
+
+    public boolean isReturnToPage()
+    {
+        return _returnToPage;
+    }
+
+    public void setReturnToPage( boolean returnToPage )
+    {
+        this._returnToPage = returnToPage;
+    }
+
+    public boolean isReturnToAction()
+    {
+        return _returnToAction;
+    }
+
+    public void setReturnToAction( boolean returnToAction )
+    {
+        this._returnToAction = returnToAction;
+    }
+
+    public void setIsNestedReturn( boolean nestedReturn )
+    {
+        _isNestedReturn = nestedReturn;
+    }
+
+    public String getReturnFormType()
+    {
+        return _returnFormType;
+    }
+
+    public void setReturnFormType( String returnFormType )
+    {
+        this._returnFormType = returnFormType;
+    }
+
+    public String getReturnFormMember()
+    {
+        return _returnFormMember;
+    }
+
+    public void setReturnFormMember( String returnFormMember )
+    {
+        this._returnFormMember = returnFormMember;
+    }
+
+    public boolean getContextRelative()
+    {
+        return _contextRelative;
+    }
+
+    public void setContextRelative( boolean contextRelative )
+    {
+        this._contextRelative = contextRelative;
+    }
+
+    public String getName()
+    {
+        return _name;
+    }
+
+    public void setName( String name )
+    {
+        this._name = name;
+    }
+
+    public String getPath()
+    {
+        return _path;
+    }
+
+    public void setPath( String path )
+    {
+        this._path = path;
+    }
+
+    public boolean isRedirect()
+    {
+        return _redirect;
+    }
+
+    public void setRedirect( boolean redirect )
+    {
+        this._redirect = redirect;
+        this._hasExplicitRedirectValue = redirect;
+    }
+
+    public boolean isRestoreQueryString()
+    {
+        return _restoreQueryString;
+    }
+
+    public void setRestoreQueryString( boolean restore )
+    {
+        _restoreQueryString = restore;
+    }
+
+    /**
+     * @deprecated
+     * @see #forwardsToPage
+     */
+    public final boolean isPageForward()
+    {
+        return forwardsToPage();
+    }
+
+    public boolean forwardsToPage()
+    {
+        return ! _path.endsWith( ".do" ) && ! _path.endsWith( ".jpf" );  // NOI18N
+    }
+
+    public boolean forwardsToAction()
+    {
+        return _path.endsWith( ".do" );  // NOI18N
+    }
+
+    public final boolean forwardsToPageFlow()
+    {
+        return _path.endsWith( ".jpf" );  // NOI18N
+    }
+
+    public String getPageName()
+    {
+        assert forwardsToPage() : "getPageName() called for non-page " + _path;  // NOI18N
+
+        int slash = _path.lastIndexOf( '/' );  // NOI18N
+        return ( slash != -1 ? _path.substring( slash + 1 ) : _path );
+    }
+
+    public String getActionName()
+    {
+        assert forwardsToAction() : "getActionName() called for non-action" + _path;  // NOI18N
+
+        int index = _path.indexOf( ".do" );  // NOI18N
+        assert index != -1;
+        return _path.substring( 0, index );
+    }
+
+    public void addActionOutput( ActionOutputModel actionOutput )
+    {
+        if ( _actionOutputs == null )
+        {
+            _actionOutputs = new ArrayList();
+        }
+        
+        _actionOutputs.add( actionOutput );
+    }
+    
+    public void setActionOutputs( List actionOutputs )
+    {
+        _actionOutputs = actionOutputs;
+    }
+
+    public boolean isNestedReturn()
+    {
+        return _isNestedReturn;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/MessageResourcesModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/MessageResourcesModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,117 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.MessageResourcesDocument;
+
+public class MessageResourcesModel extends StrutsElementSupport
+{
+    private String _parameter;   // the target resources
+    private String _key;         // the ServletContext attribute in which to store the resources
+    private Boolean _returnNull; // if false, will return '???keyname???' instead of null for missing resources
+    private String _factory;     // configuration bean class -- org.apache.struts.config.MessageResourcesConfig
+    
+    public MessageResourcesModel( StrutsApp parent )
+    {
+        super( parent );
+    }
+
+    public String getParameter()
+    {
+        return _parameter;
+    }
+
+    public void setParameter( String parameter )
+    {
+        _parameter = parameter;
+    }
+
+    public String getKey()
+    {
+        return _key;
+    }
+
+    public void setKey( String key )
+    {
+        _key = key;
+    }
+
+    public boolean doesReturnNull()
+    {
+        return _returnNull == null || _returnNull.booleanValue();
+    }
+
+    public void setReturnNull( boolean aNull )
+    {
+        _returnNull = new Boolean( aNull );
+    }
+
+    public String getFactory()
+    {
+        return _factory;
+    }
+
+    public void setFactory( String factory )
+    {
+        _factory = factory;
+    }
+
+    public Boolean getReturnNull()
+    {
+        return _returnNull;
+    }
+
+    public void setReturnNull( Boolean returnNull )
+    {
+        _returnNull = returnNull;
+    }
+
+    public void writeToXMLBean( MessageResourcesDocument.MessageResources mr )
+    {
+        if ( mr.getKey() == null && _key != null )
+        {
+            mr.setKey( _key );
+        }
+        
+        if ( mr.getParameter() == null )
+        {
+            assert _parameter != null;
+            mr.setParameter( _parameter );
+        }
+        
+        if ( mr.getNull() == null && _returnNull != null )
+        {
+            if ( _returnNull.booleanValue() )
+            {
+                mr.setNull( MessageResourcesDocument.MessageResources.Null.TRUE );
+            }
+            else
+            {
+                mr.setNull( MessageResourcesDocument.MessageResources.Null.FALSE );
+            }
+        }
+        
+        if ( mr.getFactory() == null && _factory != null )
+        {
+            mr.setFactory( _factory );
+        }
+    }
+    
+    
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/NoWebInfDirectoryException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/NoWebInfDirectoryException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+/**
+ * Thrown if no WEB-INF directory can be found on a web app file's URI.
+ */
+public class NoWebInfDirectoryException extends Exception
+{
+    public NoWebInfDirectoryException() {}
+
+    public NoWebInfDirectoryException( String message )
+        { super( message ); }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/StrutsApp.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/StrutsApp.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,869 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.*;
+import org.apache.beehive.netui.compiler.model.validation.ValidationModel;
+import org.apache.xmlbeans.XmlObject;
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlDocumentProperties;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlOptions;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Iterator;
+import java.util.Collections;
+import java.util.Comparator;
+
+
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.PAGEFLOW_PACKAGE;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.DEFAULT_VALIDATION_MESSAGE_BUNDLE;
+import static org.apache.beehive.netui.compiler.JpfLanguageConstants.DEFAULT_VALIDATION_MESSAGE_BUNDLE_KEY;
+
+
+public class StrutsApp
+        extends AbstractForwardContainer
+        implements ForwardContainer, ExceptionContainer
+{
+    //protected boolean _isRootApp = false;
+    private ArrayList _actionMappings = new ArrayList();
+    private ArrayList _exceptionCatches = new ArrayList();
+    private ArrayList< MessageResourcesModel > _messageResources = new ArrayList< MessageResourcesModel >();
+    private Map _formBeans = new HashMap();
+    private ValidationModel _validationModel;
+
+    private boolean _returnToPageDisabled = true;
+    private boolean _returnToActionDisabled = true;
+    private boolean _isNestedPageFlow = false;
+    private boolean _isSingletonPageFlow = false;
+    
+
+    protected static final String DUPLICATE_ACTION_COMMENT = "Note that there is more than one action with path \"{0}\"."
+                                                           + "  Use a form-qualified action path if this is not the "
+                                                           + "one you want.";
+    
+    protected static final String PAGEFLOW_REQUESTPROCESSOR_CLASSNAME
+                                   = PAGEFLOW_PACKAGE + ".PageFlowRequestProcessor";
+
+    protected static final String PAGEFLOW_CONTROLLER_CONFIG_CLASSNAME
+                                   = PAGEFLOW_PACKAGE + ".config.PageFlowControllerConfig";
+
+    protected static final String STRUTS_CONFIG_PREFIX = "jpf-struts-config";
+    protected static final String STRUTS_CONFIG_EXTENSION = ".xml";
+    protected static final char STRUTS_CONFIG_SEPARATOR = '-';
+    protected static final String WEBINF_DIR_NAME = "WEB-INF";
+    protected static final String STRUTSCONFIG_OUTPUT_DIR = "/" + WEBINF_DIR_NAME + "/.pageflow-struts-generated";
+    protected static final String VALIDATOR_PLUG_IN_CLASSNAME = "org.apache.struts.validator.ValidatorPlugIn";
+    protected static final String VALIDATOR_PATHNAMES_PROPERTY = "pathnames";
+    protected static final String DEFAULT_VALIDATOR_RULES_URI = "/" + WEBINF_DIR_NAME + "/validator-rules.xml";
+
+    
+    public StrutsApp()
+    {
+        super( null );
+        setParentApp( this );
+        
+        //
+        // Add a reference for the default validation message resources (in beehive-netui-pageflow.jar).
+        //
+        MessageResourcesModel mrm = new MessageResourcesModel( this );
+        mrm.setParameter( DEFAULT_VALIDATION_MESSAGE_BUNDLE );
+        mrm.setKey( DEFAULT_VALIDATION_MESSAGE_BUNDLE_KEY );
+        mrm.setReturnNull( false );
+        addMessageResources( mrm );
+    }
+
+    /**
+     * Returns all of the action mappings that are defined for this StrutsApp.
+     */
+    public ActionModel[] getActionMappings()
+    {
+        return ( ActionModel[] ) _actionMappings.toArray( new ActionModel[0] );
+    }
+
+    /**
+     * Returns all of the action mappings that are defined for this
+     * StrutsApp as a list that is a clone of this StrutsApp's internal list.
+     */
+    public List getActionMappingsAsList()
+    {
+        return ( List ) _actionMappings.clone();
+    }
+
+    public void addMessageResources( MessageResourcesModel mr )
+    {
+        _messageResources.add( mr );
+    }
+    
+    /**
+     * Adds a new ActionMapping to this StrutsApp.
+     */
+    public void addActionMapping( ActionModel newActionMapping )
+    {
+        //
+        // First see if there's a name conflict.  If so, we'll add an extra mapping to disambiguate.
+        //
+        for ( int i = 0; i < _actionMappings.size(); ++i )
+        {
+            ActionModel mapping = ( ActionModel ) _actionMappings.get( i );
+            
+            if ( mapping.getPath().equals( newActionMapping.getPath() ) )
+            {
+                // Tack on the form-name (mapping.getName()).
+                ActionModel qualifiedMapping = createActionModel( mapping, getFormQualifiedActionPath( mapping ) );
+                ActionModel qualifiedNewMapping = createActionModel( newActionMapping,
+                                                                     getFormQualifiedActionPath( newActionMapping ) );
+                qualifiedMapping.setUnqualifiedActionPath( mapping.getPath() );
+                qualifiedNewMapping.setUnqualifiedActionPath( newActionMapping.getPath() );
+                _actionMappings.add( qualifiedMapping );
+                _actionMappings.add( qualifiedNewMapping );
+            }
+        }
+        
+        _actionMappings.add( newActionMapping );
+    }
+
+    protected ActionModel createActionModel( ActionModel src, String newPath )
+    {
+        return new ActionModel( src, newPath );
+    }
+    
+    protected String getFormQualifiedActionPath( ActionModel action )
+    {
+        String formName = action.getName(); // this is the name of the form, not the name of the action.
+        
+        if ( formName == null )
+        {
+            return action.getPath() + "_";
+        }
+        else
+        {
+            String beanName = action.getFormClass();    // will be non-null for non-ActionForm-derived types
+            
+            if ( beanName == null )
+            {
+                FormBeanModel bean = getFormBean( formName );
+                assert bean != null;
+                beanName = bean.getType();
+            }
+            
+            return action.getPath() + "_" + makeFullyQualifiedBeanName( beanName );
+        }
+    }
+    
+    /**
+     * Deletes the given ActionModel.
+     */
+    public void deleteActionMapping( ActionModel actionMapping )
+    {
+        _actionMappings.remove( actionMapping );
+    }
+
+    /**
+     * Implemented for {@link ExceptionContainer}.
+     */
+    public void addException( ExceptionModel c )
+    {
+        _exceptionCatches.add( c );
+    }
+
+    void enableReturnTo( ForwardModel fwd )
+    {  
+        if ( fwd.isReturnToAction() )
+        {
+            _returnToActionDisabled = false;
+        }
+        else if ( fwd.isReturnToPage() )
+        {
+            _returnToPageDisabled = false;
+        }
+    }
+
+    /**
+     * Returns all of the form beans that are defined for this
+     * StrutsApp.
+     */
+    public FormBeanModel[] getFormBeans()
+    {
+        return ( FormBeanModel[] ) getFormBeansAsList().toArray( new FormBeanModel[0] );
+    }
+
+    /**
+     * Returns a list of all the form beans that are defined for this StrutsApp.
+     */
+    public List getFormBeansAsList()
+    {
+        ArrayList retList = new ArrayList();
+        
+        for ( Iterator i = _formBeans.values().iterator(); i.hasNext(); )
+        {
+            FormBeanModel fb = ( FormBeanModel ) i.next();
+            
+            if ( fb != null )
+            {
+                retList.add( fb );
+            }
+        }
+        
+        return retList;
+    }
+
+    public FormBeanModel getFormBean( String formBeanName )
+    {
+        return ( FormBeanModel ) _formBeans.get( formBeanName );
+    }
+
+    public FormBeanModel getFormBeanByType( String typeName )
+    {
+        for ( Iterator i = _formBeans.values().iterator(); i.hasNext(); )
+        {
+            FormBeanModel formBean = ( FormBeanModel ) i.next();
+            if ( formBean != null && formBean.getType().equals( typeName ) )
+            {
+                return formBean;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Adds a new form bean to this StrutsApp.
+     */
+    public void addFormBean( FormBeanModel newFormBean )
+    {
+        _formBeans.put( newFormBean.getName(), newFormBean );
+    }
+
+    /**
+     * Delete the given form-bean.
+     */
+    public void deleteFormBean( FormBeanModel formBean )
+    {
+        _formBeans.remove( formBean.getName() );
+    }
+
+    public static File getWebappRootFromJpf( File jpf )
+        throws NoWebInfDirectoryException
+    {
+        File dir = null;
+        File webappRoot = null;
+
+        for ( dir = jpf.getAbsoluteFile().getParentFile(); dir != null && webappRoot == null; dir = dir.getParentFile() )
+        {
+            String[] children = dir.list();
+
+            if ( children != null )
+            {
+                for ( int c = 0; c < children.length; c++ )
+                {
+                    if ( children[c].equalsIgnoreCase( WEBINF_DIR_NAME ) )
+                    {
+                        webappRoot = dir;
+                        break;
+                    }
+                }
+            }
+        }
+
+        if ( webappRoot == null )
+        {
+            throw new NoWebInfDirectoryException( jpf.getPath() );
+        }
+
+        return webappRoot;
+    }
+    
+    public String getFormNameForType( String formType )
+    {
+        //
+        // First try and create a form-bean name that is a camelcased
+        // version of the classname without all of its package/outer-class
+        // qualifiers.  If one with that name already exists, munge the
+        // fully-qualified classname.
+        //
+        int lastQualifier = formType.lastIndexOf( '$' );
+
+        if ( lastQualifier == -1 )
+        {
+            lastQualifier = formType.lastIndexOf( '.' );
+        }
+
+        String formBeanName = formType.substring( lastQualifier + 1 );
+        formBeanName = Character.toLowerCase( formBeanName.charAt( 0 ) ) + formBeanName.substring( 1 );
+
+        //
+        // If there's a name conflict, we need to disambiguate.
+        //
+        if ( _formBeans.containsKey( formBeanName ) )
+        {
+            String conflictingName = formBeanName;
+            formBeanName = makeFullyQualifiedBeanName( formType );
+            
+            //
+            // Now look for the one we're conflicting with 
+            //
+            FormBeanModel conflictingBean = getFormBean( conflictingName );
+            
+            if ( conflictingBean != null )
+            {
+                String nonConflictingName = makeFullyQualifiedBeanName( conflictingBean.getType() );
+                conflictingBean.setName( nonConflictingName );
+                _formBeans.put( nonConflictingName, conflictingBean );
+                
+                //
+                // Now look for any action mappings that are using the conflicting name...
+                //
+                for ( int i = 0; i < _actionMappings.size(); ++i )
+                {
+                    ActionModel mapping = ( ActionModel ) _actionMappings.get( i );
+                    
+                    if ( mapping.getName() != null && mapping.getName().equals( conflictingName ) )
+                    {
+                        mapping.setName( nonConflictingName );
+                    }
+                }
+            }
+            
+            _formBeans.put( conflictingName, null );
+        }
+
+        return formBeanName;
+    }
+
+    protected String makeFullyQualifiedBeanName( String formType )
+    {
+        return formType.replace( '.', '_' ).replace( '$', '_' );
+    }
+
+
+    /**
+     * <ol>
+     *   <li>Remove duplicate action mappings.</li>
+     *   <li>For action mappings that have the same pahts (but have different forms), add a comment.
+     *   <li>Sort the action mappings by path name.</li>
+     * </ol>
+     */ 
+    protected void sortActionMappings()
+    {
+        HashMap alreadySeen = new HashMap();
+        HashMap dups = new HashMap();
+        ArrayList toRemove = new ArrayList();
+        
+        for ( int i = 0; i < _actionMappings.size(); ++i )
+        {
+            ActionModel am = ( ActionModel ) _actionMappings.get( i );
+            String path = am.getPath( true );
+            
+            if ( alreadySeen.containsKey( path ) )
+            {
+                ActionModel dup = ( ActionModel ) alreadySeen.get( path );
+                
+                if ( dup != null )
+                {
+                    assert ! dups.containsKey( dup.getPath() );
+                    dups.put( dup.getPath(), dup );
+                    alreadySeen.put( path, null );
+                    toRemove.add( dup );
+                }
+                
+                //
+                // If there are conflicting paths, choose the one with no form, or the one whose
+                // form name comes alphabetically first.
+                //
+                if ( ! dups.containsKey( am.getPath() ) )
+                {
+                    dups.put( am.getPath(), am ); 
+                }
+                else
+                {
+                    ActionModel existingDup = ( ActionModel ) dups.get( am.getPath() );
+                    
+                    if ( am.getName() == null
+                         || ( existingDup.getName() != null
+                              && am.getName().compareTo( existingDup.getName() ) < 0 ) )
+                    {
+                        dups.put( am.getPath(), am );
+                    }
+                }
+                
+                toRemove.add( am );
+            }
+            else
+            {
+                alreadySeen.put( path, am );
+            }
+        }
+        
+        for ( int i = 0; i < toRemove.size(); ++i )
+        {
+            _actionMappings.remove( toRemove.get( i ) );
+        }
+        
+        //
+        // Create the list of overloaded actions, and add a comment on any overloaded action.
+        //
+        ArrayList dupsList = new ArrayList();
+        for ( Iterator i = dups.values().iterator(); i.hasNext(); )
+        {
+            ActionModel am = ( ActionModel ) i.next();
+            dupsList.add( am );
+            
+            String unqualifiedPath = am.getPath( true );
+            
+            if ( unqualifiedPath.equals( am.getPath( false ) ) )
+            {
+                am.setComment( DUPLICATE_ACTION_COMMENT.replaceAll( "\\{0\\}", unqualifiedPath ) );  // @TODO I18N
+                am.setOverloaded( true );
+            }
+        }
+        
+        _actionMappings.addAll( dupsList );
+        Collections.sort( _actionMappings, new ActionMappingComparator() );
+    }
+    
+    protected class ActionMappingComparator implements Comparator
+    {
+        public int compare( Object o1, Object o2 )
+        {
+            assert o1 instanceof ActionModel && o2 instanceof ActionModel;
+            
+            ActionModel am1 = ( ActionModel ) o1;
+            ActionModel am2 = ( ActionModel ) o2;
+            
+            assert ! am1.getPath().equals( am2.getPath() );     // there should be no duplicate paths
+            return am1.getPath().compareTo( am2.getPath() );
+        }
+    }
+
+    protected ForwardDocument.Forward addNewForward( XmlObject xmlObject )
+    {
+        return ( ( GlobalForwardsDocument.GlobalForwards ) xmlObject ).addNewForward();
+    }
+
+    protected Map getFormBeansMap()
+    {
+        return _formBeans;
+    }
+    
+    protected List getExceptionCatchesList()
+    {
+        return _exceptionCatches;
+    }
+    
+    protected List getActionMappingsList()
+    {
+        return _actionMappings;
+    }
+    
+    protected List< MessageResourcesModel > getMessageResourcesList()
+    {
+        return _messageResources;
+    }
+    
+    /**
+     * Get the MessageResourcesModel for which no "key" is set (the default one used at runtime).
+     */ 
+    public MessageResourcesModel getDefaultMessageResources()
+    {
+        for ( MessageResourcesModel i : _messageResources )
+        {
+            if ( i.getKey() == null ) return i;
+        }
+        
+        return null;
+    }
+    
+    public boolean isReturnToPageDisabled()
+    {
+        return _returnToPageDisabled;
+    }
+
+    public boolean isReturnToActionDisabled()
+    {
+        return _returnToActionDisabled;
+    }
+    
+    public void setValidationModel( ValidationModel validationModel )
+    {
+        if ( ! validationModel.isEmpty() )  // if there's nothing in the validation model, we don't care about it.
+        {
+            _validationModel = validationModel;
+        }
+    }
+    
+    public void writeXml( PrintStream outputStream, File mergeFile, File webappRoot )
+        throws IOException, XmlException, NoWebInfDirectoryException
+    {
+        StrutsConfigDocument doc;
+        
+        if ( mergeFile != null && mergeFile.canRead() )
+        {
+            doc = StrutsConfigDocument.Factory.parse( mergeFile );
+        }
+        else
+        {
+            doc = StrutsConfigDocument.Factory.newInstance();
+        }
+
+        
+        //
+        // Write the DOCTYPE and all that good stuff.
+        //
+        XmlDocumentProperties docProps = doc.documentProperties();
+        
+        if ( docProps.getDoctypeName() == null )
+        {
+            docProps.setDoctypeName( "struts-config" );  // NOI18N
+        }
+        
+        if ( docProps.getDoctypePublicId() == null )
+        {
+            docProps.setDoctypePublicId( "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" );  // NOI18N
+        }
+        
+        if ( docProps.getDoctypeSystemId() == null )
+        {
+            docProps.setDoctypeSystemId( "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd" );  // NOI18N
+        }
+        
+        
+        //
+        // struts-config
+        //
+        StrutsConfigDocument.StrutsConfig scElement = doc.getStrutsConfig();
+        
+        if ( scElement == null )
+        {
+            scElement = doc.addNewStrutsConfig();
+        }
+        
+        
+        //
+        // Write the "generated by" comment.
+        //
+        XmlCursor curs = scElement.newCursor();        
+        String headerComment = getHeaderComment( mergeFile );
+        if ( headerComment != null ) curs.insertComment( headerComment );
+        
+        
+        //
+        // form-beans
+        //
+        writeFormBeans( scElement );
+        
+        
+        //
+        // global-exceptions
+        //
+        writeExceptions( scElement );
+        
+        
+        //
+        // global-forwards
+        //
+        GlobalForwardsDocument.GlobalForwards globalForwards = scElement.getGlobalForwards();
+        
+        if ( globalForwards == null )
+        {
+            globalForwards = scElement.addNewGlobalForwards();
+        }
+        writeForwards( globalForwards.getForwardArray(), globalForwards );
+        
+        
+        //
+        // action-mappings
+        //
+        writeActionMappings( scElement );
+
+        
+        //
+        // message-resources
+        //
+        writeMessageResources( scElement );
+        
+                
+        //
+        // request-processor
+        //
+        writeControllerElement( scElement );
+        
+        
+        //
+        // ValidatorPlugIn
+        //
+        writeValidatorInit( scElement );
+        
+        
+        //
+        // Write the file.
+        //
+        XmlOptions options = new XmlOptions();
+        options.setSavePrettyPrint();
+        doc.save( outputStream, options );
+    }
+
+    private void writeMessageResources( StrutsConfigDocument.StrutsConfig scElement )
+    {
+        MessageResourcesDocument.MessageResources[] existingMessageResources = scElement.getMessageResourcesArray(); 
+        
+        for ( Iterator i = getMessageResourcesList().iterator(); i.hasNext(); )
+        {
+            MessageResourcesModel mr = ( MessageResourcesModel ) i.next();
+            
+            if ( mr != null )
+            {
+                MessageResourcesDocument.MessageResources mrToEdit = null;
+                
+                for ( int j = 0; j < existingMessageResources.length; ++j )
+                {
+                    String existingKey = existingMessageResources[j].getKey();
+                    
+                    if ( ( existingKey == null && mr.getKey() == null )
+                         || ( existingKey != null && mr.getKey() != null && existingKey.equals( mr.getKey() ) ) )
+                    {
+                        mrToEdit = existingMessageResources[j];
+                        break;
+                    }
+                    
+                }
+
+                if ( mrToEdit == null )
+                {
+                    mrToEdit = scElement.addNewMessageResources();
+                }
+
+                mr.writeToXMLBean( mrToEdit );
+            }
+        }
+    }
+    
+    private void writeActionMappings( StrutsConfigDocument.StrutsConfig scElement )
+    {
+        sortActionMappings();        
+        ActionMappingsDocument.ActionMappings actionMappings = scElement.getActionMappings();
+        
+        if ( actionMappings == null )
+        {
+            actionMappings = scElement.addNewActionMappings();
+        }
+        
+        ActionDocument.Action[] existingActions = actionMappings.getActionArray();
+        List actionMappingsList = getActionMappingsList();
+        
+        for ( int i = 0; i < actionMappingsList.size(); ++i )
+        {
+            ActionModel am = ( ActionModel ) actionMappingsList.get( i );
+            ActionDocument.Action actionMappingToEdit = null;
+                
+            for ( int j = 0; j < existingActions.length; ++j )
+            {
+                if ( am.getPath().equals( existingActions[j].getPath() ) )
+                {
+                    actionMappingToEdit = existingActions[j];
+                    break;
+                }
+            }
+                
+            if ( actionMappingToEdit == null )
+            {
+                actionMappingToEdit = actionMappings.addNewAction();
+            }
+                
+            am.writeToXMLBean( actionMappingToEdit );
+        }
+    }
+    
+    private void writeExceptions( StrutsConfigDocument.StrutsConfig scElement )
+    {
+        GlobalExceptionsDocument.GlobalExceptions globalExceptions = scElement.getGlobalExceptions();
+        
+        if ( globalExceptions == null )
+        {
+            globalExceptions = scElement.addNewGlobalExceptions();
+        }
+        
+        List exceptionCatches = getExceptionCatchesList();
+        if ( exceptionCatches != null && ! exceptionCatches.isEmpty() )
+        {
+            ExceptionDocument.Exception[] existingExceptions = globalExceptions.getExceptionArray();
+            
+            for ( int i = 0; i < exceptionCatches.size(); ++i )
+            {
+                ExceptionModel ec = ( ExceptionModel ) exceptionCatches.get( i );
+                ExceptionDocument.Exception exceptionToEdit = null;
+                
+                for ( int j = 0; j < existingExceptions.length; ++j )
+                {
+                    if ( ec.getType().equals( existingExceptions[j].getType() ) )
+                    {
+                        exceptionToEdit = existingExceptions[j];
+                        break;
+                    }
+                }
+                
+                if ( exceptionToEdit == null )
+                {
+                    exceptionToEdit = globalExceptions.addNewException();
+                }
+                
+                ec.writeToXMLBean( exceptionToEdit );
+            }
+        } 
+    }
+    
+    private void writeFormBeans( StrutsConfigDocument.StrutsConfig scElement )
+    {
+        FormBeansDocument.FormBeans formBeans = scElement.getFormBeans();
+        
+        if ( formBeans == null )
+        {
+            formBeans = scElement.addNewFormBeans();
+        }
+        
+        FormBeanDocument.FormBean[] existingBeans = formBeans.getFormBeanArray();
+        
+        for ( Iterator i = getFormBeansMap().values().iterator(); i.hasNext(); )
+        {
+            FormBeanModel fb = ( FormBeanModel ) i.next();
+            
+            if ( fb != null )
+            {
+                FormBeanDocument.FormBean formBeanToEdit = null;
+                
+                for ( int j = 0; j < existingBeans.length; ++j )
+                {
+                    if ( existingBeans[j].getName().equals( fb.getName() ) )
+                    {
+                        formBeanToEdit = existingBeans[j];
+                        break;
+                    }
+                    
+                }
+
+                if ( formBeanToEdit == null )
+                {
+                    formBeanToEdit = formBeans.addNewFormBean();
+                }
+
+                fb.writeToXMLBean( formBeanToEdit );
+            }
+        }
+    }
+    
+    protected void writeControllerElement( StrutsConfigDocument.StrutsConfig scElement )
+    {
+        if ( scElement.getController() == null )
+        {
+            ControllerDocument.Controller controller = scElement.addNewController();
+            controller.setProcessorClass( PAGEFLOW_REQUESTPROCESSOR_CLASSNAME );
+            controller.setInputForward( ControllerDocument.Controller.InputForward.TRUE );
+            
+            if ( _isNestedPageFlow ) addSetProperty( controller, "isNestedPageFlow", "true" );
+            if ( _isSingletonPageFlow ) addSetProperty( controller, "isSingletonPageFlow", "true" );
+            if ( isReturnToPageDisabled() ) addSetProperty( controller, "isReturnToPageDisabled", "true" );
+            if ( isReturnToActionDisabled() ) addSetProperty( controller, "isReturnToActionDisabled", "true" );
+            
+            //
+            // If there is not a default MessageResources element in the generated XML, add a special set-property
+            // to communicate this to the runtime.
+            //
+            MessageResourcesDocument.MessageResources[] mrArray = scElement.getMessageResourcesArray();
+            for ( int i = 0; i < mrArray.length; i++ )
+            {
+                MessageResourcesDocument.MessageResources messageResources = mrArray[i];
+                if ( messageResources.getKey() == null ) return;
+            }
+            addSetProperty( controller, "isMissingDefaultMessages", "true" );
+        } 
+    }
+    
+    protected void addSetProperty( ControllerDocument.Controller controller, String propName, String propValue )
+    {
+        controller.setClassName( PAGEFLOW_CONTROLLER_CONFIG_CLASSNAME );
+        SetPropertyDocument.SetProperty prop = controller.addNewSetProperty();
+        prop.setProperty( propName );
+        prop.setValue( propValue );
+    }
+    
+    protected void writeValidatorInit( StrutsConfigDocument.StrutsConfig scElement )
+    {
+        if ( _validationModel != null && ! _validationModel.isEmpty() )
+        {
+            PlugInDocument.PlugIn plugInElementToEdit = null;
+            PlugInDocument.PlugIn[] existingPlugIns = scElement.getPlugInArray();
+            
+            for ( int i = 0; i < existingPlugIns.length; i++ )
+            {
+                PlugInDocument.PlugIn existingPlugIn = existingPlugIns[i];
+                
+                if ( VALIDATOR_PLUG_IN_CLASSNAME.equals( existingPlugIn.getClassName() ) )
+                {
+                    plugInElementToEdit = existingPlugIn;
+                    break;
+                }
+            }
+            
+            if ( plugInElementToEdit == null )
+            {
+                plugInElementToEdit = scElement.addNewPlugIn();
+                plugInElementToEdit.setClassName( VALIDATOR_PLUG_IN_CLASSNAME );
+            }
+            
+            SetPropertyDocument.SetProperty[] existingSetProperties = plugInElementToEdit.getSetPropertyArray();
+            
+            for ( int i = 0; i < existingSetProperties.length; i++ )
+            {
+                if ( VALIDATOR_PATHNAMES_PROPERTY.equals( existingSetProperties[i].getProperty() ) )
+                {
+                    //
+                    // This means that in the user's struts-merge file, there's already a "pathnames" set-property
+                    // element.  We don't want to overwrite it.
+                    //
+                    return;
+                }
+            }
+            
+            SetPropertyDocument.SetProperty pathnamesProperty = plugInElementToEdit.addNewSetProperty();
+            pathnamesProperty.setProperty( VALIDATOR_PATHNAMES_PROPERTY );
+            pathnamesProperty.setValue( DEFAULT_VALIDATOR_RULES_URI + "," + _validationModel.getOutputFileURI() );
+        }
+    }
+    
+    protected String getHeaderComment( File mergeFile )
+    {
+        return null;
+    }
+       
+    public void setNestedPageFlow( boolean nestedPageFlow )
+    {
+        _isNestedPageFlow = nestedPageFlow;
+    }
+
+    public void setSingletonPageFlow( boolean singletonPageFlow )
+    {
+        _isSingletonPageFlow = singletonPageFlow;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/StrutsElementSupport.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/StrutsElementSupport.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,150 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model;
+
+import org.w3c.dom.Node;
+import org.apache.xmlbeans.XmlObject;
+import org.apache.xmlbeans.XmlCursor;
+
+import java.util.HashMap;
+
+/**
+ * Defines general support for elements that
+ */
+public abstract class StrutsElementSupport
+{
+    private String _description;
+    private HashMap _properties = new HashMap();
+    private String _displayName;
+    private Icon _icon;
+    private StrutsApp _parentApp;
+    private String _comment;
+    private String _className;
+
+    public StrutsElementSupport( StrutsApp parentApp )
+    {
+        _parentApp = parentApp;
+    }
+
+    protected StrutsApp getParentApp()
+    {
+        return _parentApp;
+    }
+
+    public void setDescription( String description )
+        { _description = description; }
+
+    public String getDescription()
+        { return _description; }
+
+    public void setProperty( String name, String value )
+        { _properties.put( name, value ); }
+
+    public String getProperty( String name )
+        { return ( String ) _properties.get( name ); }
+
+    public void setDisplayName( String displayName )
+        { _displayName = displayName; }
+
+    public String getDisplayName()
+        { return _displayName; }
+
+    public void setIcon( Icon icon )
+        { _icon = icon; }
+
+    public Icon getIcon()
+        { return _icon; }
+
+    public String getClassName()
+    {
+        return _className;
+    }
+
+    public void setClassName( String className )
+    {
+        _className = className;
+    }
+
+    public void setComment( String comment )
+    {
+        _comment = comment;
+    }
+    
+    public String getComment()
+    {
+        return _comment;
+    }
+
+    class Icon
+    {
+        String smallIconLocation;
+        String largeIconLocation;
+
+        /**
+         * Creates an object representing icon locations for certain types of
+         * elements in the struts-config.xml file.
+         * @param smallIconLocation the location of a small icon
+         *                          relative to the stuts config file
+         */
+        public Icon( String smallIconLocation )
+        {
+            this( smallIconLocation, null );
+        }
+
+        /**
+         * Creates an object representing icon locations for certain types of
+         * elements in the struts-config.xml file.
+         * @param smallIconLocation the location of a small icon
+         *                          relative to the stuts config file
+         * @param largeIconLocation the location of a large (32x32) icon
+         *                          relative to the stuts-config.xml file.
+         */
+        public Icon( String smallIconLocation, String largeIconLocation )
+        {
+            this.smallIconLocation = smallIconLocation;
+            this.largeIconLocation = largeIconLocation;
+        }
+    }
+
+    public static String getAttr( Node node, String name )
+    {
+        Node attr = node.getAttributes().getNamedItem( name );
+        return ( attr != null ? attr.getNodeValue() : null );
+    }
+
+    public static boolean getAttrBool( Node node, String name )
+    {
+        String val = getAttr( node, name );
+        return ( val != null && val.equalsIgnoreCase( "true" ) );  // NOI18N
+    }
+    
+    protected void addComment( XmlObject xb )
+    {
+        if ( _comment != null )
+        {
+            XmlCursor curs = xb.newCursor();
+            curs.insertComment( " " + _comment + " " );
+        }
+    }
+    
+    protected void setParentApp( StrutsApp parentApp )
+    {
+        _parentApp = parentApp;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/LocaleSet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/LocaleSet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model.validation;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.FormsetDocument;
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.FormDocument;
+
+import java.util.Locale;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Iterator;
+
+public class LocaleSet
+{
+    private Locale _locale;
+    private Map _entities = new HashMap();
+    
+    
+    public LocaleSet()
+    {
+        _locale = null;     // default locale;
+    }
+    
+    public LocaleSet( Locale locale )
+    {
+        _locale = locale;
+    }
+    
+    public Locale getLocale()
+    {
+        return _locale;
+    }
+    
+    public ValidatableEntity getEntity( String entityName )
+    {
+        return ( ValidatableEntity ) _entities.get( entityName );
+    }
+    
+    public void addValidatableEntity( ValidatableEntity entity )
+    {
+        _entities.put( entity.getEntityName(), entity );
+    }
+    
+    public void writeToXMLBean( FormsetDocument.Formset formset )
+    {
+        if ( _locale != null )
+        {
+            formset.setLanguage( _locale.getLanguage() );
+            formset.setCountry( _locale.getCountry() );
+        }
+        
+        FormDocument.Form[] existingFormElements = formset.getFormArray();
+        for ( Iterator i = _entities.values().iterator(); i.hasNext(); )
+        {
+            ValidatableEntity entity = ( ValidatableEntity ) i.next();
+            String entityName = entity.getEntityName();
+            
+            //
+            // Look for an existing <form> element, or create one if none matches this entity name.
+            //
+            FormDocument.Form formElementToUse = null;
+            
+            for ( int j = 0; j < existingFormElements.length; j++ )
+            {
+                FormDocument.Form formElement = existingFormElements[j];
+                
+                if ( entityName.equals( formElement.getName() ) )
+                {
+                    formElementToUse = formElement;
+                    break;
+                }
+            }
+            
+            if ( formElementToUse == null )
+            {
+                formElementToUse = formset.addNewForm();
+                formElementToUse.setName( entityName );
+            }
+            
+            entity.writeToXMLBean( formElementToUse );
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatableEntity.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatableEntity.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model.validation;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.FormDocument;
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.FieldDocument;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Iterator;
+
+class ValidatableEntity
+{
+    private String _entityName;
+    private Map _fields = new HashMap();
+    
+    
+    public ValidatableEntity( String entityName )
+    {
+        _entityName = entityName;
+    }
+
+    protected String getEntityName()
+    {
+        return _entityName;
+    }
+    
+    public void addField( ValidatableField field )
+    {
+        _fields.put( field.getPropertyName(), field );
+    }
+    
+    public ValidatableField getField( String fieldName )
+    {
+        return ( ValidatableField ) _fields.get( fieldName );
+    }
+    
+    public void writeToXMLBean( FormDocument.Form formElement )
+    {
+        assert formElement.getName().equals( _entityName );
+        
+        FieldDocument.Field[] existingFieldElements = formElement.getFieldArray();
+        for ( Iterator i = _fields.values().iterator(); i.hasNext(); )
+        {
+            ValidatableField field = ( ValidatableField ) i.next();
+            FieldDocument.Field fieldElementToUse = null;
+            String fieldPropertyName = field.getPropertyName();
+            
+            //
+            // Look for an existing field element to update, or create one if none matches this field's property name.
+            //
+            for ( int j = 0; j < existingFieldElements.length; j++ )
+            {
+                FieldDocument.Field existingFieldElement = existingFieldElements[j];
+                
+                if ( fieldPropertyName.equals( existingFieldElement.getProperty() ) )
+                {
+                    fieldElementToUse = existingFieldElement;
+                    break;
+                }
+            }
+            
+            if ( fieldElementToUse == null )
+            {
+                fieldElementToUse = formElement.addNewField();
+                fieldElementToUse.setProperty( fieldPropertyName );
+            }
+            
+            field.writeToXMLBean( fieldElementToUse );
+        }
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatableField.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatableField.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,303 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model.validation;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.FieldDocument;
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.VarDocument;
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.MsgDocument;
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.Arg0Document;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+import java.lang.reflect.InvocationTargetException;
+
+public class ValidatableField
+{
+    private String _propertyName;
+    private String _displayName;
+    private String _displayNameKey;
+    private List _rules = new ArrayList();
+
+
+    public ValidatableField( String propertyName, String displayName, String displayNameKey )
+    {
+        _propertyName = propertyName;
+        _displayName = displayName;
+        _displayNameKey = displayNameKey;
+    }
+    
+    public String getPropertyName()
+    {
+        return _propertyName;
+    }
+
+    public void addRule( ValidatorRule rule )
+    {
+        _rules.add( rule );
+    }
+    
+    public ValidatorRule[] getRules()
+    {
+        return ( ValidatorRule[] ) _rules.toArray( new ValidatorRule[ _rules.size() ] );
+    }
+    
+    String getDependsList()
+    {
+        StringBuffer listStr = new StringBuffer();
+        
+        for ( int i = 0; i < _rules.size(); i++ )
+        {
+            if ( i > 0 ) listStr.append( ',' );
+            listStr.append( ( ( ValidatorRule ) _rules.get( i ) ).getRuleName() );
+        }
+        
+        return listStr.toString();
+    }
+    
+    public void writeToXMLBean( FieldDocument.Field fieldElement )
+    {
+        assert fieldElement.getProperty().equals( _propertyName );
+        
+        if ( fieldElement.getDepends() == null ) fieldElement.setDepends( getDependsList() );
+        
+        //
+        // Add the display name as the default first argument (can be overridden by individual rules).
+        //
+        String displayName = null;
+        boolean displayNameIsResource = false;
+        
+        if ( _displayName != null )
+        {
+            displayName = ValidatorConstants.EXPRESSION_KEY_PREFIX + _displayName;
+            displayNameIsResource = false;
+        }
+        else if ( _displayNameKey != null )
+        {
+            displayName = _displayNameKey;
+            displayNameIsResource = true;
+        }
+        else
+        {
+            displayName = Character.toUpperCase( _propertyName.charAt( 0 ) ) + _propertyName.substring( 1 );
+        }
+        
+        Arg0Document.Arg0[] arg0Array = fieldElement.getArg0Array();
+        Arg0Document.Arg0 defaultArg0Element = null;
+        
+        for ( int i = 0; i < arg0Array.length; i++ )
+        {
+            Arg0Document.Arg0 arg0 = arg0Array[i];
+            if ( arg0.getName() == null )   // not associated with a specific rule -- this is the one we want
+            {
+                defaultArg0Element = arg0;
+                break;
+            }
+        }
+        
+        if ( defaultArg0Element == null ) defaultArg0Element = fieldElement.addNewArg0();
+        defaultArg0Element.setKey( displayName );
+        defaultArg0Element.setResource( Boolean.toString( displayNameIsResource ) );
+        
+        
+        //
+        // Go through the rules, and add each one.  Each rule can spray into 1) an entry in the comma-separated
+        // rules dependencies list, 2) a set of <var> elements, 3) a set of <argN> elements.
+        //
+        VarDocument.Var[] existingVars = fieldElement.getVarArray();
+        for ( int i = 0; i < _rules.size(); i++ )
+        {
+            ValidatorRule rule = ( ValidatorRule ) _rules.get( i );
+            
+            //
+            // Add the message from the rule.
+            //
+            String messageKey = rule.getMessageKey();
+            String message = rule.getMessage();
+            
+            if ( messageKey != null || message != null )
+            {
+                MsgDocument.Msg[] existingMsgElements = fieldElement.getMsgArray();
+                MsgDocument.Msg msgElementToUse = null;
+                
+                for ( int j = 0; j < existingMsgElements.length; j++ )
+                {
+                    MsgDocument.Msg existingMsgElement = existingMsgElements[j];
+                    if ( rule.getRuleName().equals( existingMsgElement.getName() ) )
+                    {
+                        msgElementToUse = existingMsgElement;
+                        break;
+                    }
+                }
+                
+                if ( msgElementToUse == null )
+                {
+                    msgElementToUse = fieldElement.addNewMsg();
+                    msgElementToUse.setName( rule.getRuleName() );
+                }
+                
+                if ( messageKey != null )
+                {
+                    msgElementToUse.setKey( messageKey );
+                    msgElementToUse.setResource( Boolean.TRUE.toString() );
+                }
+                else // message != null (it's a hardcoded message)
+                {
+                    //
+                    // Add our special constant as the message key, append the hardcoded message to it.
+                    //
+                    msgElementToUse.setKey( ValidatorConstants.EXPRESSION_KEY_PREFIX + message );
+                    msgElementToUse.setResource( Boolean.FALSE.toString() );
+                }
+            }
+                    
+            //
+            // Add vars from the rule.
+            //
+            Map< String, String > ruleVars = rule.getVars();
+            
+            if ( ruleVars != null )
+            {
+                for ( Iterator< Map.Entry< String, String > > j = ruleVars.entrySet().iterator(); j.hasNext(); )
+                {
+                    Map.Entry< String, String > entry = j.next();
+                    String varName = entry.getKey();
+                    
+                    //
+                    // Look for an existing var entry to update, or create one if there's none with the right name.
+                    //
+                    VarDocument.Var varElementToUse = null;
+                    for ( int k = 0; k < existingVars.length; k++ )
+                    {
+                        VarDocument.Var existingVar = existingVars[k];
+                        
+                        if ( varName.equals( existingVar.getVarName() ) )
+                        {
+                            varElementToUse = existingVar;
+                            break;
+                        }
+                    }
+                    
+                    if ( varElementToUse == null )
+                    {
+                        varElementToUse = fieldElement.addNewVar();
+                        varElementToUse.setVarName( varName );
+                    }
+                    
+                    if ( varElementToUse.getVarValue() == null )
+                    {
+                        varElementToUse.setVarValue( entry.getValue() );
+                    }
+                }
+            }
+            
+            //
+            // Add message arguments from the rule.  If the user didn't specify an args, fill it in with a variable
+            // value from the rule.
+            //
+            Iterator< String > j = ruleVars != null ? ruleVars.keySet().iterator() : null;
+            setRuleArg( rule, 0, fieldElement, null );
+            setRuleArg( rule, 1, fieldElement, j != null && j.hasNext() ? j.next() : null );
+            setRuleArg( rule, 2, fieldElement, j != null && j.hasNext() ? j.next() : null );
+            setRuleArg( rule, 3, fieldElement, j != null && j.hasNext() ? j.next() : null );
+        }
+    }
+    
+    void setRuleArg( ValidatorRule rule, int argNum, FieldDocument.Field fieldElement, String altMessageVar )
+    {
+        try
+        {
+            Class ruleClass = rule.getClass();
+            Class fieldElementClass = fieldElement.getClass();
+            ValidatorRule.MessageArg arg =
+                    ( ValidatorRule.MessageArg ) ruleClass.getMethod( "getArg" + argNum ).invoke( rule );
+            
+            String ruleName = rule.getRuleName();
+            Object argElementToUse = null;
+            Object[] existingArgElements =
+                    ( Object[] ) fieldElementClass.getMethod( "getArg" + argNum + "Array" ).invoke( fieldElement );
+            
+            for ( int i = 0; i < existingArgElements.length; i++ )
+            {
+                Object existingElement = existingArgElements[i];
+                if ( ruleName.equals( existingElement.getClass().getMethod( "getName" ).invoke( existingElement ) ) )
+                {
+                    argElementToUse = existingElement;
+                    break;
+                }
+            }
+            
+            if ( argElementToUse == null )
+            {
+                argElementToUse = fieldElementClass.getMethod( "addNewArg" + argNum ).invoke( fieldElement );
+            }
+            
+            Class argElementToUseClass = argElementToUse.getClass();
+            
+            if ( arg != null )
+            {
+                String key = ValidatorConstants.EXPRESSION_KEY_PREFIX + arg.getMessage();
+                argElementToUseClass.getMethod( "setKey", String.class ).invoke( argElementToUse, key );
+                String isResource = Boolean.toString( arg.isKey() );
+                argElementToUseClass.getMethod( "setResource", String.class ).invoke( argElementToUse, isResource );
+                argElementToUseClass.getMethod( "setName", String.class ).invoke( argElementToUse, ruleName );
+            }
+            else if ( altMessageVar != null ) 
+            {
+                altMessageVar = "${var:" + altMessageVar + "}";
+                argElementToUseClass.getMethod( "setKey", String.class ).invoke( argElementToUse, altMessageVar );
+                argElementToUseClass.getMethod( "setResource", String.class ).invoke( argElementToUse, "false" );
+                argElementToUseClass.getMethod( "setName", String.class ).invoke( argElementToUse, ruleName );
+            }
+        }
+        catch ( NoSuchMethodException e )
+        {
+            assert false : e;   // this shouldn't ever happen -- we know what the compiled types look like.
+        }
+        catch ( IllegalAccessException e )
+        {
+            assert false : e;   // this shouldn't ever happen -- we know what the compiled types look like.
+        }
+        catch ( InvocationTargetException e )
+        {
+            assert false : e;   // this shouldn't ever happen -- we know what the compiled types look like.
+        }
+    }
+
+    public String getDisplayName()
+    {
+        return _displayName;
+    }
+
+    public void setDisplayName( String displayName )
+    {
+        _displayName = displayName;
+    }
+
+    public String getDisplayNameKey()
+    {
+        return _displayNameKey;
+    }
+
+    public void setDisplayNameKey( String displayNameKey )
+    {
+        _displayNameKey = displayNameKey;
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidationModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidationModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,278 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model.validation;
+
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.FormValidationDocument;
+import org.apache.beehive.netui.compiler.model.schema.struts11.validator.FormsetDocument;
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlDocumentProperties;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlOptions;
+
+import java.io.PrintStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Locale;
+import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+public abstract class ValidationModel
+{
+    private Map _localeSets = new HashMap();
+    private LocaleSet _defaultLocaleSet = new LocaleSet();
+    private List _rulesToAddForAllLocales = new ArrayList();       // list of RuleAdd
+    private boolean _empty = true;
+    
+    
+    public static class RuleInfo
+    {
+        private String _entityName;
+        private String _fieldName;
+        private String _fieldDisplayName;
+        private String _fieldDisplayNameKey;
+
+        public RuleInfo( String entityName, String fieldName, String fieldDisplayName, String fieldDisplayNameKey )
+        {
+            _entityName = entityName;
+            _fieldName = fieldName;
+            _fieldDisplayName = fieldDisplayName;
+            _fieldDisplayNameKey = fieldDisplayNameKey;
+        }
+
+        public String getEntityName()
+        {
+            return _entityName;
+        }
+
+        public String getFieldName()
+        {
+            return _fieldName;
+        }
+
+        public String getFieldDisplayName()
+        {
+            return _fieldDisplayName;
+        }
+
+        public String getFieldDisplayNameKey()
+        {
+            return _fieldDisplayNameKey;
+        }
+    }
+    private static class RuleAdd
+    {
+        public RuleAdd( RuleInfo ruleInfo, ValidatorRule rule )
+        {
+            this.ruleInfo = ruleInfo;
+            this.rule = rule;
+        }
+
+        public RuleInfo ruleInfo;
+        public ValidatorRule rule;
+    }
+    
+    public void addFieldRuleForAllLocales( RuleInfo ruleInfo, ValidatorRule rule )
+    {
+        _rulesToAddForAllLocales.add( new RuleAdd( ruleInfo, rule ) );
+    }
+    
+    public void addFieldRule( RuleInfo ruleInfo, ValidatorRule rule, Locale locale )
+    {
+        LocaleSet localeSet = null;
+        
+        if ( locale == null )   // default locale
+        {
+            localeSet = _defaultLocaleSet;
+        }
+        else
+        {
+            localeSet = ( LocaleSet ) _localeSets.get( locale );
+            
+            if ( localeSet == null )
+            {
+                localeSet = new LocaleSet( locale );
+                _localeSets.put( locale, localeSet );
+            }
+        }
+        
+        addFieldRule( ruleInfo, rule, localeSet );
+    }
+    
+    private void addFieldRule( RuleInfo ruleInfo, ValidatorRule rule, LocaleSet localeSet )
+    {
+        String entityName = ruleInfo.getEntityName();
+        ValidatableEntity entity = localeSet.getEntity( entityName );
+        if ( entity == null ) localeSet.addValidatableEntity( entity = new ValidatableEntity( entityName ) );
+        
+        String fieldName = ruleInfo.getFieldName();
+        ValidatableField field = entity.getField( fieldName );
+        if ( field == null )
+        {
+            entity.addField( field = new ValidatableField( fieldName,
+                                                           ruleInfo.getFieldDisplayName(),
+                                                           ruleInfo.getFieldDisplayNameKey() ) );
+        }
+        
+        field.addRule( rule );
+    }
+    
+    public void writeXml( PrintStream outputStream, File mergeFile )
+        throws XmlException, IOException
+    {
+        //
+        // First, if we haven't written the all-locale rules to each locale, do so now.
+        //
+        if ( _rulesToAddForAllLocales != null )
+        {
+            for ( int i = 0; i < _rulesToAddForAllLocales.size(); i++ )
+            {
+                RuleAdd ruleAdd = ( RuleAdd  ) _rulesToAddForAllLocales.get( i );
+                
+                for ( Iterator j = _localeSets.values().iterator(); j.hasNext(); )
+                {
+                    addFieldRule( ruleAdd.ruleInfo, ruleAdd.rule, ( LocaleSet ) j.next() );
+                }
+                
+                addFieldRule( ruleAdd.ruleInfo, ruleAdd.rule, _defaultLocaleSet );
+            }
+            
+            _rulesToAddForAllLocales = null;
+        }
+        
+        
+        //
+        // Create and initialize the document, or parse the given one (with which we'll merge).
+        //
+        FormValidationDocument doc;
+        
+        if ( mergeFile != null && mergeFile.canRead() )
+        {
+            doc = FormValidationDocument.Factory.parse( mergeFile );
+        }
+        else
+        {
+            doc = FormValidationDocument.Factory.newInstance();
+        }
+        
+        XmlDocumentProperties dp = doc.documentProperties();
+        
+        if ( dp.getDoctypeName() == null )
+        {
+            dp.setDoctypeName( "form-validation" );  // NOI18N
+        }
+
+        if ( dp.getDoctypePublicId() == null )
+        {
+            dp.setDoctypePublicId( "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN" );
+        }
+
+        if ( dp.getDoctypeSystemId() == null )
+        {
+            dp.setDoctypeSystemId( "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd" );
+        }
+        
+        
+        FormValidationDocument.FormValidation formValidationElement = doc.getFormValidation();
+        
+        if ( formValidationElement == null )
+        {
+            formValidationElement = doc.addNewFormValidation();
+        }
+        
+        
+        //
+        // Write the "generated by" comment.
+        //
+        XmlCursor curs = formValidationElement.newCursor();        
+        String headerComment = getHeaderComment( mergeFile );
+        if ( headerComment != null ) curs.insertComment( headerComment );
+                
+        
+        //
+        // Now write out all the LocaleSets, which contain the forms/fields/rules.
+        //
+        writeLocaleSet( _defaultLocaleSet, formValidationElement );
+        
+        for ( Iterator i = _localeSets.values().iterator(); i.hasNext(); )
+        {
+            writeLocaleSet( ( LocaleSet ) i.next(), formValidationElement );
+        }
+        
+        //
+        // Write the file.
+        //
+        XmlOptions options = new XmlOptions();
+        options.setSavePrettyPrint();
+        doc.save( outputStream, options );
+    }
+    
+    protected String getHeaderComment( File mergeFile )
+    {
+        return null;
+    }
+    
+    private void writeLocaleSet( LocaleSet localeSet, FormValidationDocument.FormValidation formValidationElement )
+    {
+        FormsetDocument.Formset[] existingFormSetElements = formValidationElement.getFormsetArray();
+        FormsetDocument.Formset formSetElementToUse = null;
+        Locale locale = localeSet.getLocale();
+        
+        for ( int i = 0; i < existingFormSetElements.length; i++ )
+        {
+            FormsetDocument.Formset existingFormSetElement = existingFormSetElements[i];
+            
+            if ( locale == null && existingFormSetElement.getLanguage() == null )
+            {
+                formSetElementToUse = existingFormSetElement;
+                break;
+            }
+            else if ( locale.getLanguage().equals( existingFormSetElement.getLanguage() ) )
+            {
+                if ( ( locale.getCountry() == null && existingFormSetElement.getCountry() == null )
+                     || locale.getCountry().equals( existingFormSetElement.getCountry() ) )
+                {
+                    formSetElementToUse = existingFormSetElement;
+                    break;
+                }
+            }
+        }
+        
+        if ( formSetElementToUse == null )
+        {
+            formSetElementToUse = formValidationElement.addNewFormset();
+        }
+        
+        localeSet.writeToXMLBean( formSetElementToUse );
+    }
+
+    public boolean isEmpty()
+    {
+        return _empty;
+    }
+
+    protected void setEmpty( boolean empty )
+    {
+        _empty = empty;
+    }
+    
+    public abstract String getOutputFileURI();
+}    

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorConstants.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorConstants.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model.validation;
+
+public interface ValidatorConstants
+{
+    String RULENAME_INT_RANGE = "intRange";
+    String RULENAME_FLOAT_RANGE = "floatRange";
+    String RULENAME_REQUIRED = "required";
+    String RULENAME_EMAIL = "email";
+    String RULENAME_CREDIT_CARD = "creditCard";
+    String RULENAME_MINLENGTH = "minlength";
+    String RULENAME_MAXLENGTH = "maxlength";
+    String RULENAME_MASK = "mask";
+    String RULENAME_BYTE = "byte";
+    String RULENAME_SHORT = "short";
+    String RULENAME_INTEGER = "integer";
+    String RULENAME_LONG = "long";
+    String RULENAME_FLOAT = "float";
+    String RULENAME_DOUBLE = "double";
+    String RULENAME_DATE = "date";
+    
+    String VARNAME_MIN = "min";
+    String VARNAME_MAX = "max";
+    String VARNAME_MINLENGTH = "minlength";
+    String VARNAME_MAXLENGTH = "maxlength";
+    String VARNAME_MASK = "mask";
+    String VARNAME_DATE_PATTERN = "datePattern";
+    String VARNAME_DATE_PATTERN_STRICT = "datePatternStrict";
+    
+    String EXPRESSION_KEY_PREFIX = "NETUI-EXPRESSION:";
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorRule.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorRule.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,141 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model.validation;
+
+import java.util.Map;
+import java.util.LinkedHashMap;
+
+public class ValidatorRule
+{
+    private Map< String, String > _vars;
+    private String _ruleName;
+    private String _messageKey;
+    private String _message;
+    private MessageArg _arg0;
+    private MessageArg _arg1;
+    private MessageArg _arg2;
+    private MessageArg _arg3;
+
+    
+    public static class MessageArg
+    {
+        private String _message;
+        private boolean _isKey;
+
+        public MessageArg( String message, boolean isKey )
+        {
+            _message = message;
+            _isKey = isKey;
+            assert ! isKey;     // don't support this for now
+        }
+
+        public String getMessage()
+        {
+            return _message;
+        }
+
+        public boolean isKey()
+        {
+            return _isKey;
+        }
+    }
+    
+    public ValidatorRule( String ruleName )
+    {
+        assert ruleName != null;
+        _ruleName = ruleName;
+    }
+    
+    public void setVar( String name, String val )
+    {
+        if ( _vars == null ) _vars = new LinkedHashMap< String, String >();
+        _vars.put( name, val );
+    }
+    
+    public Map< String, String > getVars()
+    {
+        return _vars;
+    }
+    
+    public String getRuleName()
+    {
+        return _ruleName;
+    }
+    
+    public String getMessageKey()
+    {
+        return _messageKey;
+    }
+    
+    public void setMessageKey( String messageKey )
+    {
+        _messageKey = messageKey;
+    }
+    
+    public String getMessage()
+    {
+        return _message;
+    }
+    
+    public void setMessage( String message )
+    {
+        assert _messageKey == null;
+        _message = message;
+    }
+
+    public MessageArg getArg0()
+    {
+        return _arg0;
+    }
+
+    public void setArg0( String message, boolean isKey )
+    {
+        _arg0 = new MessageArg( message, isKey );
+    }
+
+    public MessageArg getArg1()
+    {
+        return _arg1;
+    }
+
+    public void setArg1( String message, boolean isKey )
+    {
+        _arg1 = new MessageArg( message, isKey );
+    }
+    
+    public MessageArg getArg2()
+    {
+        return _arg2;
+    }
+
+    public void setArg2( String message, boolean isKey )
+    {
+        _arg2 = new MessageArg( message, isKey );
+    }
+    
+    public MessageArg getArg3()
+    {
+        return _arg3;
+    }
+    
+    public void setArg3( String message, boolean isKey )
+    {
+        _arg3 = new MessageArg( message, isKey );
+    }
+}

Added: incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorRuleRange.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/org/apache/beehive/netui/compiler/model/validation/ValidatorRuleRange.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler.model.validation;
+
+public class ValidatorRuleRange
+        extends ValidatorRule
+        implements ValidatorConstants
+{
+    public ValidatorRuleRange( Float min, Float max )
+    {
+        super( RULENAME_FLOAT_RANGE );
+        setVar( VARNAME_MIN, min.toString() );
+        setVar( VARNAME_MAX, max.toString() );
+    }
+    
+    public ValidatorRuleRange( Integer min, Integer max )
+    {
+        super( RULENAME_INT_RANGE );
+        setVar( VARNAME_MIN, min.toString() );
+        setVar( VARNAME_MAX, max.toString() );
+    }
+}

Added: incubator/beehive/netui/src/compiler/schema/struts-config/config.xsdconfig
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/schema/struts-config/config.xsdconfig	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xb:config xmlns:xb="http://www.bea.com/2002/09/xbean/config" >
+  <xb:namespace>
+    <xb:package>org.apache.beehive.netui.compiler.model.schema.struts11</xb:package>
+  </xb:namespace>
+</xb:config>

Added: incubator/beehive/netui/src/compiler/schema/struts-config/struts-config_1_1.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/schema/struts-config/struts-config_1_1.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+	<xs:element name="action">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="icon" minOccurs="0"/>
+				<xs:element ref="display-name" minOccurs="0"/>
+				<xs:element ref="description" minOccurs="0"/>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+				<xs:element ref="exception" minOccurs="0" maxOccurs="unbounded"/>
+				<xs:element ref="forward" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="attribute" type="xs:string"/>
+			<xs:attribute name="className" type="xs:string"/>
+			<xs:attribute name="forward" type="xs:string"/>
+			<xs:attribute name="include" type="xs:string"/>
+			<xs:attribute name="input" type="xs:string"/>
+			<xs:attribute name="name" type="xs:string"/>
+			<xs:attribute name="parameter" type="xs:string"/>
+			<xs:attribute name="path" type="xs:string" use="required"/>
+			<xs:attribute name="prefix" type="xs:string"/>
+			<xs:attribute name="roles" type="xs:string"/>
+			<xs:attribute name="scope">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="request"/>
+						<xs:enumeration value="session"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="suffix" type="xs:string"/>
+			<xs:attribute name="type" type="xs:string"/>
+			<xs:attribute name="unknown">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="validate">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="action-mappings">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="action" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="type" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="controller">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="bufferSize" type="xs:string"/>
+			<xs:attribute name="className" type="xs:string"/>
+			<xs:attribute name="contentType" type="xs:string"/>
+			<xs:attribute name="debug" type="xs:string"/>
+			<xs:attribute name="forwardPattern" type="xs:string"/>
+			<xs:attribute name="inputForward">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="locale">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="maxFileSize" type="xs:string"/>
+			<xs:attribute name="memFileSize" type="xs:string"/>
+			<xs:attribute name="multipartClass" type="xs:string"/>
+			<xs:attribute name="nocache">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="pagePattern" type="xs:string"/>
+			<xs:attribute name="processorClass" type="xs:string"/>
+			<xs:attribute name="tempDir" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="data-source">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="className" type="xs:string"/>
+			<xs:attribute name="key" type="xs:string"/>
+			<xs:attribute name="type" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="data-sources">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="data-source" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="description">
+		<xs:complexType>
+			<xs:simpleContent>
+				<xs:extension base="xs:string">
+					<xs:attribute name="id" type="xs:ID"/>
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="display-name">
+		<xs:complexType>
+			<xs:simpleContent>
+				<xs:extension base="xs:string">
+					<xs:attribute name="id" type="xs:ID"/>
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="exception">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="icon" minOccurs="0"/>
+				<xs:element ref="display-name" minOccurs="0"/>
+				<xs:element ref="description" minOccurs="0"/>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="bundle" type="xs:string"/>
+			<xs:attribute name="className" type="xs:string"/>
+			<xs:attribute name="handler" type="xs:string"/>
+			<xs:attribute name="key" type="xs:string" use="required"/>
+			<xs:attribute name="path" type="xs:string"/>
+			<xs:attribute name="scope" type="xs:string"/>
+			<xs:attribute name="type" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="form-bean">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="icon" minOccurs="0"/>
+				<xs:element ref="display-name" minOccurs="0"/>
+				<xs:element ref="description" minOccurs="0"/>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+				<xs:element ref="form-property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="className" type="xs:string"/>
+			<xs:attribute name="dynamic">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="name" type="xs:string" use="required"/>
+			<xs:attribute name="type" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="form-beans">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="form-bean" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="type" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="form-property">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="className" type="xs:string"/>
+			<xs:attribute name="initial" type="xs:string"/>
+			<xs:attribute name="name" type="xs:string" use="required"/>
+			<xs:attribute name="size" type="xs:string"/>
+			<xs:attribute name="type" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="forward">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="icon" minOccurs="0"/>
+				<xs:element ref="display-name" minOccurs="0"/>
+				<xs:element ref="description" minOccurs="0"/>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="className" type="xs:string"/>
+			<xs:attribute name="contextRelative">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="name" type="xs:string" use="required"/>
+			<xs:attribute name="path" type="xs:string" use="required"/>
+			<xs:attribute name="redirect">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="global-exceptions">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="exception" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="global-forwards">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="forward" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="type" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="icon">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="small-icon" minOccurs="0"/>
+				<xs:element ref="large-icon" minOccurs="0"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="large-icon">
+		<xs:complexType mixed="true">
+			<xs:simpleContent>
+				<xs:extension base="xs:string">
+					<xs:attribute name="id" type="xs:ID"/>
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="message-resources">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="className" type="xs:string"/>
+			<xs:attribute name="factory" type="xs:string"/>
+			<xs:attribute name="key" type="xs:string"/>
+			<xs:attribute name="null">
+				<xs:simpleType>
+					<xs:restriction base="xs:NMTOKEN">
+						<xs:enumeration value="true"/>
+						<xs:enumeration value="false"/>
+						<xs:enumeration value="yes"/>
+						<xs:enumeration value="no"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="parameter" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="plug-in">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="set-property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="className" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="set-property">
+		<xs:complexType>
+			<xs:attribute name="id" type="xs:ID"/>
+			<xs:attribute name="property" type="xs:string" use="required"/>
+			<xs:attribute name="value" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="small-icon">
+		<xs:complexType mixed="true">
+			<xs:simpleContent>
+				<xs:extension base="xs:string">
+					<xs:attribute name="id" type="xs:ID"/>
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="struts-config">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="data-sources" minOccurs="0"/>
+				<xs:element ref="form-beans" minOccurs="0"/>
+				<xs:element ref="global-exceptions" minOccurs="0"/>
+				<xs:element ref="global-forwards" minOccurs="0"/>
+				<xs:element ref="action-mappings" minOccurs="0"/>
+				<xs:element ref="controller" minOccurs="0"/>
+				<xs:element ref="message-resources" minOccurs="0" maxOccurs="unbounded"/>
+				<xs:element ref="plug-in" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID"/>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>

Added: incubator/beehive/netui/src/compiler/schema/struts-validator/config.xsdconfig
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/schema/struts-validator/config.xsdconfig	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xb:config xmlns:xb="http://www.bea.com/2002/09/xbean/config">
+  <xb:namespace>
+    <xb:package>org.apache.beehive.netui.compiler.model.schema.struts11.validator</xb:package>
+  </xb:namespace>
+</xb:config>

Added: incubator/beehive/netui/src/compiler/schema/struts-validator/struts-validator_1_1.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/compiler/schema/struts-validator/struts-validator_1_1.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by XMLSPY WebLogic Edition (-) -->
+<!--W3C Schema generated by XMLSPY v5 rel. 4 U (http://www.xmlspy.com)-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+	<xs:element name="arg0">
+		<xs:complexType>
+			<xs:attribute name="name" type="xs:string"/>
+			<xs:attribute name="key" type="xs:string"/>
+			<xs:attribute name="resource" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="arg1">
+		<xs:complexType>
+			<xs:attribute name="name" type="xs:string"/>
+			<xs:attribute name="key" type="xs:string"/>
+			<xs:attribute name="resource" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="arg2">
+		<xs:complexType>
+			<xs:attribute name="name" type="xs:string"/>
+			<xs:attribute name="key" type="xs:string"/>
+			<xs:attribute name="resource" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="arg3">
+		<xs:complexType>
+			<xs:attribute name="name" type="xs:string"/>
+			<xs:attribute name="key" type="xs:string"/>
+			<xs:attribute name="resource" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="constant">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="constant-name"/>
+				<xs:element ref="constant-value"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="constant-name" type="xs:string"/>
+	<xs:element name="constant-value" type="xs:string"/>
+	<xs:element name="field">
+		<xs:complexType>
+			<xs:choice minOccurs="0" maxOccurs="unbounded">
+				<xs:element ref="msg"/>
+				<xs:element ref="arg0"/>
+				<xs:element ref="arg1"/>
+				<xs:element ref="arg2"/>
+				<xs:element ref="arg3"/>
+				<xs:element ref="var"/>
+			</xs:choice>
+			<xs:attribute name="property" type="xs:string" use="required"/>
+			<xs:attribute name="depends" type="xs:string"/>
+			<xs:attribute name="page" type="xs:string"/>
+			<xs:attribute name="indexedListProperty" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="form">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="field" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="name" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="form-validation">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="global" maxOccurs="unbounded"/>
+				<xs:element ref="formset" maxOccurs="unbounded"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="formset">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="constant" minOccurs="0" maxOccurs="unbounded"/>
+				<xs:element ref="form" maxOccurs="unbounded"/>
+			</xs:sequence>
+			<xs:attribute name="language" type="xs:string"/>
+			<xs:attribute name="country" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="global">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="validator" maxOccurs="unbounded"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="javascript" type="xs:string"/>
+	<xs:element name="msg">
+		<xs:complexType>
+			<xs:attribute name="name" type="xs:string"/>
+			<xs:attribute name="key" type="xs:string"/>
+			<xs:attribute name="resource" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="validator">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="javascript" minOccurs="0"/>
+			</xs:sequence>
+			<xs:attribute name="name" type="xs:string" use="required"/>
+			<xs:attribute name="classname" type="xs:string" use="required"/>
+			<xs:attribute name="method" type="xs:string" use="required"/>
+			<xs:attribute name="methodParams" type="xs:string" use="required"/>
+			<xs:attribute name="msg" type="xs:string" use="required"/>
+			<xs:attribute name="depends" type="xs:string"/>
+			<xs:attribute name="jsFunctionName" type="xs:string"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="var">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="var-name"/>
+				<xs:element ref="var-value"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="var-name" type="xs:string"/>
+	<xs:element name="var-value" type="xs:string"/>
+</xs:schema>

Added: incubator/beehive/netui/src/javascript/tagshtml/netui-tree.js
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/javascript/tagshtml/netui-tree.js	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,414 @@
+// The variable netUI already exists and the type NetUI has been
+// defined.  There isn't anything in it at the moment.
+// NOTE: Using this file requires that runAtClient be turned on in the
+//      script container.
+
+///////////////////////////////// NetUI //////////////////////////
+NetUI.prototype.action = function(command)
+{
+    var f = new Function("members","members." + command);
+    f(this.members);
+    return false;
+}
+
+
+///////////////////////////////// Tree //////////////////////////
+function NetUITree()
+{
+    this.imgExpandName = "/resources/images/handledownlast.gif";
+    this.imgCollapseName = "/resources/images/handlerightlast.gif";
+}
+
+NetUITree.prototype.init = function()
+{
+    for (var i=0;i<document.links.length;i++) {
+        var attr = document.links[i].getAttribute("netui-tree-anchor");
+        if (attr != null) {
+             document.links[i].onclick = NetUICollapseTree;
+            if (attr == "collapse") {
+                NetUICollapseTreeNode(document.links[i]);
+            }
+
+        }
+    }
+}
+
+//  this will run the code necessary to submit an achor
+function NetUIAnchorInvoke(node,onclickStuff)
+{
+    var f = new Function(onclickStuff);
+    var ret = f.call(node);
+    if (ret != null && ret == false)
+        return false;
+    netUI.netUITree.rewriteAnchor(node);
+}
+
+// this will add the tree state to the passed anchor
+NetUITree.prototype.rewriteAnchor = function(node)
+{
+    var sep = '?';
+    if (node.href.indexOf('?') != -1)
+        sep = '&';
+    var state = "";
+    for (var i=0;i<document.links.length;i++) {
+        var attr = document.links[i].getAttribute("netui-tree-anchor");
+        if (attr != null) {
+            var div = this.getDiv(document.links[i]);
+            if (!div)
+                return reportError("Expected Node was not a DIV:" + node.nodeName);
+            var att = div.getAttribute("netui-tree-anchor");
+            if (att == null)
+                att = attr;
+
+            if (att == "expand") {
+                state = state + sep;
+                state = state + "tree-state=" +
+                    document.links[i].getAttribute("netui-tree-id");
+                sep = '&';
+            }
+        }
+    }
+    node.href = node.href + state;
+}
+
+function NetUIExpandTree()
+{
+    if (this.nodeName != "A")
+        return reportError("Expected Node was not an A:" + node.nodeName);
+
+    // find the image child so we can change the image
+    var children = this.childNodes;
+    var img = null;
+    for (var i=0;i<children.length;i++) {
+        if (children[i].nodeName == "IMG") {
+            img = children[i];
+            break;
+        }
+    }
+    if (img == null)
+        return reportError("IMG tag not found");
+    img.src = netUI.webAppName + netUI.netUITree.imgExpandName;
+    this.onclick = NetUICollapseTree;
+
+    // go up the level and get the Div
+    var parentDiv = this.parentNode;
+    if (parentDiv.nodeName != "DIV")
+        return reportError("Expected Node was not an DIV:" + parentDiv.nodeName);
+
+    var depth = netUI.netUITree.getDepth(parentDiv);
+    parentDiv.setAttribute("netui-tree-anchor","expand");
+    parentDiv = parentDiv.nextSibling;
+    while (parentDiv != null && parentDiv.nodeName != "DIV") {
+        parentDiv = parentDiv.nextSibling;
+    }
+    if (parentDiv == null) {
+        return false;
+    }
+
+    netUI.netUITree.expandTreeSection(depth,parentDiv);
+    return false;
+}
+
+// this will cause a collapse to happend in the tree
+// this function is not name spaced because it is 
+function NetUICollapseTree()
+{
+    if (this.nodeName != "A")
+        return reportError("Expected Node was not an A:" + node.nodeName);
+    return NetUICollapseTreeNode(this);
+}
+
+// this will cause a collapse to happend in the tree
+// this function is not name spaced because it is 
+function NetUICollapseTreeNode(node)
+{
+    if (node.nodeName != "A")
+        return reportError("Expected Node was not an A:" + node.nodeName);
+
+    var children = node.childNodes;
+    var img = null;
+    for (var i=0;i<children.length;i++) {
+        if (children[i].nodeName == "IMG") {
+            img = children[i];
+            break;
+        }
+    }
+    if (img == null)
+        return reportError("IMG tag not found");
+
+    // set the image to be the collapse image
+    img.src = netUI.webAppName + netUI.netUITree.imgCollapseName;
+    node.onclick = NetUIExpandTree;
+
+    // go up the level
+    var parentDiv = node.parentNode;
+    if (parentDiv.nodeName != "DIV")
+        return reportError("Expected Node was not a DIV:" + parentDiv.nodeName);
+
+    // get the depth and then begin to collapse rows
+    var depth = netUI.netUITree.getDepth(parentDiv);
+    parentDiv.setAttribute("netui-tree-anchor","collapse");
+    netUI.netUITree.collapseTreeSection(depth,parentDiv.nextSibling);
+    
+    // change the method the 
+   return false;
+}
+
+// Look above this node to find a Parent node that is a <tr>
+NetUITree.prototype.getDiv = function(a)
+{
+    var parentDiv = a.parentNode;
+    if (parentDiv.nodeName != "DIV")
+        return reportError("Exception Node was not a DIV:" + parentDiv.nodeName);
+    return parentDiv;
+}
+
+// This will return the <TD> that contains the colspan attribute,
+// it will always return a TD or null.
+NetUITree.prototype.getDepth = function(div)
+{
+    if (div.nodeName != "DIV")
+        return reportError("getDepth only support DIV nodes, found: " + div.nodeName);
+    
+    var attr = div.getAttribute("netui-tree-level");
+    return attr;
+}
+
+// This will collapse a set of rows
+NetUITree.prototype.collapseTreeSection = function(depth,div)
+{
+    // convert the depth into an integer...
+    depth = parseInt(depth);
+
+    // now we walk the rows collapsing 
+    while (div != null) {
+        if (div.nodeName != "DIV") {
+            if (div.nodeType != 1) {
+                div = div.nextSibling;
+                continue;
+            }
+            break;
+        }
+        
+        // @todo: need to verify that the div is inside the tree or not
+        // do we just get to the end if we only walk siblings?
+        
+        // Get the colspan so we can see the indent level.  
+        var csp = this.getDepth(div);
+        csp = parseInt(csp);
+
+        // if the colSpan is less than the collapse colspan set the
+        // the display of the div to none.
+        if (csp > depth) {
+            div.style.display = "none";
+        }
+        if (csp <= depth)
+            break;
+        div = div.nextSibling;
+    }
+}
+
+NetUITree.prototype.expandTreeSection = function(depth,div)
+{
+    //alert("ExpandTreeSection:" + div);
+    depth = parseInt(depth);
+    
+    // Find the next div after the node we are expanding...
+    while (div != null && div.nodeName != "DIV") {
+        div = div.nextSibling;
+    }
+    if (div == null) {
+        return false;
+    }
+
+    while (div != null) {
+        div = this.expandTree(depth+1,div);
+        if (div == null)
+           return false;
+        var csp = this.getDepth(div);
+        csp = parseInt(csp);
+        if (csp <= depth)
+           return false;
+    }
+    return false;
+}
+
+NetUITree.prototype.expandTree = function(depth,div)
+{
+    if (div.nodeName != "DIV")
+        return reportError("expandTree only support DIV nodes, found: " + div.nodeName);
+        
+    //alert("inside expand:" + depth);
+    while (true) {
+        div.style.display = "";
+
+        var at = div.getAttribute("netui-tree-anchor");
+
+        // get the next sibling
+        div = div.nextSibling;
+        while (div != null && div.nodeName != "DIV") {
+            div = div.nextSibling;
+        }
+        if (div == null)
+            return null;
+
+        // see what depth it is...
+        // if the depth is the same then we continue expanding it..
+        var csp = this.getDepth(div);
+        csp = parseInt(csp);
+        //alert("csp:" + csp + " attr:" + at);
+        if (csp == depth)
+           continue;
+
+        // if this is less than depth return it to the previous level
+        if (csp < depth)
+           return div;
+        
+        // if the attribute is not set, then we need to expand the subtree
+        if (at == null || at == "expand") {
+            div = this.expandTree(csp,div);
+            if (div == null)
+                return div;
+            csp = this.getDepth(div);
+            csp = parseInt(csp);
+            if (csp < depth)
+                return div;
+        }
+        else {
+            //alert("inside collapsed region");
+            while (true) {
+                while (div != null && div.nodeName != "DIV") {
+                    div = div.nextSibling;
+                }
+                if (div == null)
+                    return null;
+
+                csp = this.getDepth(div);
+                csp = parseInt(csp);
+                if (csp <= depth)
+                    break;
+                div = div.nextSibling;
+            }
+            if (csp < depth)
+                return div;
+        }
+    }
+}
+
+///////////////////////////////// DivPanel //////////////////////////
+// @Todo: this should be moved?
+
+// This is a DivPaneContainer
+function NetUIDivPanelInstance()
+{
+    this.pages = new Object();
+    this.curPage = null;
+    this.pageName = null;
+}
+
+NetUIDivPanelInstance.prototype.showPage = function(page)
+{
+    var newPage = this.pages[page];
+    if (newPage != null) {
+	    this.curPage.style.display = "none";
+	    this.curPage = newPage;
+	    this.curPage.style.display = "";
+            this.pageName = page;
+	}
+}
+
+// panels -- this is a hash of all the panels defined.  It is a mapping
+//      from ID to panel
+function NetUIDivPanel()
+{
+    this.panels = new Object();
+}
+
+// The initialization routine will walk all the div's looking
+// for DivPanels.
+NetUIDivPanel.prototype.init = function()
+{
+    this.loadDivPanels(document);
+}
+
+// This method will call the individual panel to showPage a page
+NetUIDivPanel.prototype.showPage = function(panel,page)
+{
+    this.panels[panel].showPage(page);
+}
+
+// This method will walk the DOM looking for a netui-div-panel attribute
+// it then takes the DivPanel and inserts into the object
+NetUIDivPanel.prototype.loadDivPanels = function(node)
+{
+    if (node.nodeType == 1 || node.nodeType == 9) {
+        if (node.nodeType == 1 && node.nodeName == "DIV") {
+            var attr = node.getAttribute("netui-div-panel");
+            if (attr != null) {
+                //alert("here:" + node.id);
+                var dp = new NetUIDivPanelInstance();
+                netUI.members[node.id] = dp;
+                this.panels[node.id] = dp;
+                this.createDivPanel(node,dp);
+
+                attr = node.getAttribute("netui-div-panel-first");
+                if (attr != null) {
+                    this.panels[node.id].showPage(attr);
+                }
+                return;
+            }
+        }
+        var children = node.childNodes;
+        for (var i=0;i<children.length;i++) {
+            this.loadDivPanels(children[i]);
+        }
+    }
+}
+
+// This method will create the initial runtime view of the
+// divPanel.  The first div is made visible and all others
+// are not visible.  It will also initialize the pages variable
+// and the curPage variable.
+NetUIDivPanel.prototype.createDivPanel = function(node,dp)
+{
+    var children = node.childNodes;
+    var displayFirst = false;
+    for (var i=0;i<children.length;i++)  {
+        if (children[i].nodeType == 1 && node.nodeName == "DIV")  {
+            var divName = children[i].id;
+            //alert("Page:" + divName);
+            if (divName != null) {
+               dp.pages[divName] = children[i];
+            }
+            if (displayFirst == false) {
+                displayFirst = true;
+                dp.curPage = children[i];
+                continue;
+            }
+            children[i].style.display = "none";
+        }
+    }
+}
+
+// this will add the tree state to the passed anchor
+NetUIDivPanel.prototype.rewriteAnchor = function(node)
+{
+    var sep = '?';
+    if (node.href.indexOf('?') != -1)
+        sep = '&';
+    var state = "";
+    for (var pan in this.panels) {
+        state = state + sep;
+        state = state + "netui_divpanel_" + pan + "=" + this.panels[pan].pageName;
+        sep = '&';
+    }
+
+    node.href = node.href + state;
+}
+
+// Utility function to report an error
+function reportError(msg)
+{
+    alert(msg);
+    return false;
+}

Added: incubator/beehive/netui/src/pageflow/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/PageFlow" default="compile" basedir=".">
+
+    <property name="module.classpath" value="${struts.jar};${servlet24.jar};${jsp20.jar};${util.jar};${commons-beanutils.jar};${commons-logging.jar};${commons-collections.jar};${commons-digester.jar};${commons-validator.jar};${log4j.jar};${scoping.jar};${xbean.jar};${controls.jar}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <!-- run the XMLBean compiler for the webapp schema -->
+        <ant antfile="${netui.ant.dir}/xmlBean.xml">
+            <property name="xsd.root.dir" value="schema/"/>
+            <property name="class.output.dir" value="${classes.dir}/${module.name}"/>
+            <property name="xbean.inputs" value="schema/*.xsd*"/>
+            <property name="xbean.output" value="${build.lib.dir}/${pageflow.jar.name}"/>
+        </ant>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+               source="${compile.source.1.5}">
+            <include name="**/*.java"/>
+        </javac>
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+        </copy>
+
+
+        <jar jarfile="${build.lib.dir}/${pageflow.jar.name}">
+            <fileset dir="${classes.dir}/${module.name}">
+              <include name="**/*.class"/>
+              <include name="**/*.properties"/>
+              <include name="**/*.xsb"/>
+            </fileset>
+            <manifest>
+              <attribute name="PageFlow-Runtime-Version" value="${pageflow.version.runtime}"/>
+            </manifest>
+        </jar>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete file="${build.lib.dir}/${pageflow.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Page Flow"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionNotFoundException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionNotFoundException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when the user tries to execute an action that does not exist on the page flow.
+ */ 
+public class ActionNotFoundException extends PageFlowException
+{
+    private Object _form;
+    
+    
+    public ActionNotFoundException( String actionName, FlowController fc, Object form )
+    {
+        super( actionName, fc );
+        _form = form;
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ getActionName(), getFlowControllerURI(), _form != null ? _form.getClass().getName() : null };
+    }
+
+    protected String[] getMessageParts()
+    {
+        String formDescrip = ( _form != null ? "(form " + _form.getClass().getName() + ") " : "" );
+        return new String[]{ "Unable to find action " + formDescrip, " in Page Flow ", "." };
+    }
+    
+    protected Object getForm()
+    {
+        return _form;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionResolver.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionResolver.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * Interface for Struts-based classes that resolve actions to URIs.
+ * @exclude
+ */ 
+public interface ActionResolver
+{
+    /**
+     * Get the URI for addressing this object.
+     * 
+     * @return a String that is the URI, relative to the webapp root, for addressing this object.
+     */
+    public String getURI();
+    
+    /**
+     * Get the Struts module path associated with this ActionResolver.
+     */ 
+    public String getModulePath();
+
+    /**
+     * Called on this object for non-lookup (refresh) requests.
+     */ 
+    public void refresh( HttpServletRequest request, HttpServletResponse response );
+    
+    /**
+     * Tell whether this ActionResolver is a {@link PageFlowController}.
+     * 
+     * @return <code>true</code> if this is a {@link PageFlowController}.
+     */ 
+    public boolean isPageFlow();
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionResult.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ActionResult.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import java.io.PrintWriter;
+
+/**
+ * Encapsulation of the results returned by {@link PageFlowUtils#strutsLookup}.
+ */ 
+public interface ActionResult
+{
+    public String getURI();
+
+    public boolean isRedirect();
+    
+    public boolean isError();
+    
+    public int getStatusCode();
+    
+    public String getStatusMessage();
+    
+    /**
+     * @deprecated This method now always returns false; compilation no longer happens at runtime.
+     */ 
+    public boolean hadCompileErrors();
+    
+    /**
+     * @deprecated This method has no effect; compilation no longer happens at runtime.
+     */ 
+    public void printCompileErrors( PrintWriter writer );
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,904 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.action.ActionServlet;
+import org.apache.struts.action.RequestProcessor;
+import org.apache.struts.action.DynaActionFormClass;
+import org.apache.struts.action.ActionFormBeans;
+import org.apache.struts.action.ActionFormBean;
+import org.apache.struts.action.ActionForwards;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMappings;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ModuleConfigFactory;
+import org.apache.struts.config.FormBeanConfig;
+import org.apache.struts.config.ControllerConfig;
+import org.apache.struts.config.ForwardConfig;
+import org.apache.struts.config.ActionConfig;
+import org.apache.struts.config.MessageResourcesConfig;
+import org.apache.struts.config.impl.ModuleConfigImpl;
+import org.apache.struts.util.RequestUtils;
+import org.apache.struts.Globals;
+import org.apache.commons.digester.Digester;
+import org.xml.sax.InputSource;
+
+import javax.servlet.ServletException;
+import javax.servlet.UnavailableException;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Enumeration;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.concurrent.ConcurrentHashMap;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectInputStream;
+import java.net.URL;
+import java.net.MalformedURLException;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.ServletUtils;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+
+/**
+ * ActionServlet that dynamically registers requested modules based on registered module
+ * configuration file locators.  The user may specify {@link ModuleConfigLocator} classes
+ * in web.xml, using the "moduleConfigLocators" init-parameter; this allows the user to
+ * define patterns for auto-registered Struts modules.
+ */
+public class AutoRegisterActionServlet extends ActionServlet
+{
+    public static String MODULE_CONFIG_LOCATOR_CLASS_ATTR = "moduleConfigLocators";
+    
+    /** Map of module-path to ModuleConfig */
+    private Map< String, ModuleConfig > _registeredModules = new ConcurrentHashMap< String, ModuleConfig >();
+    private boolean _hasDataSources = false;
+    private transient Digester _cachedConfigDigester = null;
+    private Map _configParams = null;
+    private ModuleConfigLocator[] _moduleConfigLocators = null;
+    
+    private static final Logger _log = Logger.getInstance( AutoRegisterActionServlet.class );
+
+    private static final ModuleConfig NONEXISTANT_MODULE_CONFIG = new NonexistantModuleConfig();
+    
+    
+    public void init( ServletConfig config )
+        throws ServletException
+    {
+        super.init( config );
+        
+        _moduleConfigLocators = getDefaultModuleConfigLocators();
+        
+        //
+        // Look for ModuleConfigLocators specified in web.xml.
+        //
+        String configLocatorList = config.getInitParameter( MODULE_CONFIG_LOCATOR_CLASS_ATTR );
+        
+        if ( configLocatorList != null )
+        {
+            ArrayList locators = new ArrayList();
+            ModuleConfigLocator[] currentLocators = getDefaultModuleConfigLocators();
+            
+            for ( int i =0; i < currentLocators.length; ++i )
+            {
+                locators.add( currentLocators[i] );
+            }
+            
+            String[] configLocatorClassNames = configLocatorList.split( "," );
+            
+            for ( int i = 0; i < configLocatorClassNames.length; ++i )
+            {
+                String configLocatorClassName = configLocatorClassNames[i].trim();
+                
+                try
+                {
+                    Object locator = Class.forName( configLocatorClassName ).newInstance();
+                    
+                    if ( locator instanceof ModuleConfigLocator )
+                    {
+                        locators.add( locator );
+                    }
+                    else
+                    {
+                        if ( _log.isErrorEnabled() )
+                        {
+                            _log.error( "init-parameter \"" + MODULE_CONFIG_LOCATOR_CLASS_ATTR
+                                        + "\" specifies a class that does not implement "
+                                        + ModuleConfigLocator.class.getName() + "." );
+                        }
+                    }
+                }
+                catch ( Exception e )
+                {
+                    if ( _log.isErrorEnabled() )
+                    {
+                        _log.error( "Could not create an instance of " + configLocatorClassName
+                                    + " specified in init-parameter \"" + MODULE_CONFIG_LOCATOR_CLASS_ATTR + "\".", e );
+                    }
+                }
+            }
+            
+            _moduleConfigLocators = ( ModuleConfigLocator[] ) locators.toArray( new ModuleConfigLocator[0] );
+        }
+    }
+    
+    /**
+     * Get the base list of ModuleConfigLocators, to specify locations for auto-registered Struts modules.  By default,
+     * this list is empty; derived classes may override to provide locators, or the user may specify them using
+     * the "moduleConfigLocators" init-parameter.  When an unrecognized Struts module is requested, each registered
+     * ModuleConfigLocator is queried for a possible path to the configuration file for the module.  If the
+     * configuration file is found, the module is auto-registered against the file.
+     */
+    protected ModuleConfigLocator[] getDefaultModuleConfigLocators()
+    {
+        return new ModuleConfigLocator[0];
+    }
+    
+    /**
+     * Get the current list of registered ModuleConfigLocators.
+     * 
+     * @return an array of registered ModuleConfigLocators.
+     * @see #getDefaultModuleConfigLocators
+     */ 
+    public ModuleConfigLocator[] getModuleConfigLocators()
+    {
+        return _moduleConfigLocators;
+    }
+    
+    /**
+     * Interface for specifying alternate locations for auto-registered Struts modules.
+     * 
+     * @see AutoRegisterActionServlet#getDefaultModuleConfigLocators
+     */ 
+    public static interface ModuleConfigLocator
+    {
+        /**
+         * Get the webapp-relative path to a Struts module config file, based on the module name.
+         * 
+         * @param moduleName the name of the Struts module, e.g., "someModule" or "some/other/module".
+         * @return the webapp-relative path the the Struts module config file.
+         */ 
+        public String getModuleConfigPath( String moduleName );
+    }
+    
+    /**
+     * Get the webapp-relative path to the Struts module configration file for a given module path,
+     * based on registered ModuleConfigLocators.
+     * 
+     * @param modulePath the Struts module path.
+     * @return a String that is the path to the Struts configuration file, relative to the web application root,
+     *         or <code>null</code> if no appropriate configuration file is found.
+     * @see #getDefaultModuleConfigLocators
+     */ 
+    public String getModuleConfPath( String modulePath )
+    {
+        if ( _moduleConfigLocators != null )
+        {
+            for ( int i = 0; i < _moduleConfigLocators.length; ++i )
+            {
+                ModuleConfigLocator locator = _moduleConfigLocators[i];
+                
+                String moduleConfigPath  = locator.getModuleConfigPath( modulePath );
+                
+                try
+                {
+                    if ( getServletContext().getResource( moduleConfigPath ) != null )
+                    {
+                        return moduleConfigPath;
+                    }
+                }
+                catch ( MalformedURLException e )
+                {
+                    _log.error( "ModuleConfigLocator " + locator.getClass().getName()
+                                + " returned an invalid path: " + moduleConfigPath + ".", e );
+                }
+            }
+        }
+        
+        return null;
+    }
+    
+    //
+    // For cases where the servlet is serialized/deserialized, we'll hold onto ServletConfig
+    // attributes, since the ServletConfig reference is transient.  Then, we'll return these
+    // cached values if necessary in getInitParameter(), getInitParameterNames().
+    //
+    private void writeObject( ObjectOutputStream stream )
+        throws IOException
+    {
+        if ( _log.isInfoEnabled() )
+        {
+            _log.info( "serializing ActionServlet " + this );
+        }
+        
+        if ( _configParams != null )
+        {
+            stream.writeObject( _configParams );
+        }
+        else
+        {
+            ServletConfig config = getServletConfig();
+            assert config != null;
+            HashMap params = new HashMap();
+            
+            for ( Enumeration e = config.getInitParameterNames(); e.hasMoreElements(); )
+            {
+                String name = ( String ) e.nextElement();
+                params.put( name, config.getInitParameter( name ) );
+            }
+            
+            stream.writeObject( params );
+        }
+    }
+    
+    // See comments on writeObject.
+    private void readObject( ObjectInputStream stream )
+        throws IOException, ClassNotFoundException
+    {
+        if ( _log.isInfoEnabled() )
+        {
+            _log.info( "deserializing ActionServlet " + this );
+        }
+        
+        
+        _configParams = ( Map ) stream.readObject();
+    }
+
+    public String getInitParameter( String s )
+    {
+        if ( getServletConfig() == null )
+        {
+            assert _configParams != null;   // see comments on writeObject
+            return ( String ) _configParams.get( s );
+        }
+        
+        return super.getInitParameter( s );
+    }
+
+    public Enumeration getInitParameterNames()
+    {
+        if ( getServletConfig() == null )
+        {
+            assert _configParams != null;   // see comments on writeObject
+            return Collections.enumeration( _configParams.keySet() );
+        }
+        
+        return super.getInitParameterNames();
+    }
+
+    /**
+     * @exclude
+     */ 
+    protected void initModuleDataSources( ModuleConfig config )
+            throws ServletException
+    {
+        //
+        // This is part of a workaround for some strange behavior on webapp redeploy, which
+        // indirectly calls destroyDataSources.  We keep track of whether there are any
+        // datasources configured, and if there are not, we don't call the base destroyDataSources().
+        //
+        super.initModuleDataSources( config );
+        _hasDataSources = ! dataSources.isEmpty();
+    }
+    
+    /**
+     * @exclude
+     */ 
+    protected void destroyDataSources()
+    {
+        //
+        // This is part of a workaround for some strange behavior on webapp redeploy, which
+        // indirectly calls destroyDataSources.  We keep track of whether there are any
+        // datasources configured, and if there are not, we don't call the base destroyDataSources().
+        //
+        if ( _hasDataSources )
+        {
+            super.destroyDataSources();
+        }
+    }
+        
+        
+    /**
+     * This method is almost exactly the same as the base class initModuleConfig.  The only difference
+     * is that it does not throw an UnavailableException if a module configuration file is missing or
+     * invalid.
+     * 
+     * @exclude
+     */
+    protected ModuleConfig initModuleConfig
+        (String prefix, String paths) throws ServletException {
+
+        if (log.isDebugEnabled()) {
+            log.debug("Initializing module path '" + prefix +
+                "' configuration from '" + paths + "'");
+        }
+
+        // Parse the configuration for this module
+        ModuleConfig config = null;
+        InputStream input = null;
+        String mapping = null;
+        try {
+            ModuleConfigFactory factoryObject =
+                ModuleConfigFactory.createFactory();
+            config = factoryObject.createModuleConfig(prefix);
+
+            // Support for module-wide ActionMapping type override
+            mapping = getServletConfig().getInitParameter("mapping");
+            if (mapping != null) {
+                config.setActionMappingClass(mapping);
+            }
+
+            // Configure the Digester instance we will use
+            Digester digester = initConfigDigester();
+
+            // Process each specified resource path
+            while (paths.length() > 0) {
+                digester.push(config);
+                String path = null;
+                int comma = paths.indexOf(',');
+                if (comma >= 0) {
+                    path = paths.substring(0, comma).trim();
+                    paths = paths.substring(comma + 1);
+                } else {
+                    path = paths.trim();
+                    paths = "";
+                }
+                if (path.length() < 1) {
+                    break;
+                }
+                URL url = getServletContext().getResource(path);
+                
+                //
+                // THIS IS THE ONLY DIFFERENCE: we're doing a null-check here.
+                //
+                if ( url != null )
+                {
+                    InputSource is = new InputSource(url.toExternalForm());
+                    input = getServletContext().getResourceAsStream(path);
+                    is.setByteStream(input);
+                    
+                    // also, we're not letting it fail here either.
+                    try
+                    {
+                        digester.parse(is);
+                        getServletContext().setAttribute
+                            (Globals.MODULE_KEY + prefix, config);
+                    }
+                    catch ( Exception e )
+                    {
+                        _log.error( Bundle.getString( "PageFlow_Struts_ModuleParseError", path ), e );
+                    }
+                    input.close();
+                }
+                else
+                {
+                    _log.error( Bundle.getString( "PageFlow_Struts_MissingModuleConfig", path ) );
+                }
+            }
+
+        } catch (Throwable t) {
+            log.error(internal.getMessage("configParse", paths), t);
+            throw new UnavailableException
+                (internal.getMessage("configParse", paths));
+        } finally {
+            if (input != null) {
+                try {
+                    input.close();
+                } catch (IOException e) {
+                    ;
+                }
+            }
+        }
+
+        // Force creation and registration of DynaActionFormClass instances
+        // for all dynamic form beans we wil be using
+        FormBeanConfig fbs[] = config.findFormBeanConfigs();
+        for (int i = 0; i < fbs.length; i++) {
+            if (fbs[i].getDynamic()) {
+                DynaActionFormClass.createDynaActionFormClass(fbs[i]);
+            }
+        }
+
+        // Special handling for the default module (for
+        // backwards compatibility only, will be removed later)
+        if (prefix.length() < 1) {
+            defaultControllerConfig(config);
+            defaultMessageResourcesConfig(config);
+            defaultFormBeansConfig(config);
+            defaultForwardsConfig(config);
+            defaultMappingsConfig(config);
+        }
+
+        // Return the completed configuration object
+        //config.freeze();  // Now done after plugins init
+        return (config);
+
+    }
+
+
+    /**
+     * Register a Struts module, initialized by the given configuration file.
+     * 
+     * @param modulePath the module path, starting at the webapp root, e.g., "/info/help".
+     * @param configFilePath the path, starting at the webapp root, to the module configuration
+     *        file (e.g., "/WEB-INF/my-generated-struts-config-info-help.xml").
+     * @return the Struts ModuleConfig that was initialized.
+     */
+    protected synchronized ModuleConfig registerModule( String modulePath, String configFilePath )
+        throws ServletException
+    {
+        if ( _log.isInfoEnabled() )
+        {
+            _log.info( "Dynamically registering module " + modulePath + ", config XML " + configFilePath );
+        }
+        
+        if ( _log.isInfoEnabled() )
+        {
+            StringBuffer msg = new StringBuffer( "Dynamically registering module " ).append( modulePath );
+            _log.info( msg.append( ", config XML " ).append( configFilePath ).toString() );
+        }
+
+        if ( _cachedConfigDigester == null )
+        {
+            _cachedConfigDigester = initConfigDigester();
+        }
+
+        configDigester = _cachedConfigDigester;
+        ModuleConfig ac = initModuleConfig( modulePath, configFilePath );
+        initModuleMessageResources( ac );
+        initModuleDataSources( ac );
+        initModulePlugIns( ac );
+        ac.freeze();
+        configDigester = null;
+
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( "Finished registering module " + modulePath + ", config XML " + configFilePath );
+        }
+        
+        return ac;
+    }
+
+    /**
+     * This override of the base class process() registers a Struts module on the fly if the
+     * config file can be found in our standard place (named in our standard way), regardless
+     * of whether the module is configured in web.xml.
+     */
+    protected void process( HttpServletRequest request, HttpServletResponse response )
+        throws IOException, ServletException
+    {
+        //
+        // First, reinitialize the page flow classloader, for reloading when recompile occurs in dev mode.
+        //
+        ServletContext servletContext = getServletContext();
+        ContextCache.get( servletContext ).getReloadableClassHandler().reinit( request );
+        
+        String modulePath = PageFlowUtils.getModulePath( request, InternalUtils.decodeURI( request ) );
+        ModuleConfig registeredApp;
+        
+        //
+        // Get the registered Struts module for the request.
+        //
+        registeredApp = getModuleConfig( modulePath, request, response );
+        
+        //
+        // If we've dynamically registered a module, then we need to override the base process() behavior to select the
+        // module.  Note that we don't want to synchronize the call to process().
+        //
+        if ( registeredApp != null )
+        {
+            //
+            // Try to select the appropriate Struts module and delegate to its RequestProcessor.
+            //
+            RequestUtils.selectModule( modulePath, request, servletContext );
+            ModuleConfig appConfig = getModuleConfig( request );
+            
+            //
+            // Even if we've got a registered module, it may not be active with Struts in the ServletContext.
+            // This happens when there's a parse error in the module config.
+            //
+            if ( appConfig != null )
+            {
+                RequestProcessor requestProcessor = getRequestProcessor( appConfig );
+                requestProcessor.init( this, appConfig );
+                requestProcessor.process( request, response );
+            }
+        }
+        else
+        {
+            
+            //
+            // This is the same as the base process() behavior, but it checks for a missing module-configuration.
+            //
+            RequestUtils.selectModule( request, servletContext ); 
+            ModuleConfig moduleConfig = getModuleConfig( request );
+            
+            if ( moduleConfig != null )
+            {
+                getRequestProcessor( moduleConfig ).process( request, response );
+            }
+            else
+            {
+                //
+                // If we couldn't find an appropriate module, try raising the action on Global.app if it exists.
+                //
+                GlobalApp globalApp = InternalUtils.ensureGlobalApp( request, response, servletContext );
+                String uri = InternalUtils.decodeURI( request );
+                
+                if ( globalApp != null )
+                {
+                    StringBuilder globalAppURI = new StringBuilder( PageFlowConstants.GLOBALAPP_MODULE_CONTEXT_PATH );
+                    globalAppURI.append( '/' );
+                    globalAppURI.append( ServletUtils.getBaseName( uri ) );
+                    RequestDispatcher rd = request.getRequestDispatcher( globalAppURI.toString() );
+                    assert rd != null;
+                    RequestVariables.get( request ).setOriginalRequestURI( InternalUtils.decodeURI( request ) );
+                    rd.forward( request, response );
+                    return;
+                }
+                
+                
+                if ( _log.isErrorEnabled() )
+                {
+                    StringBuffer msg = new StringBuffer( "No module configuration registered for " );
+                    msg.append( uri ).append( " (module path " ).append( modulePath ).append( ")." );
+                    _log.error( msg.toString() );
+                }
+
+                //
+                // If we're not in production mode, send a diagnostic on the response; otherwise, simply send a 404.
+                //
+                InternalUtils.sendDevTimeError( "PageFlow_NoModuleConf", request, response, null,
+                                                HttpServletResponse.SC_NOT_FOUND, uri, modulePath );
+            }
+        }
+    }
+ 
+    /**
+     * @exclude
+     */    
+    protected Digester initConfigDigester() throws ServletException
+    {
+        _cachedConfigDigester = super.initConfigDigester();
+        return _cachedConfigDigester;
+    }
+    
+    public void destroy()
+    {
+        _registeredModules.clear();
+        super.destroy();
+    }
+
+    void ensureModuleSelected( String modulePath, HttpServletRequest request, ServletResponse response )
+        throws IOException, ServletException
+    {
+        if ( getModuleConfig( modulePath, request, response ) != null )
+        {
+            RequestUtils.selectModule( modulePath, request, getServletContext() );
+        }
+    }
+    
+    /**
+     * Get the Struts ModuleConfig for the given module path.
+     * 
+     * @param modulePath the module path, from the request URI.
+     * @param request the current ServletRequest
+     * @param response the current HttpServletResponse
+     * @return the Struts ModuleConfig that corresponds with <code>modulePath</code>
+     * @throws IOException
+     * @throws ServletException
+     */ 
+    protected ModuleConfig getModuleConfig( String modulePath, ServletRequest request,
+                                            ServletResponse response )
+        throws IOException, ServletException
+    {
+        ensureModuleRegistered( modulePath, request );
+        
+        ModuleConfig mc = _registeredModules.get( modulePath );
+        
+        if ( mc.getPrefix() == null )
+        {
+            assert mc instanceof NonexistantModuleConfig : mc.getClass().getName();
+            mc = null;
+        }
+        
+        return mc;
+    }
+    
+    /**
+     * Ensures that the Struts module for the given path is registered (dynamically, if necessary).
+     * @exclude
+     * 
+     * @param modulePath the module path, from the request URI.
+     * @param request the current ServletRequest
+     * @throws IOException
+     * @throws ServletException
+     */ 
+    public ModuleConfig ensureModuleRegistered( String modulePath, ServletRequest request )
+        throws IOException, ServletException
+    {
+        //
+        // Dynamically register the Struts module, if appropriate.  If we've already
+        // tried to register it (_registeredModules.containsKey( modulePath )), don't
+        // try again.
+        //
+        // Note that two threads could potentially get in here at the same time, and
+        // both will register the module.  This is OK -- reads from _registeredModules
+        // are consistent, and the worst that will happen is that the module will get
+        // registered with a valid ModuleConfig a few times.
+        //
+        ModuleConfig ac = _registeredModules.get( modulePath );
+        
+        if ( ac == null )
+        {
+            //
+            // See if there's an explicit initialization for this module in
+            // the webapp configuration.  If there is, we'll use that.
+            //
+            ac = ( ModuleConfig ) getServletContext().getAttribute( Globals.MODULE_KEY + modulePath );
+
+            if ( ac == null )
+            {
+                //
+                // If we find the Struts config file for this module, we can dynamically
+                // register it.
+                //
+                String moduleConfPath = getModuleConfPath( modulePath );
+                
+                if ( moduleConfPath != null )
+                {
+                    ac = registerModule( modulePath, moduleConfPath );
+                }
+            }
+
+            if ( ac == null )
+            {
+                _registeredModules.put( modulePath, NONEXISTANT_MODULE_CONFIG );
+                                                   // ConcurrentHashMap doesn't allow null values
+            }
+            else
+            {
+                _registeredModules.put( modulePath, ac );
+            }
+        }
+        
+        return ac;
+    }
+    
+    private static class NonexistantModuleConfig extends ModuleConfigImpl
+    {
+        public NonexistantModuleConfig()
+        {
+            super( ( String ) null );
+        }
+    }
+    
+    //-----------------------------------------------------------------------------------------------------------
+    // The following methods (defaultControllerConfig, defaultMessageResourcesConfig, defaultFormBeansConfig,
+    // defaultForwardsConfig, defaultMappingsConfig) were copied straight from the Struts ActionServlet.java
+    // (they're private, not protected).
+    
+    /**
+     * Perform backwards-compatible configuration of the default module's
+     * controller configuration from servlet initialization parameters (as
+     * were used in Struts 1.0).
+     *
+     * @param config The ModuleConfig object for the default module
+     *
+     * @since Struts 1.1
+     * @deprecated Will be removed in a release after Struts 1.1.
+     */
+    private void defaultControllerConfig(ModuleConfig config) {
+
+        String value = null;
+        ControllerConfig cc = config.getControllerConfig();
+        
+        value = getServletConfig().getInitParameter("bufferSize");
+        if (value != null) {
+            cc.setBufferSize(Integer.parseInt(value));
+        }
+        
+        value = getServletConfig().getInitParameter("content");
+        if (value != null) {
+            cc.setContentType(value);
+        }
+        
+        value = getServletConfig().getInitParameter("locale");        
+        // must check for null here 
+        if (value != null) {
+            if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)) {
+                cc.setLocale(true);
+            } else {
+                cc.setLocale(false);
+            }
+        } 
+        
+        value = getServletConfig().getInitParameter("maxFileSize");
+        if (value != null) {
+            cc.setMaxFileSize(value);
+        }
+        
+        value = getServletConfig().getInitParameter("nocache");
+        if (value != null) {
+            if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)) {
+                cc.setNocache(true);
+            } else {
+                cc.setNocache(false);
+            }
+        }
+        
+        value = getServletConfig().getInitParameter("multipartClass");
+        if (value != null) {
+            cc.setMultipartClass(value);
+        }
+        
+        value = getServletConfig().getInitParameter("tempDir");
+        if (value != null) {
+            cc.setTempDir(value);
+        }
+
+    }
+
+
+    /**
+     * Perform backwards-compatible configuration of an ActionFormBeans
+     * collection, and expose it as a servlet context attribute (as was
+     * used in Struts 1.0).  Note that the current controller code does
+     * not (and should not) reference this attribute for any reason.
+     *
+     * @param config The ModuleConfig object for the default app
+     *
+     * @since Struts 1.1
+     * @deprecated Will be removed in a release after Struts 1.1.
+     */
+    private void defaultFormBeansConfig(ModuleConfig config) {
+
+        FormBeanConfig fbcs[] = config.findFormBeanConfigs();
+        ActionFormBeans afb = new ActionFormBeans();
+        afb.setFast(false);
+        for (int i = 0; i < fbcs.length; i++) {
+            afb.addFormBean((ActionFormBean) fbcs[i]);
+        }
+        afb.setFast(true);
+        getServletContext().setAttribute(Globals.FORM_BEANS_KEY, afb);
+
+    }
+
+
+    /**
+     * Perform backwards-compatible configuration of an ActionForwards
+     * collection, and expose it as a servlet context attribute (as was
+     * used in Struts 1.0).  Note that the current controller code does
+     * not (and should not) reference this attribute for any reason.
+     *
+     * @param config The ModuleConfig object for the default app
+     *
+     * @since Struts 1.1
+     * @deprecated Will be removed in a release after Struts 1.1.
+     */
+    private void defaultForwardsConfig(ModuleConfig config) {
+
+        ForwardConfig fcs[] = config.findForwardConfigs();
+        ActionForwards af = new ActionForwards();
+        af.setFast(false);
+        for (int i = 0; i < fcs.length; i++) {
+            af.addForward((ActionForward) fcs[i]);
+        }
+        af.setFast(true);
+        getServletContext().setAttribute(Globals.FORWARDS_KEY, af);
+
+    }
+
+
+    /**
+     * Perform backwards-compatible configuration of an ActionMappings
+     * collection, and expose it as a servlet context attribute (as was
+     * used in Struts 1.0).  Note that the current controller code does
+     * not (and should not) reference this attribute for any reason.
+     *
+     * @param config The ModuleConfig object for the default app
+     *
+     * @since Struts 1.1
+     * @deprecated Will be removed in a release after Struts 1.1.
+     */
+    private void defaultMappingsConfig(ModuleConfig config) {
+
+        ActionConfig acs[] = config.findActionConfigs();
+        ActionMappings am = new ActionMappings();
+        am.setServlet(this);
+        am.setFast(false);
+        for (int i = 0; i < acs.length; i++) {
+            am.addMapping((ActionMapping) acs[i]);
+        }
+        am.setFast(true);
+        getServletContext().setAttribute(Globals.MAPPINGS_KEY, am);
+
+    }
+
+
+    /**
+     * Perform backwards-compatible configuration of the default module's
+     * message resources configuration from servlet initialization parameters
+     * (as were used in Struts 1.0).
+     *
+     * @param config The ModuleConfig object for the default module
+     *
+     * @since Struts 1.1
+     * @deprecated Will be removed in a release after Struts 1.1.
+     */
+    private void defaultMessageResourcesConfig(ModuleConfig config) {
+
+        String value = null;
+
+        MessageResourcesConfig mrc =
+            config.findMessageResourcesConfig(Globals.MESSAGES_KEY);
+        if (mrc == null) {
+            mrc = new MessageResourcesConfig();
+            mrc.setKey(Globals.MESSAGES_KEY);
+            config.addMessageResourcesConfig(mrc);
+        }
+        value = getServletConfig().getInitParameter("application");
+        if (value != null) {
+            mrc.setParameter(value);
+        }
+        value= getServletConfig().getInitParameter("factory");
+        if (value != null) {
+            mrc.setFactory(value);
+        }
+        value = getServletConfig().getInitParameter("null");
+        if (value != null) {
+            if (value.equalsIgnoreCase("true") ||
+                value.equalsIgnoreCase("yes")) {
+                mrc.setNull(true);
+            } else {
+                mrc.setNull(false);
+            }
+        }
+    }
+    
+    /**
+     * Clear the internal map of registered modules.
+     * 
+     * @exclude
+     */ 
+    public void clearRegisteredModules()
+    {
+        ServletContext servletContext = getServletContext();
+        
+        for ( String modulePrefix : _registeredModules.keySet() )
+        {
+            servletContext.removeAttribute( Globals.MODULE_KEY + modulePrefix );
+        }
+        
+        _registeredModules.clear();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynaFormData.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynaFormData.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,102 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import org.apache.struts.validator.DynaValidatorForm;
+
+
+/**
+ * Extension of org.apache.struts.validator.DynaValidatorForm that implements Map.  This allows it to be
+ * used with NetUI tags.
+ */ 
+public class DynaFormData
+    extends DynaValidatorForm
+    implements Map
+{
+    public void clear()
+    {
+        dynaValues.clear();
+    }
+
+    public boolean containsKey( Object key )
+    {
+        return dynaValues.containsKey( key );
+    }
+
+    public boolean containsValue( Object value )
+    {
+        return dynaValues.containsValue( value );
+    }
+
+    public Set entrySet()
+    {
+        return dynaValues.entrySet();
+    }
+
+    public Object get( Object name )
+    {
+        return ( ( DynaValidatorForm ) this ).get( name.toString() );
+    }
+
+    public boolean isEmpty()
+    {
+        return dynaValues.isEmpty();
+    }
+
+    public Set keySet()
+    {
+        return dynaValues.keySet();
+    }
+
+    public Object put( Object key, Object value )
+    {
+        String keyStr = key.toString();
+        set( keyStr, value );
+        return get( key );
+    }
+
+    public void putAll( Map map )
+    {
+        for ( Iterator i = map.entrySet().iterator(); i.hasNext(); )
+        {
+            Map.Entry entry = ( Map.Entry ) i.next();
+            set( entry.getKey().toString(), entry.getValue() );
+        }
+    }
+
+    public Object remove( Object key )
+    {
+        return dynaValues.remove( key );
+    }
+
+    public int size()
+    {
+        return dynaValues.size();
+    }
+
+    public Collection values()
+    {
+        return dynaValues.values();
+    }
+}
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * ActionServlet that dynamically registers modules based on naming/location conventions for Struts
+ * configuration files that are generated by the Page Flow compiler.  These files are located in
+ * /WEB-INF/.pageflow-struts-generated, and are named jpf-struts-config-<i>module-name</i>.xml.
+ * The user may specify additional {@link ModuleConfigLocator} classes in web.xml, using the
+ * "moduleConfigLocators" init-parameter; this allows the user to define other patterns for
+ * auto-registered Struts modules.
+ * 
+ * @deprecated Use {@link PageFlowActionServlet} instead.
+ */
+public class DynamicSubappActionServlet extends PageFlowActionServlet
+{
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/EmptyNestingStackException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/EmptyNestingStackException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when the user invokes an action in a nested page flow that is qualified
+ * with a <code>@jpf:forward return-action="</code><i>action-name-in-calling-pageflow</i>
+ * <code>"</code> annotation, but there is no calling page flow. This can happen in iterative
+ * development mode when you have modified files and caused the web application to be redeployed,
+ * or when the session expires.
+ */ 
+public class EmptyNestingStackException extends PageFlowException
+{
+    public EmptyNestingStackException( String actionName, FlowController fc )
+    {
+        super( actionName, fc );
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ getActionName(), getFlowControllerURI() };
+    }
+
+    protected String[] getMessageParts()
+    {
+        return new String[]{ "Empty nesting stack for returned action ", " from Page Flow ", "." };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1660 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.FileUtils;
+import org.apache.beehive.netui.pageflow.internal.JavaControlUtils;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.handler.LoginHandler;
+import org.apache.beehive.netui.pageflow.handler.ExceptionsHandler;
+import org.apache.beehive.netui.util.cache.ClassLevelCache;
+import org.apache.beehive.netui.util.exception.LocalizedIllegalStateException;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.script.common.ImplicitObjectBean;
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+import org.apache.struts.Globals;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionServlet;
+import org.apache.struts.config.ActionConfig;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.upload.MultipartRequestWrapper;
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+
+import javax.security.auth.login.LoginException;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.http.HttpSessionBindingListener;
+import java.io.IOException;
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+
+
+/**
+ * Base class for user-written flow controllers - PageFlowControllers and Global.app.
+ */ 
+public abstract class FlowController
+        extends Action
+        implements Serializable, PageFlowConstants, ActionResolver, HttpSessionBindingListener
+{
+    private static final Logger _log = Logger.getInstance( FlowController.class );
+    
+    private static final String ONCREATE_EXCEPTION_FORWARD = FlowController.class.getName() + ":onCreateException";
+    private static final String CACHEID_ACTION_METHODS = FlowController.class.getName() + ":actions";
+    private static final int DEFAULT_MAX_CONCURRENT_REQUEST_COUNT = 4;
+    private static final String MAX_CONCURRENT_REQUESTS_PARAM = "pageflow-max-concurrent-requests";
+    private static final int EXCEEDED_MAX_CONCURRENT_REQUESTS_ERRORCODE = 503;
+    private static final String DEFAULT_SIMPLE_ACTION_FORWARD_NAME = "_defaultForward";
+    
+    
+    /**
+     * This member variable stores a reference to the current ServletRequest, which is <i>only valid
+     * during a call to {@link #execute} or {@link #handleException}</i>.
+     */ 
+    private transient HttpServletRequest _request = null;
+
+    /**
+     * This member variable stores a reference to the current ServletResponse, which is <i>only valid
+     * during a call to {@link #execute} or {@link #handleException}</i>.
+     */ 
+    private transient HttpServletResponse _response = null;
+    
+    /**
+     * This member variable stores a reference to the current ActionMapping, which is <i>only valid
+     * during a call to {@link #execute} or {@link #handleException}</i>.
+     */     
+    private transient ActionMapping _mapping = null;
+
+    /**
+     * We prevent the base class from storing a reference to ActionServlet in the non-transient
+     * field <code>servlet</code>
+     */ 
+    private transient ActionServlet _transientActionServlet = null;
+    
+    /**
+     * Cached reference to the associated Struts ModuleConfig.
+     */ 
+    private transient ModuleConfig _moduleConfig = null;
+
+    /**
+     * @see #incrementRequestCount
+     */ 
+    private transient int _requestCount = 0;
+    
+    /**
+     * @see #incrementRequestCount
+     */ 
+    private static int _maxConcurrentRequestCount = -1;
+    
+
+    /**
+     * Default constructor.
+     */ 
+    public FlowController()
+    {
+    }
+    
+    /**
+     * Log in the user, using "weak" username/password authentication.
+     *
+     * @param username the user's login name
+     * @param password the user's password
+     * 
+     * @exception LoginException if the authentication failed
+     */
+    public void login( String username, String password )
+        throws LoginException
+    {
+        LoginHandler lh = ContextCache.get( getServletContext() ).getLoginHandler();
+        lh.login( username, password, getRequest(), getResponse() );
+    }
+    
+    /**
+     * Log out the current user.  This causes the user to be removed from Servlet 
+     * Session (on all single-signon webapps) as well as from the thread.
+     * 
+     * @param invalidateSessions if true, the session is invalidated (on all single-signon webapps); 
+     *            otherwise the session and its data are left intact (except for authentication
+     *            information used internally by the server).  To invalidate the session in only the
+     *            current webapp, set this parameter to <code>false</code> and call
+     *            {@link #getSession}.invalidate().
+     */
+    public void logout( boolean invalidateSessions )
+    {
+        LoginHandler lh = ContextCache.get( getServletContext() ).getLoginHandler();
+        lh.logout( invalidateSessions, getRequest(), getResponse() );
+    }
+
+    /**
+     * Send a Page Flow error to the browser.
+     * 
+     * @deprecated Use {@link #sendError(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)} instead.
+     * @param errText the error message to display.
+     * @param response the current HttpServletResponse.
+     */
+    protected void sendError( String errText, HttpServletResponse response )
+        throws IOException
+    {
+        sendError( errText, null, response );
+    }
+    
+    /**
+     * Send a Page Flow error to the browser.
+     * 
+     * @param errText the error message to display.
+     * @param response the current HttpServletResponse.
+     */
+    protected void sendError( String errText, HttpServletRequest request, HttpServletResponse response )
+        throws IOException
+    {
+        InternalUtils.sendError( "PageFlow_Custom_Error", request, response, null, getURI(), errText );
+    }
+    
+    public static Locale retrieveUserLocale( HttpServletRequest request, String locale )
+    {
+        if ( locale == null ) locale = Globals.LOCALE_KEY;
+        HttpSession session = request.getSession( false );
+        Locale userLocale = null;
+        if ( session != null ) userLocale = ( Locale ) session.getAttribute( locale );        
+        if ( userLocale == null ) userLocale = defaultLocale;
+        return userLocale;
+    }
+    
+    /**
+     * Handle the given exception - invoke user code if appropriate and return a destination URI.
+     * 
+     * @param ex the Exception to handle.
+     * @param mapping the Struts action mapping for current Struts action being processed.
+     * @param actionName the name of the Struts action being processed.
+     * @param form the form-bean (if any) associated with the Struts action being processed.  May be null.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @return a Struts ActionForward object that specifies the URI that should be displayed.
+     * @throws Exception if another Exception is thrown during handling of <code>ex</code>.
+     */ 
+    protected synchronized ActionForward handleException( Throwable ex, ActionMapping mapping,
+                                                          String actionName, ActionForm form,
+                                                          HttpServletRequest request,
+                                                          HttpServletResponse response )
+        throws Exception
+    {
+        setRequestMembers( request, response, mapping );
+        
+        try
+        {
+            ExceptionsHandler eh = ContextCache.get( getServletContext() ).getExceptionsHandler();
+            
+            // First, put the exception into the request (or other applicable context).
+            Throwable unwrapped = eh.unwrapException( ex );
+            eh.exposeException( unwrapped, request, response, mapping );
+            return eh.handleException( unwrapped, mapping, actionName, form, request, response, this );
+        }
+        finally
+        {
+            nullRequestMembers( request );
+        }
+    }
+    
+    /**
+     * Get the name of the current action being executed.  This call is only valid
+     * during {@link #execute} (where any user action method is invoked), and during the lifecycle
+     * methods {@link #beforeAction} and {@link #afterAction}.
+     * 
+     * @return the name of the current action being executed.
+     * @throws IllegalStateException if this method is invoked outside of action method
+     *             execution (i.e., outside of the call to {@link #execute}, and outside of
+     *             {@link #onCreate}, {@link #beforeAction}, {@link #afterAction}.
+     */
+
+    protected String getCurrentActionName()
+    {
+        return PageFlowUtils.getActionName( getMapping() );
+    }
+    
+    /**
+     * Perform decision logic to determine the next URI to be displayed.
+     * 
+     * @param mapping the Struts ActionMapping for the current action being processed.
+     * @param form the form-bean (if any) associated with the Struts action being processed.  May be null.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @return a Struts ActionForward object that specifies the next URI to be displayed.
+     * @throws Exception if an Exception was thrown during user action-handling code.
+     */
+    public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request,
+                                  HttpServletResponse response )
+            throws Exception
+    {
+        //
+        // Don't actually run the action (and perform the associated synchronization) if there are too many
+        // concurrent requests to this instance.
+        //
+        if ( incrementRequestCount( request, response, getServlet().getServletContext() ) )
+        {
+            try
+            {
+                synchronized ( this )
+                {
+                    return internalExecute( mapping, form, request, response );
+                }
+            }
+            finally
+            {
+                decrementRequestCount( request );
+            }
+        }
+        else
+        {
+            return null;    // error was written to the response by incrementRequestCount()
+        }
+    }
+
+    /**
+     * @exclude
+     */
+    protected ActionForward internalExecute( ActionMapping mapping, ActionForm form, HttpServletRequest request,
+                                             HttpServletResponse response )
+        throws Exception
+    {
+        //
+        // If we handled an exception in onCreate, just forward to the result of that.
+        //
+        ActionForward onCreateFwd = ( ActionForward ) request.getAttribute( ONCREATE_EXCEPTION_FORWARD );
+        
+        if ( onCreateFwd != null )
+        {
+            return onCreateFwd;
+        }
+        
+        
+        PageFlowUtils.setActionURI( request );
+        
+        //
+        // First change the actionPath (path) so that it lines up with our naming convention
+        // for action methods.
+        //
+        String actionName = PageFlowUtils.getActionName( mapping );
+        boolean gotPastBeforeAction = false;
+        ServletContext servletContext = getServlet().getServletContext();
+        
+        try
+        {
+            setRequestMembers( request, response, mapping );
+
+            //
+            // beforeAction callback
+            //
+            beforeAction();
+            gotPastBeforeAction = true;
+            
+            PageFlowActionMapping pfActionMapping =
+                    mapping instanceof PageFlowActionMapping ? ( PageFlowActionMapping ) mapping : null;
+            
+            //
+            // If a form was returned from nesting, use that.
+            //
+            ActionForm returningForm = ( ActionForm ) request.getAttribute( RETURNING_FORM_ATTR_NAME );
+            
+            if ( returningForm != null )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Got return form from nested PageFlow: " + returningForm );
+                }
+                
+                form = returningForm;
+                request.removeAttribute( RETURNING_FORM_ATTR_NAME );
+            }
+            
+            Object unwrappedForm = InternalUtils.unwrapFormBean( form );
+            
+            //
+            // mapping.isOverloaded() means it's the base mapping for a set of overloaded mappings.
+            // Find the one appropriate to the passed-in form.
+            //
+            if ( unwrappedForm != null && pfActionMapping != null )
+            {
+                if ( pfActionMapping.isOverloaded() )
+                {
+                    String mappingPath = pfActionMapping.getPath();
+
+                    //
+                    // Try the form class and all superclasses to get an overloaded action path.
+                    //
+                    for ( Class i = unwrappedForm.getClass(); i != null; i = i.getSuperclass() )
+                    {
+                        String formQualifiedActionPath = getFormQualifiedActionPath( i, mappingPath );
+                        ActionConfig cf = pfActionMapping.getModuleConfig().findActionConfig( formQualifiedActionPath );
+                            
+                        if ( cf != null )
+                        {
+                            assert cf instanceof PageFlowActionMapping : cf.getClass().getName();
+                                
+                            if ( _log.isDebugEnabled() )
+                            {
+                                _log.debug( "Found form-specific mapping " + cf.getPath() +
+                                           " -- choosing this one over current mapping " + mappingPath );
+                            }
+                                
+                            pfActionMapping = ( PageFlowActionMapping ) cf;
+                            mapping = pfActionMapping;
+                            break;
+                        }
+                    }
+                }                
+            }
+            
+            //
+            // Look to see if we need are in a disambiguated action, i.e., one whose name is qualified
+            // by the form.  If so, we need to restore the unqualified action name.
+            //
+            if ( pfActionMapping != null )
+            {
+                String unqualifiedAction = pfActionMapping.getUnqualifiedActionName();
+                
+                if ( unqualifiedAction != null )
+                {
+                    actionName = unqualifiedAction;
+                    
+                    if ( _log.isDebugEnabled() )
+                    {
+                        _log.debug( "Using path /" + unqualifiedAction + " instead of " + pfActionMapping.getPath() );
+                    }
+                }
+            }
+            
+            //
+            // Check whether isLoginRequired=true for this action.
+            //
+            LoginHandler loginHandler = ContextCache.get( getServletContext() ).getLoginHandler();
+            if ( pfActionMapping != null )
+            {
+                if ( pfActionMapping.isLoginRequired() && loginHandler.getUserPrincipal( request ) == null )
+                {
+                    throw createNotLoggedInException( actionName, request );
+                }
+            }
+            
+            //
+            //
+            // ...but if there was a role-checking failure in PageFlowRequestProcessor.processRoles(),
+            // throw an exception here.  Doing it this way allows the user to handle the exception
+            // through declarative exception-handling.
+            //
+            if ( PageFlowRequestProcessor.roleCheckFailed( request, true ) )
+            {
+                Exception ex;
+                
+                if ( loginHandler.getUserPrincipal( request ) == null )
+                {
+                    ex = createNotLoggedInException( actionName, request );
+                }
+                else
+                {
+                    ex = new UnfulfilledRolesException( mapping.getRoleNames(), mapping.getRoles(), actionName, this );
+                }
+                
+                return handleException( ex, mapping, actionName, form, request, response );
+            }
+            
+            //
+            // Now delegate to the appropriate action method, or if it's a simple action, handle it that way.
+            //
+            ActionForward retVal;
+            if ( pfActionMapping != null && pfActionMapping.isSimpleAction() )
+            {
+                retVal = handleSimpleAction( pfActionMapping, form, request, response );
+            }
+            else
+            {
+                retVal = getActionMethodForward( actionName, unwrappedForm, request, response, mapping );
+            }
+            
+            return forwardTo( retVal, mapping, request, response, actionName, null, form, servletContext );
+        }
+        catch ( Exception e )
+        {
+            //
+            // Even though we handle any Throwable thrown by the user's action method, we don't need
+            // to catch Throwable here, because anything thrown by the action method will be wrapped
+            // in an InvocationTargetException.  Any Error (or other Throwable) that appears here
+            // should not be handled by handleException() -- it's probably a framework problem and
+            // should bubble out to the container.
+            //
+            return handleException( e, mapping, actionName, form, request, response );
+        }
+        finally
+        {
+            nullRequestMembers( request );  
+
+            ActionForward overrideReturn = null;
+            
+            if ( gotPastBeforeAction )
+            {
+                //
+                // afterAction callback
+                //
+                try
+                {
+                    setRequestMembers( request, response, mapping );
+                    afterAction();
+                }
+                catch ( Throwable th )
+                {
+                    overrideReturn = handleException( th, mapping, actionName, form, request, response );
+                }
+            }            
+            
+            
+            //
+            // Store information on this action for use with return-to="action"
+            //
+            savePreviousActionInfo( form, request, mapping, getServlet().getServletContext() );
+            
+            if ( overrideReturn != null )
+            {
+                return overrideReturn;
+            }
+        }
+    }
+
+    ActionForward forwardTo( ActionForward fwd, ActionMapping mapping, HttpServletRequest request,
+                             HttpServletResponse response, String actionName, ModuleConfig altModuleConfig,
+                             ActionForm form, ServletContext servletContext )
+    {
+        //
+        // This method is overridden in PageFlowController -- even though we're just delegating here, we
+        // can't actually remove it.
+        //
+        return ForwardHandler.forwardTo( fwd, mapping, request, response, actionName, altModuleConfig, form,
+                                         servletContext, this );
+    }
+    
+    private NotLoggedInException createNotLoggedInException( String actionName, HttpServletRequest request )
+    {
+        String requestedSessionID = request.getRequestedSessionId();
+
+        if ( requestedSessionID != null )
+        {
+            HttpSession session = request.getSession( false );
+            
+            if ( session == null || ! requestedSessionID.equals( session.getId() ) )
+            {
+                return new LoginExpiredException( actionName, this );
+            }
+        }
+        
+        return new NotLoggedInException( actionName, this );
+    }
+    
+    /**
+     * Get the Struts module path for this controller.
+     * 
+     * @return a String that is the Struts module path for this controller - the parent directory
+     * for a {@link PageFlowController} and "/-global" for Global.app.
+     */ 
+    public abstract String getModulePath();
+
+    /**
+     * Callback that occurs before any user action method is invoked.  {@link #getRequest},
+     * {@link #getResponse}, {@link #getSession}, and {@link #getMapping} may all be used
+     * during this method.  The action to be run can be discovered by calling
+     * {@link ActionMapping#getPath} on the value returned from {@link #getMapping}.
+     */ 
+    protected synchronized void beforeAction()
+        throws Exception
+    {
+    }
+    
+    /**
+     * Callback that occurs after any user action method is invoked.  {@link #getRequest},
+     * {@link #getResponse}, {@link #getSession}, and {@link #getMapping} may all be used
+     * during this method.  The action that was run can be discovered by calling
+     * {@link ActionMapping#getPath} on the value returned from {@link #getMapping}.
+     */ 
+    protected synchronized void afterAction()
+        throws Exception
+    {
+    }
+    
+    /**
+     * Initialize transient data that may have been lost during session failover.
+     * @exclude public for Portal
+     */ 
+    public void reinitialize( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext )
+    {
+        if ( _transientActionServlet == null )
+        {
+            _transientActionServlet = InternalUtils.getActionServlet( servletContext );
+        }
+        
+        //
+        // Cache the associated ModuleConfig.  This is used throughout the code, in places where the request
+        // isn't available to do a lazy initialization.
+        //
+        initModuleConfig( servletContext, request );
+    }
+    
+    synchronized void create( HttpServletRequest request, HttpServletResponse response,
+                                    ServletContext servletContext )
+    {
+        setServlet( InternalUtils.getActionServlet( servletContext ) );
+        setRequestMembers( request, response, null );
+        
+        //
+        // Cache the associated ModuleConfig.  This is used throughout the code, in places where the request
+        // isn't available to do a lazy initialization.
+        //
+        initModuleConfig( servletContext, request );
+        
+        //
+        // Initialize Java Controls in this FlowController.
+        //
+        initJavaControls( request, response );
+        
+        
+        try
+        {
+            try
+            {
+                onCreate();
+            }
+            catch ( Throwable th )
+            {
+                try
+                {
+                    _log.info( "Handling exception in onCreate(), page flow " + this, th );
+                    ActionForward fwd = handleException( th, null, "[onCreate]", null, request, response );
+                    request.setAttribute( ONCREATE_EXCEPTION_FORWARD, fwd );
+                }
+                catch ( Exception e )
+                {
+                    _log.error( "Exception thrown while handling exception in onCreate()", e );
+                }
+            }
+        }
+        finally
+        {
+            nullRequestMembers( request );
+        }
+    }
+    
+    /**
+     * Callback that is invoked when this controller instance is created.  {@link #getRequest},
+     * {@link #getResponse}, {@link #getSession} may all be used during this method.
+     */ 
+    protected void onCreate()
+        throws Exception
+    {
+    }
+    
+    void destroy( HttpSession session )
+    {
+        onDestroy();    // for backwards compatiblity
+        onDestroy( session );
+        uninitJavaControls();
+    }
+
+    
+    /**
+     * Callback that is invoked when this controller instance is "destroyed", i.e., removed from the
+     * user session.  {@link #getRequest}, {@link #getResponse}, and {@link #getMapping} may <i>not</i>
+     * be used during this method, since it may be called due to session termination outside of a
+     * request.  {@link #getSession} also may not be used, but the session is passed as an argument
+     * to {@link #onDestroy(javax.servlet.http.HttpSession)}, which should be used in place of this
+     * method.
+     * <br>
+     * Note that this method is <strong>not synchronized</strong>.  It is dangerous to synchronize your override of
+     * this method because it is invoked during a callback from the Servlet container.  Depending on the container,
+     * synchronization here can cause deadlocks.
+     *
+     * @deprecated {@link #onDestroy(javax.servlet.http.HttpSession)} should be used instead. 
+     */ 
+    protected void onDestroy()
+    {
+    }
+    
+    /**
+     * Callback that is invoked when this controller instance is "destroyed", i.e., removed from the
+     * user session.  {@link #getRequest}, {@link #getResponse}, and {@link #getMapping} may <i>not</i>
+     * be used during this method, since it may be called due to session termination outside of a
+     * request.  {@link #getSession} also may not be used, but the session is passed as an argument.
+     * <br>
+     * Note that this method is <strong>not synchronized</strong>.  It is dangerous to synchronize your override of
+     * this method because it is invoked during a callback from the Servlet container.  Depending on the container,
+     * synchronization here can cause deadlocks.
+     */ 
+    protected void onDestroy( HttpSession session )
+    {
+    }
+    
+    /**
+     * This helps implement the deprecated return-to="page" behavior, which changes depending on whether
+     * you're executing an action in Global.app or the current pageflow.
+     */ 
+    abstract PreviousPageInfo getPreviousPageInfoLegacy( PageFlowController curJpf, HttpServletRequest request );
+    
+    /**
+     * Get an action handler method of the given name/signature
+     * .
+     * @param methodName the name of the action handler method to query.
+     * @param argType the type of the argument to the action handler method; if <code>null</code>,
+     *            the method takes no arguments.
+     * @return the desired Method, or <code>null</code> if it doesn't exist.
+     */ 
+    protected Method getActionMethod( String methodName, Class argType )
+    {
+        String cacheKey = ( argType != null ? methodName + '/' + argType.getName() : methodName );
+        Class thisClass = getClass();
+        ClassLevelCache cache = ClassLevelCache.getCache( thisClass );
+        Method actionMethod = ( Method ) cache.get( CACHEID_ACTION_METHODS, cacheKey );
+        
+        if ( actionMethod != null )
+        {
+            return actionMethod;
+        }
+        else
+        {
+            //
+            // We didn't find it in the cache.  Look for it reflectively.
+            //
+            if ( argType == null )
+            {
+                //
+                // No form -- look for a method with no arguments.
+                //
+                actionMethod = InternalUtils.lookupMethod( thisClass, methodName, null );
+            }
+            else
+            {
+                //
+                // Has a form.  Look for a method with a single argument -- either the given type
+                // or any superclass.
+                //
+                while ( argType != null )
+                {
+                    actionMethod = InternalUtils.lookupMethod( thisClass, methodName, new Class[]{ argType } );
+                    
+                    if ( actionMethod != null )
+                    {
+                        break;
+                    }
+                    
+                    argType = argType.getSuperclass();
+                }
+            }
+                
+            if ( actionMethod != null && actionMethod.getReturnType().equals( Forward.class ) )
+            {
+                actionMethod.setAccessible( true );
+                cache.put( CACHEID_ACTION_METHODS, cacheKey, actionMethod );
+                return actionMethod;
+            }
+        }
+        
+        return null;
+    }
+
+    private Class getFormClass( Object form, ActionMapping mapping, HttpServletRequest request )
+        throws ClassNotFoundException
+    {
+        if ( mapping instanceof PageFlowActionMapping )
+        {
+            String formClassName = ( ( PageFlowActionMapping ) mapping ).getFormClass();
+            
+            if ( formClassName != null )
+            {
+                return InternalUtils.getReloadableClass( formClassName, request, getServlet().getServletContext() );
+            }
+        }
+        
+        return form != null ? form.getClass() : null;
+    }
+    
+    /**
+     * Get the ActionForward returned by the action handler method that corresponds to the
+     * given action name and form-bean, or send an error to the browser if there is no
+     * matching method.
+     * 
+     * @param actionName the name of the Struts action to handle.
+     * @param inputForm the form-bean associated with the action.  May be <code>null</code>.
+     * @param response the current HttpServletResponse.
+     * @return the ActionForward returned by the action handler method, or <code>null</code> if
+     *             there was no matching method (in which case an error was written to the
+     *             browser.
+     * @throws Exception if an Exception was raised in user code.
+     */ 
+    ActionForward getActionMethodForward( String actionName, Object inputForm,
+                                          HttpServletRequest request, HttpServletResponse response,
+                                          ActionMapping mapping  )
+        throws Exception
+    {
+        //
+        // Find the method.
+        //
+        Class formClass = getFormClass( inputForm, mapping, request );
+        Method actionMethod = getActionMethod( actionName, formClass );
+
+        //
+        // Invoke the method.
+        //
+        if ( actionMethod != null )
+        {
+            return invokeActionMethod( actionMethod, inputForm, request, mapping );
+        }
+        
+        if ( _log.isWarnEnabled() )
+        {
+            StringBuffer msg = new StringBuffer( "Could not find matching action method for action=" );
+            msg.append( actionName ).append( ", form=" );
+            msg.append( inputForm != null ? inputForm.getClass().getName() :"[none]" );
+            _log.warn( msg.toString() );
+        }
+
+        throw new NoMatchingActionMethodException( actionName, inputForm, this );
+    }
+
+    private String getFormQualifiedActionPath( Class formClass, String actionPath )
+    {
+        StringBuffer ret = new StringBuffer( actionPath );
+        ret.append( '_' );
+        ret.append( formClass.getName().replace( '.', '_' ).replace( '$', '_' ) );
+        return ret.toString();
+    }
+    
+    /**
+     * Invoke the given action handler method, passing it an argument if appropriate.
+     * 
+     * @param method the action handler method to invoke.
+     * @param arg the form-bean to pass; may be <code>null</code>.
+     * @return the ActionForward returned by the action handler method.
+     * @throws Exception if an Exception was raised in user code.
+     */
+    protected ActionForward invokeActionMethod( Method method, Object arg )
+        throws Exception
+    {
+        return invokeActionMethod( method, arg, getRequest(), getMapping() );
+    }
+    
+    /**
+     * Invoke the given action handler method, passing it an argument if appropriate.
+     * 
+     * @param method the action handler method to invoke.
+     * @param arg the form-bean to pass; may be <code>null</code>.
+     * @param request the current HttpServletRequest.
+     * @return the ActionForward returned by the action handler method.
+     * @throws Exception if an Exception was raised in user code.
+     */
+    ActionForward invokeActionMethod( Method method, Object arg, HttpServletRequest request, ActionMapping mapping )
+        throws Exception
+    {
+        Class[] paramTypes = method.getParameterTypes();
+
+        try
+        {
+            if ( paramTypes.length > 0 && paramTypes[0].isInstance( arg ) )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Invoking action method " + method.getName() + "(" + paramTypes[0].getName() + ")" );
+                }
+    
+                return ( ActionForward ) method.invoke( this, new Object[]{ arg } );
+            }
+            else if ( paramTypes.length == 0 )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Invoking action method " + method.getName() + "()" );
+                }
+    
+                return ( ActionForward ) method.invoke( this );
+            }
+        }
+        finally
+        {
+            boolean readonly = false;
+            
+            if ( mapping instanceof PageFlowActionMapping )
+            {
+                PageFlowActionMapping pfam = ( PageFlowActionMapping ) mapping;
+                readonly = pfam.isReadonly();
+            }
+
+            if ( ! readonly )
+            {
+                ensureFailover( getRequest() );
+            }
+        }
+
+        if ( _log.isWarnEnabled() )
+        {
+            _log.warn( "Could not find action method " + method.getName() + " with appropriate signature." );
+        }
+        
+        return null;
+    }
+
+    /**
+     * Get the current HttpServletRequest.  This call is only valid during {@link #execute} (where
+     * any user action method is invoked), and during the lifecycle methods {@link #onCreate},
+     * {@link #beforeAction}, {@link #afterAction}.
+     * 
+     * @return the current HttpServletRequest.
+     * @throws IllegalStateException if this method is invoked outside of action method
+     *             execution (i.e., outside of the call to {@link #execute}, and outside of
+     *             {@link #onCreate}, {@link #beforeAction}, {@link #afterAction}.
+     */
+    protected final HttpServletRequest getRequest()
+    {
+        if ( _request == null )
+        {
+            String message = "getRequest was called outside of a valid context.";
+            LocalizedIllegalStateException ex = new LocalizedIllegalStateException( message );
+            ex.setLocalizedMessage( Bundle.getString( "PageFlow_IllegalStateGet", "getRequest" ) );
+            throw ex;
+        }
+
+        return _request;
+    }
+
+    /**
+     * Get the current HttpServletResponse.  This call is only valid during {@link #execute} (where
+     * any user action method is invoked), and during the lifecycle methods {@link #onCreate},
+     * {@link #beforeAction}, {@link #afterAction}.
+     * 
+     * @return the current HttpServletResponse.
+     * @throws IllegalStateException if this method is invoked outside of action method
+     *             execution (i.e., outside of the call to {@link #execute}, and outside of
+     *             {@link #onCreate}, {@link #beforeAction}, {@link #afterAction}.
+     */
+    protected final HttpServletResponse getResponse()
+    {
+        if ( _response == null )
+        {
+            String message = "getResponse was called outside of a valid context.";
+            LocalizedIllegalStateException ex = new LocalizedIllegalStateException( message );
+            ex.setLocalizedMessage( Bundle.getString( "PageFlow_IllegalStateGet", "getResponse" ) );
+            throw ex;
+        }
+
+        return _response;
+    }
+
+    /**
+     * Get the current Struts ActionMapping, which is information from the Struts-XML &lt;action&gt;
+     * tag that corresponds to the current page flow action being executed.  This call is only valid
+     * during {@link #execute} (where any user action method is invoked), and during the lifecycle
+     * methods {@link #beforeAction} and {@link #afterAction}.
+     * 
+     * @return the current Struts ActionMapping.
+     * @throws IllegalStateException if this method is invoked outside of action method
+     *             execution (i.e., outside of the call to {@link #execute}, and outside of
+     *             {@link #onCreate}, {@link #beforeAction}, {@link #afterAction}.
+     */
+    protected final ActionMapping getMapping()
+    {
+        if ( _mapping == null )
+        {
+            String message = "getMapping was called outside of a valid context.";
+            LocalizedIllegalStateException ex = new LocalizedIllegalStateException( message );
+            ex.setLocalizedMessage( Bundle.getString( "PageFlow_IllegalStateGet", "getMapping" ) );
+            throw ex;
+        }
+
+        return _mapping;
+    }
+
+    /**
+     * Get the current user session.  This call is only valid during {@link #execute} (where
+     * any user action method is invoked), and during the lifecycle methods {@link #onCreate},
+     * {@link #onDestroy}, {@link #beforeAction}, {@link #afterAction}.
+     * 
+     * @return the HttpSession for the current user session.
+     * @throws IllegalStateException if this method is invoked outside of action method
+     *             execution (i.e., outside of the call to {@link #execute}, and outside of
+     *             {@link #onCreate}, {@link #onDestroy}, {@link #beforeAction}, {@link #afterAction}.
+     */
+    protected final HttpSession getSession()
+    {
+        if ( _request == null )
+        {
+            String message = "getSession was called outside of a valid context.";
+            LocalizedIllegalStateException ex = new LocalizedIllegalStateException( message );
+            ex.setLocalizedMessage( Bundle.getString( "PageFlow_IllegalStateGet", "getSession" ) );
+            throw ex;
+        }
+
+        return _request.getSession( true );
+    }
+
+    void setRequestMembers( HttpServletRequest request, HttpServletResponse response, ActionMapping mapping )
+    {
+        assert request != null;
+        assert response != null;
+        
+        _request = request;
+        _response = response;
+        _mapping = mapping;
+    }
+    
+    void nullRequestMembers( HttpServletRequest request )
+    {
+        assert request == _request : "old request: " + _request + ", new request: " + request;
+        
+        if ( request == _request )
+        {
+            _request = null;
+            _response = null;
+            _mapping = null;
+        }
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public final ModuleConfig getModuleConfig()
+    {
+        assert _moduleConfig != null : "no cached ModuleConfig for " + getClass().getName();
+        return _moduleConfig;
+    }
+    
+    private void initModuleConfig( ServletContext servletContext, HttpServletRequest request )
+    {
+        if ( _moduleConfig == null )
+        {
+            _moduleConfig = InternalUtils.getModuleConfig( getModulePath(), servletContext );
+            
+            //
+            // We'll get into this next block if the requested module path differs in case from
+            // the "natural" module path for this file (Windows only).  If so, we'll parse the
+            // module path from the request.  Note that the request (which comes from _request)
+            // may be null for Global.app, but because we create the Global.app URIs ("/-global"
+            // module path), we'll never have a case issue.
+            //
+            if ( _moduleConfig == null && ! FileUtils.isOSCaseSensitive() && request != null )
+            {
+                _moduleConfig = InternalUtils.getModuleConfig( PageFlowUtils.getModulePath( request ), servletContext );
+            }
+            
+            if ( _moduleConfig == null )
+            {
+                //
+                // If we got here, it's possible that we're dynamically registering modules, and that the
+                // module hasn't been registered yet.  Try it.
+                //
+                ActionServlet actionServlet = InternalUtils.getActionServlet( servletContext );
+                if ( actionServlet instanceof AutoRegisterActionServlet )
+                {
+                    try
+                    {
+                        AutoRegisterActionServlet servlet = ( AutoRegisterActionServlet ) actionServlet; 
+                        _moduleConfig = servlet.ensureModuleRegistered( getModulePath(), request );
+                    }
+                    catch ( Exception e )
+                    {
+                        _log.error( "Error while registering module " + getModulePath(), e );
+                    }
+                }
+            }
+            
+            assert _moduleConfig != null : getModulePath() + "; " + getClass().getName();
+        }
+    }
+    
+    /**
+     * Gets the Struts module configuration associated with this controller.
+     * 
+     * @param servletContext the current ServletContext.
+     * @return the Struts ModuleConfig for this controller.
+     */
+    public ModuleConfig getModuleConfig( ServletContext servletContext, HttpServletRequest request )
+    {
+        initModuleConfig( servletContext, request );
+        return _moduleConfig;
+    }
+
+    /**
+     * Resolve the given action name to a URI.  This version assumes that the ActionServlet
+     * class should be {@link PageFlowActionServlet}.
+     * Note: this method invokes the full action-processing cycle on a {@link ScopedRequest}.  Use
+     *             {@link #resolveAction} to resolve the URI for an action in the current page flow.
+     * @exclude
+     * @deprecated Use {@link PageFlowUtils#strutsLookup} instead.
+     */
+    public ActionResult lookup( String actionName, ServletContext context, HttpServletRequest request,
+                                HttpServletResponse response )
+        throws Exception
+    {
+        return PageFlowUtils.strutsLookup( context, request, response, actionName, null );
+    }
+    
+    /**
+     * Resolve the given action name to a URI.
+     * Note: this method invokes the full action-processing cycle on a {@link ScopedRequest}.  Use
+     *             {@link #resolveAction} to resolve the URI for an action in the current page flow.
+     * @exclude
+     * @deprecated Use {@link PageFlowUtils#strutsLookup} instead.
+     */
+    public ActionResult lookup( String actionName, ServletContext context, HttpServletRequest request,
+                                HttpServletResponse response, String actionServletClassName )
+        throws Exception
+    {
+        return PageFlowUtils.strutsLookup( context, request, response, actionName, null );
+    }
+    
+    /**
+     * Call an action and return the result URI.
+     * 
+     * @param actionName the name of the action to run.
+     * @param form the form bean instance to pass to the action, or <code>null</code> if none should be passed.
+     * @return the result webapp-relative URI, as a String.
+     * @throws ActionNotFoundException when the given action does not exist in this page flow.
+     * @throws Exception if the action method throws an Exception.
+     */ 
+    public String resolveAction( String actionName, Object form, HttpServletRequest request,
+                                 HttpServletResponse response )
+        throws Exception
+    {
+        ActionMapping mapping = ( ActionMapping ) getModuleConfig().findActionConfig( "/" + actionName );
+        
+        if ( mapping == null )
+        {
+            throw new ActionNotFoundException( actionName, this, form );
+        }
+        
+        ActionForward fwd = getActionMethodForward( actionName, form, request, response, mapping );
+        
+        if ( fwd instanceof Forward )
+        {
+            ( ( Forward ) fwd ).initialize( mapping, this, request );
+        }
+        
+        String path = fwd.getPath();
+        if ( fwd.getContextRelative() || FileUtils.isAbsoluteURI( path ) )
+        {
+            return path;
+        }
+        else
+        {
+            return getModulePath() + path;
+        }
+    }
+
+    /**
+     * Call an action and return the result URI.
+     * 
+     * @deprecated Use {@link #resolveAction(java.lang.String, java.lang.Object, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)} instead.
+     * @param actionName the name of the action to run.
+     * @param form the form bean instance to pass to the action, or <code>null</code> if none should be passed.
+     * @return the result webapp-relative URI, as a String.
+     * @throws ActionNotFoundException when the given action does not exist in this page flow.
+     * @throws Exception if the action method throws an Exception.
+     */ 
+    public String resolveAction( String actionName, Object form )
+        throws Exception
+    {
+        return resolveAction( actionName, form, getRequest(), getResponse() );
+    }
+
+    /**
+     * Get a list of the names of actions handled by methods in this PageFlowController.
+     * 
+     * @return a String array containing the names of actions handled by methods in this PageFlowController.
+     */
+    public String[] getActions()
+    {
+        ActionConfig[] actionConfigs = getModuleConfig().findActionConfigs();
+        ArrayList actionNames = new ArrayList();
+        
+        for ( int i = 0; i < actionConfigs.length; i++ )
+        {
+            ActionConfig ac = actionConfigs[i];
+            actionNames.add( ac.getPath().substring( 1 ) ); // every action path has a '/' in front of it
+        }
+        
+        return ( String[] ) actionNames.toArray( new String[0] );
+    }
+    
+    /**
+     * Tell whether a given String is the name of an action handled by a method in this PageFlowController.
+     * 
+     * @param name the action-name to query.
+     * @return <code>true</code> if <code>name</code> is the name of an action handled by a method in this
+     *         PageFlowController.
+     */
+    public boolean isAction( String name )
+    {
+        return ( getModuleConfig().findActionConfig( '/' + name ) != null );
+    }
+    
+    /**
+     * Tell whether this is a {@link PageFlowController}.
+     * 
+     * @return <code>true</code> if this is a {@link PageFlowController}.
+     */ 
+    public boolean isPageFlow()
+    {
+        return false;
+    }
+    
+    /**
+     * Stores this controller in the user session, in the appropriate place.
+     */ 
+    abstract void persistInSession( HttpServletRequest request, HttpServletResponse response,
+                                    ServletContext servletContext );
+    
+    /**
+     * Ensures that any changes to this FlowController will be replicated in a cluster (for failover),
+     * even if the replication scheme uses a change-detection algorithm that relies on
+     * HttpSession.setAttribute to be aware of changes.  Note that this method is used by the framework
+     * and does not need to be called explicitly in most cases.
+     * 
+     * @param request the current HttpServletRequest
+     */ 
+    public abstract void ensureFailover( HttpServletRequest request ); 
+    
+    /**
+     * Get the current Struts ActionServlet.
+     * 
+     * @return the ActionServlet.
+     */ 
+    public ActionServlet getServlet()
+    {
+        return _transientActionServlet;
+    }
+    
+    /**
+     * Set the Struts ActionServlet.
+     * @exclude
+     */ 
+    public void setServlet( ActionServlet servlet )
+    {
+        _transientActionServlet = servlet;
+    }
+    
+    
+    /**
+     * Called on this object for non-lookup (refresh) requests.
+     * @exclude
+     */ 
+    public synchronized final void refresh( HttpServletRequest request, HttpServletResponse response )
+    {
+        setRequestMembers( request, response, null );
+        onRefresh();
+        nullRequestMembers( request );
+    }
+    
+    /**
+     * Callback that is invoked when this controller is involved in a refresh request, as can happen
+     * in a portal environment on a request where no action is run in the current page flow, but 
+     * a previously-displayed JSP in the page flow is re-rendered.
+     */ 
+    protected void onRefresh()
+    {
+    }
+    
+    public abstract String getDisplayName();
+    
+    /**
+     * Used by derived classes to store information on the most recent action executed.
+     */ 
+    void savePreviousActionInfo( ActionForm form, HttpServletRequest request, ActionMapping mapping,
+                                 ServletContext servletContext )
+    {
+    }
+    
+    /**
+     * Used by derived classes to store information on the most recent page forwarded to.
+     */ 
+    void savePreviousPageInfo( ActionForward forward, ActionForm form, ActionMapping mapping,
+                               HttpServletRequest request, ServletContext servletContext,
+                               boolean isSpecialForward )
+    {
+    }
+    
+    /**
+     * Callback when this FlowController is added to the user session.
+     */ 
+    public void valueBound( HttpSessionBindingEvent event )
+    {
+    }
+    
+    /**
+     * Callback when this FlowController is removed from the user session.  Causes {@link #onDestroy}
+     * to be called.
+     */ 
+    public void valueUnbound( HttpSessionBindingEvent event )
+    {
+        destroy( event.getSession() );
+    }    
+    
+    /**
+     * Tell whether this is a "singleton" page flow.  Once it is invoked, a singleton page flow is never
+     * removed from the session unless {@link #delete} is called.  Navigating to another page flow hides
+     * the current singleton controller, but does not remove it.
+     */
+    protected boolean isSingleton()
+    {
+        return false;
+    }
+    
+    /**
+     * Tell whether this PageFlowController can be "nested", i.e., if it can be invoked from another page
+     * flow with the intention of returning to the original one.  Page flows are declared to be nested
+     * using the <code>@jpf:controller nested="true"</code> annotation.
+     * 
+     * @return <code>true</code> if this PageFlowController can be nested.
+     */
+    protected boolean isNestable()
+    {
+        return false;
+    }
+    
+    /**
+     * When the current page flow does not use a <code>@jpf:forward</code> with a
+     * <code>return-to="previousAction"</code> attribute, the following methods always return
+     * <code>null</code> by default.
+     * <ul>
+     *     <li>getPreviousActionInfo</li>
+     *     <li>getPreviousActionURI</li>
+     *     <li>getPreviousForm</li>
+     * </ul>
+     * Override <code>alwaysTrackPreviousAction</code> (which always returns <code>false</code>)
+     * to enable these methods in all cases.
+     * 
+     * @return <code>true</code> if the previous action should always be tracked, regardless
+     *         of whether <code>return-to="previousAction"</code> is used.
+     * @see PageFlowController#getPreviousActionInfo
+     * @see PageFlowController#getPreviousActionURI
+     * @see PageFlowController#getPreviousForm        
+     */
+    protected boolean alwaysTrackPreviousAction()
+    {
+        return false;
+    }
+    
+    /**
+     * When the current page flow does not use a <code>@jpf:forward</code> with either a
+     * <code>return-to="currentPage"</code> or a <code>return-to="previousPage"</code> attribute,
+     * the following methods always return <code>null</code> by default.
+     * <ul>
+     *     <li>getCurrentPageInfo</li>
+     *     <li>getPreviousPageInfo</li>
+     *     <li>getCurrentForwardPath</li>
+     *     <li>getPreviousForwardPath</li>
+     * </ul>
+     * Override <code>alwaysTrackPreviousPage</code> (which always returns <code>false</code>)
+     * to enable these methods in all cases.
+     * 
+     * @return <code>true</code> if the previous page should always be tracked, regardless
+     *         of whether <code>return-to="currentPage"</code> or <code>return-to="previousPage"</code>
+     *         is used.
+     * @see PageFlowController#getCurrentPageInfo
+     * @see PageFlowController#getPreviousPageInfo
+     * @see PageFlowController#getCurrentForwardPath
+     * @see PageFlowController#getPreviousForwardPath
+     */
+    protected boolean alwaysTrackPreviousPage()
+    {
+        return false;
+    }
+
+    /**
+     * Remove this instance from the session.  The base implementation does not do anything.
+     */ 
+    protected void delete()
+    {
+    }
+
+    /**
+     * Increment the count of concurrent requests to this page flow.  Note that this method
+     * is not synchronized -- we use it to decide whether to synchronize on this instance,
+     * or to bail out with an error message about too many concurrent requests.
+     */
+    boolean incrementRequestCount( HttpServletRequest request, HttpServletResponse response,
+                                   ServletContext servletContext )
+        throws IOException
+    {
+        //
+        // First cache the max-concurrent-request-count value.
+        //
+        if ( _maxConcurrentRequestCount == -1 )
+        {
+            _maxConcurrentRequestCount = DEFAULT_MAX_CONCURRENT_REQUEST_COUNT;
+            String countStr = servletContext.getInitParameter( MAX_CONCURRENT_REQUESTS_PARAM );
+            
+            if ( countStr != null )
+            {
+                try
+                {
+                    _maxConcurrentRequestCount = Integer.parseInt( countStr );
+                }
+                catch ( NumberFormatException e )
+                {
+                    _log.error( "Invalid value for servlet context parameter" + MAX_CONCURRENT_REQUESTS_PARAM
+                                + ": " + countStr, e );
+                }
+                
+                if ( _maxConcurrentRequestCount < 1 )
+                {
+                    _maxConcurrentRequestCount = DEFAULT_MAX_CONCURRENT_REQUEST_COUNT;
+                    _log.error( "Invalid value for servlet context parameter" + MAX_CONCURRENT_REQUESTS_PARAM
+                                + ": " + countStr );
+                }
+            }
+        }
+        
+        //
+        // Now, if the current count of concurrent requests to this instance is greater than the max,
+        // send an error on the response.
+        //
+        if ( _requestCount >= _maxConcurrentRequestCount )
+        {
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Too many requests to page flow " + getClass().getName() + " ("
+                           + ( _requestCount + 1 ) + ">" + _maxConcurrentRequestCount + "); returning error code "
+                           + EXCEEDED_MAX_CONCURRENT_REQUESTS_ERRORCODE );
+            }
+
+            response.sendError( EXCEEDED_MAX_CONCURRENT_REQUESTS_ERRORCODE );
+            return false;
+        }
+        
+        //
+        // We're ok -- increment the count and continue.
+        //
+        ++_requestCount;
+        return true;
+    }
+    
+    void decrementRequestCount( HttpServletRequest request )
+    {
+        assert _requestCount > 0 : request.getRequestURI();
+        --_requestCount;
+    }
+    
+    /**
+     * Initialize all null member variables that are Java Controls.
+     * 
+     * @param request the current HttpServletRequest.
+     */ 
+    private void initJavaControls( HttpServletRequest request, HttpServletResponse response )
+    {
+        //
+        // First, unwrap the request if it's a MultipartRequestWrapper.  MultipartRequestWrapper is a Struts
+        // class that does *not* extend HttpServletRequestWrapper, and which thus causes KNEX pain when it
+        // tries to unwrap it.
+        //
+        if ( request instanceof MultipartRequestWrapper )
+        {
+            request = ( ( MultipartRequestWrapper ) request ).getRequest();
+        }
+        
+        Map controlFields = JavaControlUtils.getAccessibleControlFieldAnnotations( getClass() );
+
+        if ( controlFields.isEmpty() )
+        {
+            return;
+        }
+
+        String className = getClass().getName();
+        ControlBeanContext beanContext = JavaControlUtils.getControlBeanContext( request, response, false );
+        assert beanContext != null : "ControlBeanContext was not initialized by PageFlowRequestProcessor";
+        
+        for ( Iterator i = controlFields.entrySet().iterator(); i.hasNext(); )
+        {
+            Map.Entry entry = ( Map.Entry ) i.next();
+            Field field = ( Field ) entry.getKey();
+
+            //
+            // We don't want the field to be transient -- the proxy should not go away when this
+            // object is serialized/deserialized.  The checker should enforce this.
+            //
+            assert ! Modifier.isTransient( field.getModifiers() ) : field.getName();
+            
+            try
+            {
+                if ( field.get( this ) == null )      // make sure it's not already initialized
+                {
+                    if ( _log.isTraceEnabled() )
+                    {
+                        _log.trace( "Initializing field " + field.getName() + " (" + field.getType().getName()
+                                    + ") with a Java Control..." );
+                    }
+                    
+                    PropertyMap propertyMap = ( PropertyMap ) entry.getValue();
+                    Class fieldType = field.getType();
+                    boolean isControlBeanClass = ! fieldType.isInterface();
+                    String controlID = className + "." + field.getName();
+                    ControlBean bean = JavaControlUtils.createControl( fieldType.getName(), isControlBeanClass,
+                                                                       controlID, propertyMap, beanContext );
+                    field.set( this, bean );
+                }
+            }
+            catch ( JavaControlUtils.ControlInstantiationException e )
+            {
+                _log.error( "Exception while initializing Java Control " + field.getName(), e );
+            }
+            catch ( IllegalAccessException e )
+            {
+                _log.error( "Exception while initializing Java Control " + field.getName(), e );
+            }
+        }
+    }    
+    
+    /**
+     * Clean up all member variables that are Java Controls.
+     */ 
+    private void uninitJavaControls()
+    {
+        Map controlFields = JavaControlUtils.getAccessibleControlFieldAnnotations( getClass() );
+        
+        for ( Iterator i = controlFields.keySet().iterator(); i.hasNext(); )
+        {
+            Field controlField = ( Field ) i.next();
+
+            try
+            {
+                Object fieldValue = controlField.get( this );
+                
+                if ( fieldValue != null )
+                {
+                    controlField.set( this, null );
+                    JavaControlUtils.destroyControl( fieldValue );
+                }
+            }
+            catch ( IllegalAccessException e )
+            {
+                _log.error( "Exception while uninitializing Java Control " + controlField.getName(), e );
+            }            
+        }
+    }
+    
+    protected ServletContext getServletContext()
+    {
+        return getServlet().getServletContext();
+    }
+    
+    /**
+     * Invoke the given exception handler method.
+     * @exclude
+     * 
+     * @param method the action handler method to invoke.
+     * @param ex the Throwable that is to be handled.
+     * @param actionName the name of the Struts action being processed.
+     * @param message the String message that is to be passed to the handler method.
+     * @param formBean the form bean that is associated with the action being processed; may be
+     *            <code>null</code>.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param readonly if <code>true</code>, session failover will not be triggered after invoking the method.
+     * @return the ActionForward returned by the exception handler method.
+     * @throws Exception if an Exception was raised in user code.
+     */
+    public synchronized ActionForward invokeExceptionHandler(
+            Method method, Throwable ex, String actionName, String message, Object formBean, ActionForm wrappedFormBean,
+            ActionMapping actionMapping, HttpServletRequest request, HttpServletResponse response, boolean readonly )
+        throws Exception
+    {
+        setRequestMembers( request, response, actionMapping );
+                        
+        ActionForward result = null;
+                        
+        try
+        {
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Invoking exception handler method " + method.getName() + "("
+                           + method.getParameterTypes()[0].getName() + ", ...)" );
+            }
+
+            try
+            {
+                ActionForward retVal = null;
+            
+                try
+                {
+                    Object[] args = new Object[]{ ex, actionName, message, formBean };
+                    retVal = ( ActionForward ) method.invoke( this, args );
+                }
+                finally
+                {
+                    if ( ! readonly )
+                    {
+                        ensureFailover( request );
+                    }
+                }
+            
+                return ForwardHandler.forwardTo( retVal, actionMapping, request, response, actionName,
+                                                 getModuleConfig(), wrappedFormBean, getServletContext(), this );
+            }
+            catch ( InvocationTargetException e )
+            {
+                Throwable target = e.getTargetException();
+            
+                if ( target instanceof Exception )
+                {
+                    throw ( Exception ) target;
+                }
+                else
+                {
+                    throw e;
+                }
+            }
+        }
+        catch ( Throwable e )
+        {
+            ExceptionsHandler eh = ContextCache.get( getServletContext() ).getExceptionsHandler();
+            eh.sendUnhandledExceptionError( eh.unwrapException( e ), request, response );
+        }
+        finally
+        {
+            nullRequestMembers( request );
+        }
+                        
+        return result;
+    }
+    
+    /**
+     * Add a validation error that will be shown with the Errors and Error tags.
+     * 
+     * @param propertyName the name of the property with which to associate this error.
+     * @param messageKey the message-resources key for the error message.
+     * @param messageArgs an array of arguments for the error message.
+     */ 
+    protected void addValidationError( String propertyName, String messageKey, Object[] messageArgs )
+    {
+        PageFlowUtils.addValidationError( propertyName, messageKey, messageArgs, getRequest() );
+    }
+    
+    /**
+     * Add a validation error that will be shown with the Errors and Error tags.
+     * 
+     * @param propertyName the name of the property with which to associate this error.
+     * @param messageKey the message-resources key for the error message.
+     */ 
+    protected void addValidationError( String propertyName, String messageKey )
+    {
+        PageFlowUtils.addValidationError( propertyName, messageKey, getRequest() );
+    }
+
+    private ActionForward handleSimpleAction( PageFlowActionMapping mapping, ActionForm wrappedFormBean,
+                                              HttpServletRequest request, HttpServletResponse response )
+        throws ExpressionEvaluationException
+    {
+        
+        Map< String, String > conditionalForwards = mapping.getConditionalForwardsMap();
+        
+        if ( ! conditionalForwards.isEmpty() )
+        {
+            ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects( request, response, wrappedFormBean );
+            ExpressionEvaluator ee = ExpressionEvaluatorFactory.getInstance();
+            
+            for ( Iterator< Map.Entry< String, String > > i = conditionalForwards.entrySet().iterator(); i.hasNext(); )
+            {
+                Map.Entry< String, String > entry = i.next();
+                String expression = entry.getKey();
+                String forwardName = entry.getValue();
+                Object result = ee.evaluateStrict(expression, bean);
+                if ( result instanceof Boolean && ( ( Boolean ) result ).booleanValue() )
+                {
+                    if ( _log.isTraceEnabled() )
+                    {
+                        _log.trace( "Expression '" + expression + "' evaluated to true on simple action "
+                                    + mapping.getPath() + "; using forward " + forwardName + "." );
+                    }
+                    
+                    return new Forward( forwardName );
+                }
+            }
+        }
+        
+        
+        if ( _log.isTraceEnabled() )
+        {
+            _log.trace( "No expression evaluated to true on simple action " + mapping.getPath()
+                        + "; using forward " + DEFAULT_SIMPLE_ACTION_FORWARD_NAME + "." );
+        }
+        
+        return new Forward( DEFAULT_SIMPLE_ACTION_FORWARD_NAME );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowControllerFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowControllerFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,383 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+
+import org.apache.struts.config.ModuleConfig;
+
+
+/**
+ * Factory for creating {@link FlowController}s - user {@link PageFlowController}s and
+ * Global.app.
+ */ 
+public class FlowControllerFactory
+{
+    private static final Logger _log = Logger.getInstance( FlowControllerFactory.class );
+    
+    
+    /**
+     * Get the {@link PageFlowController} instance that should be associated with the given request,
+     * based on the path of the request URI.  If it doesn't exist, create it.
+     * The PageFlowController stack (for nesting) will be cleared or pushed, and the new instance
+     * will be stored as the current PageFlowController.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param servletContext the current ServletContext.
+     * @return the PageFlowController for the request, or <code>null</code> if none was found
+     *             and none could be created.
+     */
+    public static PageFlowController getPageFlowForRequest( HttpServletRequest request,  HttpServletResponse response,
+                                                            ServletContext servletContext )
+    {
+        // Use the parent directory name as the .jpf name.  An alternative would
+        // be to look for the PageFlowController.class somewhere in the ModuleConfig
+        // associated with the current URI path.
+        String relativeUrl = PageFlowUtils.getRelativeURI( request, InternalUtils.decodeURI( request ), null );
+        String parentDir = PageFlowUtils.getModulePathForRelativeURI( relativeUrl );
+        String jpfClassName = InternalUtils.getPageFlowClassName( parentDir, request, servletContext );
+        return jpfClassName != null ? getPageFlow( jpfClassName, request, response, servletContext ) : null;
+    }    
+    
+    /**
+     * Get the {@link PageFlowController} instance that should be associated with the given URI.
+     * If it doesn't exist, create it.  The PageFlowController stack (for
+     * nesting) will be cleared or pushed, and the new instance will be stored as the current
+     * PageFlowController.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param uri the webapp-relative URI for the page flow.
+     * @param servletContext the current ServletContext.
+     * @return the PageFlowController for the request, or <code>null</code> if none was found
+     *             and none could be created.
+     */
+    public static FlowController getPageFlowForURI( HttpServletRequest request, HttpServletResponse response,
+                                                    String uri, ServletContext servletContext )
+    {
+        // Use the parent directory name as the .jpf name.  An alternative would
+        // be to look for the PageFlowController.class somewhere in the ModuleConfig
+        // associated with the current URI path.
+        String relativeUrl = PageFlowUtils.getRelativeURI( request, uri, null );
+        String parentDir = PageFlowUtils.getModulePathForRelativeURI( relativeUrl );
+        String jpfClassName = InternalUtils.getPageFlowClassName( parentDir, request, servletContext );
+        return jpfClassName != null ? getPageFlow( jpfClassName, request, response, servletContext ) : null;
+    }    
+    
+    /**
+     * Get the {@link PageFlowController} for the given type.  The PageFlowController stack (for
+     * nesting) will be cleared or pushed, and the new instance will be stored as the current
+     * PageFlowController.
+     * 
+     * @param jpfClassName the name of the desired PageFlowController class.
+     * @param request the current HttpServletRequest.
+     * @return the current user session's PageFlowController if it is of the requested type,
+     *         or a newly-created one, or <code>null</code> if none could be found or created.
+     */
+    public static PageFlowController getPageFlow( String jpfClassName, HttpServletRequest request,
+                                                  HttpServletResponse response, ServletContext servletContext )
+    {
+        try
+        {
+            Class jpfClass = InternalUtils.getReloadableClass( jpfClassName, request, servletContext );
+            return getPageFlow( jpfClass, request, response, servletContext, true );
+        }
+        catch ( ClassNotFoundException e)
+        {
+            if ( _log.isInfoEnabled() ) _log.info( "Requested page flow class " + jpfClassName + " not found." );
+            return null;
+        }
+    }    
+    
+    /**
+     * Get or create the current user session's GlobalApp instance (from the Global.app file).
+     * 
+     * @param request the current HttpServletRequest.
+     * @return the current session's GlobalApp instance, or a new one (based on Global.app)
+     *         if none is found.  If Global.app does not exist in the current webapp,
+     *         <code>null</code> is returned.
+     */
+    public static GlobalApp getGlobalApp( HttpServletRequest request, HttpServletResponse response,
+                                          ServletContext servletContext )
+    {
+        try
+        {
+            Class globalAppClass =
+                    InternalUtils.getReloadableClass( PageFlowConstants.GLOBALAPP_CLASSNAME, request, servletContext );
+            return getGlobalApp( globalAppClass, request, response, servletContext );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            _log.info( "Global.app class not found." );
+            return null;
+        }
+    }    
+    
+    /**
+     * Delegates to {@link #getPageFlow} or {@link #getGlobalApp} as appropriate,
+     * depending on the given class type.
+     */
+    static FlowController getFlowController( Class fcClass, HttpServletRequest request,
+                                             HttpServletResponse response, ServletContext servletContext )
+    {
+        if ( PageFlowController.class.isAssignableFrom( fcClass ) )
+        {
+            return getPageFlow( fcClass, request, response, servletContext, true );
+        }
+        else
+        {
+            assert GlobalApp.class.isAssignableFrom( fcClass ) : fcClass.getName();
+            return getGlobalApp( fcClass, request, response, servletContext );
+        }
+    }
+    
+    /**
+     * If the current session's PageFlowController is of the given class, it will be returned;
+     * otherwise, a new one will be created.  The PageFlowController stack (for nesting) will be
+     * cleared or pushed, and the new instance will be stored as the current PageFlowController.
+     */
+    static PageFlowController getPageFlow( Class jpfClass, HttpServletRequest request,
+                                           HttpServletResponse response, ServletContext servletContext,
+                                           boolean useCurrentIfAppropriate )
+    {
+        if ( ! PageFlowController.class.isAssignableFrom( jpfClass ) )
+        {
+            return null;
+        }
+        
+        PageFlowController current = InternalUtils.getCurrentPageFlow( request, false );
+
+        if ( current != null && useCurrentIfAppropriate && current.getClass().equals( jpfClass ) )
+        {
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Using current PageFlow: " + current );
+            }
+
+            //
+            // Reinitialize transient data that may have been lost on session failover.
+            //
+            current.reinitialize( request, response, servletContext );
+            return current;
+        }
+        else
+        {
+            try
+            {
+                //
+                // First check if this is a request for a singleton page flow.  If so, try
+                // PageFlowUtils.getCurrentPageFlow again, with the singleton flag.
+                //
+                PageFlowController retVal = null;
+                String modulePath = PageFlowUtils.getModulePath( request );
+                ModuleConfig mc = InternalUtils.getModuleConfig( modulePath, servletContext );
+                boolean createdNew = false;
+                
+                if ( mc != null && InternalUtils.isSingleton( mc ) )
+                {
+                    retVal = InternalUtils.getSingletonPageFlow( modulePath, request, false );
+                    
+                    if ( _log.isDebugEnabled() )
+                    {
+                        if ( retVal != null )
+                        {
+                            _log.debug( "Using singleton PageFlowController of type " + jpfClass.getName() );
+                        }
+                    }
+                }
+                
+                if ( retVal == null )
+                {
+                    if ( _log.isDebugEnabled() )
+                    {
+                        _log.debug( "Creating PageFlowController of type " + jpfClass.getName() );
+                    }
+    
+                    retVal = ( PageFlowController ) jpfClass.newInstance();
+                    createdNew = true;
+                }
+                
+                //
+                // Store the previous PageFlowController on the nesting stack (if this one is nestable),
+                // or destroy the nesting stack.
+                //
+                if ( retVal.isNestable( request, servletContext ) )
+                {
+                    //
+                    // Call create() on the newly-created page flow.
+                    //
+                    retVal.create( request, response, servletContext );
+
+                    if ( current != null )
+                    {
+                        if ( _log.isDebugEnabled() )
+                        {
+                            _log.debug( "Pushing PageFlowController " + current + " onto the nesting stack" );
+                        }
+
+                        PageFlowStack pfStack = PageFlowStack.get( request );
+                        pfStack.push( current, request );
+                    }
+                    
+                    retVal.persistInSession( request, response, servletContext );
+                }
+                else
+                {
+                    //
+                    // Going to a non-nested pageflow.  Blow away the pageflow stack.
+                    //
+                    PageFlowStack pfStack = PageFlowStack.get( request, false );
+                    
+                    if ( pfStack != null )
+                    {
+                        if ( _log.isDebugEnabled() )
+                        {
+                            _log.debug( "Destroying the PageFlowController stack." );
+                        }
+                     
+                        //
+                        // Start popping page flows until 1) there are none left on the stack, or 2) we find
+                        // one of the type we're returning.  If (2), we'll use that one (this means that executing
+                        // an action on a nesting page flow while in a nested one will not destroy the nesting
+                        // page flow only to create a new instance of it).
+                        //
+                        PageFlowController onStackAlready = pfStack.popUntil( request, retVal.getClass() );
+
+                        if ( onStackAlready != null )
+                        {
+                            if ( _log.isDebugEnabled() )
+                            {
+                                _log.debug( "Found a page flow of type " + retVal.getClass() + " in the stack; "
+                                           + "using that instance and stopping destruction of the nesting stack." );
+                            }
+
+                            retVal = onStackAlready;
+                            retVal.persistInSession( request, response, servletContext );
+                        }
+                        else
+                        {
+                            //
+                            // We're actually using the newly-created page flow, so call create() on it.
+                            // Note that we make the call to persistInSession *before* create, so the previous flow's
+                            // onDestroy() gets called before the new one's onCreate().
+                            //
+                            retVal.persistInSession( request, response, servletContext );
+                            retVal.create( request, response, servletContext );
+                        }
+                    }
+                    else
+                    {
+                        retVal.persistInSession( request, response, servletContext );
+                        
+                        //
+                        // We're actually using the newly-created page flow, so call create() on it.
+                        //
+                        if ( createdNew )
+                        {
+                            retVal.create( request, response, servletContext );
+                        }
+                    }
+                }
+                                
+                if ( ! createdNew )
+                {
+                    //
+                    // Reinitialize transient data that may have been lost on session failover.
+                    //
+                    current.reinitialize( request, response, servletContext );
+                }
+                
+                return retVal;
+            }
+            catch ( InstantiationException e )
+            {
+                _log.error( "Could not instantiate PageFlowController of type " + jpfClass.getName(), e );
+                return null;
+            }
+            catch ( IllegalAccessException e )
+            {
+                _log.error( "Could not instantiate PageFlowController of type " + jpfClass.getName(), e );
+                return null;
+            }
+        }
+    }        
+    
+    
+    /**
+     * If the current session's GlobalApp is of the given class, it will be
+     * returned; otherwise, a new one will be created and the new instance
+     * will be stored as the current GlobalApp.
+     */
+    static GlobalApp getGlobalApp( Class globalAppClass, HttpServletRequest request,
+                                   HttpServletResponse response, ServletContext servletContext )
+    {
+        assert GlobalApp.class.isAssignableFrom( globalAppClass ) : globalAppClass.getName();
+        GlobalApp current = PageFlowUtils.getGlobalApp( request );
+
+        if ( current != null && current.getClass().equals( globalAppClass ) )
+        {
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Using existing instance of GlobalApp: " + current );
+            }
+
+            //
+            // Reinitialize transient data that may have been lost on session failover.
+            //
+            current.reinitialize( request, response, servletContext );
+            return current;
+        }
+        else
+        {
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Creating GlobalApp of type " + globalAppClass.getName() );
+            }
+
+            try
+            {
+                GlobalApp retVal = ( GlobalApp ) globalAppClass.newInstance();
+                retVal.create( request, response, servletContext );
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Storing " + retVal + " in the session..." );
+                }
+                
+                InternalUtils.setGlobalApp( retVal, request );
+                return retVal;
+            }
+            catch ( InstantiationException e )
+            {
+                _log.error( "Could not instantiate GlobalApp of type " + globalAppClass.getName(), e );
+                return null;
+            }
+            catch ( IllegalAccessException e )
+            {
+                _log.error( "Could not instantiate GlobalApp of type " + globalAppClass.getName(), e );
+                return null;
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FormData.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/FormData.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.validator.ValidatorForm;
+import org.apache.struts.validator.Resources;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+import org.apache.commons.validator.Validator;
+import org.apache.commons.validator.ValidatorException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+
+/**
+ * Base class for form-beans associated with action methods in {@link PageFlowController}s.
+ */ 
+public class FormData extends ValidatorForm
+{
+    private static final Logger _log = Logger.getInstance( FormData.class );
+    
+    
+    /**
+     * Default constructor.
+     */ 
+    public FormData()
+    {
+        super();
+    }
+
+    public ActionErrors validate( ActionMapping mapping, HttpServletRequest request )
+    {
+        return validateBean( this, mapping.getAttribute(), mapping, request );
+    }
+
+    protected ActionErrors validateBean( Object bean, String beanName, ActionMapping mapping, HttpServletRequest request )
+    {
+
+        ServletContext application = getServlet().getServletContext();
+        ActionErrors errors = new ActionErrors();
+
+        //
+        // If the ValidatorPlugIn was initialized for this module, run it.
+        //
+        if ( Resources.getValidatorResources( application, request ) != null )
+        {
+            try
+            {
+                //
+                // Run validations associated with the bean.
+                //
+                Validator beanV = Resources.initValidator( beanName, bean, application, request, errors, page );
+                validatorResults = beanV.validate();
+                
+                //
+                // Run validations associated with the action.
+                //
+                Validator actionV = Resources.initValidator( mapping.getPath(), bean, application, request, errors, page );
+                validatorResults.merge( actionV.validate() );
+            }
+            catch ( ValidatorException e )
+            {
+                _log.error( e.getMessage(), e );
+            }
+        }
+
+        return errors;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,912 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.config.ModuleConfig;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.lang.reflect.Field;
+import java.net.URI;
+import java.net.URL;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.FileUtils;
+import org.apache.beehive.netui.pageflow.config.PageFlowActionForward;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+
+/**
+ * An object of this type is returned from an action methods in a {@link PageFlowController} to
+ * determine the next URI to be displayed.  It is constructed on the name of a forward defined
+ * by the <code>@jpf:forward</code> tag, and resolves to the URI specified in that forward.
+ */ 
+public class Forward extends ActionForward
+{
+    public static final int RETURN_TO_NONE = 0;
+    public static final int RETURN_TO_CURRENT_PAGE = 1;
+    public static final int RETURN_TO_PREVIOUS_PAGE = 2;
+    public static final int RETURN_TO_PREVIOUS_ACTION = 3;
+    
+    static final int RETURN_TO_PAGE_INTERNAL = -1;      // for internal non-deprecated access
+    static final int RETURN_TO_ACTION_INTERNAL = -2;    // for internal non-deprecated access
+    
+    /**
+     * @deprecated Use {@link #RETURN_TO_CURRENT_PAGE} or {@link #RETURN_TO_PREVIOUS_PAGE} instead.
+     */ 
+    public static final int RETURN_TO_PAGE = -1;
+    
+    /**
+     * @deprecated Use {@link #RETURN_TO_PREVIOUS_ACTION} instead.
+     */ 
+    public static final int RETURN_TO_ACTION = -2;
+    
+    private static final Logger _log = Logger.getInstance( Forward.class );
+    
+    private static final String RETURN_TO_CURRENT_PAGE_STR = "currentPage";
+    private static final String RETURN_TO_PREVIOUS_PAGE_STR = "previousPage";
+    private static final String RETURN_TO_PAGE_LEGACY_STR = "page";
+    private static final String RETURN_TO_PREVIOUS_ACTION_STR = "previousAction";
+    private static final String RETURN_TO_ACTION_LEGACY_STR = "action";
+
+    private List _outputForms;
+    private String _path;
+
+    private boolean _isNestedReturn = false;
+    private boolean _init = false;
+    private transient ActionMapping _mapping = null;         // will be reinitialized as necessary by PreviousPageInfo
+    private String _mappingPath;
+    private StringBuffer _queryString;
+    private boolean _explicitPath = false;
+    private transient FlowController _flowController = null; // will be reinitialized as necessary by PreviousPageInfo
+    private String _returnFormType = null;
+    private boolean _userSetRedirect = false;
+    private Map _actionOutputs = null;
+    private int _returnToType;
+    private boolean _hasExplicitRedirectValue = false;
+    private boolean _restoreQueryString = false;
+    
+    
+    /**
+     * An alternate ModuleConfig from which to resolve forwards if they are not resolved
+     * from the stored ActionMapping (and its stored ModuleConfig).
+     */ 
+    private ModuleConfig _altModuleConfig;
+    
+    
+    /**
+     * @exclude
+     */ 
+    protected Forward( Forward init )
+    {
+        _outputForms = init._outputForms;
+        _init = init._init;
+        _mapping = init._mapping;
+        _mappingPath = init._mappingPath;
+        _queryString = init._queryString;
+        _explicitPath = init._explicitPath;
+        _flowController = init._flowController;
+        _returnFormType = init._returnFormType;
+        _userSetRedirect = init._userSetRedirect;
+        _actionOutputs = init._actionOutputs;
+        _returnToType = init._returnToType;
+        _restoreQueryString = init._restoreQueryString;
+    }
+    
+    /**
+     * @exclude
+     */ 
+    protected Forward( HttpServletRequest request )
+    {
+        setPath( PageFlowUtils.getRelativeURI( request, null ) );
+        setContextRelative( true );
+        _explicitPath = true;        
+    }
+    
+    /**
+     * Constructor which accepts the name of a forward defined by the <code>@jpf:forward</code>
+     * tag.  The values returned from {@link #getPath}, {@link #getRedirect} and
+     * {@link #contextRelative} are resolved from this forward.
+     * 
+     * @param forwardName the name of the forward (<code>@jpf:forward</code>) to resolve.
+     */ 
+    public Forward( String forwardName )
+    {
+        setName( forwardName );
+    }
+
+    /**
+     * Constructor which accepts the name of a forward defined by the <code>@jpf:forward</code>
+     * tag.  The values returned from {@link #getPath}, {@link #getRedirect} and
+     * {@link #contextRelative} are resolved from this forward.  Also accepts a form bean
+     * to make available in the request (or user session, as appropriate).
+     * 
+     * @param forwardName the name of the forward (<code>@jpf:forward</code>) to resolve.
+     * @param outputFormBean a form bean instance to make available in the request (or user session, as appropriate).
+     *            See {@link #addOutputForm} for details about how this manifests itself.
+     */ 
+    public Forward( String forwardName, Object outputFormBean )
+    {
+        this( forwardName );
+        
+        if ( outputFormBean != null )
+        {
+            addOutputForm( outputFormBean );
+        }
+    }
+    
+    /**
+     * Constructor which accepts the name of a forward defined by the <code>@jpf:forward</code>
+     * tag.  The values returned from {@link #getPath}, {@link #getRedirect} and
+     * {@link #contextRelative} are resolved from this forward.  Also accepts a named action output
+     * to make available in the request, through {@link PageFlowUtils#getActionOutput}..
+     * 
+     * @param forwardName the name of the forward (<code>@jpf:forward</code>) to resolve.
+     * @param actionOutputName the name of a action output to make available in the request.
+     * @param actionOutputValue the action output object to make available in the request.
+     */ 
+    public Forward( String forwardName, String actionOutputName, Object actionOutputValue )
+    {
+        this( forwardName );
+        addActionOutput( actionOutputName, actionOutputValue );
+    }
+
+    /**
+     * Constructs a Forward that returns the given URI for {@link #getPath}.  By default
+     * the Forward will cause server forward (not a browser redirect); to change this, use
+     * {@link #setRedirect}.
+     * 
+     * @param path the URI to return for {@link #getPath}.
+     */ 
+    public Forward( URI path )
+    {
+        this( path, false );
+    }
+    
+    /**
+     * Constructs a Forward that returns the given URI for {@link #getPath}.
+     * 
+     * @param path the URI to return for {@link #getPath}.
+     * @param redirect set to <code>true</code> if this Forward should cause a browser redirect;
+     *                 <code>false</code> if it should cause a server forward.
+     */ 
+    public Forward( URI path, boolean redirect )
+    {
+        setPath( path.toString() );
+        super.setRedirect( redirect || path.isAbsolute() );
+        setContextRelative( path.getPath().startsWith( "/" ) );
+        _explicitPath = true;        
+    }
+    
+    /**
+     * Constructs a Forward that returns the given URL for {@link #getPath}.  Because the URL path
+     * is absolute by nature, this Forward will cause a browser redirect.
+     * 
+     * @param path the URL to return for {@link #getPath}.
+     */ 
+    public Forward( URL path )
+    {
+        setPath( path.toString() );
+        super.setRedirect( true );
+        _explicitPath = true;
+    }
+    
+    /**
+     * Internal.  Initialize from an existing Struts ActionForward.
+     * @exclude
+     */ 
+    protected Forward( ActionForward initFwd )
+    {
+        setName( initFwd.getName() );
+        initFrom( initFwd );
+    }
+    
+    /**
+     * Set whether the URI resolved by this Forward should be redirected to.
+     * 
+     * @param redirect if <code>true</code>, the controller will send a browser redirect to
+     *                 the URI for this Forward; otherwise, it will do a server forward to
+     *                 the URI.
+     */ 
+    public void setRedirect( boolean redirect )
+    {
+        super.setRedirect( redirect );
+        _userSetRedirect = true;
+    }
+    
+    /**
+     * Tell whether the URI resolved by this Forward should be redirected to.
+     * 
+     * @return <code>true</code> if the controller will send a browser redirect to the URI for
+     *         this Forward; <code>false</code> if it will do a server forward to the URI.
+     */ 
+    public boolean isRedirect()
+    {
+        return super.getRedirect();
+    }
+    
+    /**
+     * Add a form bean that will be made available in the request (or user session, as
+     * appropriate) if this Forward is returned by an action method in a {@link PageFlowController}.
+     * Specifically, each form bean is stored as a request attribute with a name determined by
+     * {@link PageFlowUtils#getFormBeanName}.
+     * 
+     * @param formBean the form bean instance to add.
+     */ 
+    public final void addOutputForm( Object formBean )
+    {
+        assert formBean != null;
+        
+        if ( _outputForms == null )
+        {
+            _outputForms = new ArrayList();
+        }
+        
+        if ( _init && getRedirect() )
+        {
+            String actionPath = ( _mappingPath != null ? _mappingPath : "" );
+            String descrip = ( getName() != null ? getName() : getPath() );
+            throw new IllegalRedirectOutputFormException( descrip, actionPath, _flowController,
+                                                          formBean.getClass().getName() );
+        }
+
+        _outputForms.add( InternalUtils.wrapFormBean( formBean ) );
+    }
+    
+    /**
+     * Get all form-beans attached to this forward through {@link #addOutputForm} or
+     * {@link #Forward(java.lang.String, java.lang.Object)}.
+     * 
+     * @return an array of ActionForm instances that are attached to this forward.
+     */ 
+    public final ActionForm[] getOutputForms()
+    {
+        if ( _outputForms == null ) return new ActionForm[0];
+        return ( ActionForm[] ) _outputForms.toArray( new ActionForm[0] );
+    }
+
+    final ActionForm getFirstOutputForm( ActionMapping mapping, HttpServletRequest request )
+    {
+        if ( _outputForms == null || _outputForms.size() == 0 )
+        {
+            if ( _returnFormType != null )
+            {
+                try
+                {
+                    if ( _log.isDebugEnabled() )
+                    {
+                        _log.debug( "Creating ActionForm of type " + _returnFormType );
+                    }
+                    
+                    ActionForm form = ( ActionForm ) Class.forName( _returnFormType ).newInstance();    // TODO: need to cache this
+                    form.reset( mapping, request );
+                    addOutputForm( form );
+                    return form;
+                }
+                catch ( Exception e )
+                {
+                    _log.error( "Could not create instance of " + _returnFormType, e );
+                }                
+            }
+            
+            return null;
+        }
+        else
+        {
+            return ( ActionForm ) _outputForms.get( 0 );
+        }
+    }
+    
+    /**
+     * Tell whether {@link #getPath} will be successful, i.e., whether one of the following two
+     * conditions is met:
+     *     <ul>
+     *         <li>the name around which this object was constructed resolves to a path defined
+     *             by a <code>@jpf:forward</code>, or</li>
+     *         <li>this object was constructed around an explicit path, by
+     *             {@link #Forward(java.net.URI)} or {@link #Forward(java.net.URL)}.</li>
+     *     </ul>
+     * 
+     * @return <code>true</code> if this forward does resolve to a URI path.
+     */ 
+    public boolean doesResolve()
+    {
+        if ( _explicitPath )
+        {
+            return true;
+        }
+        
+        assert _mapping != null || _altModuleConfig != null : "PageFlow.Forward.doesResolve() called outside of request";
+        return findForward( getName() ) != null;
+    }
+
+    /**
+     * Resolves the forward with the given name, from the stored ActionMapping if possible, or
+     * from the stored alternate ModuleConfig as a last resort.
+     * 
+     * @param forwardName the name of the forward to resolve.
+     * @return the resolved ActionForward, or <code>null</code> if none is found.
+     */ 
+    protected ActionForward findForward( String forwardName )
+    {
+        ActionForward fwd = ( _mapping != null ? _mapping.findForward( forwardName ) : null );
+        
+        if ( fwd != null )
+        {
+            return fwd;
+        }
+        else if ( _altModuleConfig != null )
+        {
+            return ( ActionForward ) _altModuleConfig.findForwardConfig( forwardName );
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Set an alternate ModuleConfig from which to resolve forwards if they are not resolved
+     * from the stored ActionMapping (and its stored ModuleConfig).
+     */ 
+    void setAltModuleConfig( ModuleConfig mc )
+    {
+        _altModuleConfig = mc;
+    }
+    
+    private final void init()
+    {
+        if ( ! _init )
+        {
+            if ( _mappingPath == null && _altModuleConfig == null )
+            {
+                throw new IllegalStateException( "Forward is not initialized.  Use initialize()." );
+            }
+            
+            ActionForward fwd = findForward( getName() );
+
+            if ( fwd == null )
+            {
+                throw new UnresolvableForwardException( getName(), _mappingPath, _flowController );
+            }
+
+            initFrom( fwd );
+            
+            if ( getRedirect() )
+            {
+                if ( _actionOutputs != null && ! _actionOutputs.isEmpty() )
+                {
+                    throw new IllegalActionOutputException( getName(), _mappingPath, _flowController,
+                                                           ( String ) _actionOutputs.keySet().iterator().next() );
+                }
+                
+                if ( _outputForms != null && ! _outputForms.isEmpty() )
+                {
+                    throw new IllegalRedirectOutputFormException( getName(), _mappingPath, _flowController,
+                                                                  _outputForms.get( 0 ).getClass().getName() );
+                }
+            }
+        }
+    }
+    
+    private void initFrom( ActionForward fwd )
+    {
+       _path = fwd.getPath();
+        
+        if ( ! _userSetRedirect )
+        {
+            setRedirect( fwd.getRedirect() );
+        }
+        setContextRelative( fwd.getContextRelative() );
+
+        //
+        // Add query params to the path.
+        //
+        if ( _queryString != null )
+        {
+            _path += _queryString.toString();
+        }
+        
+        if ( fwd instanceof PageFlowActionForward )
+        {
+            PageFlowActionForward fc = ( PageFlowActionForward ) fwd;
+            _isNestedReturn = fc.isNestedReturn();
+            _returnFormType = fc.getReturnFormType();
+            _hasExplicitRedirectValue = fc.hasExplicitRedirectValue();
+            _restoreQueryString = fc.isRestoreQueryString();
+            
+            Class returnFormClass = null;
+            
+            if ( _returnFormType != null )
+            {
+                try
+                {
+                    returnFormClass = Class.forName( _returnFormType );
+                }
+                catch ( ClassNotFoundException e )
+                {
+                    // This should never happen -- the JPF compiler ensures that it's a valid class.
+                    assert false : e;
+                }
+            }
+            
+            if ( fc.isReturnToPage() || fc.isReturnToAction() )
+            {
+                String path = fc.getPath();
+                
+                if ( path.equals( RETURN_TO_PREVIOUS_PAGE_STR ) )
+                {
+                    _returnToType = RETURN_TO_PREVIOUS_PAGE;
+                }
+                else if ( path.equals( RETURN_TO_CURRENT_PAGE_STR ) )
+                {
+                    _returnToType = RETURN_TO_CURRENT_PAGE;
+                }
+                else if ( path.equals( RETURN_TO_PAGE_LEGACY_STR ) )
+                {
+                    _returnToType = RETURN_TO_PAGE_INTERNAL;
+                }
+                else if ( path.equals( RETURN_TO_PREVIOUS_ACTION_STR ) )
+                {
+                    _returnToType = RETURN_TO_PREVIOUS_ACTION;
+                }
+                else if ( path.equals( RETURN_TO_ACTION_LEGACY_STR ) )
+                {
+                    _returnToType = RETURN_TO_ACTION_INTERNAL;
+                }
+                else
+                {
+                    assert false : "invalid return-to type for forward " + fc.getName() + ": " + path;
+                    _returnToType = RETURN_TO_CURRENT_PAGE;
+                }
+            }
+            
+            String retFormMember = fc.getReturnFormMember();
+
+            if ( retFormMember != null )
+            {
+                try
+                {
+                    assert _flowController != null;  // should be set in initialize()
+                    Field field = _flowController.getClass().getDeclaredField( retFormMember );
+                    assert ActionForm.class.isAssignableFrom( field.getType() ) : field.getType();
+                    returnFormClass = field.getType();
+                    field.setAccessible( true );
+                    ActionForm form = InternalUtils.wrapFormBean( field.get( _flowController ) );
+                    
+                    if ( form != null )
+                    {
+                        if ( _log.isDebugEnabled() )
+                        {
+                            _log.debug( "using member " + retFormMember + " for Forward " + this.getName() );
+                        }
+                        
+                        addOutputForm( form );
+                    }
+                    else
+                    {
+                        if ( _log.isInfoEnabled() )
+                        {
+                            _log.info( "returnFormMember " + retFormMember + " was null." );
+                        }
+                    }
+                }
+                catch ( NoSuchFieldException e )
+                {
+                    assert false : "could not find field " + retFormMember; // compiler should catch this
+                }
+                catch ( IllegalAccessException e )
+                {
+                    assert false;   // should not get here -- field is accessible.
+                }
+            }
+            
+            //
+            // Make sure that if there's currently an output form, that it confirms to the return-form-type.
+            //
+            if ( returnFormClass != null && _outputForms != null && _outputForms.size() > 0 )
+            {
+                Object outputForm = InternalUtils.unwrapFormBean( ( ActionForm ) _outputForms.get( 0 ) );
+                
+                if ( ! returnFormClass.isInstance( outputForm ) )
+                {
+                    throw new IllegalOutputFormTypeException( getName(), _mappingPath, _flowController,
+                                                              outputForm.getClass().getName(),
+                                                              returnFormClass.getName() );
+                }
+            }
+            
+            //
+            // Make sure required action outputs are present, and are of the right type (only make the latter
+            // check in iterative-dev mode.
+            //
+            PageFlowActionForward.ActionOutput[] actionOutputs = fc.getActionOutputs();
+            
+            for ( int i = 0; i < actionOutputs.length; ++i )
+            {
+                PageFlowActionForward.ActionOutput actionOutput = actionOutputs[i];
+                
+                if ( ! actionOutput.getNullable()
+                     && ( _actionOutputs == null || _actionOutputs.get( actionOutput.getName() ) == null ) )
+                {
+                    throw new MissingActionOutputException( _mappingPath, _flowController, actionOutput.getName(),
+                                                            getName() );
+                }
+                
+                //
+                // If we're *not* in production mode, do some (expensive) checks to ensure that the types for the
+                // action outputs match their declared types.
+                //
+                if ( ! InternalUtils.getServerAdapter().isInProductionMode() && _actionOutputs != null )
+                {
+                    Object actualActionOutput = _actionOutputs.get( actionOutput.getName() );
+                    
+                    if ( actualActionOutput != null )
+                    {
+                        String expectedTypeName = actionOutput.getType();
+                        Class actualType = actualActionOutput.getClass();
+                        String arraySuffix = "";
+                        
+                        while ( actualType.isArray() )
+                        {
+                            arraySuffix += "[]";
+                            actualType = actualType.getComponentType();
+                        }
+                        
+                        String actualTypeName = actualType.getName() + arraySuffix;
+                        
+                        if ( ! actualTypeName.equals( expectedTypeName ) )
+                        {
+                            throw new MismatchedActionOutputException( _mappingPath, _flowController,
+                                                                       actionOutput.getName(), getName(),
+                                                                       expectedTypeName, actualTypeName );
+                        }
+                    }
+                }
+            }
+        }
+        
+        _init = true;
+    }
+
+    /**
+     * Set the current ActionMapping and associated FlowController.  Normally, this method is called
+     * by the framework, but you can use it to initialize the Forward object in order to call {@link #getPath}.
+     * 
+     * @deprecated Use {@link #initialize(org.apache.struts.action.ActionMapping, org.apache.beehive.netui.pageflow.FlowController, javax.servlet.http.HttpServletRequest)} instead.
+     * @param mapping the current ActionMapping; this can be obtained from {@link FlowController#getMapping}.
+     * @param flowController the object in which to look for referenced return-form members.
+     */ 
+    public void initialize( ActionMapping mapping, FlowController flowController )
+    {
+        _mapping = mapping;
+        _mappingPath = mapping != null ? mapping.getPath() : null;
+        _flowController = flowController;
+    }
+    
+    /**
+     * Set the current ActionMapping and associated FlowController.  Normally, this method is called
+     * by the framework, but you can use it to initialize the Forward object in order to call {@link #getPath}.
+     * 
+     * @param mapping the current ActionMapping; this can be obtained from {@link FlowController#getMapping}.
+     * @param flowController the object in which to look for referenced return-form members.
+     */ 
+    public void initialize( ActionMapping mapping, FlowController flowController, HttpServletRequest request )
+    {
+        _mapping = mapping;
+        _mappingPath = mapping != null ? mapping.getPath() : null;
+        _flowController = flowController;
+    }
+    
+    /**
+     * Set the path to be returned by {@link #getPath}.  This overrides any path or forward name
+     * set in a constructor.
+     * 
+     * @param path the URI to be returned by {@link #getPath}.
+     */ 
+    public void setPath( String path )
+    {
+        _path = path;
+        _init = true;
+    }
+    
+    boolean isExplicitPath()
+    {
+        return _explicitPath;
+    }
+    
+    boolean hasExplicitRedirectValue()
+    {
+        return _hasExplicitRedirectValue;
+    }
+
+    /**
+     * Get the URI path associated with this object.  Resolve it from the name of a forward
+     * (<code>@jpf:forward</code>) if necessary.
+     * 
+     * @return a String that is the URI path.
+     * @see #Forward(java.lang.String)
+     * @see #Forward(java.lang.String, java.lang.Object)
+     * @see #Forward(java.net.URI)
+     * @see #Forward(java.net.URL)
+     * @see #setPath
+     */ 
+    public String getPath()
+    {
+        init();
+        return _path;
+    }
+    
+    /**
+     * Tell whether returning this forward from an action method will cause a return from
+     * a nested {@link PageFlowController}.
+     * 
+     * @return <code>true</code> if this forward will cause a return from nesting.
+     */ 
+    public boolean isNestedReturn()
+    {
+        init();
+        return _isNestedReturn;
+    }
+    
+    /**
+     * Tell whether returning this forward from an action method will cause a previous page
+     * to be displayed.
+     * 
+     * @return <code>true</code> if returning this forward from an action method will cause
+     *         a previous page to be displayed.
+     */ 
+    public boolean isReturnToPage()
+    {
+        init();
+        return _returnToType == RETURN_TO_PREVIOUS_PAGE || _returnToType == RETURN_TO_CURRENT_PAGE
+                   || _returnToType == RETURN_TO_PAGE_INTERNAL;
+    }
+
+    /**
+     * Tell whether returning this forward from an action method will cause the previous action
+     * to be re-run.
+     * 
+     * @return <code>true</code> if returning this forward from an action method will cause the
+     * previous action to be re-run, i.e., whether the URI returned by {@link #getPath} will end
+     * in "<i>previous-action-name</i>.do".
+     */ 
+    public boolean isReturnToAction()
+    {
+        init();
+        return _returnToType == RETURN_TO_PREVIOUS_ACTION || _returnToType == RETURN_TO_ACTION_INTERNAL;
+    }
+
+    boolean restoreQueryString()
+    {
+        init();
+        return _restoreQueryString;
+    }
+    
+    boolean shouldPopPageFlow()
+    {
+        init();
+        return _isNestedReturn;
+    }
+
+    /**
+     * Tell whether the URI returned by {@link #getPath} is for a page flow.
+     * 
+     * @return <code>true</code> if the URI returned by {@link #getPath} is for a page flow, i.e., 
+     * if it ends in ".jpf".
+     */ 
+    public boolean forwardsToPageFlow()
+    {
+        return FileUtils.osSensitiveEndsWith( getPath(), PageFlowConstants.JPF_EXTENSION );
+    }
+    
+    /**
+     * Set the query string that will be appended to the URI returned by {@link #getPath}.
+     * 
+     * @param queryString the query string that will be appended to the URI.  If this string does not
+     *            start with <code>'?'</code>, then this character will be prepended; if the string is
+     *            <code>null</code>, the query string will be removed.
+     */
+    public void setQueryString( String queryString )
+    {
+        if ( queryString == null )
+        {
+            _queryString = null;
+        }
+        else if ( queryString.startsWith( "?" ) )
+        {
+            _queryString = new StringBuffer( queryString );
+        }
+        else
+        {
+            _queryString = new StringBuffer( "?" ).append( queryString );
+        }
+    }
+    
+    /**
+     * Get the query string that will be appended to the URI returned by {@link #getPath}.
+     * 
+     * @return the query string that will be appended to the URI, or <code>null</code> if there
+     *         is no query string.
+     */
+    public String getQueryString()
+    {
+        return ( _queryString != null ? _queryString.toString() : null );
+    }
+    
+    /**
+     * Add a query parameter to the URI returned by {@link #getPath}.
+     * 
+     * @param name the name of the query parameter.
+     * @param value the value of the query parameter, or <code>null</code> if there is no value.
+     */ 
+    public void addQueryParam( String name, String value )
+    {
+        if ( _queryString == null )
+        {
+            _queryString = new StringBuffer( "?" );
+        }
+        else
+        {
+            _queryString.append( '&' );
+        }
+        
+        _queryString.append( name );
+        
+        if ( value != null )
+        {
+            _queryString.append( '=' ).append( value );
+        }
+    }
+    
+    /**
+     * Add a query parameter with no value to the URI returned by {@link #getPath}.
+     * 
+     * @param name the name of the query parameter.
+     */ 
+    public final void addQueryParam( String name )
+    {
+        addQueryParam( name, null );
+    }
+    
+    /**
+     * Adds an action output that will be made available in the request, through {@link PageFlowUtils#getActionOutput}.
+     * 
+     * @deprecated Use {@link #addActionOutput} instead.
+     * @param name the name of the action output.
+     * @param value the action output value.
+     */ 
+    public void addPageInput( String name, Object value )
+    {
+        addActionOutput( name, value );
+    }
+    
+    /**
+     * Adds an action output that will be made available in the request, through {@link PageFlowUtils#getActionOutput}.
+     * 
+     * @param name the name of the action output.
+     * @param value the action output value.
+     */ 
+    public void addActionOutput( String name, Object value )
+    {
+        if ( name == null || name.length() == 0 )
+        {
+            throw new IllegalArgumentException( "An action output name may not be null or empty." );
+        }
+        
+        if ( _actionOutputs == null )
+        {
+            _actionOutputs = new HashMap();
+        }
+        
+        if ( _init && getRedirect() )
+        {
+            String actionPath = ( _mappingPath != null ? _mappingPath : "" );
+            String descrip = ( getName() != null ? getName() : getPath() );
+            throw new IllegalActionOutputException( descrip, actionPath, _flowController, name );
+        }
+        
+        _actionOutputs.put( name, value );
+    }
+    
+    /**
+     * Get all action outputs that have been set on this Forward.
+     * 
+     * @deprecated Use {@link #getActionOutputs} instead.
+     * @return a Map of name/value pairs representing all action outputs.
+     * @see #addActionOutput
+     */ 
+    public Map getPageInputs()
+    {
+        return getActionOutputs();
+    }
+    
+    /**
+     * Get all action outputs that have been set on this Forward.
+     * 
+     * @return a Map of name/value pairs representing all action outputs.
+     * @see #addActionOutput
+     */ 
+    public Map getActionOutputs()
+    {
+        return _actionOutputs;
+    }
+    
+    /**
+     * Get the type of return, if this is a <code>return-to</code> type.
+     * 
+     * @return one of the following values: {@link #RETURN_TO_CURRENT_PAGE}, {@link #RETURN_TO_PREVIOUS_PAGE},
+     *         {@link #RETURN_TO_PAGE}, {@link #RETURN_TO_PREVIOUS_ACTION}, {@link #RETURN_TO_ACTION}, or
+     *         {@link #RETURN_TO_NONE} if this Forward is not a <code>return-to</code> type.
+     * @see #isReturnToAction
+     * @see #isReturnToPage
+     */ 
+    public int getReturnToType()
+    {
+        return _returnToType;
+    }
+    
+    /**
+     * Get the type of return as a String, if this is a <code>return-to</code> type.
+     * 
+     * @return one of the following values: <code>currentPage</code>, <code>previousPage</code>, <code>page</code>,
+     *         (deprecated), <code>previousAction</code>, <code>action</code> (deprecated), or <code>null</code>
+     *         if this is not a <code>return-to</code> type.
+     * @see #isReturnToAction
+     * @see #isReturnToPage
+     */ 
+    public String getReturnToTypeAsString()
+    {
+        switch ( _returnToType )
+        {
+            case RETURN_TO_CURRENT_PAGE:
+                return RETURN_TO_CURRENT_PAGE_STR;
+            
+            case RETURN_TO_PREVIOUS_PAGE:
+                return RETURN_TO_PREVIOUS_PAGE_STR;
+            
+            case RETURN_TO_PAGE_INTERNAL:
+                return RETURN_TO_PAGE_LEGACY_STR;
+                
+            case RETURN_TO_PREVIOUS_ACTION:
+                return RETURN_TO_PREVIOUS_ACTION_STR;
+            
+            case RETURN_TO_ACTION_INTERNAL:
+                return RETURN_TO_ACTION_LEGACY_STR;
+        }
+        
+        return null;
+    }
+    
+    void reinitialize( FlowController fc )
+    {
+        _flowController = fc;
+        
+        if ( _mapping == null && _mappingPath != null )
+        {
+            ModuleConfig mc = fc.getModuleConfig();
+            assert mc != null : "no ModuleConfig found for " + fc.getClass().getName();
+            _mapping = ( ActionMapping ) mc.findActionConfig( _mappingPath );
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,481 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.config.ModuleConfig;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+
+import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptor;
+import org.apache.beehive.netui.pageflow.interceptor.InterceptorForward;
+import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptorChain;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.util.logging.Logger;
+
+
+class ForwardHandler
+        implements PageFlowConstants
+{
+    private static final Logger _log = Logger.getInstance( ForwardHandler.class );
+    
+    /**
+     * Perform any necessary updates to the request and user session (including updates to the
+     * PageFlowController stack), based on the given ActionForward.
+     * 
+     * @param fwd the Struts ActionForward that determines the next URI to be displayed.
+     * @param mapping the Struts ActionMapping for the current action being processed.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param actionName the name of the Struts action being processed.
+     * @param altModuleConfig an alternate module config (e.g., Global.app's ModuleConfig) from which to
+     *            resolve a forward if it can't be resolved from the given ActionMapping.
+     * @return the ActionForward object to pass to Struts for actual Servlet forwarding.
+     */  
+    static ActionForward forwardTo( ActionForward fwd, ActionMapping mapping, HttpServletRequest request,
+                                    HttpServletResponse response, String actionName, ModuleConfig altModuleConfig,
+                                    ActionForm form, ServletContext servletContext, FlowController flowController )
+    {
+        boolean isSpecialForward = false;
+        boolean isReturnToCurrentPage = false;
+        
+        if ( fwd != null && fwd instanceof Forward )
+        {
+            Forward pageFlowFwd = ( Forward ) fwd;
+
+            pageFlowFwd.initialize( mapping, flowController, request );
+            pageFlowFwd.setAltModuleConfig( altModuleConfig );
+
+            if ( ! pageFlowFwd.doesResolve() )
+            {
+                throw new UnresolvableForwardException( pageFlowFwd.getName(), actionName, flowController );
+            }
+
+            //
+            // If it's a return-to-page, do what's necessary to return to the previous page,
+            // with its state intact.
+            //
+            if ( pageFlowFwd.isReturnToPage() )
+            {
+                isSpecialForward = true;
+                
+                //
+                // We need access to _previousPageInfo from the *current PageFlow*.  That is
+                // most likely this FlowController, but if it's Global.app, then we don't want
+                // to use that.
+                //
+                PageFlowController curJpf = InternalUtils.getCurrentPageFlow( request, false );
+                
+                if ( curJpf == null )
+                {
+                    throw new NoCurrentPageFlowException( actionName, pageFlowFwd );
+                }
+                
+                PreviousPageInfo prevPageInfo;
+                
+                switch ( pageFlowFwd.getReturnToType() )
+                {
+                    case Forward.RETURN_TO_CURRENT_PAGE:
+                        prevPageInfo = curJpf.getCurrentPageInfo();
+                        isReturnToCurrentPage = true;
+                        break;
+                        
+                    case Forward.RETURN_TO_PREVIOUS_PAGE:
+                        prevPageInfo = curJpf.getPreviousPageInfo();
+                        break;
+                    
+                    case Forward.RETURN_TO_PAGE_INTERNAL:
+                        prevPageInfo = flowController.getPreviousPageInfoLegacy( curJpf, request );
+                        break;
+                    
+                    default:
+                        assert false : pageFlowFwd.getReturnToType();
+                        prevPageInfo = curJpf.getCurrentPageInfo();
+                }
+                
+                fwd = doReturnToPage( request, prevPageInfo, curJpf, form, actionName, pageFlowFwd, flowController );
+                
+                if ( fwd != null )
+                {
+                    //
+                    // If the new (return-to) Forward specifies a redirect value explicitly, use that; otherwise
+                    // use the redirect value from the original Forward.
+                    //
+                    if ( pageFlowFwd.hasExplicitRedirectValue() )
+                    {
+                        fwd.setRedirect( pageFlowFwd.getRedirect() );
+                    }
+                    
+                    //
+                    // If there's a query string, override the previous query string.
+                    //
+                    String fwdPath = fwd.getPath();
+                    String newQueryString = pageFlowFwd.getQueryString();
+                    
+                    if ( newQueryString != null )
+                    {
+                        int existingQuery = fwdPath.indexOf( '?' );
+                        
+                        if ( existingQuery != -1 )
+                        {
+                            fwd.setPath( fwdPath.substring( 0, existingQuery ) + newQueryString );
+                        }
+                        else
+                        {
+                            fwd.setPath( fwdPath + newQueryString );
+                        }
+                    }
+                }
+                
+                if ( prevPageInfo != null )
+                {
+                    mapping = prevPageInfo.getMapping();
+                    
+                    if ( form == null )
+                    {
+                        form = prevPageInfo.getForm();
+                    }
+                }
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "return-to-page: " + ( fwd != null ? fwd.getPath() : "[null]" ) );
+                }
+            }
+            else if ( pageFlowFwd.isReturnToAction() )
+            {
+                isSpecialForward = true;
+                fwd = doReturnToAction( request, actionName, pageFlowFwd, servletContext, mapping );
+            }
+            
+            //
+            // See if we should pop the current PageFlowController (done nesting).
+            //
+            if ( pageFlowFwd.shouldPopPageFlow() )
+            {
+                isSpecialForward = true;
+                
+                PageFlowStack pfStack = PageFlowStack.get( request );
+                String exitAction = pageFlowFwd.getPath();
+                
+                if ( pfStack.isEmpty() )
+                {
+                    PageFlowController curJpf = InternalUtils.getCurrentPageFlow( request, false );
+                    
+                    if ( _log.isInfoEnabled() )
+                    {
+                        _log.info( "Tried to pop from empty PageFlow stack.  Current = "
+                                   + curJpf.getClass().getName() );
+                    }
+                    
+                    if ( _log.isWarnEnabled() )
+                    {
+                        StringBuffer msg = new StringBuffer( "Tried to pop from empty PageFlow stack." );
+                        msg.append( "  Current page flow is " );
+                        msg.append( curJpf != null ? curJpf.getClass().getName() : null );
+                        _log.warn( msg.append( '.' ).toString() );
+                    }
+                    
+                    throw new EmptyNestingStackException( exitAction, curJpf );
+                }
+                
+                PageFlowStack.PushedPageFlow pushedPageFlowWrapper = pfStack.pop( request );
+                PageFlowController poppedPageFlow = pushedPageFlowWrapper.getPageFlow();
+
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Popped PageFlowController " + poppedPageFlow + " from the nesting stack" );
+                }
+
+                InternalUtils.setCurrentPageFlow( poppedPageFlow, request );
+
+                
+                //
+                // If an ActionInterceptor forwarded to the nested page flow, give it a chance to
+                // determine the URI as the nested flow is returning.
+                //
+                ActionInterceptor interceptor = pushedPageFlowWrapper.getInterceptor();
+                
+                if ( interceptor != null )
+                {
+                    InterceptorForward interceptorForward = null;
+                    
+                    try
+                    {
+                        interceptorForward = interceptor.doPostIntercept( request, response, poppedPageFlow,
+                                                                          pushedPageFlowWrapper.getInterceptedForward(),
+                                                                          exitAction );
+                    }
+                    catch ( Exception e )
+                    {
+                        _log.error( "Exception in " + interceptor.getClass().getName() + ".doPostIntercept", e );
+                    }
+                    
+                    if ( interceptorForward != null )
+                    {
+                        if ( _log.isDebugEnabled() )
+                        {
+                            _log.debug( "post-intercept: forwarding to " + interceptorForward.getPath() );
+                        }
+                        
+                        interceptorForward.rehydrateRequest( request );
+                        ActionInterceptorChain.setIsReturningFromIntercept( request, true );
+                        return interceptorForward;
+                    }
+                }
+
+                //
+                // Raise the returned action on the popped pageflow.
+                //                    
+                assert exitAction.charAt( 0 ) != '/' : exitAction;
+
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Action on popped PageFlowController is " + exitAction );
+                }
+
+                StringBuffer exitActionPath = new StringBuffer( poppedPageFlow.getModulePath() );
+                if ( exitAction.charAt( 0 ) != '/' )
+                {
+                    exitActionPath.append( '/' );
+                }
+                exitActionPath.append( exitAction ).append( ACTION_EXTENSION );
+
+                //
+                // Forward out of this PageFlowController.
+                //
+                fwd = new ActionForward( exitActionPath.toString(), false );
+                fwd.setContextRelative( true );
+                
+                //
+                // Store the returned form in the request.
+                //
+                ActionForm retForm = pageFlowFwd.getFirstOutputForm( mapping, request );
+                
+                if ( retForm != null )
+                {
+                    request.setAttribute( RETURNING_FORM_ATTR_NAME, retForm );
+                }
+                
+                // @TODO 9.0 - delete this deprecated feature (following line)
+                request.setAttribute( RETURNING_FROM_NESTING_ATTR_NAME, Boolean.TRUE );
+            }
+
+            //
+            // Set ActionForms specified in the Forward.  Note that this overwrites any forms restored
+            // during return-to="page".
+            //
+            PageFlowUtils.setOutputForms( mapping, pageFlowFwd, request );
+            InternalUtils.addActionOutputs( pageFlowFwd.getActionOutputs() , request, true );
+        }
+
+        if ( _log.isDebugEnabled() )
+        {
+            if ( fwd != null )
+            {
+                if ( fwd.getRedirect() )
+                {
+                    _log.debug( "Redirecting to " + fwd.getPath() );
+                }
+                else
+                {
+                    _log.debug( "Forwarding to " + fwd.getPath() );
+                }
+            }
+            else
+            {
+                _log.debug( "null ActionForward -- not doing any forward or redirect." );
+            }
+        }
+        
+        //
+        // Save info on this forward for return-to="currentPage" or return-to="previousPage".  But, don't save
+        // the info if the current forward is a return-to="currentPage" -- we don't want this to turn into
+        // the page that's seen for *both* return-to="currentPage" and return-to="previousPage".
+        //
+        if ( ! isReturnToCurrentPage )
+        {
+            flowController.savePreviousPageInfo( fwd, form, mapping, request, servletContext, isSpecialForward );
+        }
+        
+        return fwd;
+    }
+    
+    /**
+     * Get an ActionForward to the original page that was visible before the previous action.
+     */
+    private static ActionForward doReturnToPage( HttpServletRequest request, PreviousPageInfo prevPageInfo,
+                                                 PageFlowController currentPageFlow, ActionForm currentForm,
+                                                 String actionName, Forward pageFlowFwd, FlowController flowController )
+    {
+        //
+        // Figure out what URI to return to, and set the original form in the request
+        // or session.
+        //        
+        if ( prevPageInfo != null )
+        {
+            ActionForward retFwd = prevPageInfo.getForward();
+            
+            //
+            // Restore any forms that are specified by this Forward (overwrite the original forms).
+            //
+            if ( retFwd instanceof Forward )
+            {
+                PageFlowUtils.setOutputForms( prevPageInfo.getMapping(),
+                                              ( Forward ) retFwd, request, false );
+                
+                InternalUtils.addActionOutputs( ( ( Forward ) retFwd ).getActionOutputs(), request, false );
+            }
+            
+            //
+            // If the currently-posted form is of the right type, initialize the page with
+            // that (but we won't overwrite the form that was set above).
+            //
+            if ( currentForm != null )
+            {
+                PageFlowUtils.setOutputForm( prevPageInfo.getMapping(), currentForm, request, false );
+            }
+            
+            //
+            // Initialize the page with the original form it got forwarded (but we won't overwrite the form
+            // that was set above).
+            //
+            if ( prevPageInfo.getMapping() != null )
+            {
+                InternalUtils.setFormInScope( prevPageInfo.getMapping().getName(),
+                                              prevPageInfo.getForm(),
+                                              prevPageInfo.getMapping(), request, false );
+            }
+                
+            //
+            // If we're forwarding to a page in a different pageflow, we need to make sure
+            // the returned ActionForward has the right module path, and that it has
+            // contextRelative=true.
+            //
+            if ( ! retFwd.getContextRelative() && flowController != currentPageFlow )
+            {
+
+                retFwd = new ActionForward( retFwd.getName(),
+                                            currentPageFlow.getModulePath() + retFwd.getPath(),
+                                            retFwd.getRedirect(),
+                                            true );
+
+            }
+            
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Return-to-page in PageFlowController " + flowController.getClass().getName()
+                           + ": original URI " + retFwd.getPath() );
+            }
+            
+            return retFwd;
+        }
+        
+        if ( _log.isInfoEnabled() )
+        {
+            _log.info( "Attempted return-to-page, but previous page info was missing." );
+        }
+        
+        throw new NoPreviousPageException( actionName, pageFlowFwd, currentPageFlow );
+    }
+    
+    private static ActionForward doReturnToAction( HttpServletRequest request, String actionName, Forward pageFlowFwd,
+                                                   ServletContext servletContext, ActionMapping mapping )
+    {
+        //
+        // We need access to _previousPageInfo from the *current PageFlow*.  That is
+        // most likely this FlowController, but if it's Global.app, then we don't want
+        // to use that.
+        //
+        PageFlowController curJpf = InternalUtils.getCurrentPageFlow( request, false );
+        
+        if ( curJpf == null )
+        {
+            throw new NoCurrentPageFlowException( actionName, pageFlowFwd );
+        }
+                        
+        PreviousActionInfo prevActionInfo = curJpf.getPreviousActionInfo();
+        
+        if ( prevActionInfo != null )
+        {
+            String actionURI = prevActionInfo.getActionURI();
+            
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "return-to-action: " + actionURI );
+            }
+
+            //
+            // If there's no form specified in this return-to-action forward, then use the original form that was saved
+            // in the action.  Only do this if we're not doing a redirect, which precludes request attributes.
+            //
+            if ( ! pageFlowFwd.isRedirect() && prevActionInfo.getForm() != null
+                 && pageFlowFwd.getFirstOutputForm( mapping, request ) == null )
+            {
+                pageFlowFwd.addOutputForm( prevActionInfo.getForm() );
+            }
+            
+            String query = pageFlowFwd.getQueryString();
+            if ( query == null )
+            {
+                query = "";
+            }
+            
+            //
+            // If the restoreQueryString attribute was set, use the query string from the original action URI.
+            //
+            boolean restoreQueryString = pageFlowFwd.restoreQueryString();
+            if ( restoreQueryString )
+            {
+                String prevQuery = prevActionInfo.getQueryString();
+                
+                if ( prevQuery != null )
+                {
+                    query += ( query.length() > 0 ? "&" : "?" ) + prevQuery;
+                }
+            }
+
+            ActionForward fwd = new ActionForward( actionURI + query, pageFlowFwd.getRedirect() );
+            fwd.setContextRelative( true );
+            return fwd;
+        }
+        else
+        {
+            if ( _log.isInfoEnabled() )
+            {
+                _log.info( "Attempted return-to-action, but previous action info was missing." );
+            }
+            
+            throw new NoPreviousActionException( actionName, pageFlowFwd, curJpf );
+        }
+    }
+    
+    static ActionForward processForward( Forward fwd, ActionMapping mapping, HttpServletRequest request,
+                                  HttpServletResponse response, ActionForm form, ServletContext servletContext,
+                                  FlowController flowController )
+    {
+        return forwardTo( fwd, mapping, request, response, PageFlowUtils.getActionName( mapping ), null, form,
+                          servletContext, flowController );
+    }
+    
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/GlobalApp.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/GlobalApp.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,147 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+
+/**
+ * Base class for user-defined global state and fallback controller logic.  A specific instance of
+ * this class (based on the Global.app source file in /WEB-INF/src/global) is created and stored in
+ * the user session before any {@link PageFlowController} is created, and unless it is explicitly
+ * removed from the session, it is not freed until the session is invalidated.
+ * <p>
+ * Actions that are not handled by the current {@link PageFlowController} "bubble" up to the
+ * current GlobalApp instance, which gets a chance to handle them in user-defined action methods.
+ * Uncaught exceptions also bubble through the GlobalApp instance, which has a chance to catch
+ * them.
+ * <p>
+ * Data in the current GlobalApp instance can be accessed by databinding tags using the
+ * <code>globalApp</code> scope.
+ * 
+ * @see PageFlowController
+ */
+public class GlobalApp
+        extends FlowController
+        implements PageFlowConstants
+{
+    /**
+     * Get the Struts module path for Global.app.
+     * 
+     * @return "/-global".
+     */ 
+    
+    public String getModulePath()
+    {
+        return GLOBALAPP_MODULE_CONTEXT_PATH;
+    }
+    
+    void persistInSession( HttpServletRequest request, HttpServletResponse response,
+                           ServletContext servletContext )
+    {
+        InternalUtils.setGlobalApp( this, request );
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public void reInit( ServletContext servletContext )
+    {
+        if ( getServlet() == null )
+        {
+            setServlet( InternalUtils.getActionServlet( servletContext ) );            
+        }
+    }
+
+    /**
+     * Ensures that any changes to this FlowController will be replicated in a cluster (for failover),
+     * even if the replication scheme uses a change-detection algorithm that relies on
+     * HttpSession.setAttribute to be aware of changes.
+     * 
+     * @param request the current HttpServletRequest
+     */
+    public void ensureFailover( HttpServletRequest request )
+    {
+        InternalUtils.getServerAdapter().ensureFailover( PageFlowUtils.GLOBALAPP_ATTR, this, request );
+    }
+
+    /**
+     * Get the URI for the webapp.
+     * @exclude
+     * @return "/".
+     */
+    public String getURI()
+    {
+        return "/";
+    }
+    
+    public String getDisplayName()
+    {
+        return GLOBALAPP_SOURCEFILE_NAME;
+    }
+    
+    PreviousPageInfo getPreviousPageInfoLegacy( PageFlowController curJpf, HttpServletRequest request )
+    {
+        assert curJpf != null;
+        return curJpf.getCurrentPageInfo();        
+    }
+    
+    /**
+     * Called from {@link FlowController#forwardTo}.
+     */ 
+    void savePreviousPageInfo( ActionForward forward, ActionForm form, ActionMapping mapping,
+                               HttpServletRequest request, ServletContext servletContext,
+                               boolean isSpecialForward )
+    {
+        //
+        // Special case: if the given forward has a path to a page in the current pageflow,
+        // let that pageflow save the info on this page.  Otherwise, don't ever save any
+        // info on what we're forwarding to.
+        //
+        if ( ! isSpecialForward && forward != null )   // i.e., if it's a straight Forward to a path, not a return-to="...", etc.
+        {
+            PageFlowController currentJpf = PageFlowUtils.getCurrentPageFlow( request );
+            
+            if ( currentJpf != null )
+            {
+                if ( forward.getContextRelative() && forward.getPath().startsWith( currentJpf.getModulePath() ) )
+                {
+                    currentJpf.savePreviousPageInfo( forward, form, mapping, request, servletContext,
+                                                     isSpecialForward );
+                }
+            }
+        }
+    }
+    
+    /**
+     * Remove this instance from the session.
+     */ 
+    protected void delete()
+    {
+        InternalUtils.deleteGlobalApp( getRequest() );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalActionOutputException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalActionOutputException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,102 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when an action output has been added to a Forward that resolves to a
+ * <code>@jpf:forward</code> marked <code>redirect="true"</code>. Action outputs may not be used on
+ * redirect forwards.
+ */ 
+public class IllegalActionOutputException extends PageFlowException
+{
+    private String _forwardName;
+    private String _actionOutputName;
+
+    
+    /**
+     * Constructor.
+     * 
+     * @param forwardName the name of the relevant {@link Forward}.
+     * @param actionName the name of the current action being run.
+     * @param flowController the current {@link FlowController} instance.
+     * @param actionOutputName the name of the relevant action output.
+     */ 
+    public IllegalActionOutputException( String forwardName, String actionName, FlowController flowController,
+                                         String actionOutputName )
+    {
+        super( actionName, flowController );
+        _forwardName = forwardName;
+        _actionOutputName = actionOutputName;
+    }
+
+    /**
+     * Get the name of the relevant {@link Forward}.
+     * 
+     * @return a String that is the name of the relevant {@link Forward}.
+     */ 
+    public String getForwardName()
+    {
+        return _forwardName;
+    }
+
+    /**
+     * Set the name of the relevant {@link Forward}.
+     * 
+     * @param forwardName a String that is the name of the relevant {@link Forward}.
+     */ 
+    public void setForwardName( String forwardName )
+    {
+        _forwardName = forwardName;
+    }
+
+    /**
+     * Get the name of the relevant action output.
+     * 
+     * @return a String that is the name of the relevant action output.
+     */ 
+    public String getActionOutputName()
+    {
+        return _actionOutputName;
+    }
+
+    /**
+     * Set the name of the relevant action output.
+     * 
+     * @param actionOutputName a String that is the name of the relevant action output.
+     */ 
+    public void setActionOutputName( String actionOutputName )
+    {
+        _actionOutputName = actionOutputName;
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ _forwardName, getActionName(), getFlowControllerURI(), _actionOutputName };
+    }
+
+    public String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "The forward \"", "\" on action ", " in page flow ", " has at least one action output (\"",
+            "\"), but is set to redirect=\"true\".  Action outputs may not be used on redirect forwards."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalOutputFormException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalOutputFormException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,86 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Base type for errors related to output forms on Forwards.
+ * 
+ * @see Forward#addOutputForm
+ */ 
+public abstract class IllegalOutputFormException extends PageFlowException
+{
+    private String _forwardName;
+    private String _outputFormType;
+
+    
+    /**
+     * @param forwardName the name of the relevant {@link Forward}.
+     * @param actionName the name of the current action being run.
+     * @param flowController the current {@link FlowController} instance.
+     * @param outputFormType the type name of the relevant output form.
+     */ 
+    public IllegalOutputFormException( String forwardName, String actionName, FlowController flowController,
+                                       String outputFormType )
+    {
+        super( actionName, flowController );
+        _forwardName = forwardName;
+        _outputFormType = outputFormType;
+    }
+
+    /**
+     * Get the name of the relevant {@link Forward}.
+     * 
+     * @return a String that is the name of the relevant {@link Forward}.
+     */ 
+    public String getForwardName()
+    {
+        return _forwardName;
+    }
+
+    /**
+     * Set the name of the relevant {@link Forward}.
+     * 
+     * @param forwardName a String that is the name of the relevant {@link Forward}.
+     */ 
+    public void setForwardName( String forwardName )
+    {
+        _forwardName = forwardName;
+    }
+
+    /**
+     * Get the type name of the relevant output form.
+     * 
+     * @return a String that is the type name of the relevant output form.
+     */ 
+    public String getOutputFormType()
+    {
+        return _outputFormType;
+    }
+
+    /**
+     * Set the type name of the relevant output form.
+     * 
+     * @param outputFormType a String that is the type name of the relevant output form.
+     */ 
+    public void setOutputFormType( String outputFormType )
+    {
+        _outputFormType = outputFormType;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalOutputFormTypeException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalOutputFormTypeException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when the first output form for a Forward resolves to a
+ * <code>@jpf:forward</code> whose <code>return-form</code> or <code>return-form-type</code>
+ * attribute demands a different form type.
+ * 
+ * @see Forward#addOutputForm
+ */ 
+public class IllegalOutputFormTypeException extends IllegalOutputFormException
+{
+    private String _requiredType;
+    
+    
+    /**
+     * @param forwardName the name of the relevant {@link Forward}.
+     * @param actionName the name of the current action being run.
+     * @param flowController the current {@link FlowController} instance.
+     * @param outputFormType the type name of the relevant output form.
+     * @param requiredType the name of the required form type.
+     */ 
+    public IllegalOutputFormTypeException( String forwardName, String actionName, FlowController flowController,
+                                           String outputFormType, String requiredType )
+    {
+        super( forwardName, actionName, flowController, outputFormType );
+        _requiredType = requiredType;
+    }
+
+    /**
+     * Get the name of the required form type.
+     * 
+     * @return a String that is the name of the required form type.
+     */ 
+    public String getRequiredType()
+    {
+        return _requiredType;
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ getForwardName(), getActionName(), getFlowControllerURI(), getOutputFormType(),
+                             _requiredType };
+    }
+
+    public String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "The forward \"", "\" on action ", " in page flow ", " has a first output form of type ",
+            ", but is declared to require type ", "."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalPageInputException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalPageInputException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when a action output has been added to a Forward that resolves to a
+ * <code>@jpf:forward</code> marked <code>redirect="true"</code>. Action outputs may not be used on
+ * redirect forwards.
+ * 
+ * @deprecated Use {@link IllegalActionOutputException} instead.
+ */ 
+public class IllegalPageInputException extends IllegalActionOutputException
+{
+    /**
+     * Constructor.
+     * 
+     * @param forwardName the name of the relevant {@link Forward}.
+     * @param actionName the name of the current action being run.
+     * @param flowController the current {@link FlowController} instance.
+     * @param actionOutputName the name of the relevant action output.
+     */ 
+    public IllegalPageInputException( String forwardName, String actionName, FlowController flowController,
+                                      String actionOutputName )
+    {
+        super( forwardName, actionName, flowController, actionOutputName );
+    }
+
+    /**
+     * Get the name of the relevant action output.
+     * 
+     * @return a String that is the name of the relevant action output.
+     */ 
+    public String getPageInputName()
+    {
+        return getActionOutputName();
+    }
+
+    /**
+     * Set the name of the relevant action output.
+     * 
+     * @param actionOutputName a String that is the name of the relevant action output.
+     */ 
+    public void setPageInputName( String actionOutputName )
+    {
+        setActionOutputName( actionOutputName );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalRedirectOutputFormException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/IllegalRedirectOutputFormException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when an output form has been added to a Forward that resolves to a
+ * <code>@jpf:forward</code> marked <code>redirect="true"</code>. Output forms may not be used on
+ * redirect forwards.
+ * 
+ * @see Forward#addOutputForm
+ */ 
+public class IllegalRedirectOutputFormException extends IllegalOutputFormException
+{
+    /**
+     * @param forwardName the name of the relevant {@link Forward}.
+     * @param actionName the name of the current action being run.
+     * @param flowController the current {@link FlowController} instance.
+     * @param outputFormType the type name of the relevant output form.
+     */ 
+    public IllegalRedirectOutputFormException( String forwardName, String actionName, FlowController flowController,
+                                               String outputFormType )
+    {
+        super( forwardName, actionName, flowController, outputFormType );
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ getForwardName(), getActionName(), getFlowControllerURI(), getOutputFormType() };
+    }
+
+    public String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "The forward \"", "\" on action ", " in page flow ", " has at least one output form (type ",
+            "), but is set to redirect=\"true\". Output forms may not be used on redirect forwards."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/InfiniteReturnToActionException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/InfiniteReturnToActionException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when the user invokes an action that is qualified with a
+ * <code>@jpf:forward return-to="previousAction"</code> annotation, but the previous action
+ * was the same as the current action (an infinite loop).
+ */ 
+public class InfiniteReturnToActionException extends PageFlowException
+{
+    public InfiniteReturnToActionException( String actionName, FlowController fc )
+    {
+        super( actionName, fc );
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ getActionName(), getFlowControllerURI() };
+    }
+
+    protected String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "Infinite loop of returnTo=\"action\" for action ",
+            " in Page Flow ",
+            "."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/LoginExpiredException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/LoginExpiredException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception thrown when {@link NotLoggedInException} would be thrown, <i>and</i> when the
+ * current HttpServletRequest refers to a session that no longer exists.
+ */ 
+public class LoginExpiredException extends NotLoggedInException
+{    
+    public LoginExpiredException( String actionName, FlowController fc )
+    {
+        super( actionName, fc );
+    }
+    
+    public String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "Action ",
+            " on Page Flow ",
+            " requires a current user, but there is no logged-in user.  This may be due to an expired session."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MismatchedActionOutputException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MismatchedActionOutputException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+/**
+ * Exception that occurs in iterative development mode when an action output attached to a {@link Forward} is of a
+ * different type than was declared.
+ */ 
+public class MismatchedActionOutputException extends PageFlowException
+{
+    private String _actionOutputName;
+    private String _expectedType;
+    private String _actualType;
+    private String _forwardName;
+
+    public MismatchedActionOutputException( String actionName, FlowController flowController, String actionOutputName,
+                                            String forwardName, String expectedType, String actualType )
+    {
+        super( actionName, flowController );
+        _actionOutputName = actionOutputName;
+        _expectedType = expectedType;
+        _actualType = actualType;
+        _forwardName = forwardName;
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ _actionOutputName, _forwardName, getActionName(), getFlowControllerURI(), _actualType,
+                             _expectedType };
+    }
+
+    protected String[] getMessageParts()
+    {
+        return new String[]{ "The action output \"", "\" on forward \"", "\" (action ", " in Page Flow ", ") is of type ",
+                             ", but was declared to expect type ", "." };
+    }
+
+    public String getActionOutputName()
+    {
+        return _actionOutputName;
+    }
+
+    public String getForwardName()
+    {
+        return _forwardName;
+    }
+
+    public String getExpectedType()
+    {
+        return _expectedType;
+    }
+
+    public String getActualType()
+    {
+        return _actualType;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MismatchedPageInputException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MismatchedPageInputException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs in iterative development mode when an action output attached to a {@link Forward} is of a
+ * different type than was declared.
+ *
+ * @deprecated Use {@link MismatchedActionOutputException} instead.
+ */ 
+public class MismatchedPageInputException
+        extends MismatchedActionOutputException
+{
+    public MismatchedPageInputException( String actionName, FlowController flowController, String actionOutputName,
+                                            String forwardName, String expectedType, String actualType )
+    {
+        super( actionName, flowController, actionOutputName, forwardName, expectedType, actualType );
+    }
+
+    public String getPageInputName()
+    {
+        return getActionOutputName();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MissingActionOutputException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MissingActionOutputException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when a required action output is missing from a {@link Forward}.
+ */ 
+public class MissingActionOutputException
+        extends PageFlowException
+{
+    private String _actionOutputName;
+    private String _forwardName;
+
+    public MissingActionOutputException( String actionName, FlowController flowController, String actionOutputName,
+                                         String forwardName )
+    {
+        super( actionName, flowController );
+        _actionOutputName = actionOutputName;
+        _forwardName = forwardName;
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ _actionOutputName, _forwardName, getActionName(), getFlowControllerURI() };
+    }
+
+    protected String[] getMessageParts()
+    {
+        return new String[]{ "The required action output \"", "\" was not present on forward \"",
+                             "\" (action ", " in Page Flow ", ")." };
+    }
+
+    public String getActionOutputName()
+    {
+        return _actionOutputName;
+    }
+
+    public String getForwardName()
+    {
+        return _forwardName;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MissingPageInputException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MissingPageInputException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that occurs when a required page input is missing from a {@link Forward}.
+ *
+ * @deprecated Use {@link MissingActionOutputException} instead.
+ */ 
+public class MissingPageInputException
+        extends MissingActionOutputException
+{
+    public MissingPageInputException( String actionName, FlowController flowController, String actionOutputName,
+                                      String forwardName )
+    {
+        super( actionName, flowController, actionOutputName, forwardName );
+    }
+
+    public String getPageInputName()
+    {
+        return getActionOutputName();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MultipartRequestUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/MultipartRequestUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,342 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+// java imports
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletException;
+import javax.servlet.ServletContext;
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+// external imports
+import org.apache.struts.Globals;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionServletWrapper;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.upload.MultipartRequestHandler;
+import org.apache.struts.upload.MultipartRequestWrapper;
+import org.apache.struts.util.RequestUtils;
+
+/**
+ * <p>
+ * NetUI utility to wrap Struts logic for handling multipart requests.
+ * </p>
+ *
+ * @exclude
+ */
+/* package */ class MultipartRequestUtils
+{
+    private static final Logger _log = Logger.getInstance(MultipartRequestUtils.class);
+    
+    private static final String PREHANDLED_MULTIPART_REQUEST_ATTR = MultipartRequestUtils.class.getName()
+                                                                    + "_prehandledMultipart";
+    
+    /**
+     * <p>
+     * Handle a multipart request.  The return value of this method will be <code>null</code>
+     * if the following conditions are not satisfied:
+     * <ol>
+     * <li>request.getContentType() != null</li>
+     * <li>content type is "multipart/form-data"</li>
+     * <li>request method is "POST"</li>
+     * </ol>
+     * If these are satisfied, a Struts {@link MultipartRequestHandler} is created.  This object is used
+     * to provide a mapping over both the regular {@link HttpServletRequest} parameters and the 
+     * paramters that Struts creates to represent the file(s) that was uploaded.  If file(s) were 
+     * uploaded, the {@link java.util.Map} returned has key / value pairs of these two structures:
+     * <ul>
+     * <li><code>String / String[]</code></li>
+     * <li><code>String / {@link org.apache.commons.fileupload.FileItem}</code></li>
+     * </ul>
+     * <br/>
+     * Invokers of this method should be aware that in this case, not all types returned from 
+     * what looks like <code>request.getParameterValues(String key)</code> will be <code>String[]</code>.
+     * </p>
+     *
+     * @param request the request object
+     * @param bean the current action's associated {@link ActionForm}
+     * @return <code>null</code> if the request is <i>not</i> multipart.  Otherwise, a {@link java.util.Map} 
+     * is returned that contains the key / value pairs of the parameters in the request and the uploaded
+     * files.
+     * @throws ServletException if an error occurs loading this file.  These exception messages
+     * are not internationalized as Struts does not internationalize them either.
+     */
+    /* package */ static final Map handleMultipartRequest(HttpServletRequest request, ActionForm bean)
+        throws ServletException
+    {
+        String contentType = request.getContentType();
+        String method = request.getMethod();
+        boolean isMultipart = false;
+
+        Map multipartParameters = null;
+
+        if(contentType != null &&
+           contentType.startsWith("multipart/form-data") &&
+           method.equalsIgnoreCase("POST"))
+        {
+            ActionServletWrapper servlet;
+            
+            if (bean != null)
+            {
+                servlet = bean.getServletWrapper();
+            }
+            else
+            {
+                ServletContext servletContext = InternalUtils.getServerAdapter().getServletContext(request);
+                servlet = new ActionServletWrapper(InternalUtils.getActionServlet(servletContext));
+            }
+            
+            // @struts: does this -- but we can't rely on the bean not being null.
+            // if(bean instanceof ActionForm)
+            //     servlet = bean.getServletWrapper();
+            // else if ( ! ( bean instanceof ActionForm ) )
+            //     throw new ServletException
+            //         ("bean that's supposed to be populated from a multipart request is not of type " + 
+            //          "\"org.apache.struts.action.ActionForm\", but type \"" + bean.getClass().getName() + "\"");
+            
+            MultipartRequestHandler multipartHandler = getCachedMultipartHandler(request);
+            boolean preHandled = false;
+            
+            if (multipartHandler == null)
+            {
+                multipartHandler = MultipartRequestUtils.getMultipartHandler(request);
+            }
+            else
+            {
+                preHandled = true;
+            }
+            
+            if (bean != null)
+            {
+                bean.setMultipartRequestHandler(multipartHandler);
+            }
+            
+            if(multipartHandler != null)
+            {
+                isMultipart = true;
+                
+                servlet.setServletFor(multipartHandler);
+                multipartHandler.setMapping((ActionMapping)request.getAttribute(Globals.MAPPING_KEY));
+                
+                if (! preHandled)
+                {
+                    multipartHandler.handleRequest(request);
+                }
+                
+                Boolean maxLengthExceeded = (Boolean)request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
+                if(maxLengthExceeded != null && maxLengthExceeded.booleanValue())
+                {
+                    // bail from RequestUtils.processPopulate
+                    // @struts: semantics -- if this check fails, no values are updated into the form
+                    return null;
+                }
+                multipartParameters = MultipartRequestUtils.getAllParametersForMultipartRequest(request, multipartHandler);
+
+                // @struts: does this
+                //names = Collections.enumeration(multipartParameters.keySet());
+            }
+        }
+
+        if(!isMultipart)
+        {
+            // @struts: does this -- NetUI does not so that the ProcessPopulate method can be made faster; this way,
+            // ProcessPopulate doesn't care whether this is a MultipartRequest or not; it can just talk to a Map
+            // to get key / value pairs.
+            //names = request.getParameterNames();
+            return null;
+        }
+        else
+        {
+            ScopedRequest scopedRequest = ScopedServletUtils.unwrapRequest( PageFlowUtils.unwrapMultipart( request ) );
+            
+            if ( scopedRequest != null )
+            {
+                multipartParameters = scopedRequest.filterParameterMap( multipartParameters );
+            }
+            return multipartParameters; 
+        }
+    }
+
+    /**
+     * Can be called early in the request processing cycle to cache a single multipart handler for the request.
+     */
+    static void preHandleMultipartRequest(HttpServletRequest request)
+        throws ServletException
+    {
+        MultipartRequestHandler multipartHandler = getCachedMultipartHandler(request);
+        
+        if (multipartHandler == null)
+        {
+            multipartHandler = getMultipartHandler(request);
+            
+            if(multipartHandler != null)
+            {
+                //
+                // Run the request through the handler, and cache the handler in the outer request.
+                //
+                multipartHandler.handleRequest(request);
+                HttpServletRequest outerRequest =
+                    ScopedServletUtils.getOuterRequest(PageFlowUtils.unwrapMultipart(request));
+                outerRequest.setAttribute(PREHANDLED_MULTIPART_REQUEST_ATTR, multipartHandler );
+            }
+        }
+    }
+    
+    /**
+     * Create an implementation of a {@link MultipartRequestHandler} for this
+     * mulitpart request.
+     *
+     * @param request the current request object
+     * @return the handler
+     * @throws ServletException if an error occurs loading this file.  These exception messages
+     * are not internationalized as Struts does not internationalize them either.
+     */
+    // @Struts: org.apache.struts.util.RequestUtils.getMultipartHandler
+    private static final MultipartRequestHandler getMultipartHandler(HttpServletRequest request)
+        throws ServletException
+    {
+        MultipartRequestHandler multipartHandler = null;
+        String multipartClass = (String) request.getAttribute(Globals.MULTIPART_KEY);
+        request.removeAttribute(Globals.MULTIPART_KEY);
+
+        // Try to initialize the mapping specific request handler
+        if (multipartClass != null) {
+            try {
+                multipartHandler = (MultipartRequestHandler)RequestUtils.applicationInstance(multipartClass);
+            } catch (ClassNotFoundException cnfe) {
+                _log.error(
+                    "MultipartRequestHandler class \""
+                        + multipartClass
+                        + "\" in mapping class not found, "
+                        + "defaulting to global multipart class");
+            } catch (InstantiationException ie) {
+                _log.error(
+                    "InstantiaionException when instantiating "
+                        + "MultipartRequestHandler \""
+                        + multipartClass
+                        + "\", "
+                        + "defaulting to global multipart class, exception: "
+                        + ie.getMessage());
+            } catch (IllegalAccessException iae) {
+                _log.error(
+                    "IllegalAccessException when instantiating "
+                        + "MultipartRequestHandler \""
+                        + multipartClass
+                        + "\", "
+                        + "defaulting to global multipart class, exception: "
+                        + iae.getMessage());
+            }
+
+            if (multipartHandler != null)
+                return multipartHandler;
+        }
+
+        ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
+        multipartClass = moduleConfig.getControllerConfig().getMultipartClass();
+
+        // Try to initialize the global request handler
+        if (multipartClass != null) {
+            try {
+                multipartHandler = (MultipartRequestHandler) RequestUtils.applicationInstance(multipartClass);
+            } catch (ClassNotFoundException cnfe) {
+                throw new ServletException(
+                    "Cannot find multipart class \""
+                        + multipartClass
+                        + "\""
+                        + ", exception: "
+                        + cnfe.getMessage());
+            } catch (InstantiationException ie) {
+                throw new ServletException(
+                    "InstantiaionException when instantiating "
+                        + "multipart class \""
+                        + multipartClass
+                        + "\", exception: "
+                        + ie.getMessage());
+            } catch (IllegalAccessException iae) {
+                throw new ServletException(
+                    "IllegalAccessException when instantiating "
+                        + "multipart class \""
+                        + multipartClass
+                        + "\", exception: "
+                        + iae.getMessage());
+            }
+
+            if (multipartHandler != null)
+                return multipartHandler;
+        }
+
+        return multipartHandler;
+    }
+
+    /**
+     * Get a {@link java.util.Map} object that reprensents the request parameters for 
+     * a multipart request.  As described in {@link #handleMultipartRequest}, the 
+     * Map returned here may contain either String[] or FileItem values.  The former
+     * are regular request parameters and the latter are the Struts abstraction
+     * on top of an uploaded file
+     *
+     * @param request the request
+     * @param multipartHandler the multipart handler for this request
+     * @return a Map of the key / value pairs of parameters in this request and object
+     * representations of the uploaded files.
+     */
+    // @Struts: org.apache.struts.util.RequestUtils.getAllParametrsForMultipartRequest
+    private static final Map getAllParametersForMultipartRequest(HttpServletRequest request, MultipartRequestHandler multipartHandler)
+    {
+        Map parameters = new HashMap();
+        Enumeration e;
+
+        Hashtable elements = multipartHandler.getAllElements();
+        e = elements.keys();
+        while (e.hasMoreElements()) {
+            String key = (String) e.nextElement();
+            parameters.put(key, elements.get(key));
+        }
+
+        if (request instanceof MultipartRequestWrapper) {
+            request = ((MultipartRequestWrapper)request).getRequest();
+            e = request.getParameterNames();
+            while (e.hasMoreElements()) {
+                String key = (String) e.nextElement();
+                parameters.put(key, request.getParameterValues(key));
+            }
+        } else {
+            _log.debug("Gathering multipart parameters for unwrapped request");
+        }
+
+        return parameters;
+    }
+    
+    static MultipartRequestHandler getCachedMultipartHandler( HttpServletRequest request )
+    {
+        HttpServletRequest req = ScopedServletUtils.getOuterRequest( PageFlowUtils.unwrapMultipart( request ) );
+        return ( MultipartRequestHandler ) req.getAttribute( MultipartRequestUtils.PREHANDLED_MULTIPART_REQUEST_ATTR );    
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoCurrentPageFlowException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoCurrentPageFlowException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.pageflow.internal.ReturnToException;
+
+
+/**
+ * Action that occurs when the user invokes an action that is qualified with either a
+ * <code>@jpf:forward return-to="previousAction"</code> or <code>return-to="previousPage"</code>,
+ * but there is no current page flow. This happens in iterative development mode when you have
+ * modified files and caused the web application to be redeployed, or when the session expires.
+ */ 
+public class NoCurrentPageFlowException extends ReturnToException
+{
+    public NoCurrentPageFlowException( String actionName, Forward fwd )
+    {
+        super( actionName, fwd, null );
+    }
+
+    protected String[] getMessageParts()
+    {
+        return new String[]{ "No current page flow for return-to=\"", "\" on action ", "." };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoMatchingActionMethodException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoMatchingActionMethodException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.util.Bundle;
+
+
+/**
+ * Exception that occurs when the current action method does not accept the type of form passed in the Forward
+ * to the action. This may happen when the user returned to the calling page flow, from a nested page flow,
+ * with a specified form (<code>@jpf:forward return-form="</code><i>form-name</i><code>"</code> or
+ * <code>return-form-type="</code><i>form-type</i><code>"</code>, but no action in the calling page flow
+ * accepts that form type.
+ */ 
+public class NoMatchingActionMethodException extends PageFlowException
+{
+    private String _formClassName;
+    
+    
+    public NoMatchingActionMethodException( String actionName, Object form, FlowController fc )
+    {
+        super( actionName, fc );
+        _formClassName =
+                form != null ? form.getClass().getName() : Bundle.getString( "PageFlow_NoFormString" );
+    }
+
+    public String getFormClassName()
+    {
+        return _formClassName;
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ getActionName(), _formClassName, getFlowControllerURI() };
+    }
+
+    protected String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "Could not find matching action method for action=", ", form=", " on Page Flow ", "."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoPreviousActionException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoPreviousActionException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.pageflow.internal.ReturnToException;
+
+
+/**
+ * Exception that occurs when the user attempts to execute an action marked with the <code>@jpf:forward
+ * return-to="previousAction"</code> annotation, but there is no previously-run action.  For example,
+ * this could happen if the <code>begin</code> action returns a <code>@jpf:forward</code> marked
+ * <code>return-to="previousAction"</code>.
+ */ 
+public class NoPreviousActionException extends ReturnToException
+{
+    public NoPreviousActionException( String actionName, Forward fwd, FlowController fc )
+    {
+        super( actionName, fwd, fc );
+    }
+
+    protected String[] getMessageParts()
+    {
+        return new String[]{ "No previous action for return-to=\"", "\" on action ", " in page flow ", "." };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoPreviousPageException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NoPreviousPageException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.pageflow.internal.ReturnToException;
+
+
+/**
+ * Exception that occurs when the user attempts to execute an action marked with the
+ * <code>@jpf:forward return-to="previousPage"</code> annotation, but there is no previous page in
+ * the current page flow. This could happen if the <code>begin</code> action returns a
+ * <code>@jpf:forward marked return-to="currentPage"</code>.
+ */ 
+public class NoPreviousPageException extends ReturnToException
+{
+    public NoPreviousPageException( String actionName, Forward fwd, FlowController fc )
+    {
+        super( actionName, fwd, fc );
+    }
+
+    protected String[] getMessageParts()
+    {
+        return new String[]{ "No previous page for return-to=\"", "\" on action ", " in page flow ", "." };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NotLoggedInException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/NotLoggedInException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception thrown when:
+ *     <ul>
+ *         <li>An action method marked with <code>@jpf:action login-required="true"</code> is hit
+ *             when there is no logged-in user, or</li>
+ *         <li>An action method marked with <code>@jpf:action roles-allowed="</code><i>roles</i><code>"
+ *             </code> is hit when there is no logged-in user.</li>
+ *     </ul>
+ * If the requested session-ID is different than the current session-ID, the {@link LoginExpiredException}
+ * will be thrown instead of the <code>NotLoggedInException</code>.
+ */ 
+public class NotLoggedInException extends PageFlowException
+{
+    /**
+     * Construct with no error message.
+     */ 
+    public NotLoggedInException( String actionName, FlowController fc )
+    {
+        super( actionName, fc );
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ getActionName(), getFlowControllerURI() };
+    }
+
+    public String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "Action ", " on Page Flow ", " requires a current user, but there is no logged-in user."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,138 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletConfig;
+import java.io.Serializable;
+
+
+/**
+ * ActionServlet that dynamically registers modules based on naming/location conventions for Struts
+ * configuration files that are generated by the Page Flow compiler.  These files are located in
+ * /WEB-INF/.pageflow-struts-generated, and are named jpf-struts-config-<i>module-name</i>.xml.
+ * The user may specify additional {@link ModuleConfigLocator} classes in web.xml, using the
+ * "moduleConfigLocators" init-parameter; this allows the user to define other patterns for
+ * auto-registered Struts modules.
+ */
+public class PageFlowActionServlet extends AutoRegisterActionServlet
+{
+    private static final ModuleConfigLocator[] DEFAULT_MODULE_CONFIG_LOCATORS =
+            {
+                new DefaultModuleConfigLocator(),
+                new LegacyModuleConfigLocator()
+            };
+    
+    
+    /**
+     * Get the base list of ModuleConfigLocators, to specify locations for auto-registered Struts modules.  By default,
+     * this ActionServlet auto-registers Struts modules whose configuration files are located at
+     * "/WEB-INF/.pageflow-struts-generated/jpf-struts-config-<i>&lt;module&gt;</i>".  Overriding this method allows
+     * alternate locations to be specified.  When an unrecognized Struts module is requested, each registered
+     * ModuleConfigLocator is queried for a possible path to the configuration file for the module.  If the
+     * configuration file is found, the module is auto-registered against the file.
+     */
+    protected ModuleConfigLocator[] getDefaultModuleConfigLocators()
+    {
+        return DEFAULT_MODULE_CONFIG_LOCATORS;
+    }
+    
+    /**
+     * Default ModuleConfigLocator that looks for Struts module configuration files according to the pattern
+     * "/WEB-INF/.pageflow-struts-generated/jpf-struts-config-<i>&lt;module&gt;</i>".  An instance of this class
+     * is registered by default.
+     * 
+     * @see PageFlowActionServlet#getDefaultModuleConfigLocators
+     */ 
+    public static class DefaultModuleConfigLocator implements ModuleConfigLocator, Serializable
+    {
+        public String getModuleConfigPath( String moduleName )
+        {
+            StringBuffer moduleConfPath = new StringBuffer( getGenDir() );
+            moduleConfPath.append( '/' ).append( PageFlowConstants.JPF_MODULE_CONFIG_PREFIX );
+            
+            if ( moduleName.length() > 1 )
+            {
+                moduleConfPath.append( moduleName.replace( '/', '-' ) );
+            }
+            
+            moduleConfPath.append( PageFlowConstants.JPF_MODULE_CONFIG_EXTENSION );
+            return moduleConfPath.toString();
+        }
+        
+        protected String getGenDir()
+        {
+            return PageFlowConstants.JPF_MODULE_CONFIG_GEN_DIR;
+        }
+    }
+    
+    /**
+     * ModuleConfigLocator that looks for legacy Struts module configuration files according to the pattern
+     * "/WEB-INF/jpf-struts-config-<i>&lt;module&gt;</i>".  An instance of this class is registered by default.
+     * 
+     * @see PageFlowActionServlet#getDefaultModuleConfigLocators
+     */ 
+    protected static class LegacyModuleConfigLocator extends DefaultModuleConfigLocator
+    {
+        protected String getGenDir()
+        {
+            return PageFlowConstants.WEBINF_DIR;
+        }
+    }
+
+    public void init( ServletConfig config )
+            throws ServletException
+    {
+        super.init( config );
+        
+        //
+        // Ensure that PageFlowContextListener gets to do its initializations, even if it's not registered
+        // in web.xml.
+        //
+        PageFlowContextListener.performInitializations( config.getServletContext() );
+    }
+
+    /**
+     * Get the webapp-relative path to the Struts module configration file for a given module path.  By default,
+     * this is "/WEB-INF/.pageflow-struts-generated/jpf-struts-config-<i>&lt;module&gt;</i>", but alternate
+     * locations can be specified by adding {@link ModuleConfigLocator}s.  
+     * 
+     * @param modulePath the Struts module path.
+     * @return a String that is the path to the Struts configuration file, relative to the web application root.
+     * @see #getDefaultModuleConfigLocators
+     */ 
+    public String getModuleConfPath( String modulePath )
+    {
+        return super.getModuleConfPath( modulePath );
+    }
+    
+    /**
+     * Struts keeps track of the action servlet URL pattern (e.g., *.do) so it can construct action
+     * URIs.  We want to prevent it from noticing *.jpf so it doesn't use that to construct the URIs.
+     * 
+     * @exclude
+     */ 
+    public void addServletMapping( String servletName, String urlPattern )
+    {
+        if ( ! urlPattern.endsWith( PageFlowConstants.JPF_EXTENSION ) )
+        {
+            super.addServletMapping( servletName, urlPattern );
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowConstants.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowConstants.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,125 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+/**
+ * Constants related to Page Flows.
+ */ 
+public interface PageFlowConstants
+{
+    /**
+     * The name of the special action in a user-defined {@link PageFlowController} (.jpf) that is
+     * processed when the URI for the .jpf is accessed.
+     */ 
+    public static final String BEGIN_ACTION_NAME = "begin";
+    
+    /**
+     * The file extension for user-defined {@link PageFlowController} source files.
+     */ 
+    public static final String JPF_EXTENSION = ".jpf";
+    
+    /**
+     * The extension for Struts action URIs used with page flows.
+     */ 
+    public static final String ACTION_EXTENSION = ".do";
+    
+    /**
+     * The name of the {@link GlobalApp} class defined by the user for a web application.
+     */ 
+    public static final String GLOBALAPP_CLASSNAME = "global.Global";
+    
+    /**
+     * The name of the source file for the {@link GlobalApp} class defined by the user for a
+     * web application.
+     */ 
+    public static final String GLOBALAPP_SOURCEFILE_NAME = "Global.app";
+    
+    /**
+     * The filename prefix for Struts module configuration files generated by the page flow
+     * compiler.
+     */ 
+    public static final String JPF_MODULE_CONFIG_PREFIX = "jpf-struts-config";
+
+    /**
+     * The file extensionfor Struts configuration files generated by the Page Flow compiler.
+     */ 
+    public static final String JPF_MODULE_CONFIG_EXTENSION = ".xml";
+
+    /**
+     * The prefix for a button or imageButton that has an action.
+     */
+    public static final String ACTION_OVERRIDE = "actionOverride:";
+
+    /**
+     * Servlet context-param that configures the maximum number of consecutive server forwards before error.
+     */ 
+    public static final String FORWARD_OVERFLOW_COUNT_PARAM = "jpf-forward-overflow-count";
+    
+    /**
+     * Servlet context-param that configures the maximum size of the page flow nesting stack.
+     */ 
+    public static final String NESTING_OVERFLOW_COUNT_PARAM = "jpf-nesting-overflow-count";
+    
+    /**
+     * The default maximum number of consecutive server forwards before error.
+     */ 
+    public static final int DEFAULT_FORWARD_OVERFLOW_COUNT = 50;
+    
+    /**
+     * The default maximum size of the page flow nesting stack.
+     */ 
+    public static final int DEFAULT_NESTING_OVERFLOW_COUNT = 25;
+
+    /**
+     * Servlet context-param that configures a {@link HttpRedirector}-derived class to instantiate to handle
+     * forwards and redirects.
+     */ 
+    public static final String HTTP_REDIRECTOR_PARAM = "jpf-http-redirector";
+    
+    /**
+     * Servlet context-param that configures a {@link LoginHandler}-derived class to instantiate to handle
+     * user logins.
+     */ 
+    public static final String LOGIN_HANDLER_PARAM = "jpf-login-handler";
+    
+    /**
+     * Servlet context-param that configures whether to apply security constraints on server forwards to page
+     * flow actions.  Normally, security constraints are not applied on server forwards.
+     */ 
+    public static final String SECURE_FORWARDS_PARAM = "jpf-secure-forwards";
+    
+    static final String INTERNAL_VAR_PREFIX = "_netui:";
+    static final int    ACTION_EXTENSION_LEN = ACTION_EXTENSION.length();
+    static final String GLOBALAPP_MODULE_CONTEXT_PATH = "/-global";
+    static final String GLOBALAPP_MEMBER_NAME = "globalApp";
+    static final String WEBINF_DIR = "/WEB-INF";
+    static final String BEGIN_ACTION_PATH = "/" + BEGIN_ACTION_NAME;
+    static final String RETURNING_FORM_ATTR_NAME = FlowController.class.getName() + "_returningForm";
+    static final String RETURNING_FROM_NESTING_ATTR_NAME = FlowController.class.getName() + "_nestedReturning";
+    static final String CURRENT_JPF_ATTR = PageFlowUtils.class.getName() + "_currentPageFlow";
+    static final String CURRENT_SINGLETON_ATTR = PageFlowUtils.class.getName() + "_currentSingletonModule";
+    static final String GLOBALAPP_ATTR = PageFlowUtils.class.getName() + "_globalApp";
+
+    /**
+     * The webapp-relative directory for Struts module configuration files generated by the
+     * page flow compiler.
+     */ 
+    public static final String JPF_MODULE_CONFIG_GEN_DIR = WEBINF_DIR + "/.pageflow-struts-generated";
+    
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+//java imports
+
+//internal imports
+import org.apache.beehive.netui.pageflow.util.UrlTemplateDescriptor;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.ConfigInitializationException;
+import org.apache.beehive.netui.util.logging.Logger;
+
+//external imports
+import javax.servlet.ServletContextListener;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContext;
+import java.io.InputStream;
+import java.io.IOException;
+
+
+/**
+ * Performs various initialization at ServletContext-init time.
+ */ 
+public class PageFlowContextListener implements ServletContextListener
+{
+    private static final String CONFIG_FILE = "/WEB-INF/netui-config.xml";
+    private static final Logger _log = Logger.getInstance( PageFlowContextListener.class );
+    
+    
+    public void contextInitialized(ServletContextEvent event)
+    {
+        performInitializations( event.getServletContext() );
+    }
+
+    public void contextDestroyed( ServletContextEvent event )
+    {
+    }
+    
+    static void performInitializations( ServletContext servletContext )
+    {
+        //
+        // Callback to the server adapter.
+        //
+        InternalUtils.getServerAdapter().initServletContext( servletContext );
+        
+        try
+        {
+            InputStream configInput = servletContext.getResourceAsStream( CONFIG_FILE );
+            
+            try
+            {
+                ConfigUtil.init( configInput );
+            }
+            finally
+            {
+                try
+                {
+                    if ( configInput != null ) configInput.close();
+                }
+                catch ( IOException e )
+                {
+                    if ( _log.isErrorEnabled() )
+                    {
+                        _log.error( "Could not close input for " + CONFIG_FILE );
+                    }
+                }
+            }
+        }
+        catch ( ConfigInitializationException e )
+        {
+            _log.error( "Could not initialize from " + CONFIG_FILE, e );
+        }
+        
+        ContextCache.init( servletContext );
+        UrlTemplateDescriptor.getInstance().load( servletContext );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,754 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.ServletContext;
+import java.lang.reflect.Field;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ControllerConfig;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.FileUtils;
+import org.apache.beehive.netui.util.cache.ClassLevelCache;
+import org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig;
+import org.apache.beehive.netui.pageflow.internal.CachedPageFlowInfo;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+
+
+/**
+ * Base class for user-defined state and controller logic associated with a particular web
+ * application directory.  The source code for this class lives in the directory with a ".jpf"
+ * extension, and is automatically recompiled by the server whenever necessary.  When a request
+ * arrives for any ".jpf", ".jsp", or ".do" in the directory, an instance of the PageFlowController
+ * class is set as the <i>current page flow</i>, and remains in the session until a different
+ * one becomes active.
+ * <p>
+ * The user's PageFlowController class handles <i>actions</i> that are most commonly raised by
+ * user interaction with JSP files.  The actions are handled by <i>action methods</i> that
+ * perform arbitrary logic and determine the next URI to be displayed.
+ * <p>
+ * Actions that are not handled by the current PageFlowController "bubble" up to the current
+ * {@link GlobalApp} instance.
+ * <p>
+ * Data in the current PageFlowController instance can be accessed by databinding tags using the
+ * <code>pageFlow</code> scope.
+ * 
+ * @see GlobalApp
+ */
+public abstract class PageFlowController
+        extends FlowController
+{
+    /**
+     * A 'return-to="page"' forward brings the user back to the previous page. This object
+     * stores information about the current state of affairs, such as the origin URI and
+     * its ActionForm.
+     */
+    private PreviousPageInfo _previousPageInfo = null;
+    private PreviousPageInfo _currentPageInfo = null;
+    
+    /**
+     * A 'return-to="action"' forward reruns the previous action. This object stores the previous
+     * action URI and its ActionForm.
+     */
+    private PreviousActionInfo  _previousActionInfo;
+    
+    private boolean _isOnNestingStack = false;
+    
+    private static final String DELETING_PAGEFLOW_ATTR = PageFlowController.class.getName() + "_deleting";
+    private static final String CACHED_INFO_KEY = "cachedInfo";
+    private static final Logger _log = Logger.getInstance( PageFlowController.class );
+  
+    
+    /**
+     * Default constructor.
+     */ 
+    public PageFlowController()
+    {
+    }
+    
+    /**
+     * Get the Struts module path for this page flow.
+     * 
+     * @return a String that is the Struts module path for this controller, and which is also
+     *         the directory path from the web application root to this PageFlowController
+     *         (not including the action filename).
+     */ 
+    public String getModulePath()
+    {
+        return getCachedInfo().getModulePath();
+    }
+
+    /**
+     * Get the URI for addressing this PageFlowController.
+     * 
+     * @return a String that is the URI which will execute the begin action on this
+     *         PageFlowController.
+     */
+    public String getURI()
+    {
+        return getCachedInfo().getURI();
+    }
+    
+    /**
+     * Tell whether this PageFlowController can be "nested", i.e., if it can be invoked from another page
+     * flow with the intention of returning to the original one.  Page flows are declared to be nested
+     * using the <code>@jpf:controller nested="true"</code> annotation.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param servletContext the current ServletContext.
+     * @return <code>true</code> if this PageFlowController can be nested.
+     */
+    boolean isNestable( HttpServletRequest request, ServletContext servletContext )
+    {
+        ControllerConfig cc = getModuleConfig( servletContext, request ).getControllerConfig();
+        
+        if ( cc instanceof PageFlowControllerConfig )
+        {
+            return ( ( PageFlowControllerConfig ) cc ).isNestedPageFlow();
+        }
+        else
+        {
+            return false;
+        }
+    }
+    
+    /**
+     * Tell whether this PageFlowController can be "nested", i.e., if it can be invoked from another page
+     * flow with the intention of returning to the original one.  Page flows are declared to be nested
+     * using the <code>@jpf:controller nested="true"</code> annotation.
+     * 
+     * @return <code>true</code> if this PageFlowController can be nested.
+     */
+    protected boolean isNestable()
+    {
+        return isNestable( getRequest(), getServlet().getServletContext() );
+    }    
+    
+    /**
+     * Tell whether this is a "singleton" page flow.  Once it is invoked, a singleton page flow is never
+     * removed from the session unless {@link #delete} is called.  Navigating to another page flow hides
+     * the current singleton controller, but does not remove it.
+     */
+    protected boolean isSingleton()
+    {
+        return InternalUtils.isSingleton( getModuleConfig() );
+    }    
+    
+    /**
+     * Remove this instance from the session.
+     */ 
+    protected void delete()
+    {
+        HttpServletRequest request = getRequest();
+        
+        // This request attribute is used in persistInSession to prevent re-saving of this instance.
+        request.setAttribute( DELETING_PAGEFLOW_ATTR, this );
+        
+        if ( isSingleton() )
+        {
+            PageFlowUtils.deleteSingletonPageFlow( getModulePath(), request );
+        }
+        else
+        {
+            InternalUtils.deleteCurrentPageFlow( request );
+        }
+    }
+    
+    /**
+     * Tell whether this is a PageFlowController.
+     * 
+     * @return <code>true</code>.
+     */ 
+    public boolean isPageFlow()
+    {
+        return true;
+    }
+    
+    void persistInSession( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext )
+    {
+        InternalUtils.setCurrentPageFlow( this, request );
+    }
+
+    /**
+     * Ensures that any changes to this FlowController will be replicated in a cluster (for failover),
+     * even if the replication scheme uses a change-detection algorithm that relies on
+     * HttpSession.setAttribute to be aware of changes.
+     * 
+     * @param request the current HttpServletRequest
+     */
+    public void ensureFailover( HttpServletRequest request )
+    {
+        //
+        // delete() puts the pageflow instance into a request attribute.  Make sure not to re-save this
+        // instance if it's being deleted.  Also, if the session is null (after having been invalidated
+        // by the user), don't recreate it.
+        //
+        if ( request.getAttribute( DELETING_PAGEFLOW_ATTR ) != this && request.getSession( false ) != null )
+        {
+            HttpServletRequest unwrappedRequest = PageFlowUtils.unwrapMultipart( request );
+            ServerAdapter serverAdapter = InternalUtils.getServerAdapter();
+        
+            //
+            // If this is a singleton page flow, there are two attributes to deal with.
+            //
+            if ( isSingleton() )
+            {
+                String singletonAttrName = InternalUtils.getSingletonFlowAttr( getModulePath() );
+                singletonAttrName = ScopedServletUtils.getScopedSessionAttrName( singletonAttrName, unwrappedRequest );
+                String currentSingletonAttrName =
+                    ScopedServletUtils.getScopedSessionAttrName( CURRENT_SINGLETON_ATTR, unwrappedRequest );
+                serverAdapter.ensureFailover( singletonAttrName, this, unwrappedRequest );
+                serverAdapter.ensureFailover( currentSingletonAttrName, getModulePath(), unwrappedRequest );
+            }
+            else
+            {
+                String attrName = ScopedServletUtils.getScopedSessionAttrName( CURRENT_JPF_ATTR, unwrappedRequest );
+                serverAdapter.ensureFailover( attrName, this, unwrappedRequest );
+            } 
+        }
+    }
+
+    /**
+     * @exclude
+     */
+    protected ActionForward internalExecute( ActionMapping mapping, ActionForm form, HttpServletRequest request,
+                                             HttpServletResponse response )
+        throws Exception
+    {
+        initializeGlobalAppField( request, response, getServlet().getServletContext() );
+        return super.internalExecute( mapping, form, request, response );
+    }
+    
+    private void initializeGlobalAppField( HttpServletRequest request, HttpServletResponse response, 
+                                           ServletContext servletContext )
+    {
+        //
+        // Initialize the globalApp field.
+        //
+        Field globalAppMemberField = getCachedInfo().getGlobalAppMemberField();
+        
+        try
+        {
+            if ( globalAppMemberField != null && globalAppMemberField.get( this ) == null )
+            {
+                GlobalApp ga = InternalUtils.ensureGlobalApp( request, response, servletContext );
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Found field " + GLOBALAPP_MEMBER_NAME + " in " + this
+                                + ". Initializing with GlobalApp " + ga );
+                }
+                
+                globalAppMemberField.set( this, ga );
+            }
+        }
+        catch ( IllegalAccessException e )
+        {
+            if ( _log.isErrorEnabled() )
+            {
+                _log.error( "Error initializing GlobalApp field " + GLOBALAPP_MEMBER_NAME, e );
+            }
+        }
+    }
+    
+    final synchronized void create( HttpServletRequest request, HttpServletResponse response,
+                                    ServletContext servletContext )
+    {
+        initializeGlobalAppField( request, response, servletContext );
+        super.create( request, response, servletContext );
+    }
+    
+    /**
+     * Get the "resource taxonomy": a period-separated list that starts with the current
+     * web application name, continues through all of this PageFlowController's parent directories,
+     * and ends with this PageFlowController's class name.
+     */ 
+    protected String getTaxonomy()
+    {
+        assert getRequest() != null : "this method can only be called during execute()";
+        String contextPath = getRequest().getContextPath();
+        assert contextPath.startsWith( "/" ) : contextPath;
+        return contextPath.substring( 1 ) + "." + getClass().getName();
+    }
+    
+    /**
+     * Get the form instance from the most recent action execution in this PageFlowController.
+     * <p>
+     * <i>Note: if the current page flow does not use a </i><code>@jpf:forward</code><i> with a</i>
+     * <code>return-to="previousAction"</code><i> attribute, then this method will always return
+     * </i><code>null</code><i> by default.  To enable it in this situation, add the following method
+     * to the page flow:</i><br>
+     * <blockquote>
+     *     <code>
+     *     protected boolean alwaysTrackPreviousAction()<br>
+     *     {<br>
+     *     &nbsp;&nbsp;&nbsp;&nbsp;return true;<br>
+     *     }<br>
+     *     </code>
+     * </blockquote>
+     * 
+     * @return the ActionForm instance from the most recent action execution, or <code>null</code>
+     *         if there was no ActionForm instance.
+     * @see #getPreviousPageInfo
+     * @see #getCurrentPageInfo
+     * @see #getPreviousActionInfo
+     * @see #getPreviousActionURI
+     * @see #getPreviousForwardPath
+     * @see #getCurrentForwardPath
+     */ 
+    protected ActionForm getPreviousForm()
+    {
+        return ( _previousActionInfo != null ? _previousActionInfo.getForm() : null );
+    }
+    
+    /**
+     * Get the URI for the most recent action in this PageFlowController.
+     * <p>
+     * <i>Note: if the current page flow does not use a </i><code>@jpf:forward</code><i> with a</i>
+     * <code>return-to="previousAction"</code><i> attribute, then this method will always return
+     * </i><code>null</code><i> by default.  To enable it in this situation, add the following method
+     * to the page flow:</i><br>
+     * <blockquote>
+     *     <code>
+     *     protected boolean alwaysTrackPreviousAction()<br>
+     *     {<br>
+     *     &nbsp;&nbsp;&nbsp;&nbsp;return true;<br>
+     *     }<br>
+     *     </code>
+     * </blockquote>
+     * 
+     * @return a String that is the most recent URI.
+     * @see #getPreviousPageInfo
+     * @see #getCurrentPageInfo
+     * @see #getPreviousActionInfo
+     * @see #getPreviousForm
+     * @see #getPreviousForwardPath
+     * @see #getCurrentForwardPath
+     */ 
+    protected String getPreviousActionURI()
+    {
+        return ( _previousActionInfo != null ? _previousActionInfo.getActionURI() : null );
+    }
+    
+    /**
+     * Get the webapp-relative URI for the most recent page (in this page flow) shown to the user.
+     * <p>
+     * <i>Note: if the current page flow does not use a </i><code>@jpf:forward</code><i> with a</i>
+     * <code>return-to="previousPage"</code><i> or </i><code>return-to="currentPage"</code><i>
+     * attribute, then this method will always return </i><code>null</code><i> by default.  To enable
+     * it in this situation, add the following method to the page flow:</i><br>
+     * <blockquote>
+     *     <code>
+     *     protected boolean alwaysTrackPreviousPage()<br>
+     *     {<br>
+     *     &nbsp;&nbsp;&nbsp;&nbsp;return true;<br>
+     *     }<br>
+     *     </code>
+     * </blockquote>
+     * 
+     * @return a String that is the URI path for the most recent page shown to the user.
+     * @see #getPreviousPageInfo
+     * @see #getCurrentPageInfo
+     * @see #getPreviousActionInfo
+     * @see #getPreviousActionURI
+     * @see #getPreviousForm
+     * @see #getPreviousForwardPath
+     */ 
+    protected String getCurrentForwardPath()
+    {
+        PreviousPageInfo curPageInfo = getCurrentPageInfo();
+        
+        if ( curPageInfo != null )
+        {
+            ActionForward curForward = curPageInfo.getForward();
+            return ( curForward != null ? curForward.getPath() : null );   
+        }
+        else
+        {
+            return null;
+        }
+    }
+    
+    /**
+     * Get the webapp-relative URI for the previous page (in this page flow) shown to the user.
+     * The previous page is the one shown before the most recent page.
+     * <p>
+     * <i>Note: if the current page flow does not use a </i><code>@jpf:forward</code><i> with a</i>
+     * <code>return-to="previousPage"</code><i> or </i><code>return-to="currentPage"</code><i>
+     * attribute, then this method will always return </i><code>null</code><i> by default.  To enable
+     * it in this situation, add the following method to the page flow:</i><br>
+     * <blockquote>
+     *     <code>
+     *     protected boolean alwaysTrackPreviousPage()<br>
+     *     {<br>
+     *     &nbsp;&nbsp;&nbsp;&nbsp;return true;<br>
+     *     }<br>
+     *     </code>
+     * </blockquote>
+     * 
+     * @return a String that is the URI path for the previous page shown to the user.
+     * @see #getPreviousPageInfo
+     * @see #getCurrentPageInfo
+     * @see #getPreviousActionInfo
+     * @see #getPreviousActionURI
+     * @see #getPreviousForm
+     * @see #getCurrentForwardPath
+     */ 
+    protected String getPreviousForwardPath()
+    {
+        PreviousPageInfo prevPageInfo = getPreviousPageInfo();
+        
+        if ( prevPageInfo != null )
+        {
+            ActionForward prevForward = prevPageInfo.getForward();
+            return ( prevForward != null ? prevForward.getPath() : null );   
+        }
+        else
+        {
+            return null;
+        }
+    }
+    
+    final PreviousPageInfo getPreviousPageInfoLegacy( PageFlowController curJpf, HttpServletRequest request )
+    {
+        if ( request.getAttribute( RETURNING_FROM_NESTING_ATTR_NAME ) != null )
+        {
+            return getCurrentPageInfo();
+        }
+        else
+        {
+            return getPreviousPageInfo();
+        }
+    }
+    
+    /**
+     * Get information about the most recent page (in this page flow) shown to the user.
+     * <p>
+     * <i>Note: if the current page flow does not use a </i><code>@jpf:forward</code><i> with a</i>
+     * <code>return-to="previousPage"</code><i> or </i><code>return-to="currentPage"</code><i>
+     * attribute, then this method will always return </i><code>null</code><i> by default.  To enable
+     * it in this situation, add the following method to the page flow:</i><br>
+     * <blockquote>
+     *     <code>
+     *     protected boolean alwaysTrackPreviousPage()<br>
+     *     {<br>
+     *     &nbsp;&nbsp;&nbsp;&nbsp;return true;<br>
+     *     }<br>
+     *     </code>
+     * </blockquote>
+     * 
+     * @return a PreviousPageInfo with information about the most recent page shown to the user.
+     * @see #getPreviousPageInfo
+     * @see #getPreviousActionInfo
+     * @see #getPreviousActionURI
+     * @see #getPreviousForm
+     * @see #getPreviousForwardPath
+     * @see #getCurrentForwardPath
+     */ 
+    public final PreviousPageInfo getCurrentPageInfo()
+    {
+        if ( _currentPageInfo != null )
+        {  
+            // Allows it to reconstruct transient members after session failover
+            _currentPageInfo.reinitialize( this );
+        }
+        
+        return _currentPageInfo;
+    }
+    
+    /**
+     * Get information about the previous page (in this page flow) shown to the user.  The previous
+     * page is the one shown before the most recent page.
+     * <p>
+     * <i>Note: if the current page flow does not use a </i><code>@jpf:forward</code><i> with a</i>
+     * <code>return-to="previousPage"</code><i> or </i><code>return-to="currentPage"</code><i>
+     * attribute, then this method will always return </i><code>null</code><i> by default.  To enable
+     * it in this situation, add the following method to the page flow:</i><br>
+     * <blockquote>
+     *     <code>
+     *     protected boolean alwaysTrackPreviousPage()<br>
+     *     {<br>
+     *     &nbsp;&nbsp;&nbsp;&nbsp;return true;<br>
+     *     }<br>
+     *     </code>
+     * </blockquote>
+     * 
+     * @return a PreviousPageInfo with information about the previous page shown to the user.
+     * @see #getCurrentPageInfo
+     * @see #getPreviousActionInfo
+     * @see #getPreviousActionURI
+     * @see #getPreviousForm
+     * @see #getPreviousForwardPath
+     * @see #getCurrentForwardPath
+     */ 
+    public final PreviousPageInfo getPreviousPageInfo()
+    {
+        PreviousPageInfo ret = ( _previousPageInfo != null ? _previousPageInfo : _currentPageInfo );
+        
+        if ( ret != null )
+        {
+            ret.reinitialize( this ); // Allows it to reconstruct transient members after session failover
+        }
+        
+        return ret;
+    }
+    
+    /**
+     * Get information about the most recent action run in this page flow.
+     * <p>
+     * <i>Note: if the current page flow does not use a </i><code>@jpf:forward</code><i> with a</i>
+     * <code>return-to="previousAction"</code><i> attribute, then this method will always return
+     * </i><code>null</code><i> by default.  To enable it in this situation, add the following method
+     * to the page flow:</i><br>
+     * <blockquote>
+     *     <code>
+     *     protected boolean alwaysTrackPreviousAction()<br>
+     *     {<br>
+     *     &nbsp;&nbsp;&nbsp;&nbsp;return true;<br>
+     *     }<br>
+     *     </code>
+     * </blockquote>
+     * 
+     * @return a PreviousActionInfo with information about the most recent action run in this page flow.
+     * @see #getPreviousPageInfo
+     * @see #getCurrentPageInfo
+     * @see #getPreviousActionURI
+     * @see #getPreviousForm
+     * @see #getPreviousForwardPath
+     * @see #getCurrentForwardPath
+     */ 
+    public final PreviousActionInfo getPreviousActionInfo()
+    {
+        return _previousActionInfo;
+    }
+    
+    public String getDisplayName()
+    {
+        return getURI();
+    }
+    
+    /**
+     * Called from {@link FlowController#execute}.
+     */ 
+    void savePreviousActionInfo( ActionForm form, HttpServletRequest request, ActionMapping mapping,
+                                 ServletContext servletContext )
+    {
+        //
+        // If previous-action is disabled (unused in this pageflow), just return.
+        //
+        ControllerConfig cc = mapping.getModuleConfig().getControllerConfig();       
+        if ( cc instanceof PageFlowControllerConfig && ( ( PageFlowControllerConfig ) cc ).isReturnToActionDisabled() )
+        {
+            //
+            // Make sure previous-action is disabled in Global.app, too; if not, we can't do it.
+            //
+            ModuleConfig globalAppModuleConfig = InternalUtils.getGlobalAppConfig( servletContext );
+            ControllerConfig gc = ( globalAppModuleConfig != null ? globalAppModuleConfig.getControllerConfig() : null );
+            
+            if ( gc == null ||
+                    ( gc instanceof PageFlowControllerConfig && ( ( PageFlowControllerConfig ) gc ).isReturnToActionDisabled() ) )
+            {
+                if ( ! alwaysTrackPreviousAction() )
+                {
+                    return;
+                }
+            }
+        }
+        
+        String actionURI = PageFlowUtils.getRelativeURI( request, null );
+        _previousActionInfo = new PreviousActionInfo( form, actionURI, request.getQueryString() );
+    }
+    
+    /**
+     * Called from {@link FlowController#forwardTo}.
+     */ 
+    void savePreviousPageInfo( ActionForward forward, ActionForm form, ActionMapping mapping,
+                               HttpServletRequest request, ServletContext servletContext,
+                               boolean isSpecialForward )
+    {
+        //
+        // If previous-page is disabled (unused in this pageflow), just return.
+        //
+        ControllerConfig cc = getModuleConfig( servletContext, request ).getControllerConfig();       
+        if ( cc instanceof PageFlowControllerConfig && ( ( PageFlowControllerConfig ) cc ).isReturnToPageDisabled() )
+        {
+            //
+            // Make sure previous-page is disabled in Global.app, too; if not, we can't do it.
+            //
+            ModuleConfig globalAppModuleConfig = InternalUtils.getGlobalAppConfig( servletContext );
+            ControllerConfig gc = ( globalAppModuleConfig != null ? globalAppModuleConfig.getControllerConfig() : null );
+            
+            if ( gc == null ||
+                 ( gc instanceof PageFlowControllerConfig && ( ( PageFlowControllerConfig ) gc ).isReturnToPageDisabled() ) )
+            {
+                if ( ! alwaysTrackPreviousPage() )
+                {
+                    return;
+                }
+            }
+        }
+        
+        if ( forward != null )
+        {
+            String path = forward.getPath();
+            int queryPos = path.indexOf( '?' );
+            
+            if ( queryPos != -1 )
+            {
+                path = path.substring( 0, queryPos );
+            }
+            
+            //
+            // Only keep track of *pages* forwarded to -- not actions or pageflows.
+            //
+            if ( ! FileUtils.osSensitiveEndsWith( path, ACTION_EXTENSION ) ) 
+            {        
+                //
+                // Only save previous-page info if the page is within this pageflow.
+                //
+                if ( isLocalFile( forward ) ) // || PageFlowUtils.osSensitiveEndsWith( path, JPF_EXTENSION ) )
+                {
+                    _previousPageInfo = _currentPageInfo;
+                    _currentPageInfo = new PreviousPageInfo( forward, form, mapping );
+                }
+            }
+        }
+    }
+    
+    private boolean isLocalFile( ActionForward forward )
+    {
+        String path = forward.getPath();
+        
+        if ( ! forward.getContextRelative() )
+        {
+            return ( path.indexOf( '/', 1 ) == -1 );     // all paths in Struts start with '/'
+        }
+        else
+        {
+            String modulePath = getModulePath();
+            
+            if ( ! path.startsWith( modulePath ) )
+            {
+                return false;
+            }
+            else
+            {
+                return path.indexOf( '/', modulePath.length() + 1 ) == -1;
+            }
+        }
+    }
+    
+    
+    /**
+     * Callback when this page flow is removed from the user session.  Causes {@link #onDestroy}
+     * to be called.
+     */ 
+    public void valueUnbound( HttpSessionBindingEvent event )
+    {
+        //
+        // Unless this pageflow has been pushed onto the nesting stack, do the onDestroy() callback.
+        //
+        if ( ! _isOnNestingStack )
+        {
+            destroy( event.getSession() );
+        }
+    }
+    
+    void setIsOnNestingStack( boolean isOnNestingStack )
+    {
+        _isOnNestingStack = isOnNestingStack;
+    }
+        
+    ActionForward forwardTo( ActionForward fwd, ActionMapping mapping, HttpServletRequest request,
+                             HttpServletResponse response, String actionName, ModuleConfig altModuleConfig,
+                             ActionForm form, ServletContext servletContext )
+    {
+        ActionForward superFwd = super.forwardTo( fwd, mapping, request, response, actionName,
+                                                  altModuleConfig, form, servletContext );
+        
+        //
+        // Special case: the *only* way for a nested pageflow to nest itself is for it
+        // to forward to itself as a .jpf.  Simply executing an action in the .jpf isn't
+        // enough, obviously, since it's impossible to tell whether it should be executed
+        // in the current pageflow or a new nested one.
+        //
+        if ( superFwd != null && isNestable( request, servletContext ) )
+        {
+            boolean selfNesting = false;
+            
+            if ( superFwd.getContextRelative() )
+            {
+                if ( superFwd.getPath().equals( getURI() ) )
+                {
+                    selfNesting = true;
+                }
+            }
+            else
+            {
+                if ( superFwd.getPath().equals( getStrutsLocalURI() ) )
+                {
+                    selfNesting = true;
+                }
+            }
+            
+            if ( selfNesting )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Self-nesting page flow " + getURI() );
+                }
+                
+                // This will cause the right pageflow stack stuff to happen.
+                FlowControllerFactory.getPageFlow( getClass(), request, response,
+                                                   getServlet().getServletContext(), false );
+            }
+        }
+        
+        return superFwd;
+    }
+    
+    private String getStrutsLocalURI()
+    {
+        String className = getClass().getName();
+        int lastDot = className.lastIndexOf( '.' );
+        StringBuffer ret = new StringBuffer( "/" );
+        return ret.append( className.substring( lastDot + 1 ) ).append( JPF_EXTENSION ).toString();
+    }
+    
+    private CachedPageFlowInfo getCachedInfo()
+    {
+        ClassLevelCache cache = ClassLevelCache.getCache( getClass() );
+        CachedPageFlowInfo info = ( CachedPageFlowInfo ) cache.getCacheObject( CACHED_INFO_KEY );
+        
+        if ( info == null )
+        {
+            info = new CachedPageFlowInfo( getClass() );
+            cache.setCacheObject( CACHED_INFO_KEY, info );
+        }
+        
+        return info;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,146 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+
+/**
+ * Base class for PageFlow-related Exceptions.
+ */ 
+public abstract class PageFlowException extends RuntimeException
+{
+    private FlowController _flowController;
+    private String _actionName;
+    private String _messageKeyPrefix;
+    
+    
+    public PageFlowException( String actionName, FlowController fc )
+    {
+        super();
+        _flowController = fc;
+        _actionName = ( actionName.startsWith( "/" ) ? actionName.substring( 1 ) : actionName );
+        
+        String className = getClass().getName();
+        int lastDot = className.lastIndexOf( '.' );
+        assert lastDot != -1;
+        _messageKeyPrefix = "PageFlow_" + className.substring( lastDot + 1 );
+    }
+    
+    /**
+     * Get the related FlowController.
+     * 
+     * @return the {@link FlowController} associated with this exception.
+     */ 
+    public FlowController getFlowController()
+    {
+        return _flowController;
+    }
+    
+    /**
+     * Get the name of the related FlowController.
+     * 
+     * @return the class name of the {@link FlowController} associated with this exception.
+     */ 
+    public String getFlowControllerURI()
+    {
+        return _flowController != null ? _flowController.getDisplayName() : null;
+    }
+    
+    /**
+     * Get the name of the action associated with this exception.
+     * 
+     * @return a String that is the name of the action associated with this exception.
+     */ 
+    public String getActionName()
+    {
+        return _actionName;
+    }
+
+    /**
+     * Handle the error by writing a message to the response.
+     * 
+     * @param request the current HttpServletRequest
+     * @param response the current HttpServletResponse
+     */    
+    void sendError( HttpServletRequest request, HttpServletResponse response, int productionTimeErrorCode )
+        throws IOException
+    {
+        InternalUtils.sendDevTimeError( _messageKeyPrefix, getMessageArgs(), request, response, null,
+                                        productionTimeErrorCode );
+    }
+    
+    /**
+     * Handle the error by writing a message to the response.
+     * 
+     * @param request the current HttpServletRequest
+     * @param response the current HttpServletResponse
+     */    
+    public void sendError( HttpServletRequest request, HttpServletResponse response )
+        throws IOException
+    {
+        InternalUtils.sendError( _messageKeyPrefix, getMessageArgs(), request, response, null );
+    }
+    
+    /**
+     * Print a formatted message.
+     * 
+     * @param writer a writer to which to print the formatted message.
+     */ 
+    public void printError( PrintWriter writer )
+    {
+        writer.println( Bundle.getString( _messageKeyPrefix + "_Page", getMessageArgs() ) );
+    }
+
+    public String getLocalizedMessage()
+    {
+        return Bundle.getString( _messageKeyPrefix + "_Message", getMessageArgs() );
+    }
+    
+    public String getMessage()
+    {
+        StringBuffer buf = new StringBuffer();
+        String[] parts = getMessageParts();
+        Object[] args = getMessageArgs();
+
+        assert parts.length > args.length : parts.length + ", " + args.length;
+        
+        for ( int i = 0; i < parts.length; ++i )
+        {
+            buf.append( parts[i] );
+            
+            if ( i < args.length )
+            {
+                buf.append( args[i] );
+            }
+        }
+        
+        return buf.toString();
+    }
+    
+    protected abstract Object[] getMessageArgs();
+    
+    protected abstract String[] getMessageParts();
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowFileFilter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowFileFilter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.util.FileUtils;
+
+import java.io.FilenameFilter;
+import java.io.File;
+
+
+/**
+ * File filter that accepts any {@link PageFlowController} source file (*.jpf).
+ */ 
+public class PageFlowFileFilter implements FilenameFilter
+{
+    public boolean accept( File dir, String name )
+    {
+        return FileUtils.osSensitiveEndsWith( name, PageFlowConstants.JPF_EXTENSION );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowJspFilter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowJspFilter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,286 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+import org.apache.struts.util.RequestUtils;
+import org.apache.struts.action.ActionServlet;
+import org.apache.struts.config.ModuleConfig;
+
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+import org.apache.beehive.netui.script.common.BundleMap;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.FileUtils;
+import org.apache.beehive.netui.util.ServletUtils;
+import org.apache.beehive.netui.pageflow.internal.JavaControlUtils;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+/**
+ * Servlet filter to ensure that KNEX gets a chance to compile/redeploy if necessary, and
+ * to ensure that the current pageflow is instantiated and initialized.
+ * 
+ * @exclude
+ */ 
+public class PageFlowJspFilter implements Filter
+{
+    private ServletContext _servletContext;
+    
+    private static final Logger _log = Logger.getInstance( PageFlowJspFilter.class );
+    
+    private static final String JSP_EXT = ".jsp";
+    private static final String PREVENT_CACHE_ATTR = PageFlowJspFilter.class.getName() + "_preventCache";
+    
+    
+    public void init( FilterConfig filterConfig ) throws ServletException
+    {
+        _servletContext = filterConfig.getServletContext();
+    }
+
+    public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )
+        throws IOException, ServletException
+    {
+        if ( request instanceof HttpServletRequest && response instanceof HttpServletResponse )
+        {
+            HttpServletRequest httpRequest = ( HttpServletRequest ) request;
+            HttpServletResponse httpResponse = ( HttpServletResponse ) response;
+            
+            //
+            // Don't do the filter if the request is in error.
+            //
+            Object errStatusCode = request.getAttribute( "javax.servlet.error.status_code" );
+            if ( errStatusCode != null )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Request has error status code " + errStatusCode + ".  Skipping filter." );
+                }
+
+                chain.doFilter( request, response );        
+
+                return;           
+            }
+            
+            String requestURI = httpRequest.getRequestURI();
+            
+            if ( ! FileUtils.osSensitiveEndsWith( requestURI, JSP_EXT ) )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Request " + requestURI + " is not a JSP.  Skipping filter." );
+                }
+
+                chain.doFilter( request, response );        
+                return;
+            }
+        
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Filtering request " + requestURI );
+            }
+            
+            //
+            // If at an earlier stage in the request we determined that we should prevent caching,
+            // actually write the appropriate headers to the response now.
+            //
+            if ( request.getAttribute( PREVENT_CACHE_ATTR ) != null )
+            {
+                ServletUtils.preventCache( httpResponse );
+            }
+            
+            //
+            // Callback to the server adapter.
+            //
+            InternalUtils.getServerAdapter().beginRequest( httpRequest, httpResponse, _servletContext );
+            
+            //
+            // Initialize the ControlBeanContext in the session.
+            //
+            JavaControlUtils.initializeControlContext( httpRequest, httpResponse, _servletContext );
+            
+            try
+            {
+                //
+                // Ensure that the right Struts module is selected, for use by the tags.
+                //
+                ModuleConfig prevModuleConfig = RequestUtils.getRequestModuleConfig( httpRequest );
+                String curModulePath = PageFlowUtils.getModulePath( httpRequest );
+                ActionServlet as = InternalUtils.getActionServlet( _servletContext );
+                
+                if ( as instanceof AutoRegisterActionServlet )
+                {
+                    AutoRegisterActionServlet das = ( AutoRegisterActionServlet ) as;
+                    das.ensureModuleRegistered( curModulePath, httpRequest );
+                }
+                
+                RequestUtils.selectModule( curModulePath, httpRequest, _servletContext );
+                
+                if ( RequestUtils.getRequestModuleConfig( httpRequest ) == null )
+                {
+                    //
+                    // If we still haven't had success in selecting the module, see if we can
+                    // dynamically register one.
+                    //
+                    if ( as instanceof AutoRegisterActionServlet )
+                    {
+                        AutoRegisterActionServlet das = ( AutoRegisterActionServlet ) as;
+                        das.ensureModuleSelected( curModulePath, httpRequest, httpResponse );
+                    }
+                }
+                
+                //
+                // Make sure that the current PageFlowController is set up for this request.
+                //
+                PageFlowController curJpf =
+                    InternalUtils.ensureCurrentPageFlow( httpRequest, httpResponse, _servletContext );
+                
+                //
+                // If there is no pageflow for the current Struts module, than fall back to default
+                // Struts behavior, which is *not* to allow a .jsp request to set the current module.
+                //
+                if ( curJpf == null )
+                {
+                    InternalUtils.setCurrentModule( prevModuleConfig, request );
+                }
+                
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Current PageFlowController is: " + curJpf );
+                    _log.debug( "Continuing with filter chain..." );
+                }
+                
+                try
+                {
+                    //
+                    // Make sure that the pageflow's getRequest() and getResponse() will work while the JSP
+                    // is being rendered, since methods on the pageflow may be called (through databinding
+                    // or tags, or through direct reference).
+                    //
+                    if ( curJpf != null )
+                    {
+                        //
+                        // We're going to bail out if there are too many concurrent requests for the same JPF.
+                        // This prevents an attack that takes advantage of the fact that we serialize requests
+                        // to the same pageflow.
+                        //
+                        if ( curJpf.incrementRequestCount( httpRequest, httpResponse, _servletContext ) )
+                        {
+                            try
+                            {
+                                //
+                                // Any databinding calls, indirect calls to getRequest(), etc. must be protected
+                                // against conflicts from running action methods at the same time as rendering 
+                                // the JSP here.  Synchronize on the JPF.
+                                //
+                                synchronized ( curJpf )
+                                {
+                                    curJpf.setServlet( InternalUtils.getActionServlet( _servletContext ) );
+                                    curJpf.setRequestMembers( httpRequest, httpResponse, null );
+
+                                    // @todo: need to wrap this in checks for JSP 1.2
+                                    // @todo: feature: need to add support for chaining in user-code to
+                                    //        run when setting implicit objects on the request
+                                    httpRequest.setAttribute("pageFlow", curJpf);
+                                    httpRequest.setAttribute("pageInput", InternalUtils.getActionOutputMap(httpRequest, false));
+                                    InternalUtils.ensureGlobalApp(httpRequest, httpResponse);
+                                    httpRequest.setAttribute("globalApp", PageFlowUtils.getGlobalApp(httpRequest));
+                                    BundleMap bundleMap = new BundleMap(httpRequest, _servletContext, null);
+                                    httpRequest.setAttribute("bundle", bundleMap);
+
+                                    chain.doFilter( request, response );
+                                }
+                            }
+                            finally
+                            {
+                                curJpf.decrementRequestCount( httpRequest );
+                            }
+                        }
+                        else
+                        {
+                            curJpf = null;  // avoid synchronization in finally block below
+                        }
+                    }
+                    else
+                    {
+                        // @todo: need to wrap this in checks for JSP 1.2
+                        // @todo: feature: need to add support for chaining in user-code to
+                        //        run when setting implicit objects on the request
+                        InternalUtils.ensureGlobalApp(httpRequest, httpResponse);
+                        httpRequest.setAttribute("globalApp", PageFlowUtils.getGlobalApp(httpRequest));
+                        BundleMap bundleMap = new BundleMap(httpRequest, _servletContext, null);
+                        httpRequest.setAttribute("bundle", bundleMap);
+
+                        chain.doFilter( request, response );
+                    }
+                }
+                finally
+                {
+                    if ( curJpf != null )
+                    {
+                        synchronized ( curJpf )
+                        {
+                            curJpf.nullRequestMembers( httpRequest );
+                        }
+                    }
+                }
+            }
+            finally
+            {
+                //
+                // Clean up the ControlBeanContext in the session.
+                //
+                JavaControlUtils.uninitializeControlContext( httpRequest, httpResponse );
+                
+                //
+                // Callback to the server adapter.
+                //
+                InternalUtils.getServerAdapter().endRequest( httpRequest, httpResponse, _servletContext );
+            }
+        }
+        else
+        {
+            chain.doFilter( request, response );            
+        }
+    }
+    
+    /**
+     * Make sure that when this JSP is rendered, it will set headers in the response to prevent caching.
+     * Because these headers are lost on server forwards, we set a request attribute to cause the headers
+     * to be set right before the JSP is rendered.
+     */ 
+    static void preventCache( HttpServletRequest request )
+    {
+        request.setAttribute( PREVENT_CACHE_ATTR, Boolean.TRUE );
+    }
+
+    public void destroy()
+    {
+        _servletContext = null;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1359 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.RequestProcessor;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.DynaActionFormClass;
+import org.apache.struts.action.DynaActionForm;
+import org.apache.struts.config.ActionConfig;
+import org.apache.struts.config.ForwardConfig;
+import org.apache.struts.config.FormBeanConfig;
+import org.apache.struts.Globals;
+import org.apache.struts.upload.MultipartRequestWrapper;
+import org.apache.struts.upload.MultipartRequestHandler;
+import org.apache.struts.util.RequestUtils;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.ServletException;
+import javax.servlet.ServletContext;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.lang.reflect.Field;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.ServletUtils;
+import org.apache.beehive.netui.util.FileUtils;
+import org.apache.beehive.netui.pageflow.internal.JavaControlUtils;
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.pageflow.config.PageFlowActionForward;
+import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
+import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptorChain;
+import org.apache.beehive.netui.pageflow.interceptor.InterceptorForward;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
+import org.apache.beehive.netui.pageflow.internal.RequestValues;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
+
+
+/**
+ * The Page Flow extension of the Struts RequestProcessor, which contains callbacks that are invoked
+ * during processing of a request to the Struts action servlet.  This class is registered as the
+ * <strong>controller</strong> for all Struts modules derived from page flows.
+ */
+public class PageFlowRequestProcessor
+        extends RequestProcessor
+        implements Serializable, PageFlowConstants
+{
+    private static int requestCount = 0;
+
+    private static final Logger _log = Logger.getInstance( PageFlowRequestProcessor.class );
+    
+    private static final String PREFIX = PageFlowRequestProcessor.class.getName() + ":";
+    private static final String ACTION_OVERRIDE_PARAM_PREFIX = "actionOverride:";
+    private static final int    ACTION_OVERRIDE_PARAM_PREFIX_LEN = ACTION_OVERRIDE_PARAM_PREFIX.length();
+    private static final String ATTEMPTED_GLOBALAPP_INIT_ATTR = PREFIX + "attemptedGlobalAppInit";
+    private static final String SCHEME_UNSECURE = "http";
+    private static final String SCHEME_SECURE = "https";
+    private static final String REDIRECT_REQUEST_ATTRS_PREFIX = PREFIX + "requestAttrs:";
+    private static final String REDIRECT_REQUEST_ATTRS_PARAM = "forceRedirect";
+    private static final String FORWARDED_BY_BUTTON_OVERRIDE_ATTR = PREFIX + "buttonForward";
+    private static final String PROCESS_POPULATE_ALREADY_CALLED_ATTR = PREFIX + "processPopulateCalled";
+    private static final String ALREADY_GOT_ACTION_ATTR = PREFIX + "prefetchedAction";
+    private static final String MULTIPART_REQUEST_WRAPPER_ATTR = PREFIX + "multipartWrapper";
+    private static final String PAGEFLOW_SCOPED_FORM_NAME_ATTR = PREFIX + "pageFlowScopedFormName";
+    private static final String PROCESS_ROLES_FAILED_ATTR = PREFIX + "processRolesFailed";
+    
+
+    protected Action processActionCreate( HttpServletRequest request, HttpServletResponse response,
+                                          ActionMapping actionMapping )
+        throws IOException
+    {
+        //
+        // We may have already created the action in processActionForm().
+        //
+        Action alreadyGotAction = ( Action ) request.getAttribute( ALREADY_GOT_ACTION_ATTR );
+        
+        if ( alreadyGotAction != null )
+        {
+            request.removeAttribute( ALREADY_GOT_ACTION_ATTR );
+            return alreadyGotAction;
+        }
+        
+        
+        String className = actionMapping.getType();
+
+        if ( className != null )
+        {
+            try
+            {
+                ServletContext servletContext = getServletContext();
+                Class jpfActionClass = InternalUtils.getReloadableClass( className, request, servletContext );
+                
+                if ( FlowController.class.isAssignableFrom( jpfActionClass ) )
+                {
+                    FlowController fc =
+                        FlowControllerFactory.getFlowController( jpfActionClass, request, response, servletContext );
+                    fc.setServlet( this.servlet );
+                    return fc;
+                }
+                else
+                {
+                    //
+                    // It's a non-FlowController action.  Now act on any deferred failure from
+                    // processRoles() in the same way that Struts would have acted, namely, by
+                    // sending an HTTP error.
+                    //
+                    if ( request.getAttribute( PROCESS_ROLES_FAILED_ATTR ) != null )
+                    {
+                        request.removeAttribute( PROCESS_ROLES_FAILED_ATTR );
+                        response.sendError( HttpServletResponse.SC_BAD_REQUEST,
+                                            getInternal().getMessage( "notAuthorized", actionMapping.getPath() ) );
+                        return null;
+                    }
+                }
+            }
+            catch ( ClassNotFoundException e )
+            {
+                _log.error( "Could not find class " + className, e );
+            }
+        }
+
+        return super.processActionCreate( request, response, actionMapping );
+    }
+
+    /**
+     * Same as code in RequestUtils.createActionForm(), but doesn't try to get the form bean out of
+     * the request/session (i.e., always creates a new one).
+     */ 
+    private ActionForm createActionForm( ActionMapping mapping, HttpServletRequest request )
+    {
+        String name = mapping.getName();
+
+        assert name != null : mapping.getPath();
+        if ( name == null )
+        {
+            return null;
+        }
+
+        FormBeanConfig config = moduleConfig.findFormBeanConfig( name );
+        ActionForm instance;
+        
+        //
+        // Create the form bean.  There's special handling for dyna-form-beans.
+        //
+        if ( config.getDynamic() )
+        {
+            try
+            {
+                DynaActionFormClass dynaClass = DynaActionFormClass.createDynaActionFormClass( config );
+                instance = ( ActionForm ) dynaClass.newInstance();
+                ( ( DynaActionForm ) instance ).initialize( mapping );
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( " Creating new DynaActionForm instance " + "of type '" + config.getType() + "'" );
+                }
+            }
+            catch ( Exception e )
+            {
+                _log.error( servlet.getInternal().getMessage( "formBean", config.getType() ), e );
+                return null;
+            }
+        }
+        else
+        {
+            try
+            {
+                instance = ( ActionForm ) InternalUtils.newReloadableInstance(
+                        config.getType(), request, getServletContext() );
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( " Creating new ActionForm instance " + "of type '" + config.getType() + "'" );
+                }
+            }
+            catch ( Exception e )
+            {
+                _log.error( servlet.getInternal().getMessage( "formBean", config.getType() ), e );
+                return null;
+            }
+        }
+        
+        instance.setServlet( servlet );
+        return instance;
+    }
+    
+    private Field getPageFlowScopedFormMember( ActionMapping mapping, HttpServletRequest request,
+                                               HttpServletResponse response )
+    {
+        if ( mapping instanceof PageFlowActionMapping )
+        {
+            PageFlowActionMapping pfam = ( PageFlowActionMapping ) mapping;
+            String formMember = pfam.getFormMember();
+            
+            try
+            {
+                if ( formMember != null )
+                {
+                    Action action = processActionCreate( request, response, mapping );
+                    request.setAttribute( ALREADY_GOT_ACTION_ATTR, action );
+                    Field field = action.getClass().getDeclaredField( formMember );
+                    field.setAccessible( true );
+                    return field;
+                }
+            }
+            catch ( Exception e )
+            {
+                _log.error( "Could not use page flow member " + formMember + " as the form bean.", e );
+            }
+        }
+        
+        return null;
+    }
+    
+    protected ActionForm processActionForm( HttpServletRequest request, HttpServletResponse response,
+                                            ActionMapping mapping )
+    {
+        //
+        // We're deferring role-check failures until the action phase.  But if the role check failed, we need to avoid
+        // doing anything here.
+        //
+        if ( roleCheckFailed( request, false ) ) return null;
+        
+        //
+        // See if we're using a pageflow-scoped form (a member variable in the current pageflow).
+        //
+        Field formMemberField = getPageFlowScopedFormMember( mapping, request, response );
+        
+        //
+        // First look to see whether the input form was overridden in the request.
+        // This happens when a pageflow action forwards to another pageflow,
+        // whose begin action expects a form.  In this case, the form is already
+        // constructed, and shouldn't be instantiated anew or populated from request
+        // parameters.
+        //
+        ActionForm previousForm = InternalUtils.getForwardedForm( request, false );
+        
+        if ( previousForm != null )
+        {
+            //
+            // If there was a forwarded form, and if this action specifies a pageflow-scoped form member,
+            // set the member with this form.
+            //
+            if ( formMemberField != null )
+            {
+                try
+                {
+                    Action action = ( Action ) request.getAttribute( ALREADY_GOT_ACTION_ATTR );
+                    formMemberField.set( action, InternalUtils.unwrapFormBean(  previousForm ) );
+                }
+                catch ( IllegalAccessException e )
+                {
+                    _log.error( "Could not access page flow member " + formMemberField.getName()
+                                  + " as the form bean.", e );
+                }
+            }
+            
+            //
+            // Return the forwarded form.
+            //
+            return previousForm;
+        }
+        
+        //
+        // First see if the previous action put a pageflow-scoped form in the request.  If so, remove it;
+        // we don't want a normal request-scoped action to use this pageflow-scoped form.
+        //
+        String pageFlowScopedFormName = ( String ) request.getAttribute( PAGEFLOW_SCOPED_FORM_NAME_ATTR );
+        if ( pageFlowScopedFormName != null )
+        {
+            request.removeAttribute( pageFlowScopedFormName );
+            request.removeAttribute( PAGEFLOW_SCOPED_FORM_NAME_ATTR );
+        }
+        
+        //
+        // If this action specifies a pageflow-scoped form member variable, use it.
+        //
+        if ( formMemberField != null )
+        {
+            try
+            {
+                Action action = ( Action ) request.getAttribute( ALREADY_GOT_ACTION_ATTR );
+                ActionForm form = InternalUtils.wrapFormBean( formMemberField.get( action ) );
+                
+                if ( form == null ) // the pageflow hasn't filled the value yet
+                {
+                    form = createActionForm( mapping, request );
+                    form.reset( mapping, request );
+                    formMemberField.set( action, InternalUtils.unwrapFormBean( form ) );
+                }
+                
+                //
+                // Store the form in the right place in the request, so Struts can see it.
+                // But, mark a flag so we know to remove this on the next action request -- we don't
+                // want this form used by another action unless that action uses the pageflow-scoped
+                // form.
+                //
+                request.setAttribute( mapping.getAttribute(), form );
+                request.setAttribute( PAGEFLOW_SCOPED_FORM_NAME_ATTR, mapping.getAttribute() );
+                
+                return form;
+            }
+            catch ( IllegalAccessException e )
+            {
+                _log.error( "Could not access page flow member " + formMemberField.getName() + " as the form bean.", e );
+            }
+        }
+        
+        ActionForm bean = super.processActionForm( request, response, mapping );
+        if ( bean == null )
+        {
+            bean = InternalUtils.createActionForm( request, mapping, moduleConfig, servlet, getServletContext() );
+        }
+        return bean;
+    }
+    
+    protected void processPopulate( HttpServletRequest request, HttpServletResponse response, ActionForm form,
+                                    ActionMapping mapping )
+        throws ServletException
+    {
+        //
+        // We're deferring role-check failures until the action phase.  But if the role check failed, we need to avoid
+        // doing anything here.
+        //
+        if ( roleCheckFailed( request, false ) ) return;
+        
+        //
+        // If a previous action forwarded us a form, use that -- don't populate it from request parameters.
+        //
+        ActionForm previousForm = InternalUtils.getForwardedForm( request, true );
+
+        if ( previousForm != null )
+        {
+            return;
+        }
+
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( "Populating bean properties from this request" );
+        }
+
+        // struts does this
+        if ( form != null )
+        {
+            form.setServlet( this.servlet );
+            form.reset( mapping, request );
+        }
+
+        if ( mapping.getMultipartClass() != null )
+        {
+            request.setAttribute( Globals.MULTIPART_KEY, mapping.getMultipartClass() );
+        }
+
+        boolean alreadyCalledInRequest = request.getAttribute( PROCESS_POPULATE_ALREADY_CALLED_ATTR ) != null;
+
+        if ( ! alreadyCalledInRequest )
+        {
+            request.setAttribute( PROCESS_POPULATE_ALREADY_CALLED_ATTR, Boolean.TRUE );
+        }
+        
+        //
+        // If this is a forwarded request and the form-bean is null, don't call to ProcessPopulate.
+        // We don't want to expose errors due to parameters from the original request, which won't
+        // apply to a forwarded action that doesn't take a form.
+        //
+        if ( !alreadyCalledInRequest || form != null )
+        {
+            ProcessPopulate.populate( request, response, form, alreadyCalledInRequest );
+        }
+    }
+
+    protected boolean processValidate( HttpServletRequest request, HttpServletResponse response, ActionForm form, ActionMapping mapping ) throws IOException, ServletException
+    {
+        //
+        // We're deferring role-check failures until the action phase.  But if the role check failed, we need to avoid
+        // doing anything here.
+        //
+        if ( ! roleCheckFailed( request, false ) )
+        {
+            return super.processValidate( request, response, form, mapping );
+        }
+        else
+        {
+            return true;
+        }
+    }
+
+    protected boolean processForward( HttpServletRequest request, HttpServletResponse response, ActionMapping mapping ) throws IOException, ServletException
+    {
+        //
+        // We're deferring role-check failures until the action phase.  But if the role check failed, we need to avoid
+        // doing anything here.
+        //
+        if ( ! roleCheckFailed( request, false ) )
+        {
+            return super.processForward( request, response, mapping );
+        }
+        else
+        {
+            return true;
+        }
+    }
+
+    protected boolean processInclude( HttpServletRequest request, HttpServletResponse response, ActionMapping mapping ) throws IOException, ServletException
+    {
+        //
+        // We're deferring role-check failures until the action phase.  But if the role check failed, we need to avoid
+        // doing anything here.
+        //
+        if ( ! roleCheckFailed( request, false ) )
+        {
+            return super.processInclude( request, response, mapping );
+        }
+        else
+        {
+            return true;
+        }
+    }
+
+    private void processInternal( HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ServletException
+    {
+        String uri = PageFlowUtils.getRelativeURI( request, InternalUtils.decodeURI( request ), null );
+        ServletContext servletContext = getServletContext();
+
+        //
+        // Allow weblogic to do a security check on forwarded requests, if that feature is enabled.
+        //
+        if ( ContextCache.get( servletContext ).shouldDoSecureForwards()
+                 && RequestValues.isForwardedRequest( request ) )
+        {
+            //
+            // In some situations (namely, in scoped requests under portal), the initial weblogic
+            // security check may not have been done for the request URI.  In this case, a redirect
+            // to https may happen during checkSecurity().
+            //
+            if ( InternalUtils.getServerAdapter().checkSecurity( uri, request, response, servletContext ) )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "checkSecurity() caused a redirect.  Ending processing for this request "
+                               + "(" + uri + ")" );
+                }
+
+                // @TODO when in portal, we'll need to set some sort of flag to notify that the request
+                //       was redirected and that there should be no rendering done.
+                return;
+            }
+        }
+
+        //
+        // If we've come in on a forced redirect due to security constraints, look for request attrs
+        // that we put into the session.
+        //
+        String hash = request.getParameter( REDIRECT_REQUEST_ATTRS_PARAM );
+        if ( hash != null )
+        {
+            HttpSession session = request.getSession( false );
+
+            if ( session != null )
+            {
+                String carryoverAttrName = makeRedirectedRequestAttrsKey( uri, hash );
+                Map attrs = ( Map ) session.getAttribute( carryoverAttrName );
+                session.removeAttribute( carryoverAttrName );
+
+                if ( attrs != null )
+                {
+                    for ( Iterator i = attrs.entrySet().iterator(); i.hasNext(); )
+                    {
+                        Map.Entry entry = ( Map.Entry ) i.next();
+
+                        String attrName = ( String ) entry.getKey();
+                        if ( request.getAttribute( attrName ) == null )
+                        {
+                            request.setAttribute( attrName, entry.getValue() );
+                        }
+                    }
+                }
+            }
+        }
+
+        //
+        // First create Global.app if it doesn't exist, and if we haven't already tried.
+        //
+        if ( request.getSession().getAttribute( ATTEMPTED_GLOBALAPP_INIT_ATTR ) == null )
+        {
+            if ( _log.isInfoEnabled() )
+            {
+                _log.info( "Attempting to instantiate Global.app." );
+            }
+
+            request.getSession().setAttribute( ATTEMPTED_GLOBALAPP_INIT_ATTR, Boolean.TRUE );
+            InternalUtils.ensureGlobalApp( request, response, servletContext );
+        }
+
+        //
+        // Some of our tags can override the Action through a request-parameter.  If this
+        // is the case, forward to the right action.  Only make this check if this is an
+        // initial (non-forwarded) request.
+        //
+        // @TODOsp1 performance?
+        //
+        if ( request.getAttribute( FORWARDED_BY_BUTTON_OVERRIDE_ATTR ) == null )
+        {
+            request.setAttribute( FORWARDED_BY_BUTTON_OVERRIDE_ATTR, Boolean.TRUE );
+            
+            //
+            // First, since we need access to request parameters here, process a multipart request
+            // if that's what we have.  This puts the parameters (each in a MIME part) behind an
+            // interface that makes them look like normal request parameters.
+            //
+            HttpServletRequest multipartAwareRequest = processMultipart( request );
+            
+            for ( Enumeration e = multipartAwareRequest.getParameterNames(); e.hasMoreElements(); )
+            {
+                String paramName = ( String ) e.nextElement();
+
+                if ( paramName.startsWith( ACTION_OVERRIDE_PARAM_PREFIX ) )
+                {
+                    String actionPath = paramName.substring( ACTION_OVERRIDE_PARAM_PREFIX_LEN );
+
+                    actionPath = PageflowTagUtils.createActionPath( servletContext, request, actionPath );
+
+                    if ( _log.isDebugEnabled() )
+                    {
+                        _log.debug( "A request parameter overrode the action.  Forwarding to: "
+                                    + actionPath );
+                    }
+
+                    ForwardRedirectHandler handler = ContextCache.get( servletContext ).getForwardRedirectHandler();
+                    handler.forward( actionPath, request, response );
+                    return;
+                }
+            }
+        }
+
+        //
+        // First redirect requests for .jpf to the "begin" action within the appropriate Struts module.
+        //
+        if ( FileUtils.osSensitiveEndsWith( uri, PageFlowConstants.JPF_EXTENSION ) )
+        {
+            //
+            // Make sure the current module config matches the request URI.  If not, this could be an
+            // EAR where the jpf-struts-config.xml wasn't included because of a compilation error.
+            //
+            String modulePath = PageFlowUtils.getModulePath( request );
+            if ( ! FileUtils.osSensitiveEquals( moduleConfig.getPrefix(), modulePath ) )
+            {
+                if ( _log.isErrorEnabled() )
+                {
+                    StringBuffer msg = new StringBuffer( "No module configuration registered for " );
+                    msg.append( uri ).append( " (module path " ).append( modulePath ).append( ")." );
+                    _log.error( msg.toString() );
+                }
+
+                InternalUtils.sendDevTimeError( "PageFlow_NoModuleConf", request, response, null,
+                                                HttpServletResponse.SC_INTERNAL_SERVER_ERROR, uri, modulePath );
+                return;
+            }
+
+            //
+            // Make sure that the requested pageflow matches the pageflow for the directory.
+            //
+            ActionMapping beginMapping = getBeginMapping();
+            if ( beginMapping != null )
+            {
+                String desiredType = beginMapping.getType();
+                desiredType = desiredType.substring( desiredType.lastIndexOf( '.' ) + 1 ) + JPF_EXTENSION;
+                String requestedType = InternalUtils.decodeURI( request );
+                requestedType = requestedType.substring( requestedType.lastIndexOf( '/' ) + 1 );
+
+                if ( ! FileUtils.osSensitiveEquals( requestedType, desiredType ) )
+                {
+                    if ( _log.isDebugEnabled() )
+                    {
+                        _log.debug( "Wrong .jpf requested for this directory: got " + requestedType
+                                   + ", expected " + desiredType );
+                    }
+
+                    if ( _log.isErrorEnabled() )
+                    {
+                        StringBuffer msg = new StringBuffer( "Wrong .jpf requested for this directory: got " );
+                        msg.append( requestedType ).append( ", expected " ).append( desiredType ).append( '.' );
+                        _log.error( msg.toString() );
+                    }
+
+                    InternalUtils.sendDevTimeError( "PageFlow_WrongPath", request, response, null,
+                                                    HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                                                    requestedType, desiredType);
+
+                    return;
+                }
+            }
+
+            uri = PageFlowUtils.getBeginActionURI( uri );
+
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Got request for " + request.getRequestURI() + ", forwarding to " + uri );
+            }
+
+            doForward( uri, request, response );
+            return;
+        }
+
+        super.process( request, response );
+    }
+
+    /**
+     * TODO: comment
+     */ 
+    private static class RehydratedMultipartRequestWrapper extends MultipartRequestWrapper
+    {
+        public RehydratedMultipartRequestWrapper( HttpServletRequest request )
+        {
+            super( request );
+             
+            MultipartRequestHandler handler = MultipartRequestUtils.getCachedMultipartHandler( request );
+             
+            if ( handler != null )
+            {
+                ScopedRequest scopedRequest = ScopedServletUtils.unwrapRequest( request );
+                Map textElements = handler.getTextElements();
+                parameters = scopedRequest != null ? scopedRequest.filterParameterMap( textElements ) : textElements;
+            }
+        }
+    }
+
+    
+    public void process( HttpServletRequest request, HttpServletResponse response )
+        throws IOException, ServletException
+    {
+        int localRequestCount = -1;
+
+        if ( _log.isTraceEnabled() )
+        {
+            localRequestCount = ++requestCount;
+            _log.trace( "------------------------------- Start Request #" + localRequestCount
+                       + " -----------------------------------" );
+        }
+
+        //
+        // First reinitialize the reloadable class handler.  This will bounce a classloader if necessary.
+        //
+        ServletContext servletContext = getServletContext();
+        ContextCache.get( servletContext ).getReloadableClassHandler().reinit( request );
+        
+        //
+        // Callback to the server adapter.
+        //
+        InternalUtils.getServerAdapter().beginRequest( request, response, servletContext );
+        
+        //
+        // Initialize the ControlBeanContext in the session.
+        //
+        JavaControlUtils.initializeControlContext( request, response, servletContext );
+        
+        try
+        {
+            processInternal( request, response );
+        }
+        finally
+        {
+            //
+            // Clean up the ControlBeanContext in the session.
+            //
+            JavaControlUtils.uninitializeControlContext( request, response );
+            
+            //
+            // Callback to the server adapter.
+            //
+            InternalUtils.getServerAdapter().endRequest( request, response, servletContext );
+        }
+
+        if ( _log.isTraceEnabled() )
+        {
+            _log.trace( "-------------------------------- End Request #" + localRequestCount
+                       + " ------------------------------------" );
+        }
+    }
+    
+    /**
+     * If this is a multipart request, wrap it with a special wrapper.  Otherwise, return the request unchanged.
+     *
+     * @param request The HttpServletRequest we are processing
+     */
+    protected HttpServletRequest processMultipart( HttpServletRequest request )
+    {
+        if ( ! "POST".equalsIgnoreCase( request.getMethod() ) )
+        {
+            return request;
+        }
+
+        String contentType = request.getContentType();
+        if ( contentType != null && contentType.startsWith( "multipart/form-data" ) )
+        {
+            //
+            // We may have already gotten a multipart wrapper during process().  If so, use that.
+            //
+            MultipartRequestWrapper cachedWrapper =
+                    ( MultipartRequestWrapper ) request.getAttribute( MULTIPART_REQUEST_WRAPPER_ATTR );
+            
+            if ( cachedWrapper != null && cachedWrapper.getRequest() == request )
+            {
+                return cachedWrapper;
+            }
+            
+            try
+            {
+                //
+                // First, pre-handle the multipart request.  This parses the stream and caches a single
+                // MultipartRequestHandler in the outer request, so we can create new wrappers around it at will.
+                //
+                MultipartRequestUtils.preHandleMultipartRequest( request );
+            }
+            catch ( ServletException e )
+            {
+                _log.error( "Could not parse multipart request.", e.getRootCause() );
+                return request;
+            }
+            
+            MultipartRequestWrapper ret = new RehydratedMultipartRequestWrapper( request );
+            request.setAttribute( MULTIPART_REQUEST_WRAPPER_ATTR, ret );
+            return ret;
+        }
+        else
+        {
+            return request;
+        }
+
+    }
+    
+    protected ActionMapping getBeginMapping()
+    {
+        return ( ActionMapping ) moduleConfig.findActionConfig( BEGIN_ACTION_PATH );
+    }
+    
+    private String makeRedirectedRequestAttrsKey( String webappRelativeURI, String hash )
+    {
+        return REDIRECT_REQUEST_ATTRS_PREFIX + hash + webappRelativeURI;
+    }
+    
+    public ActionForward processException( HttpServletRequest request, HttpServletResponse response,
+                                           Exception ex, ActionForm form, ActionMapping mapping )
+        throws IOException, ServletException
+    {
+        //
+        // Note: we should only get here if FlowController.handleException itself throws an exception,
+        // or if the user has merged in Struts code that delegates to an action/exception-handler outside
+        // of the pageflow.
+        //
+        
+        return super.processException( request, response, ex, form, mapping );
+    }
+    
+    /**
+     * Used by {@link PageFlowRequestProcessor#processMapping}.  Its main job is to return
+     * {@link GlobalAppForwardAction} as the type.
+     */ 
+    protected static class GlobalAppActionMapping extends ActionMapping
+    {
+        public GlobalAppActionMapping( String actionPath )
+        {
+            setPath( actionPath );
+        }
+        
+        public String getType()
+        {
+            return GlobalAppForwardAction.class.getName();
+
+        }
+        
+        public boolean getValidate()
+        {
+            return false;
+        }
+    }
+    
+    /**
+     * Used by {@link PageFlowRequestProcessor#processMapping}.  This action simply forwards to the stored action-path,
+     * but within the Struts module associated with Global.app.
+     */ 
+    public static class GlobalAppForwardAction extends Action
+    {
+        public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request,
+                                      HttpServletResponse response )
+        {
+            assert mapping instanceof GlobalAppActionMapping : mapping.getClass().getName();
+            
+            String actionPath = PageFlowConstants.GLOBALAPP_MODULE_CONTEXT_PATH
+                                 + mapping.getPath() 
+                                 + PageFlowConstants.ACTION_EXTENSION;
+            ActionForward retval = new ActionForward( actionPath, false );
+            retval.setContextRelative( true );
+            return retval;
+        }
+    }
+    /**
+     * Used by {@link PageFlowRequestProcessor#processMapping}.  Its main job is to return
+     * {@link ExceptionHandledAction} as the type.
+     */ 
+    protected static class ExceptionHandledActionMapping extends ActionMapping
+    {
+        private ActionForward _fwd;
+        
+        public ExceptionHandledActionMapping( String actionPath, ActionForward fwd )
+        {
+            setPath( actionPath );
+            _fwd = fwd;
+        }
+        
+        public String getType()
+        {
+            return ExceptionHandledAction.class.getName();
+        }
+        
+        public ActionForward getActionForward()
+        {
+            return _fwd;
+        }
+        
+        public boolean getValidate()
+        {
+            return false;
+        }
+    }
+    
+    /**
+     * Used by {@link PageFlowRequestProcessor#processMapping}.  This action simply returns the ActionForward stored in the
+     * ExceptionHandledActionMapping that's passed in.
+     */ 
+    public static class ExceptionHandledAction extends Action
+    {
+        public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request,
+                                      HttpServletResponse response )
+        {
+            assert mapping instanceof ExceptionHandledActionMapping : mapping.getClass().getName();
+            
+            return ( ( ExceptionHandledActionMapping ) mapping ).getActionForward();
+        }
+    }
+    
+    public ActionMapping processMapping( HttpServletRequest request, HttpServletResponse response,
+                                         String path )
+        throws IOException
+    {
+        //
+        // Look for a form-specific action path.  This is used when there are two actions with the same
+        // name, but different forms (in nesting).
+        //
+        ActionForm returningForm = ( ActionForm ) request.getAttribute( FlowController.RETURNING_FORM_ATTR_NAME );
+        
+        if ( returningForm != null )
+        {
+            String qualifiedPath = path + "_" + returningForm.getClass().getName().replace( '.', '_' ).replace( '$', '_' );
+            
+            ActionMapping mapping = ( ActionMapping ) moduleConfig.findActionConfig( qualifiedPath );
+            if ( mapping != null )
+            {
+                request.setAttribute( Globals.MAPPING_KEY, mapping );
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Found form-specific action mapping " + qualifiedPath + " for " + path
+                               + ", form " + returningForm.getClass() );
+                }
+                
+                return mapping;
+            }
+        }
+        
+        //
+        // Look for a directly-defined mapping for this path.
+        //
+        ActionMapping mapping = ( ActionMapping ) moduleConfig.findActionConfig( path );
+        
+        if ( mapping != null )
+        {
+            boolean wrongForm = false;
+            
+            //
+            // We're going to bail out if there is a returningForm and the selected mapping
+            // requires a different form type.
+            //
+            if ( returningForm != null )
+            {
+                String mappingFormName = mapping.getName();
+                
+                if ( mappingFormName == null )
+                {
+                    wrongForm = true;
+                }
+                else
+                {
+                    FormBeanConfig mappingFormBean = moduleConfig.findFormBeanConfig( mapping.getName() );
+                    String returningFormType = returningForm.getClass().getName();
+                    
+                    if ( mappingFormBean == null || ! mappingFormBean.getType().equals( returningFormType ) )
+                    {
+                        wrongForm = true;
+                    }
+                }
+            }
+            
+            if ( ! wrongForm )
+            {
+                request.setAttribute( Globals.MAPPING_KEY, mapping );
+                return mapping;
+            }
+        }
+
+        //
+        // Look for a mapping for "unknown" paths
+        //
+        ActionConfig configs[] = moduleConfig.findActionConfigs();
+        for ( int i = 0; i < configs.length; i++ )
+        {
+            if ( configs[i].getUnknown() )
+            {
+                mapping = ( ActionMapping ) configs[i];
+                request.setAttribute( Globals.MAPPING_KEY, mapping );
+                return mapping;
+            }
+        }
+
+        //
+        // If we've already tried Global.app, return an error.  Otherwise, try it (forward to it).
+        //
+        
+        // originalRequestURI is the request URI we had before trying to forward to an action in Global.app.
+        String originalRequestURI = RequestVariables.get( request ).getOriginalRequestURI();
+        
+        if ( originalRequestURI != null )
+        {
+            if ( _log.isInfoEnabled() )
+            {
+                StringBuffer msg = new StringBuffer( "Action \"" ).append( path );
+                _log.info( msg.append( "\" was also unhandled by Global.app." ).toString() );
+            }
+            
+            //
+            // If there's a PageFlowController for this request, try and let it handle an
+            // action-not-found exception.  Otherwise, let Struts print out its "invalid path"
+            // message.
+            //
+            FlowController fc = null;
+            
+            try
+            {
+                ServletContext servletContext = getServletContext();
+                fc = FlowControllerFactory.getPageFlowForURI( request, response, originalRequestURI, servletContext );
+
+                if ( fc == null )
+                {
+                    fc = InternalUtils.ensureGlobalApp( request, response, servletContext );
+                }
+                if ( fc != null )
+                {
+                    Exception ex = new ActionNotFoundException( path, fc, returningForm );
+                    InternalUtils.setCurrentModule( fc.getModuleConfig(), request );
+                    ActionForward result = fc.handleException( ex, null, path, null, request, response );
+                    return new ExceptionHandledActionMapping( path, result );
+                }
+            }
+            catch ( Exception e )
+            {
+                // ignore this -- just let Struts do its thing.
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( e );
+                }
+            }
+                        
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Couldn't handle an ActionNotFoundException -- delegating to Struts" ); 
+            }
+            
+            return super.processMapping( request, response, path );
+        }
+        else
+        {
+            // Try letting Global.app handle this action.
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Action \"" + path + "\" not handled in request for "
+                            + request.getRequestURI() + ".  Trying this action on Global.app." );
+            }
+            
+            RequestVariables.get( request ).setOriginalRequestURI( InternalUtils.decodeURI( request ) );
+            return new GlobalAppActionMapping( path );
+        }
+    }
+    
+    protected boolean processRoles( HttpServletRequest request, HttpServletResponse response, ActionMapping mapping )
+        throws IOException, ServletException 
+    {
+        //
+        // If there are no required roles for this action, just return.
+        //
+        String roles[] = mapping.getRoleNames();
+        if ( roles == null || roles.length < 1 )
+        {
+            return ( true );
+        }
+
+        // Check the current user against the list of required roles
+        for ( int i = 0; i < roles.length; i++ )
+        {
+            if ( ContextCache.get( getServletContext() ).getLoginHandler().isUserInRole( roles[i], request ) )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( " User " + request.getRemoteUser() + " has role '" + roles[i] + "', granting access" );
+                }
+                
+                return true;
+            }
+        }
+
+        // The current user is not authorized for this action
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( " User '" + request.getRemoteUser() + "' does not have any required role, denying access" );
+        }
+                
+        //
+        // Here, Struts sends an HTTP error.  We just store the result in the request, so
+        // logic in FlowController can generate an exception at the right time.
+        //
+        request.setAttribute( PROCESS_ROLES_FAILED_ATTR, Boolean.TRUE );
+        return true;    // We'll fail later, in processActionCreate.
+    }
+    
+    static boolean roleCheckFailed( HttpServletRequest request, boolean removeFlag )
+    {
+        boolean result = request.getAttribute( PROCESS_ROLES_FAILED_ATTR ) != null;
+        if ( removeFlag ) request.removeAttribute( PROCESS_ROLES_FAILED_ATTR );
+        return result;
+    }
+    
+    private String addScopeParams( String url, HttpServletRequest request )
+    {
+        //
+        // If the current request is scoped, add the right request parameter to the URL.
+        //
+        String scopeID = request.getParameter( ScopedServletUtils.SCOPE_ID_PARAM );
+        if ( scopeID != null )
+        {
+            return PageflowTagUtils.addParam( url, ScopedServletUtils.SCOPE_ID_PARAM, scopeID );
+        }
+        else
+        {
+            return url;
+        }
+    }
+    
+    /**
+     * This override of the base method ensures that absolute URIs don't get the context
+     * path prepended, and handles forwards to special things like return-to="currentPage".
+     */
+    protected void processForwardConfig( HttpServletRequest request, HttpServletResponse response, ForwardConfig fwd )
+            throws IOException, ServletException
+    {
+        ServletContext servletContext = getServletContext();
+        ForwardRedirectHandler fwdRedirectHandler = ContextCache.get( servletContext ).getForwardRedirectHandler();
+
+        //
+        // The following is similar to what's in super.processForwardConfig(), but it avoids putting
+        // a slash in front of absolute URLs (e.g., ones that start with "http:").
+        //
+        if ( fwd != null )
+        {
+            if ( _log.isDebugEnabled() ) _log.debug( "processForwardConfig(" + fwd + ")" );
+    
+            //
+            // If this is a "special" page flow forward, create a Forward to handle it and pass
+            // it to the current page flow.  This should only happen when processValidate()
+            // calls this method (or if a plain Struts action forwards to this forward) --
+            // otherwise, the page flow should be using a Forward already.
+            //
+            if ( fwd instanceof PageFlowActionForward )
+            {
+                ActionMapping mapping = ( ActionMapping ) request.getAttribute( Globals.MAPPING_KEY );
+                assert mapping != null;
+                ActionForm form = InternalUtils.getFormBean( mapping, request );
+                PageFlowController curJpf = InternalUtils.ensureCurrentPageFlow( request, response );
+                Forward pfFwd = new Forward( ( ActionForward ) fwd );
+                fwd = ForwardHandler.processForward( pfFwd, mapping, request, response, form, servletContext, curJpf );
+            }
+            
+            String path = fwd.getPath();
+            
+            //
+            // If the URI is absolute (e.g., starts with "http:"), do a redirect to it no matter what.
+            //
+            if ( FileUtils.isAbsoluteURI( path ) )
+            {
+                fwdRedirectHandler.redirect( addScopeParams( path, request ), request, response );                
+            }
+            else if ( fwd.getRedirect() )
+            {
+                String redirectURI;
+                
+                if ( path.startsWith( "/" ) && fwd instanceof Forward && ( ( Forward ) fwd ).isExplicitPath() )
+                {
+                    redirectURI = path;
+                }
+                else
+                {
+                    redirectURI = request.getContextPath() + RequestUtils.forwardURL( request, fwd );
+                }
+                
+                fwdRedirectHandler.redirect( addScopeParams( redirectURI, request ), request, response );
+            }
+            else
+            {
+                String fwdURI;
+                
+                if ( path.startsWith( "/" ) && fwd instanceof Forward && ( ( Forward ) fwd ).isExplicitPath() )
+                {
+                    fwdURI = path;
+                }
+                else
+                {
+                    fwdURI = RequestUtils.forwardURL( request, fwd );
+                }
+                
+                doForward( fwdURI, request, response );
+            }
+        }
+    }
+    
+    protected void changeScheme( String webappRelativeURI, String scheme, int port,
+                                 HttpServletRequest request, HttpServletResponse response )
+        throws URISyntaxException, IOException, ServletException
+    {
+        //
+        // First put all request attributes into the session, so they can be added to the
+        // redirected request.
+        //
+        Map attrs = new HashMap();
+        String queryString = null;
+        ServletContext servletContext = getServletContext();
+        
+        for ( Enumeration e = request.getAttributeNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            attrs.put( name, request.getAttribute( name ) );
+        }
+        
+        if ( ! attrs.isEmpty() )
+        {
+            String hash = new Integer( request.hashCode() ).toString();
+            String key = makeRedirectedRequestAttrsKey( webappRelativeURI, hash );
+            request.getSession().setAttribute( key, attrs );
+            queryString = URLRewriterService.rewriteName( servletContext, request, REDIRECT_REQUEST_ATTRS_PARAM )
+                            + "=" + hash;
+        }
+
+        
+        //
+        // Now do the redirect.
+        //
+        URI redirectURI = new URI( scheme, null, request.getServerName(), port,
+                                   request.getContextPath() + webappRelativeURI,
+                                   queryString, null );
+        
+        ForwardRedirectHandler fwdRedirectHandler = ContextCache.get( servletContext ).getForwardRedirectHandler();
+        fwdRedirectHandler.redirect( redirectURI.toString(), request, response );
+        
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( "Redirected to " + redirectURI );
+        }
+    }
+    
+    /**
+     * @deprecated Use {@link ContextCache#shouldDoSecureForwards} instead.
+     */
+    protected boolean shouldDoSecureForwards()
+    {
+        return ContextCache.get( getServletContext() ).shouldDoSecureForwards();
+    }
+
+    protected void doForward( String uri, HttpServletRequest request, HttpServletResponse response )
+        throws IOException, ServletException
+    {
+        boolean securityRedirected = false;
+        ServletContext servletContext = getServletContext();
+        
+        if ( ContextCache.get( servletContext ).shouldDoSecureForwards() )
+        {
+            Boolean needSecure = PageFlowUtils.isSecureResource( uri, servletContext, request );
+            
+            if ( needSecure != null )
+            {
+                try
+                {
+                    if ( request.isSecure() )
+                    {
+                        if ( needSecure.equals( Boolean.FALSE ) )
+                        {
+                            changeScheme( uri, SCHEME_UNSECURE,
+                                          InternalUtils.getServerAdapter().getListenPort(request),
+                                          request, response );
+                            securityRedirected = true;
+                        }
+                    }
+                    else
+                    {
+                        if ( needSecure.equals( Boolean.TRUE ) )
+                        {
+                            changeScheme( uri, SCHEME_SECURE, 
+                                          InternalUtils.getServerAdapter().getSecureListenPort(request),
+                                          request, response );
+                            securityRedirected = true;
+                        }
+                    }
+                }
+                catch ( URISyntaxException e )
+                {
+                    _log.error( "Bad forward URI " + uri, e );
+                }
+            }
+        }
+        
+        if ( ! securityRedirected )
+        {
+            ForwardRedirectHandler fwdRedirectHandler = ContextCache.get( servletContext ).getForwardRedirectHandler();
+            fwdRedirectHandler.forward( uri, request, response );
+        }
+    }
+    
+    /**
+     * Set the no-cache headers for all responses.  This overrides the base Struts behavior to
+     * prevent caching entirely in iterative dev mode.
+     */
+    protected void processNoCache( HttpServletRequest request, HttpServletResponse response )
+    {
+        if ( moduleConfig.getControllerConfig().getNocache()
+                || ! InternalUtils.getServerAdapter().isInProductionMode() )
+        {
+            //
+            // The call to PageFlowJspFilter.preventCache() will cause caching to be prevented
+            // even when we end up forwarding to a JSP.  Normally, no-cache headers are lost
+            // when a server forward occurs.
+            //
+            ServletUtils.preventCache( response );
+            PageFlowJspFilter.preventCache( request );
+        }
+    }
+    
+    protected ActionForward processActionPerform( HttpServletRequest request, HttpServletResponse response,
+                                                  Action action, ActionForm form, ActionMapping mapping )
+            throws IOException, ServletException
+    {
+        PageFlowController pfc = null;
+        ServletContext servletContext = getServletContext();
+        
+        if ( action instanceof PageFlowController )
+        {
+            pfc = ( PageFlowController ) action;
+        }
+        
+        //
+        // Run any before-action interceptors.
+        //
+        if ( ! ActionInterceptorChain.isReturningFromIntercept( request ) && pfc != null )
+        {
+            String actionName = PageFlowUtils.getActionName( mapping );
+            ActionInterceptorChain interceptorChain =
+                    ActionInterceptorChain.getBeforeActionChain( actionName, request, servletContext );
+            if ( interceptorChain != null )
+            {
+                InterceptorForward interceptorForward =
+                        interceptorChain.doIntercept( request, response, null, pfc, actionName );
+                
+                if ( interceptorForward != null )
+                {
+                    if ( _log.isDebugEnabled() )
+                    {
+                        _log.debug( "Before-action intercepted in processMapping; forwarding to "
+                                   + interceptorForward.getPath() );
+                    }
+                    
+                    return interceptorForward;
+                }
+            }
+        }
+        else
+        {
+            ActionInterceptorChain.setIsReturningFromIntercept( request, false );
+        }
+        
+        ActionForward ret = super.processActionPerform( request, response, action, form, mapping );
+        
+        //
+        // Run any after-action interceptors.
+        //
+        if ( pfc != null )
+        {
+            String actionName = InternalUtils.getActionName( mapping );
+            ActionInterceptorChain interceptorChain =
+                    ActionInterceptorChain.getAfterActionChain( actionName, request, servletContext );
+            if ( interceptorChain != null )
+            {
+                InterceptorForward originalForward = ( ret != null ? new InterceptorForward( ret ) : null );
+                InterceptorForward interceptorForward =
+                        interceptorChain.doIntercept( request, response, originalForward, pfc, actionName );
+                
+                if ( interceptorForward != null )
+                {
+                    if ( _log.isDebugEnabled() )
+                    {
+                        _log.debug( "After-action intercepted in processMapping; forwarding to "
+                                   + interceptorForward.getPath() );
+                    }
+                    
+                    return interceptorForward;
+                }
+            }
+        }
+        
+        return ret;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,295 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptor;
+import org.apache.beehive.netui.pageflow.interceptor.InterceptorForward;
+import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptorChain;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+import javax.servlet.http.HttpSessionBindingListener;
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Stack;
+import java.io.Serializable;
+
+
+/**
+ * Stack for keeping track of a series of nested page flows.  When a nested page flow is entered,
+ * the previous page flow is pushed onto this stack, which is kept in the user session.
+ */ 
+public class PageFlowStack
+        implements HttpSessionBindingListener, Serializable
+{
+    private static final Logger _log = Logger.getInstance( PageFlowStack.class );
+    private static final String JPF_STACK_ATTR = PageFlowStack.class.getName() + "_stack";
+    
+    private Stack _stack = new Stack();
+    
+    
+    /**
+     * Wrapper that contains a pushed page flow and information related to it.
+     */ 
+    public static class PushedPageFlow implements Serializable
+    {
+        private PageFlowController _pageFlow;
+        private ActionInterceptor _interceptor;
+        private InterceptorForward _interceptedForward;
+
+        public PushedPageFlow( PageFlowController pageFlow, ActionInterceptor interceptor,
+                               InterceptorForward interceptedFwd )
+        {
+            _pageFlow = pageFlow;
+            _interceptor = interceptor;
+            _interceptedForward = interceptedFwd;
+        }
+
+        public PageFlowController getPageFlow()
+        {
+            return _pageFlow;
+        }
+
+        public void setPageFlow( PageFlowController pageFlow )
+        {
+            _pageFlow = pageFlow;
+        }
+
+        public ActionInterceptor getInterceptor()
+        {
+            return _interceptor;
+        }
+
+        public void setInterceptor( ActionInterceptor interceptor )
+        {
+            _interceptor = interceptor;
+        }
+
+        public InterceptorForward getInterceptedForward()
+        {
+            return _interceptedForward;
+        }
+
+        public void setInterceptedForward( InterceptorForward interceptedForward )
+        {
+            _interceptedForward = interceptedForward;
+        }
+    }
+    
+   /**
+     * Get the stack of nested page flows for the current user session.  Create and store an empty
+     * stack if none exists.
+     * 
+     * @param request the current HttpServletRequest
+     * @return the stack of nested page flows {@link PushedPageFlow}s) for the current user session.
+     */
+    public static final PageFlowStack get( HttpServletRequest request )
+    {
+        return get( request, true );
+    }
+
+    /**
+     * Get the stack of nested page flows for the current user session.  Create and store an empty
+     * stack if none exists.
+     * 
+     * @param request the current HttpServletRequest
+     * @return a {@link PageFlowStack} of nested page flows ({@link PageFlowController}s) for the current user session.
+     */    
+    public static PageFlowStack get( HttpServletRequest request, boolean createIfNotExist )
+    {
+        PageFlowStack jpfStack =
+                ( PageFlowStack ) ScopedServletUtils.getScopedSessionAttr( JPF_STACK_ATTR,
+                                                                           PageFlowUtils.unwrapMultipart( request ) );
+
+        if ( jpfStack == null && createIfNotExist )
+        {
+            jpfStack = new PageFlowStack();
+            jpfStack.save( request );
+        }
+
+        return jpfStack;
+    }
+    
+    /**
+     * Destroy the stack of {@link PageFlowController}s that have invoked nested page flows.
+     * 
+     * @param request the current HttpServletRequest.
+     */ 
+    public static void destroy( HttpServletRequest request )
+    {
+        ScopedServletUtils.removeScopedSessionAttr( JPF_STACK_ATTR, PageFlowUtils.unwrapMultipart( request ) );
+    }
+    
+    /**
+     * Pop page flows from the nesting stack until one of the given type is found.
+     * 
+     * @return the last popped page flow if one of the given type was found, or <code>null</code>
+     *         if none was found.
+     */ 
+    PageFlowController popUntil( HttpServletRequest request, Class stopAt )
+    {
+        while ( ! isEmpty()  )
+        {
+            PageFlowController popped = pop( request ).getPageFlow();
+            
+            if ( popped.getClass().equals( stopAt ) )
+            {
+                if ( isEmpty() )
+                {
+                    //
+                    // If we've popped everything from the stack, remove the stack attribute from the session.
+                    //
+                    destroy( request );
+                }
+
+                return popped;
+            }
+            else
+            {
+                //
+                // We're discarding the popped page flow.  Invoke its destroy() callback.
+                //
+                popped.destroy( request.getSession() );
+            }
+        }
+
+        destroy( request );   // we're empty -- remove the attribute from the session.
+        return null;
+    }
+    
+    void ensureFailover( HttpServletRequest request )
+    {
+        String name =
+            ScopedServletUtils.getScopedSessionAttrName( JPF_STACK_ATTR, PageFlowUtils.unwrapMultipart( request ) );
+        InternalUtils.getServerAdapter().ensureFailover( name, this, request );
+    }
+    
+    void save( HttpServletRequest request )
+    {
+        ScopedServletUtils.setScopedSessionAttr( JPF_STACK_ATTR, this, PageFlowUtils.unwrapMultipart( request ) );
+    }
+    
+    PageFlowStack()
+    {
+    }
+    
+    /**
+     * Push a page flow onto the stack of nested page flows in the session.
+     * 
+     * @param pageFlow the page flow to push.
+     * @param request the current HttpServletRequest.
+     */ 
+    public void push( PageFlowController pageFlow, HttpServletRequest request )
+    {
+        pageFlow.setIsOnNestingStack( true );
+        ActionInterceptor interceptor = ActionInterceptorChain.getActiveInterceptor( request );
+        InterceptorForward interceptedForward = ActionInterceptorChain.getInterceptedForward( request, true );
+        _stack.push( new PushedPageFlow( pageFlow, interceptor, interceptedForward ) );
+        ensureFailover( request );    // to ensure that this attribute is replicated for session failover
+    }
+    
+    /**
+     * Pop the most recently-pushed page flow from the stack of nested page flows in the session. 
+     * 
+     * @param request the current HttpServletRequest.
+     * @return a {@link PushedPageFlow} that represents the popped page flow.
+     */ 
+    public PushedPageFlow pop( HttpServletRequest request )
+    {
+        PushedPageFlow ppf = ( PushedPageFlow ) _stack.pop();
+        ppf.getPageFlow().setIsOnNestingStack( false );
+        
+        if ( request != null )  // may be null if we're called from valueUnbound()
+        {
+            ensureFailover( request );    // to ensure that this attribute is replicated for session failover
+        }
+        
+        return ppf;
+    }
+    
+    /**
+     * Get the most recently-pushed page flow from the stack of nested page flows in the session.
+     * 
+     * @return a {@link PushedPageFlow} that represents the page flow at the top of the stack.
+     */ 
+    public PushedPageFlow peek()
+    {
+        return ( PushedPageFlow ) _stack.peek();
+    }
+    
+    /**
+     * Tell whether the stack of nested page flows is empty.
+     * 
+     * @return <code>true</code> if there are no nested page flows on the stack.
+     */ 
+    public boolean isEmpty()
+    {
+        return _stack.isEmpty();
+    }
+    
+    /**
+     * Get the size of the stack of nested page flows.
+     * 
+     * @return the number of page flows that are currently (hidden away) on the stack.
+     */ 
+    public int size()
+    {
+        return _stack.size();
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public void valueBound( HttpSessionBindingEvent event )
+    {
+    }
+
+    /**
+     * @exclude
+     */ 
+    public void valueUnbound( HttpSessionBindingEvent event )
+    {
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( "The page flow stack is being unbound from the session." );
+        }
+        
+        while ( ! isEmpty() )
+        {
+            PageFlowController jpf = pop( null ).getPageFlow();
+            jpf.destroy( event.getSession() );
+        }
+    }
+    
+    /**
+     * Get a stack of PageFlowControllers, not of PushedPageFlows.
+     */ 
+    Stack getLegacyStack()
+    {
+        Stack ret = new Stack();
+        
+        for ( int i = 0; i < _stack.size(); ++i )
+        {
+            ret.push( ( ( PushedPageFlow ) _stack.get( i ) ).getPageFlow() );
+        }
+        
+        return ret;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,893 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.pageflow.internal.ActionResultImpl;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.beehive.netui.pageflow.scoping.ScopedResponse;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.scoping.internal.ScopedRequestImpl;
+import org.apache.beehive.netui.util.FileUtils;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionServlet;
+import org.apache.struts.config.FormBeanConfig;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.upload.MultipartRequestWrapper;
+import org.apache.struts.util.RequestUtils;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+/**
+ * Utility methods related to Page Flow.
+ */ 
+public class PageFlowUtils
+        implements PageFlowConstants
+{
+    private static final Logger _log = Logger.getInstance( PageFlowUtils.class );
+
+    private static final String ACTION_URI_ATTR = PageFlowUtils.class.getName() + "_actionURI";
+    private static final int    JPF_EXTENSION_LEN = JPF_EXTENSION.length();
+    private static final String DEFAULT_AUTORESOLVE_EXTENSIONS[] = new String[]{ ACTION_EXTENSION, JPF_EXTENSION };
+    
+    
+    /** Map of Struts module prefix to Map of form-type-name to form-name. */
+    private static Map< String, Map< String, String > > _formNameMaps =
+            new ConcurrentHashMap< String, Map< String, String > >();
+
+    
+    /**
+     * Get the Struts module path for a URI.  This is the parent directory, relative to the web
+     * application root, of the file referenced by the URI.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param requestURI the URI for which to get the Struts module path.
+     */
+    public static String getModulePath( HttpServletRequest request, String requestURI )
+    {
+        return getModulePathForRelativeURI( getRelativeURI( request, requestURI, null ) );
+    }
+
+    /**
+     * Get the Struts module path for the current request URI.  This is the parent directory,
+     * relative to the web application root, of the file referenced by the request URI.
+     * 
+     * @param request the current HttpServletRequest.
+     */
+    public static String getModulePath( HttpServletRequest request )
+    {
+        String requestURI = InternalUtils.decodeURI( request );
+        return getModulePathForRelativeURI( getRelativeURI( request, requestURI, null ) );
+    }
+
+    /**
+     * Get the Struts module path for a URI that is relative to the web application root.
+     * 
+     * @param uri the URI for which to get the module path.
+     */
+    public static String getModulePathForRelativeURI( String uri )
+    {
+        if ( uri.length() == 0 )
+        {
+            return "/";
+        }
+        
+        assert uri.charAt( 0 ) == '/' : uri;
+
+        // Strip off the actual page name (e.g., some_page.jsp)
+        int slash = uri.lastIndexOf( '/' );
+        uri = uri.substring( 0, slash );
+
+        return uri;
+    }
+
+    /**
+     * Get the request URI, relative to the URI of the given PageFlowController.
+     *
+     * @param request the current HttpServletRequest.
+     * @param relativeTo a PageFlowController to which the returned URI should be relative, or
+     *        <code>null</code> if the returned URI should be relative to the webapp root.
+     */
+    public static final String getRelativeURI( HttpServletRequest request, PageFlowController relativeTo )
+    {
+        return getRelativeURI( request, InternalUtils.decodeURI( request ), relativeTo );
+    }
+
+    /**
+     * Get a URI relative to the URI of the given PageFlowController.
+     *
+     * @param request the current HttpServletRequest.
+     * @param uri the URI which should be made relative.
+     * @param relativeTo a PageFlowController to which the returned URI should be relative, or
+     *        <code>null</code> if the returned URI should be relative to the webapp root.
+     */
+    public static final String getRelativeURI( HttpServletRequest request, String uri, PageFlowController relativeTo )
+    {
+        String contextPath = request.getContextPath();
+
+        if ( relativeTo != null )
+        {
+            contextPath += relativeTo.getModulePath();
+        }
+
+        String requestUrl = uri;
+        int overlap = requestUrl.indexOf( contextPath );
+
+        if ( overlap != -1 )
+        {
+            return requestUrl.substring( overlap + contextPath.length() );
+        }
+        else
+        {
+            return requestUrl;
+        }
+    }
+
+    /**
+     * Get a URI for the "begin" action in the PageFlowController associated with the given
+     * request URI.
+     * 
+     * @return a String that is the URI for the "begin" action in the PageFlowController associated
+     * with the given request URI.
+     */
+    public static String getBeginActionURI( String requestURI )
+    {
+        // Translate this to a request for the begin action ("begin.do") for this PageFlowController.
+        StringBuffer retVal = new StringBuffer();
+        int lastSlash = requestURI.lastIndexOf( '/' );
+
+        if ( lastSlash != -1 )
+        {
+            retVal.append( requestURI.substring( 0, lastSlash ) );
+        }
+
+        retVal.append( '/' ).append( BEGIN_ACTION_NAME ).append( ACTION_EXTENSION );
+        return retVal.toString();
+    }
+
+    /**
+     * Get the stack of nested page flows for the current user session.  Create and store an empty
+     * stack if none exists.
+     * 
+     * @deprecated Use {@link PageFlowStack#get} instead.
+     * 
+     * @param request the current HttpServletRequest
+     * @return a {@link PageFlowStack} of nested page flows ({@link PageFlowController}s) for the current user session.
+     */
+    public static final Stack getPageFlowStack( HttpServletRequest request )
+    {
+        return ( PageFlowStack.get( request, true ).getLegacyStack() );
+    }
+    
+    /**
+     * Destroys the stack of {@link PageFlowController}s that have invoked nested page flows.
+     * 
+     * @deprecated Use {@link PageFlowStack#destroy} instead.
+     * 
+     * @param request the current HttpServletRequest.
+     */ 
+    public static void destroyPageFlowStack( HttpServletRequest request )
+    {
+        PageFlowStack.destroy( request );
+    }
+    
+    /**
+     * Get the {@link PageFlowController} that is nesting the current one.
+     * 
+     * @param request the current HttpServletRequest.
+     * @return the nesting {@link PageFlowController}, or <code>null</code> if the current one
+     *         is not being nested.
+     */ 
+    public static PageFlowController getNestingPageFlow( HttpServletRequest request )
+    {
+        PageFlowStack jpfStack = PageFlowStack.get( request, false );
+        
+        if ( jpfStack != null && ! jpfStack.isEmpty() )
+        {
+            PageFlowController top = jpfStack.peek().getPageFlow();
+            InternalUtils.warnAboutClassLoaders( top, request );
+            return top;
+        }
+        
+        return null;
+    }
+
+    /**
+     * Get the current PageFlowController.
+     * 
+     * @param request the current HttpServletRequest.
+     * @return the current PageFlowController from the user session, or <code>null</code>
+     *         if there is none.
+     */ 
+    public static final PageFlowController getCurrentPageFlow( HttpServletRequest request )
+    {
+        return InternalUtils.getCurrentPageFlow( request, true );
+    }
+    
+    /**
+     * Get the current ActionResolver ({@link PageFlowController}).
+     * 
+     * @return the current ActionResolver from the user session, or <code>null</code> if there is none.
+     */ 
+    public static ActionResolver getCurrentActionResolver( HttpServletRequest request )
+    {
+        return InternalUtils.getCurrentActionResolver( request, true );
+    }
+    
+    /**
+     * Get the current {@link GlobalApp} instance.
+     * 
+     * @param request the current HttpServletRequest.
+     * @return the current {@link GlobalApp} from the user session, or <code>null</code> if none
+     *         exists.
+     */ 
+    public static GlobalApp getGlobalApp( HttpServletRequest request )
+    {
+        HttpSession session = request.getSession( false );
+
+        if ( session != null )
+        {
+            GlobalApp current = ( GlobalApp ) session.getAttribute( GLOBALAPP_ATTR );
+
+            if ( current != null )
+            {
+                return current;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Delete a "singleton" page flow from the session. Once it is created, a singleton page flow
+     * is never removed from the session unless this method or {@link PageFlowController#delete} is
+     * called.  Navigating to another page flow hides the current singleton controller, but does not
+     * remove it.
+     */
+    public static void deleteSingletonPageFlow( String modulePath, HttpServletRequest request )
+    {
+        HttpServletRequest unwrappedRequest = unwrapMultipart( request );
+        String attrName = InternalUtils.getSingletonFlowAttr( modulePath );
+        ScopedServletUtils.removeScopedSessionAttr( attrName, unwrappedRequest );
+
+        //
+        // Now, if the current page flow is this singleton, delete the reference.
+        //
+        String currentSingletonModulePath =
+                ( String ) ScopedServletUtils.getScopedSessionAttr( CURRENT_SINGLETON_ATTR, unwrappedRequest );
+        
+        if ( modulePath.equals( currentSingletonModulePath ) )
+        {
+            ScopedServletUtils.removeScopedSessionAttr( CURRENT_SINGLETON_ATTR, unwrappedRequest );
+        }
+    }
+    
+    /**
+     * Get the singleton page flow instance associated with the given module (directory) path.
+     * 
+     * @param modulePath the webapp-relative path to the directory containing the singleton page flow.
+     * @param request the current HttpServletRequest.
+     * @return the singleton page flow instance associated with the given module, or <code>null</code> if none is found.
+     */ 
+    public static PageFlowController getSingletonPageFlow( String modulePath, HttpServletRequest request )
+    {
+        return InternalUtils.getSingletonPageFlow( modulePath, request, true );
+    }
+    
+    /**
+     * Make any form beans in the given {@link Forward} object available as attributets in the
+     * request/session (as appropriate).
+     * 
+     * @param mapping the ActionMapping for the current Struts action being processed.
+     * @param fwd the {@link Forward} object that contains the ActionForm instances to be
+     *            made available in the request/session (as appropriate).
+     * @param request the current HttpServletRequest.
+     * @param overwrite if <code>false</code> a form from <code>fwd</code> will only be set
+     *            in the request if there is no existing form with the same name.
+     */
+    public static void setOutputForms( ActionMapping mapping, Forward fwd, HttpServletRequest request, 
+                                       boolean overwrite )
+    {
+        if ( fwd == null )
+        {
+            return;
+        }
+        
+        if ( mapping != null )
+        {
+            setOutputForms( mapping, fwd.getOutputForms(), request, overwrite );
+        }
+        
+        InternalUtils.setForwardedForm( fwd.getFirstOutputForm( mapping, request ), request );
+    }
+    
+    /**
+     * Make any form beans in the given {@link Forward} object available as attributets in the
+     * request/session (as appropriate).
+     * 
+     * @param mapping the ActionMapping for the current Struts action being processed.
+     * @param fwd the {@link Forward} object that contains the ActionForm instances to be
+     *            made available in the request/session (as appropriate).
+     * @param request the current HttpServletRequest.
+     */
+    public static void setOutputForms( ActionMapping mapping, Forward fwd, HttpServletRequest request )
+    {
+        if ( fwd == null )
+        {
+            return;
+        }
+
+        if ( mapping != null )
+        {
+            setOutputForms( mapping, fwd.getOutputForms(), request );
+        }
+
+        InternalUtils.setForwardedForm( fwd.getFirstOutputForm( mapping, request ), request );
+    }
+
+    /**
+     * Make a set of form beans available as attributets in the request/session (as appropriate).
+     * 
+     * @param mapping the ActionMapping for the current Struts action being processed.
+     * @param outputForms an array of ActionForm instances to be made available in the
+     *            request/session (as appropriate).
+     * @param request the current HttpServletRequest.
+     */
+    public static void setOutputForms( ActionMapping mapping, ActionForm[] outputForms,
+                                       HttpServletRequest request )
+    {
+        setOutputForms( mapping, outputForms, request, true );
+    }
+    
+    /**
+     * Make a set of form beans available as attributets in the request/session (as appropriate).
+     * 
+     * @param mapping the ActionMapping for the current Struts action being processed.
+     * @param outputForms an array of ActionForm instances to be made available in the
+     *            request/session (as appropriate).
+     * @param overwrite if <code>false</code> a form from <code>fwd</code> will only be set
+     *            in the request if there is no existing form with the same name.
+     * @param request the current HttpServletRequest.
+     */
+    public static void setOutputForms( ActionMapping mapping, ActionForm[] outputForms,
+                                       HttpServletRequest request, boolean overwrite )
+    {
+        try
+        {
+            //
+            // Now set any output forms in the request or session, as appropriate.
+            //
+            assert mapping.getScope() == null
+                    || mapping.getScope().equals( "request" )
+                    || mapping.getScope().equals( "session" )
+                : mapping.getScope();
+
+            
+            for ( int i = 0; i < outputForms.length; ++i )
+            {
+                setOutputForm( mapping, outputForms[i], request, overwrite );
+            }
+        }
+        catch ( Exception e )
+        {
+            _log.error( "Error while setting Struts form-beans", e );
+        }
+    }
+
+    private static String getFormNameFromModuleConfig( ActionForm form, ModuleConfig moduleConfig )
+    {
+        String modulePrefix = moduleConfig.getPrefix();
+        Map< String, String > formNameMap = _formNameMaps.get( modulePrefix );  // map of form-type-name to form-name
+        
+        if ( formNameMap == null )
+        {
+            formNameMap = new HashMap< String, String >();
+            FormBeanConfig[] formBeans = moduleConfig.findFormBeanConfigs();
+            
+            for ( int j = 0; j < formBeans.length; ++j )
+            {
+                formNameMap.put( formBeans[j].getType(), formBeans[j].getName() );
+            }
+            
+            _formNameMaps.put( modulePrefix, formNameMap );
+        }
+        
+        return formNameMap.get( form.getClass().getName() );
+    }
+    
+    /**
+     * Make a form bean available as an attributet in the request/session (as appropriate).
+     * 
+     * @param mapping the ActionMapping for the current Struts action being processed.
+     * @param form an ActionForm instance to be made available in the request/session
+     *           (as appropriate).
+     * @param overwrite if <code>false</code> a form from <code>fwd</code> will only be set
+     *           in the request if there is no existing form with the same name.
+     * @param request the current HttpServletRequest.
+     */
+    public static void setOutputForm( ActionMapping mapping, ActionForm form,
+                                      HttpServletRequest request, boolean overwrite )
+    {
+        if ( form != null )
+        {
+            ModuleConfig moduleConfig = mapping.getModuleConfig();
+            String formName = getFormNameFromModuleConfig( form, moduleConfig );
+            
+            if ( formName == null )
+            {
+                formName = getFormBeanName( form, request, false );
+            }
+            
+            InternalUtils.setFormInScope( formName, form, mapping, request, overwrite );
+        }
+    }
+    
+    /**
+     * Get the name for the type of a ActionForm instance.  Use a name looked up from
+     * the current Struts module, or, if none is found, create one.
+     * 
+     * @param formInstance the ActionForm instance whose type will determine the name.
+     * @param request the current HttpServletRequest, which contains a reference to the current Struts module.
+     * @return the name found in the Struts module, or, if none is found, a name that is either:
+     *     <ul>
+     *         <li>a camel-cased version of the base class name (minus any package or outer-class
+     *             qualifiers, or, if that name is already taken,</li>
+     *         <li>the full class name, with '.' and '$' replaced by '_'.</li>
+     *     </ul>
+     */ 
+    public static String getFormBeanName( ActionForm formInstance, HttpServletRequest request )
+    {
+        return getFormBeanName( formInstance, request, true );
+    }
+
+    /**
+     * Get the name for an ActionForm type.  Use a name looked up from the current Struts module, or,
+     * if none is found, create one.
+     * 
+     * @param formBeanClass the ActionForm-derived class whose type will determine the name.
+     * @param request the current HttpServletRequest, which contains a reference to the current Struts module.
+     * @return the name found in the Struts module, or, if none is found, a name that is either:
+     *     <ul>
+     *         <li>a camel-cased version of the base class name (minus any package or outer-class
+     *             qualifiers, or, if that name is already taken,</li>
+     *         <li>the full class name, with '.' and '$' replaced by '_'.</li>
+     *     </ul>
+     */ 
+    public static String getFormBeanName( Class formBeanClass, HttpServletRequest request )
+    {
+        return getFormBeanName( formBeanClass, request, true );
+    }
+
+    /**
+     * Get the name for an ActionForm type.  Use a name looked up from the current Struts module, or,
+     * if none is found, create one.
+     * 
+     * @param formBeanClass the ActionForm-derived class whose type will determine the name.
+     * @param request the current HttpServletRequest, which contains a reference to the current Struts module.
+     * @return the name found in the Struts module, or, if none is found, a name that is either:
+     *     <ul>
+     *         <li>a camel-cased version of the base class name (minus any package or outer-class
+     *             qualifiers, or, if that name is already taken,</li>
+     *         <li>the full class name, with '.' and '$' replaced by '_'.</li>
+     *     </ul>
+     */ 
+    private static String getFormBeanName( Class formBeanClass, HttpServletRequest request, boolean doStrutsLookup )
+    {
+        ModuleConfig moduleConfig = RequestUtils.getRequestModuleConfig( request );
+        String formBeanClassName = formBeanClass.getName();
+        
+        if ( doStrutsLookup )
+        {       
+            FormBeanConfig[] formBeans = moduleConfig.findFormBeanConfigs();
+            
+            for ( int j = 0; j < formBeans.length; ++j )
+            {
+                if ( formBeans[j].getType().equals( formBeanClassName ) )
+                {
+                    return formBeans[j].getName();
+                }
+            }
+        }
+        
+        //
+        // A form-bean wasn't found for this type, so we'll create a name.  First try and create
+        // name that is a camelcased version of the classname without all of its package/outer-class
+        // qualifiers.  If one with that name already exists, munge the fully-qualified classname.
+        //
+        String formType = formBeanClassName;
+        int lastQualifier = formType.lastIndexOf( '$' );
+
+        if ( lastQualifier == -1 )
+        {
+            lastQualifier = formType.lastIndexOf( '.' );
+        }
+
+        String formName = formType.substring( lastQualifier + 1 );
+        formName = Character.toLowerCase( formName.charAt( 0 ) ) + formName.substring( 1 );
+
+        if ( moduleConfig.findFormBeanConfig( formName ) != null )
+        {
+            formName = formType.replace( '.', '_' ).replace( '$', '_' );
+            assert moduleConfig.findFormBeanConfig( formName ) == null : formName;
+        }
+        
+        return formName;        
+    }
+    
+    /**
+     * Get the name for the type of a ActionForm instance.  Use a name looked up from
+     * the current Struts module, or, if none is found, create one.
+     * 
+     * @param formInstance the ActionForm instance whose type will determine the name.
+     * @param request the current HttpServletRequest, which contains a reference to the current Struts module.
+     * @return the name found in the Struts module, or, if none is found, a name that is either:
+     *     <ul>
+     *         <li>a camel-cased version of the base class name (minus any package or outer-class
+     *             qualifiers, or, if that name is already taken,</li>
+     *         <li>the full class name, with '.' and '$' replaced by '_'.</li>
+     *     </ul>
+     */ 
+    private static String getFormBeanName( ActionForm formInstance, HttpServletRequest request,
+                                           boolean doStrutsLookup )
+    {
+        return getFormBeanName( formInstance.getClass(), request, doStrutsLookup );
+    }
+
+    /**
+     * Get the class name of a {@link PageFlowController}, given the URI to it.
+     * 
+     * @param uri the URI to the {@link PageFlowController}, which should be relative to the
+     *            web application root (i.e., it should not include the context path).
+     */
+    public static String getJpfClassName( String uri )
+    {
+        assert uri != null;
+        assert uri.length() > 0;
+        
+        if ( uri.startsWith( "/" ) )
+        {
+            uri = uri.substring( 1 );
+        }
+        
+        assert FileUtils.osSensitiveEndsWith( uri, JPF_EXTENSION ) : uri;
+        if ( FileUtils.osSensitiveEndsWith( uri, JPF_EXTENSION ) ) 
+        {
+            uri = uri.substring( 0, uri.length() - JPF_EXTENSION_LEN );
+        }
+        
+        return uri.replace( '/', '.' );
+    }
+    
+    /**
+     * Get the URI for a {@link PageFlowController}, given its class name.
+     * 
+     * @param className the name of the {@link PageFlowController} class.
+     * @return a String that is the URI for the {@link PageFlowController}, relative to the web
+     *         application root (i.e., not including the context path).
+     */
+    public static String getPageFlowURI( String className )
+    {
+        return '/' + className.replace( '.', '/' ) + JPF_EXTENSION;
+    }
+    
+    /**
+     * @deprecated Use {@link PageFlowActionServlet#getModuleConfPath} instead.
+     * 
+     * Get the path to the Struts module configration file (e.g.,
+     * "/WEB-INF/.pageflow-struts-generated/jpf-struts-config-someModule") for a given module
+     * path (e.g., "someModule"), according to the PageFlow convention.
+     * 
+     * @param modulePath the Struts module path.
+     * @return a String that is the path to the Struts configuration file, relative to the
+     *         web application root.
+     */ 
+    public static String getModuleConfPath( String modulePath )
+    {
+        return new PageFlowActionServlet.DefaultModuleConfigLocator().getModuleConfigPath( modulePath );
+    }
+    
+
+    /**
+     * Get the most recent action URI that was processed by {@link FlowController#execute}.
+     * 
+     * @param request the current ServletRequest.
+     * @return a String that is the most recent action URI.  This is only valid during a request
+     *         that has been forwarded from the action URI.
+     */ 
+    public static String getActionURI( ServletRequest request )
+    {
+        return ( String ) request.getAttribute( ACTION_URI_ATTR );
+    }
+    
+    /**
+     * Sets the most recent action URI that was processed by {@link org.apache.beehive.netui.pageflow.FlowController#execute}.
+     */ 
+    static void setActionURI( HttpServletRequest request )
+    {
+        request.setAttribute( ACTION_URI_ATTR, InternalUtils.decodeURI( request ) );
+    }
+    
+    /**
+     * Tell whether a web application resource requires a secure transport protocol.  This is
+     * determined from web.xml; for example, the following block specifies that all resources under
+     * /login require a secure transport protocol.
+     * <pre>
+     *    &lt;security-constraint&gt;
+     *        &lt;web-resource-collection&gt;
+     *          &lt;web-resource-name&gt;Secure PageFlow - begin&lt;/web-resource-name&gt; 
+     *          &lt;url-pattern&gt;/login/*&lt;/url-pattern&gt;
+     *        &lt;/web-resource-collection&gt;
+     *        &lt;user-data-constraint&gt;
+     *           &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;
+     *        &lt;/user-data-constraint&gt;
+     *    &lt;/security-constraint&gt;
+     * </pre>
+     * 
+     * @param uri a webapp-relative URI for a resource.  There must not be query parameters or a scheme
+     *            on the URI.
+     * @param request the current request.
+     * @return <code>Boolean.TRUE</code> if a transport-guarantee of <code>CONFIDENTIAL</code> or
+     *         <code>INTEGRAL</code> is associated with the given resource; <code>Boolean.FALSE</code> 
+     *         a transport-guarantee of <code>NONE</code> is associated with the given resource; or
+     *         <code>null</code> if there is no transport-guarantee associated with the given resource.
+     */ 
+    public static Boolean isSecureResource( String uri, ServletContext servletContext, HttpServletRequest request )
+    {
+        return InternalUtils.getServerAdapter().isSecureResource( uri, request, servletContext );
+    }
+
+    /**
+     * Set a named action output, which corresponds to an input declared by the <code>pageInput</code> JSP tag.
+     * The actual value can be read from within a JSP using the <code>"pageInput"</code> databinding context.
+     * 
+     * @deprecated Use {@link #addActionOutput} instead.
+     * @param name the name of the action output.
+     * @param value the value of the action output.
+     * @param request the current ServletRequest.
+     */
+    public static void addPageInput( String name, Object value, ServletRequest request )
+    {
+        addActionOutput( name, value, request );
+    }
+    
+    /**
+     * Set a named action output, which corresponds to an input declared by the <code>pageInput</code> JSP tag.
+     * The actual value can be read from within a JSP using the <code>"pageInput"</code> databinding context.
+     * 
+     * @param name the name of the action output.
+     * @param value the value of the action output.
+     * @param request the current ServletRequest.
+     */
+    public static void addActionOutput( String name, Object value, ServletRequest request )
+    {
+        Map map = InternalUtils.getActionOutputMap( request, true );
+        
+        if ( map.containsKey( name ) )
+        {
+            if ( _log.isWarnEnabled() )
+            {
+                _log.warn( "Overwriting action output\"" + name + "\"." );
+            }
+        }
+        
+        map.put( name, value );
+    }
+    
+    /**
+     * Get a named action output that was registered in the current request.
+     * 
+     * @deprecated Use {@link #getActionOutput} instead.
+     * @param name the name of the action output.
+     * @param request the current ServletRequest
+     * @see #addActionOutput
+     */ 
+    public static Object getPageInput( String name, ServletRequest request )
+    {
+        return getActionOutput( name, request );
+    }
+    
+    /**
+     * Get a named action output that was registered in the current request.
+     * 
+     * @param name the name of the action output.
+     * @param request the current ServletRequest
+     * @see #addActionOutput
+     */ 
+    public static Object getActionOutput( String name, ServletRequest request )
+    {
+        Map map = InternalUtils.getActionOutputMap( request, false );
+        return ( map != null ? map.get( name ) : null );
+    }
+    
+    /**
+     * Add a validation error that will be shown with the Errors and Error tags.
+     * 
+     * @param propertyName the name of the property with which to associate this error.
+     * @param messageKey the message-resources key for the error message.
+     * @param messageArgs an array of arguments for the error message.
+     * @param request the current ServletRequest.
+     */ 
+    public static void addValidationError( String propertyName, String messageKey, Object[] messageArgs,
+                                           ServletRequest request )
+    {
+        InternalUtils.addValidationError( propertyName, new ActionError( messageKey, messageArgs ), request );
+    }
+    
+    
+    /**
+     * Add a validation error that will be shown with the Errors and Error tags.
+     * 
+     * @param propertyName the name of the property with which to associate this error.
+     * @param messageKey the message-resources key for the error message.
+     * @param messageArg an argument for the error message.
+     * @param request the current ServletRequest.
+     */ 
+    public static void addValidationError( String propertyName, String messageKey, Object messageArg,
+                                           ServletRequest request )
+    {
+        InternalUtils.addValidationError( propertyName, new ActionError( messageKey, messageArg ), request );
+    }
+    
+    
+    /**
+     * Add a validation error that will be shown with the Errors and Error tags.
+     * 
+     * @param propertyName the name of the property with which to associate this error.
+     * @param messageKey the message-resources key for the error message.
+     * @param request the current ServletRequest.
+     */ 
+    public static void addValidationError( String propertyName, String messageKey, ServletRequest request )
+    {
+        InternalUtils.addValidationError( propertyName, new ActionError( messageKey ), request );
+    }
+    
+    
+    /**
+     * Resolve the given action to a URI by running an entire request-processing cycle on the given ScopedRequest
+     * and ScopedResponse.
+     * @exclude
+     * 
+     * @param context the current ServletContext
+     * @param request the ServletRequest, which must be a {@link org.apache.beehive.netui.pageflow.scoping.ScopedRequest}.
+     * @param response the ServletResponse, which must be a {@link org.apache.beehive.netui.pageflow.scoping.ScopedResponse}.
+     * @param actionOverride if not <code>null</code>, this action-name is used to construct an action
+     *                       URI which is set as the request URI.
+     * @param autoResolveExtensions a list of URI extensions (e.g., ".do", ".jpf") that will be auto-resolved, i.e.,
+     *                              on which this method will be recursively called.  If <code>null</code>, the
+     *                              default extensions ".do" and ".jpf" will be used.
+     */
+    public static ActionResult strutsLookup( ServletContext context, ServletRequest request,
+                                             HttpServletResponse response, String actionOverride,
+                                             String[] autoResolveExtensions )
+        throws Exception
+    {
+        ScopedRequest scopedRequest = ScopedServletUtils.unwrapRequest( request );
+        ScopedResponse scopedResponse = ScopedServletUtils.unwrapResponse( response );
+        assert scopedRequest != null : request.getClass().getName();
+        assert scopedResponse != null : response.getClass().getName();
+        
+        if ( scopedRequest == null )
+        {
+            throw new IllegalStateException( "request must be of type " + ScopedRequest.class.getName() );
+        }
+        if ( scopedResponse == null )
+        {
+            throw new IllegalStateException( "response must be of type " + ScopedResponse.class.getName() );
+        }
+        
+        ActionServlet as = InternalUtils.getActionServlet( context );
+        
+        if ( as == null )
+        {
+            _log.error( "There is no initialized ActionServlet.  The ActionServlet must be set to load-on-startup." );
+            return null;
+        }
+        
+        if ( actionOverride != null )
+        {
+            //CR122325 - added modulePath to actionOverride var in URL for case where portlet jpf
+            //forwards to another jpf and a refresh is done while action from first jpf is in URL.
+            assert actionOverride.charAt( 0 ) == '/' : actionOverride;
+            scopedRequest.setRequestURI( actionOverride + PageFlowConstants.ACTION_EXTENSION );
+        }
+
+        //
+        // In case the request was already forwarded once, clear out the recorded forwarded-URI.  This
+        // will allow us to tell whether processing the request actually forwarded somewhere.
+        //
+        assert request instanceof ScopedRequestImpl : request.getClass().getName();
+        ( ( ScopedRequestImpl ) request ).setForwardedURI( null );
+        
+        //
+        // Now process the request.
+        //
+        as.doGet( scopedRequest, scopedResponse );  // this just calls process() -- same as doPost()
+
+        String returnURI;
+
+        if ( ! scopedResponse.didRedirect() )
+        {
+            returnURI = scopedRequest.getForwardedURI();
+            
+            if ( autoResolveExtensions == null )
+            {
+                autoResolveExtensions = DEFAULT_AUTORESOLVE_EXTENSIONS;
+            }
+            
+            if ( returnURI != null )
+            {
+                for ( int i = 0; i < autoResolveExtensions.length; ++i )
+                {
+                    if ( FileUtils.uriEndsWith( returnURI, autoResolveExtensions[i] ) )
+                    {
+                        scopedRequest.doForward();
+                        return strutsLookup( context, scopedRequest, scopedResponse, null, autoResolveExtensions );
+                    }
+                }
+            }
+        }
+        else
+        {
+            returnURI = scopedResponse.getRedirectURI();
+        }
+        
+        if ( returnURI != null )
+        {
+            return new ActionResultImpl( returnURI, scopedResponse.didRedirect(), scopedResponse.getStatusCode(),
+                                         scopedResponse.getStatusMessage(), scopedResponse.isError() );
+        }
+        else
+        {
+            return null;
+        }
+    }
+    
+    /**
+     * If the given request is a MultipartRequestWrapper (Struts class that doesn't extend
+     * HttpServletRequestWrapper), return the wrapped request; otherwise, return the given request.
+     * @exclude
+     */ 
+    public static HttpServletRequest unwrapMultipart( HttpServletRequest request )
+    {
+        if ( request instanceof MultipartRequestWrapper )
+        {
+            request = ( ( MultipartRequestWrapper ) request ).getRequest();
+        }
+        
+        return request;
+    }
+    
+    static String getActionName( ActionMapping mapping )
+    {
+        String actionName = mapping.getPath();
+        return ( actionName.charAt( 0 ) == '/' ? actionName.substring( 1 ) : actionName );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PreviousActionInfo.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PreviousActionInfo.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,110 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+
+import java.io.Serializable;
+
+/**
+ * Stores information about a recent action execution within a pageflow -- used with
+ * Used with <code>return-to="previousAction"</code> on <code>@jpf:forward</code>.
+ */
+public class PreviousActionInfo
+        implements Serializable
+{
+    private ActionForm _form;
+    private String _actionURI;
+    private String _queryString;
+
+    
+    /**
+     * Constructor which accepts an ActionForm and action URI.
+     * 
+     * @param form the form that was passed to the action.
+     * @param actionURI the URI that was used to execute the action.
+     */ 
+    public PreviousActionInfo( ActionForm form, String actionURI, String queryString )
+    {
+        _form = form;
+        _actionURI = actionURI;
+        _queryString = queryString;
+    }
+
+    /**
+     * Get the form that was passed to the action.
+     * 
+     * @return the form that was passed to the action.
+     */ 
+    public ActionForm getForm()
+    {
+        return _form;
+    }
+
+    /**
+     * Set the form that was passed to the action.
+     * 
+     * @param form the form that was passed to the action.
+     */ 
+    public void setForm( ActionForm form )
+    {
+        _form = form;
+    }
+
+    /**
+     * Get the URI that was used to execute the action.
+     * 
+     * @return the String URI that was used to execute the action.
+     */ 
+    public String getActionURI()
+    {
+        return _actionURI;
+    }
+
+    /**
+     * Set the URI that was used to execute the action.
+     * 
+     * @param actionURI the URI that was used to execute the action.
+     */ 
+    public void setActionURI( String actionURI )
+    {
+        _actionURI = actionURI;
+    }
+
+    /**
+     * Get the query string from the original request URI.
+     * 
+     * @return the query string from the original request URI.
+     */ 
+    public String getQueryString()
+    {
+        return _queryString;
+    }
+
+    /**
+     * Set the query string from the original request URI.
+     * 
+     * @param queryString the query string from the original request URI.
+     */ 
+    public void setQueryString( String queryString )
+    {
+        _queryString = queryString;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PreviousPageInfo.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/PreviousPageInfo.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,145 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.config.ModuleConfig;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.Serializable;
+
+/**
+ * Stores information about a previously-displayed page, as well as its initialization data.
+ * Used with <code>return-to="currentPage"</code> or <code>return-to="previousPage"</code>
+ * on <code>@jpf:forward</code>.
+ */
+public class PreviousPageInfo
+        implements Serializable
+{
+    private ActionForward _forward;
+    private ActionForm _form;
+    private String _mappingPath;
+    private transient ActionMapping _mapping;
+
+    
+    /**
+     * Constructor which accepts the ActionForward used to display the page, the ActionForm
+     * used to initialize the page, and the associated ActionMapping, which represents the
+     * action that forwarded to the page.
+     * 
+     * @param forward
+     * @param form
+     * @param mapping
+     */ 
+    public PreviousPageInfo( ActionForward forward, ActionForm form, ActionMapping mapping )
+    {
+        _form = form;
+        _mapping = mapping;
+        _mappingPath = mapping != null ? mapping.getPath() : null;
+        _forward = forward;
+    }
+
+    /**
+     * Get the form bean that was used to initialize the page.
+     *
+     * @return the ActionForm instance that was used to initialize the page, or <code>null</code>
+     *         if there was none.
+     */
+    public ActionForm getForm()
+    {
+        return _form;
+    }
+
+    /**
+     * Set the form bean that was used to initialize the page.
+     *
+     * @param form the ActionForm instance that was used to initialize the page.
+     */
+    public void setForm( ActionForm form )
+    {
+        _form = form;
+    }
+
+    /**
+     * Get information about the action that forwarded to the page.
+     * <br>
+     * <br>
+     * Note that this information is transient.  If you place this object in the session, and then retrieve it after
+     * a session failover has occurred (i.e., after this object has been serialized and deserialized), then this method
+     * will return <code>null</code> unless you first call {@link #reinitialize}.
+     *
+     * @return an ActionMapping that contains information about the action that forwarded to this page.
+     */
+    public ActionMapping getMapping()
+    {
+        return _mapping;
+    }
+
+    /**
+     * Set information about the action that forwarded to the page.
+     *
+     * @param mapping an ActionMapping that contains information about the action that forwarded to this page.
+     */
+    public void setMapping( ActionMapping mapping )
+    {
+        _mapping = mapping;
+    }
+
+    /**
+     * Reinitialize the stored ActionMapping and PageFlowController objects.  These are transient, and will be lost if
+     * you place this object in the session, and then retrieve it after a session failover has occurred (i.e., after
+     * this object has been serialized and deserialized).
+     */
+    public void reinitialize( PageFlowController pfc )
+    {
+        if ( _mapping == null && _mappingPath != null )
+        {
+            ModuleConfig mc = pfc.getModuleConfig();
+            assert mc != null : "no ModuleConfig found for " + pfc.getClass().getName();
+            _mapping = ( ActionMapping ) mc.findActionConfig( _mappingPath );
+        }
+        
+        if ( _forward != null && _forward instanceof Forward )
+        {
+            ( ( Forward ) _forward ).reinitialize( pfc );
+        }
+    }
+    
+    /**
+     * Get the object that was used to forward to the page.
+     *
+     * @return the ActionForward returned by the action that forwarded to this page.
+     */
+    public ActionForward getForward()
+    {
+        return _forward;
+    }
+
+    /**
+     * Set the object that was used to forward to the page.
+     *
+     * @param forward the ActionForward returned by the action that forwarded to this page.
+     */
+    public void setForward( ActionForward forward )
+    {
+        _forward = forward;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,347 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+// java imports
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+// internal imports
+import org.apache.beehive.netui.script.Expression;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionUpdateException;
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+import org.apache.beehive.netui.script.common.ImplicitObjectBean;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+// external imports
+import org.apache.struts.upload.MultipartRequestHandler;
+import org.apache.struts.action.ActionForm;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * Implement the processPopulate stage of the Struts / PageFlow request
+ * processing lifecycle.  The {@link #populate(HttpServletRequest, ActionForm)} method is 
+ * invoked in order to take request parameters from the {@link HttpServletRequest}
+ * use the key / value pairs from the request to perform an update to the underlying
+ * JavaBean objects.
+ * <br/>
+ * <br/>
+ * Updates are performed on a key / value pair if the key is an expression; otherwise,
+ * the updates are delegated to the Struts processPopulate infrastructure.
+ * 
+ * @exclude
+ */
+public class ProcessPopulate
+{
+    private static final Logger _logger = Logger.getInstance(ProcessPopulate.class);
+
+    // these must be kept in sync with the context names specified in the scripting languages
+    private static final String PAGE_FLOW_CONTEXT = "pageFlow";
+    private static final String GLOBAL_APP_CONTEXT = "globalApp";
+
+    private static final String WLW_TAG_HANDLER_PREFIX = "wlw-";
+    private static final String WLW_TAG_HANDLER_SUFFIX = ":";
+
+    private static final Map handlerMap = new HashMap();
+
+    /**
+     * An inner class that represnts the data that will be used to 
+     * perform an update.  If a key has a prefix handler, this
+     * node is constructed and passed to the prefix handler
+     * so that the prefix handler can change the expression or
+     * values that will be used to execute the expression update.
+     */
+    public final static class ExpressionUpdateNode
+    {
+        public String expression = null;
+        public String[] values = null;              
+
+        // can't be constructed outside of this class
+        private ExpressionUpdateNode() {}
+
+        public String toString()
+        {
+            StringBuffer buf = new StringBuffer();
+            buf.append("expression: " + expression + "\n");
+            if(values != null)
+                for(int i = 0; i < values.length; i++)
+                    buf.append("value[" + i + "]: " + values[i]);
+            else buf.append("values are null");
+
+            return buf.toString();
+        }
+    }
+
+    /**
+     * Register a {@link RequestParameterHandler} that is added to handle a 
+     * particular prefix which be present as a prefix to a request parameter
+     * key.  For keys that match the prefix, the key / value from the request
+     * are put in an {@link #ExpressionUpdateNode} struct and handed to the 
+     * {@link RequestParameterHandler} for processing.  The returned {@link #ExpressionUpdateNode}
+     * is used to perform an expression update.
+     *
+     * @param prefix the String prefix that will be appended to request paramters that 
+     * should pass through the {@link RequestParamterHandler} before being updated.
+     * @param handler the handler that should handle all request paramters with 
+     * the given <code>prefix</code>
+     */
+    public static void registerPrefixHandler(String prefix, RequestParameterHandler handler)
+    {
+        // should happen very infrequently
+        synchronized(handlerMap)
+        {
+            String msg = "Register RequestParameterHandler with\n\tprefix: " + prefix + "\n\thandler: " + (handler != null ? handler.getClass().getName(): null);
+
+            if(_logger.isInfoEnabled()) _logger.info(msg);
+
+            handlerMap.put(prefix, handler);
+        }
+    }
+
+    /**
+     * Write the handler name specified onto the given expression.
+     */
+    public static String writeHandlerName(String handler, String expression)
+    {
+        if(!ExpressionEvaluatorFactory.getInstance().isExpression(expression))
+            throw new IllegalArgumentException(Bundle.getErrorString("ProcessPopulate_handler_nonAtomicExpression", new Object[] {expression}));
+
+        if(!handlerMap.containsKey(handler))
+            throw new IllegalStateException(Bundle.getErrorString("ProcessPopulate_handler_notRegistered", new Object[] {handler}));
+
+        StringBuffer buf = new StringBuffer();
+        buf.append(WLW_TAG_HANDLER_PREFIX);
+        buf.append(handler);
+        buf.append(WLW_TAG_HANDLER_SUFFIX);
+        buf.append(expression);
+
+        return buf.toString();
+    }
+
+    /**
+     * Use the request parameters to populate all properties that have expression keys into 
+     * the underlying JavaBeans.
+     * 
+     * @param request the current <code>HttpServletRequest</code>
+     * @param form if this request references an action and it has an <code>ActionForm</code>
+     *             associated with it, then the <code>form</code> parameter is non-null.
+     * @return a <code>java.util.Map</code> of objects that will be consumed by 
+     *         Struts processPopulate.  This includes all request attributes that
+     *         were not expressions
+     * @throws ServletException when an error occurs in populating data after
+     *         the request; failure here can be caused by failures in creating
+     *         or executing update expressions.
+     */
+    public static void populate(HttpServletRequest request, HttpServletResponse response, ActionForm form, boolean requestHasPopulated)
+        throws ServletException
+    {
+        String key = null;
+        Map strutsProperties = null;
+        ExpressionEvaluator ee = ExpressionEvaluatorFactory.getInstance();
+
+        // a boolean so that we can avoid an instanceof below...
+        boolean isMultipart = false;
+
+        // if this returns null, it's not a mulitpart request
+        Map params = MultipartRequestUtils.handleMultipartRequest(request, form);
+
+        // make adjustments
+        if(params != null)
+            isMultipart = true;
+        else params = request.getParameterMap();
+
+        if(params == null)
+        {
+            if(_logger.isWarnEnabled()) _logger.warn("An error occurred checking a request for multipart status.  No model values were updated.");
+            return;
+        }
+
+            // only needs to happen once; all of the objects herein are stable
+        ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(request, response, form);
+
+        // TODO: are there any ordering issues with using an Iterator vs. an Enumeration here?
+        Iterator iterator = params.keySet().iterator();
+        while (iterator.hasNext())
+        {
+            key = (String) iterator.next();
+
+            if (_logger.isDebugEnabled())
+                _logger.debug("key: " + key + " value type: " + params.get(key).getClass().getName() + " value: " + params.get(key));
+
+            try
+            {
+                if (ee.containsExpression(key))
+                {
+                    Object updateValue = null;
+                    if (!isMultipart || params.get(key) instanceof String[])
+                    {
+                        String[] values = (String[]) params.get(key);
+
+                        // the only "contains" case that is accepted
+                        if (key.startsWith(WLW_TAG_HANDLER_PREFIX))
+                        {
+                            if (_logger.isDebugEnabled()) _logger.debug("Found an expression requiring a TAG HANDLER");
+
+                            ExpressionUpdateNode node = doTagHandler(key, values, request);
+
+                            key = node.expression;
+                            values = node.values;
+                        }
+
+                        if (values != null && values.length == 1)
+                            updateValue = values[0];
+                        else
+                            updateValue = values;
+                    }
+                    // handle funky types that Struts returns for a file upload request handler
+                    else
+                    {
+                        updateValue = params.get(key);
+                    }
+
+                    try
+                    {
+                        // trap any bad expressions here
+                        if (ee.isExpression(key))
+                        {
+                            // common case, make this fast
+                            if (!requestHasPopulated)
+                                ee.update(key, updateValue, bean, true);
+                            // must check the expression to make sure pageFlow. and globalApp. don't get executed more than once
+                            else
+                            {
+                                Expression pe = ee.parseExpression(key);
+                                String contextName = pe.getContext();
+                                if (!contextName.equals(PAGE_FLOW_CONTEXT) && !contextName.equals(GLOBAL_APP_CONTEXT))
+                                    ee.update(key, updateValue, bean, true);
+                            }
+                        }
+                    }
+                            // catch any errors, particularly expression parse failures
+                    catch (ExpressionUpdateException e)
+                    {
+                        String s = Bundle.getString("ExprUpdateError", new Object[]{key, e});
+
+                        // this is the hairy NetUI Warning that gets printed to the console
+                        System.err.println(s);
+                        if (_logger.isErrorEnabled()) _logger.error(s);
+
+                        // add binding errors via PageFlowUtils
+                        InternalUtils.addBindingUpdateError(request, key, s, e);
+                    }
+                }
+                else
+                {
+                    if (_logger.isDebugEnabled()) _logger.debug("HTTP request parameter key \"" + key + "\" is not an expression, handle with Struts");
+
+                    if (strutsProperties == null)
+                        strutsProperties = new HashMap();
+
+                    strutsProperties.put(key, params.get(key));
+                }
+            }
+                    // catch any unexpected exception
+            catch (Exception e)
+            {
+                String s = Bundle.getString("ProcessPopulate_exprUpdateError", new Object[]{key, e});
+
+                System.err.println(s);
+
+                if (_logger.isWarnEnabled()) _logger.warn(s, e);
+
+                // add binding errors via PageFlowUtils
+                InternalUtils.addBindingUpdateError(request, key, s, e);
+            }
+        }
+
+        handleStrutsProperties(strutsProperties, form);
+    }
+
+    /**
+     * Process a single key.
+     *
+     * @param key the request key that is being processed
+     * @param request the ServletRequest object representing this request
+     * @throws ExpressionUpdateException if the expression update fails
+     */ 
+    static final ExpressionUpdateNode doTagHandler(String key, String[] values, HttpServletRequest request)
+    {
+        // not sure if this array will be mutable.  don't want to find out at this point.
+        String[] _values = values;
+
+        // key might be mangled here; make a copy
+        String expr = key;
+
+        if(_logger.isDebugEnabled()) _logger.debug("Found prefixed tag; handlerName: " + key.substring(WLW_TAG_HANDLER_PREFIX.length(), key.indexOf(WLW_TAG_HANDLER_SUFFIX)));
+            
+        String handlerName = key.substring(WLW_TAG_HANDLER_PREFIX.length(), key.indexOf(WLW_TAG_HANDLER_SUFFIX));
+        
+        // execute callback to parameter handler.  Generally, these are tags.
+        RequestParameterHandler handler = (RequestParameterHandler)handlerMap.get(handlerName);
+        
+        if(handler != null)
+        {
+            expr = key.substring(key.indexOf(WLW_TAG_HANDLER_SUFFIX)+1);
+            
+            if(_logger.isDebugEnabled()) _logger.debug("found handler for prefix \"" + handlerName + "\" type: " + 
+                                   (handler != null ? handler.getClass().getName() : null) + "\n\t" + 
+                                   "key: \"" + key + "\" expr: \"" + expr + "\"");
+            
+            ExpressionUpdateNode node = new ExpressionUpdateNode();
+            node.expression = expr;
+            node.values = _values;
+            
+            // request, request key, the standalone expression (may have other stuff bracketing the expression
+            handler.process(request, key, node);
+            
+            return node;
+        }
+        else throw new IllegalStateException("Request parameter references a tag handler prefix \"" + 
+                                             handlerName + "\" that is not registered for expression \"" + key + "\"");
+    }
+
+    // @struts: org.apache.struts.util.RequestUtils.populate
+    private static final void handleStrutsProperties(Map strutsProperties, ActionForm form)
+    {
+        if(strutsProperties != null)
+        {
+            if(_logger.isDebugEnabled()) _logger.debug("Handle Struts request parameters.");
+
+            // default to Struts for non-expression keys
+            try
+            {
+                BeanUtils.populate(form, strutsProperties);
+            }
+            catch(Exception e)
+            {
+                throw new RuntimeException("Exception processing bean and request parameters: ", e);
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestParameterHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestParameterHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+// java imports
+import javax.servlet.http.HttpServletRequest;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public interface RequestParameterHandler
+{
+    public void process(HttpServletRequest request, String key, ProcessPopulate.ExpressionUpdateNode node);
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestVariables.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestVariables.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * Internal class for sharing flags/data on the request.
+ */
+class RequestVariables
+{
+    private static final String PREFIX = RequestVariables.class.getName() + ":";
+    private static final String ORIGINAL_REQUEST_URI_ATTR = PREFIX + "originalRequestURI";
+    
+    private HttpServletRequest _request;
+    
+    
+    public static RequestVariables get( HttpServletRequest request )
+    {
+        return new RequestVariables( request );
+    }
+    
+    protected RequestVariables( HttpServletRequest request )
+    {
+        _request = request;
+    }
+    
+    protected HttpServletRequest getRequest()
+    {
+        return _request;
+    }
+    
+    public void setOriginalRequestURI( String uri )
+    {
+        _request.setAttribute( ORIGINAL_REQUEST_URI_ATTR, uri );
+    }
+    
+    public String getOriginalRequestURI()
+    {
+        return ( String ) _request.getAttribute( ORIGINAL_REQUEST_URI_ATTR );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ServerAdapter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/ServerAdapter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,190 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.security.auth.login.LoginException;
+import java.io.File;
+
+
+/**
+ * @exclude
+ */ 
+public interface ServerAdapter
+{
+    /**
+     * Tell whether the server is running in production mode.  This is server-dependent, but by default it should
+     * return <code>false</code> only if the System property <code>pageflow:devmode</code> is set.
+     * 
+     * @return <code>true</code> if the server is running in production mode.
+     */ 
+    public boolean isInProductionMode();
+    
+    /**
+     * Tell whether a web application resource requires a secure transport protocol.  This is
+     * determined from web.xml; for example, the following block specifies that all resources under
+     * /login require a secure transport protocol.
+     * <pre>
+     *    &lt;security-constraint&gt;
+     *        &lt;web-resource-collection&gt;
+     *          &lt;web-resource-name&gt;Secure PageFlow - begin&lt;/web-resource-name&gt; 
+     *          &lt;url-pattern&gt;/login/*&lt;/url-pattern&gt;
+     *        &lt;/web-resource-collection&gt;
+     *        &lt;user-data-constraint&gt;
+     *           &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;
+     *        &lt;/user-data-constraint&gt;
+     *    &lt;/security-constraint&gt;
+     * </pre>
+     * 
+     * @param uri a webapp-relative URI for a resource.
+     * @param servletContext the ServletContext
+     * @param request the current HttpServletRequest.
+     * @return <code>Boolean.TRUE</code> if a transport-guarantee of <code>CONFIDENTIAL</code> or
+     *         <code>INTEGRAL</code> is associated with the given resource; <code>Boolean.FALSE</code> 
+     *         a transport-guarantee of <code>NONE</code> is associated with the given resource; or
+     *         <code>null</code> if there is no transport-guarantee associated with the given resource.
+     */     
+    public Boolean isSecureResource( String uri, HttpServletRequest request, ServletContext servletContext );
+
+    /**
+     * Cause the server to do a security check for the given URI.  If required, it does a redirect to
+     * change the scheme (http/https).
+     * 
+     * @param uri the URI on which to run security checks.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @return <code>true</code> if a redirect occurred.
+     */ 
+    boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response,
+                           ServletContext servletContext );
+    
+    /**
+     * Get the ServletContext, based on the given request.
+     * 
+     * @param request the current HttpServletRequest.
+     * @return the ServletContext associated with the request.
+     */ 
+    public ServletContext getServletContext( HttpServletRequest request );
+    
+    /**
+     * Get the port on which the server is listening for unsecure connections.
+     * 
+     * @param request the current HttpServletRequest.
+     * @return the port on which the server is listening for unsecure connections.
+     */ 
+    public int getListenPort( HttpServletRequest request );
+
+    /**
+     * Get the port on which the server is listening for secure connections.
+     * 
+     * @param request the current HttpServletRequest.
+     * @return the port on which the server is listening for secure connections.
+     */ 
+    public int getSecureListenPort( HttpServletRequest request );
+
+    /**
+     * Log in the user, using "weak" username/password authentication.
+     *
+     * @param username the user's login name.
+     * @param password the user's password.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * 
+     * @exception javax.security.auth.login.LoginException if the authentication failed
+     */
+    public void login( String username, String password, HttpServletRequest request, HttpServletResponse response )
+        throws LoginException;
+    
+    /**
+     * Log out the current user.
+     * 
+     * @param invalidateSessions if <code>true</code>, the session is invalidated (on all single-signon webapps); 
+     *            otherwise the session and its data are left intact.  To invalidate the session in only the
+     *            current webapp, set this parameter to <code>false</code> and call invalidate() on the HttpSession.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     */
+    public void logout( boolean invalidateSessions, HttpServletRequest request, HttpServletResponse response );
+    
+    /**
+     * Return the webapp context path for the given request.  This differs from HttpServletRequest.getContextPath()
+     * only in that it will return a valid value even if the request is for the default webapp.
+     * 
+     * @param request the current HttpServletRequest.
+     */ 
+    public String getFullContextPath( HttpServletRequest request );
+    
+    /**
+     * Ensure that the given session attribute is replicated in a cluster for session failover.
+     * This method does not need to be implemented for servers that do not support clustering and
+     * session failover.
+     * 
+     * @param attrName the name of the session attribute for which failover should be ensured.
+     * @param attrVal the value of the given session attribute.
+     * @param request the current HttpServletRequest.
+     */ 
+    public void ensureFailover( String attrName, Object attrVal, HttpServletRequest request );
+    
+    /**
+     * Called upon the initialization of the given ServletContext.
+     * 
+     * @param servletContext the ServletContext being initialized.
+     */ 
+    public void initServletContext( ServletContext servletContext );
+    
+    /**
+     * Called at the beginning of each processed request.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param servletContext the current ServletContext.
+     */ 
+    public void beginRequest( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext );
+    
+    /**
+     * Called at the end of each processed request.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param servletContext the current ServletContext.
+     */ 
+    public void endRequest( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext );
+    
+    /**
+     * Get a context object to support Java Controls.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @return a new ControlBeanContext.
+     */
+    public ControlBeanContext createControlBeanContext( HttpServletRequest request, HttpServletResponse response );
+    
+    /**
+     * Get the build directory (or directories) where reloadable classes reside.
+     * 
+     * @param servletContext the current ServletContext.
+     * @return an array of URLs to indicate where reloadable classes reside, or <code>null</code> if there are no
+     *         appropriate directories.
+     * @see org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler
+     */ 
+    public File[] getReloadableClassDirs( ServletContext servletContext );
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/StrutsModule.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/StrutsModule.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,74 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
+
+/**
+ * An ActionResolver that submits actions to a Struts module.
+ * 
+ * @exclude
+ */
+public class StrutsModule
+        implements ActionResolver
+{
+    private String _modulePath;
+
+    /**
+     * Construct on the given Struts module path.
+     * 
+     * @param modulePath the Struts module path.
+     */ 
+    public StrutsModule( String modulePath )
+    {
+        assert modulePath.startsWith( "/" ) : modulePath;
+        _modulePath = modulePath;
+    }
+
+    /**
+     * Get the URI for this Struts module.
+     * 
+     * @return a String URI that is the Struts module path, relative to the web application root.
+     */ 
+    public String getURI()
+    {
+        return _modulePath;
+    }
+
+    public String getModulePath()
+    {
+        return _modulePath;
+    }
+    
+    /**
+     * Tell whether this is a {@link PageFlowController}.
+     * 
+     * @return <code>false</code>.
+     */ 
+    public boolean isPageFlow()
+    {
+        return false;
+    }
+    
+    public void refresh( HttpServletRequest request, HttpServletResponse response )
+    {
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/StrutsModuleFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/StrutsModuleFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * @exclude
+ */ 
+public class StrutsModuleFactory
+{
+    public static ActionResolver getStrutsModule( String strutsModulePath,
+                                                  HttpServletRequest request )
+    {
+        ActionResolver strutsModule = new StrutsModule( strutsModulePath );
+        InternalUtils.setCurrentActionResolver( strutsModule, request );
+        return strutsModule;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/UnfulfilledRolesException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/UnfulfilledRolesException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,69 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception that is thrown when an action method marked with <code>@jpf:action
+ * roles-allowed="</code><i>roles</i><code>"</code> is hit when there is a logged-in user
+ * who does not fulfil any of the given roles.
+ */ 
+public class UnfulfilledRolesException extends PageFlowException
+{
+    private String[] _roleNames;
+    private String _rolesList;
+    
+
+    /**
+     * Construct on the list of roles that were allowed access to the action.
+     * 
+     * @param roleNames an array of String role names.
+     */ 
+    public UnfulfilledRolesException( String[] roleNames, String rolesList, String actionName,
+                                      FlowController fc )
+    {
+        super( actionName, fc );
+        _roleNames = roleNames;
+        _rolesList = rolesList;
+    }
+
+    /**
+     * Get the names of the roles that were allowed access to the action.
+     * 
+     * @return an array of String role names.
+     */ 
+    public String[] getRoleNames()
+    {
+        return _roleNames;
+    }
+    
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ getActionName(), getFlowControllerURI(), _rolesList };
+    }
+
+    public String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "Action ", " on Page Flow ", " requires the user to be in one of the following roles: ", "."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/UnresolvableForwardException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/UnresolvableForwardException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+
+/**
+ * Exception thrown by {@link Forward} when a forward name does not resolve to a forward defined
+ * by <code>@jpf:forward</code>.
+ */ 
+public class UnresolvableForwardException extends PageFlowException
+{
+    private String _forwardName;
+
+    /**
+     * Constructor.
+     * 
+     * @param forwardName the name of the unresolvable {@link Forward}.
+     */ 
+    public UnresolvableForwardException( String forwardName, String actionName, FlowController fc )
+    {
+        super( actionName, fc );
+        _forwardName = forwardName;
+    }
+
+    /**
+     * Get the name of the unresolvable {@link Forward}.
+     * 
+     * @return a String that is the name of the unresolvable {@link Forward}.
+     */ 
+    public String getForwardName()
+    {
+        return _forwardName;
+    }
+
+    /**
+     * Set the name of the unresolvable {@link Forward}.
+     * 
+     * @param forwardName a String that is the name of the unresolvable {@link Forward}.
+     */ 
+    public void setForwardName( String forwardName )
+    {
+        _forwardName = forwardName;
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ _forwardName, getActionName(), getFlowControllerURI() };
+    }
+
+    public String[] getMessageParts()
+    {
+        return new String[]
+        {
+            "Unable to find a forward named \"", "\" on action ", " in Page Flow ", "."
+        };
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/Validatable.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/Validatable.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * Interface for beans that can validate themselves.  Called when data is posted to a page flow action that takes
+ * a non-{@link FormData}-derived bean as its argument.
+ */
+public interface Validatable
+{
+    public void validate( ActionMapping mapping, HttpServletRequest request, ActionErrors errors );
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/annotations/Jpf.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/annotations/Jpf.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,707 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.annotations;
+
+import java.lang.annotation.*;
+
+
+/**
+ * Holds jpf annotations to provide a Jpf prefix and local scoping of names.
+ */
+public interface Jpf
+{
+    /**
+     * Jpf.Controller; was jpf:controller
+     */
+    @Target( ElementType.TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface Controller
+    {
+        /**
+         * location of the struts merge file; relative to the page flow, or a path from
+         * the webapp root (optional )
+         */
+        String strutsMerge() default "";
+
+        /**
+         * is pageflow nested (optional )
+         */
+        boolean nested() default false;
+
+        /**
+         * is pageflow singleton (optional )
+         */
+        boolean singleton() default false;
+
+        /**
+         * roles allowed to access actions in this page flow (optional )
+         */
+        String[] rolesAllowed() default {};
+
+        /**
+         * is login required to access actions in this page flow (optional )
+         */
+        boolean loginRequired() default false;
+
+        /**
+         * is the pageflow read-only, i.e., are its actions guaranteed not to modify member
+         * state (optional )
+         */
+        boolean readOnly() default false;
+
+        /**
+         * global forwards (optional )
+         */
+        Forward[] forwards() default {};
+
+        /**
+         * exception catches (optional )
+         */
+        Catch[] catches() default {};
+        
+        /**
+         * simple actions (optional)
+         */ 
+        SimpleAction[] simpleActions() default {};
+
+        /**
+         * validation rules on a per-bean (class) basis (optional )
+         */
+        ValidatableBean[] validatableBeans() default {};
+
+        /**
+         * message resources (optional )
+         */
+        MessageResource[] messageResources() default {};
+    }
+
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ConditionalForward
+    {
+        /**
+         * The expression that will trigger this forward (required).
+         */
+        String condition();
+        
+        /**
+         * The forward name (optional).
+         */ 
+        String name() default "";
+        
+        /**
+         * The forward path.  Mutually-exclusive with <code>returnAction</code> and <code>navigateTo</code>.
+         */ 
+        String path() default "";
+        
+        /**
+         * The action to be invoked on the calling page flow.  Mutually-exclusive with <code>path</code> and
+         * <code>navigateTo</code>, and only valid in a nested page flow (<code>nested</code> on the
+         * <code>Controller</code> annotation must be true).
+         */ 
+        String returnAction() default "";
+        
+        /**
+         * A symbolic name for the page/action to which to navigate.  Mutually-exclusive with <code>returnAction</code>
+         * and <code>path</code>.
+         */ 
+        NavigateTo navigateTo() default NavigateTo.none;
+        
+        /**
+         * Tells whether the original query string will be restored on a rerun of a previous action.  Only valid when
+         * <code>navigateTo</code> is <code>NavigateTo.previousAction</code>.
+         * @return
+         */ 
+        boolean restoreQueryString() default false;
+        
+        Class outputFormBeanType() default Void.class;
+        String outputFormBean() default "";
+        boolean redirect() default false; // optional
+    }
+    
+    /**
+     * was jpf:view-properties
+     */ 
+    @Target( ElementType.TYPE )
+    @Retention( RetentionPolicy.SOURCE )
+    public @interface ViewProperties
+    {
+        String[] value() default {};
+    }
+    
+    /**
+     * was jpf:action
+     */
+    @Target( ElementType.METHOD )
+            @Retention( RetentionPolicy.RUNTIME )
+            public @interface Action
+    {
+        /**
+         * page flow-scoped form; references a member variable (bean) in the page flow
+         * (optional )
+         */
+        String useFormBean() default "";
+        
+        /**
+         * is this action read-only, i.e., is it guaranteed not to modify member state
+         * (optional )
+         */
+        boolean readOnly() default false;
+        
+        /**
+         * roles allowed to access this action (optional )
+         */
+        String[] rolesAllowed() default {};
+        
+        /**
+         * is login required to access this action (optional )
+         */
+        boolean loginRequired() default false;
+        
+        /**
+         * forwards (optional )
+         */
+        Forward[] forwards() default {};
+        
+        /**
+         * exception catches (optional )
+         */
+        Catch[] catches() default {};
+        
+        /**
+         * field-level validation rules tied to the action (optional )
+         */
+        ValidatableProperty[] validatableProperties() default {};
+        
+        /**
+         * forward used when validation fails
+         */
+        Forward validationErrorForward() default @Jpf.Forward( name="" );
+    }
+    
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface SimpleAction
+    {
+        /**
+         * name (required)
+         */ 
+        String name();
+        
+        ConditionalForward[] conditionalForwards() default {};
+        
+        /**
+         * page flow-scoped form; references a member variable (bean) in the page flow
+         * (optional )
+         */
+        String useFormBean() default "";
+
+        /**
+         * is this action read-only, i.e., is it guaranteed not to modify member state
+         * (optional )
+         */
+        boolean readOnly() default false;
+
+        /**
+         * roles allowed to access this action (optional )
+         */
+        String[] rolesAllowed() default {};
+
+        /**
+         * is login required to access this action (optional )
+         */
+        boolean loginRequired() default false;
+
+        /**
+         * exception catches (optional )
+         */
+        Catch[] catches() default {};
+
+        /**
+         * field-level validation rules tied to the action (optional )
+         */
+        ValidatableProperty[] validatableProperties() default {};
+
+        /**
+         * forward used when validation fails
+         */
+        Forward validationErrorForward() default @Jpf.Forward( name="" );
+        
+                /**
+         * The forward path.  Mutually-exclusive with <code>returnAction</code> and <code>navigateTo</code>.
+         */ 
+        String path() default "";
+        
+        /**
+         * The action to be invoked on the calling page flow.  Mutually-exclusive with <code>path</code> and
+         * <code>navigateTo</code>, and only valid in a nested page flow (<code>nested</code> on the
+         * <code>Controller</code> annotation must be true).
+         */ 
+        String returnAction() default "";
+        
+        /**
+         * A symbolic name for the page/action to which to navigate.  Mutually-exclusive with <code>returnAction</code>
+         * and <code>path</code>.
+         */ 
+        NavigateTo navigateTo() default NavigateTo.none;
+        
+        /**
+         * Tells whether the original query string will be restored on a rerun of a previous action.  Only valid when
+         * <code>navigateTo</code> is <code>NavigateTo.previousAction</code>.
+         * @return
+         */ 
+        boolean restoreQueryString() default false;
+        
+        Class outputFormBeanType() default Void.class;
+        String outputFormBean() default "";
+        boolean redirect() default false; // optional
+    }
+
+    /**
+     * was jpf:catch
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface Catch
+    {
+        /**
+         * the type of exception to catch (required )
+         */
+         // @TODO when javelinx supports it, change this to Class<? extends java.lang.Throwable> type();
+        Class type();
+
+        /**
+         * the Jpf.ExceptionHandler method to invoke when the exception occurs (optional )
+         * (cannot be present if path is present )
+         */
+        String method() default"";
+
+        /**
+         * the destination URI when the exception occurs (cannot be present if method is
+         * present) (optional )
+         */
+        String path() default "";
+
+        /**
+         * the literal message to send to the exception handler method (optional )
+         */
+        String message() default "";
+
+        /**
+         * a message-resources key to lookup the message that will be sent to the exception
+         * handler method (optional )
+         */
+        String messageKey() default "";
+    }
+
+    /**
+     * was jpf:exception-handler
+     */
+    @Target( ElementType.METHOD )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ExceptionHandler
+    {
+        /**
+         * forwards (optional )
+         */
+        Forward[] forwards() default {};
+
+        /**
+         * is the exception handler read-only, i.e., is it guaranteed not to modify member
+         * state (optional )
+         */
+        boolean readOnly() default false;
+    }
+
+    /**
+     * was jpf:forward
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface Forward
+    {
+        /**
+         * the forward name (required )
+         */
+        String name();
+        
+        /**
+         * The forward path.  Mutually-exclusive with <code>returnAction</code> and <code>navigateTo</code>.
+         */ 
+        String path() default "";
+        
+        /**
+         * The action to be invoked on the calling page flow.  Mutually-exclusive with <code>path</code> and
+         * <code>navigateTo</code>, and only valid in a nested page flow (<code>nested</code> on the
+         * <code>Controller</code> annotation must be true).
+         */ 
+        String returnAction() default "";
+        
+        /**
+         * A symbolic name for the page/action to which to navigate.  Mutually-exclusive with <code>returnAction</code>
+         * and <code>path</code>.
+         */ 
+        NavigateTo navigateTo() default NavigateTo.none;
+        
+        /**
+         * Tells whether the original query string will be restored on a rerun of a previous action.  Only valid when
+         * <code>navigateTo</code> is <code>NavigateTo.previousAction</code>.
+         * @return
+         */ 
+        boolean restoreQueryString() default false;
+        
+        Class outputFormBeanType() default Void.class;
+        String outputFormBean() default "";
+        boolean redirect() default false; // optional
+        ActionOutput[] actionOutputs() default {};
+    }
+
+    /**
+     * page input
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ActionOutput
+    {
+        String name();
+        Class type();
+        boolean nullable() default false;
+    }
+
+    /**
+     * Was jpf:message-resources
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface MessageResource
+    {
+        String name(); // required - no default
+        String bundleKey() default ""; // optional
+    }
+    
+    public enum NavigateTo
+    {
+        currentPage,
+        previousPage,
+        previousAction,
+        page,
+        none
+    }
+
+    /**
+     * Validation rule: Required.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateRequired
+    {
+        boolean enabled() default true;
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+    
+    /**
+     * Validation rule: MinLength.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateMinLength
+    {
+        boolean enabled() default true;
+        int chars(); // required
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: MaxLength.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateMaxLength
+    {
+        boolean enabled() default true;
+        int chars(); // required
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: Mask.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateMask
+    {
+        boolean enabled() default true;
+        String regex(); // required
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: Byte.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateType
+    {
+        boolean enabled() default true;
+        Class type();
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: Date.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateDate
+    {
+        boolean enabled() default true;
+        String pattern(); // required
+        boolean strict() default false;
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: Range.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateRange
+    {
+        boolean enabled() default true;
+        int minInt() default 0;
+        int maxInt() default -1;
+        float minFloat() default 0;
+        float maxFloat() default -1;
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: CreditCard.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateCreditCard
+    {
+        boolean enabled() default true;
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: Email.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateEmail
+    {
+        boolean enabled() default true;
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: ValidWhen.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateValidWhen
+    {
+        boolean enabled() default true;
+        String condition(); // required
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * Validation rule: Custom.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidateCustom
+    {
+        boolean enabled() default true;
+        String rule();  // required
+        String message() default "";
+        String messageKey() default "";
+        String arg0() default "";
+        String arg0Key() default "";
+        String arg1() default "";
+        String arg1Key() default "";
+        String arg2() default "";
+        String arg2Key() default "";
+        String arg3() default "";
+        String arg3Key() default "";
+    }
+
+    /**
+     * List of field validation rules.  Can be present on a bean property (method or field),
+     * or within a {@link ValidatableProperty}.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidationLocaleRules
+    {
+        ValidateRequired validateRequired() default @ValidateRequired(enabled=false);
+        ValidateMinLength validateMinLength() default @ValidateMinLength(enabled=false, chars=-1);
+        ValidateMaxLength validateMaxLength() default @ValidateMaxLength(enabled=false, chars=-1);
+        ValidateMask validateMask() default @ValidateMask(enabled=false, regex="");
+        ValidateType validateType() default @ValidateType(enabled=false, type=void.class);
+        ValidateDate validateDate() default @ValidateDate(enabled=false, pattern="");
+        ValidateRange validateRange() default @ValidateRange(enabled=false);
+        ValidateCreditCard validateCreditCard() default @ValidateCreditCard(enabled=false);
+        ValidateEmail validateEmail() default @ValidateEmail(enabled=false);
+        ValidateValidWhen validateValidWhen() default @ValidateValidWhen(enabled=false, condition="");
+        ValidateCustom validateCustom() default @ValidateCustom(enabled=false, rule="");
+        
+        String language() default "";
+        String country() default "";
+        String variant() default "";
+        boolean applyToUnhandledLocales() default false;
+    }
+
+    /**
+     * Validation rules associated with particular bean fields. Valid within {@link ValidatableBean} or {@link Action}.
+     */
+    @Target( { ElementType.ANNOTATION_TYPE, ElementType.METHOD } )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidatableProperty
+    {
+        String propertyName() default "";
+        String displayName() default "";
+        String displayNameKey() default "";
+        ValidateRequired validateRequired() default @ValidateRequired(enabled=false);
+        ValidateMinLength validateMinLength() default @ValidateMinLength(enabled=false, chars=-1);
+        ValidateMaxLength validateMaxLength() default @ValidateMaxLength(enabled=false, chars=-1);
+        ValidateMask validateMask() default @ValidateMask(enabled=false, regex="");
+        ValidateType validateType() default @ValidateType(enabled=false, type=void.class);
+        ValidateDate validateDate() default @ValidateDate(enabled=false, pattern="");
+        ValidateRange validateRange() default @ValidateRange(enabled=false);
+        ValidateCreditCard validateCreditCard() default @ValidateCreditCard(enabled=false);
+        ValidateEmail validateEmail() default @ValidateEmail(enabled=false);
+        ValidateValidWhen validateValidWhen() default @ValidateValidWhen(enabled=false, condition="");
+        ValidateCustom validateCustom() default @ValidateCustom(enabled=false, rule="");
+        ValidationLocaleRules[] localeRules() default {};
+    }
+    
+    /**
+     * Validation fields (and associated rules) associated with a bean type.  Valid within
+     * {@link Controller}.
+     */
+    @Target( ElementType.ANNOTATION_TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface ValidatableBean
+    {
+        Class type();                                    // required
+        ValidatableProperty[] validatableProperties();   // required
+    }
+    
+    @Target( ElementType.TYPE )
+    @Retention( RetentionPolicy.RUNTIME )
+    public @interface FormBean
+    {
+        String defaultMessageBundle() default "";
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionForward.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionForward.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,284 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.config;
+
+import org.apache.struts.action.ActionForward;
+
+import java.util.ArrayList;
+
+
+/**
+ * Bean class to handle our extensions to the Struts <forward> tag.
+ */
+public class PageFlowActionForward extends ActionForward
+{
+    private boolean _isNestedReturn;
+    private boolean _isReturnToPage;
+    private boolean _isReturnToAction;
+    private String _returnFormType;
+    private String _returnFormMember;
+    private boolean _hasExplicitRedirectValue;
+    private ArrayList _actionOutputs;
+    private boolean _restoreQueryString;
+
+
+    public boolean isNestedReturn()
+    {
+        return _isNestedReturn;
+    }
+
+    public void setNestedReturn( boolean nestedReturn )
+    {
+        _isNestedReturn = nestedReturn;
+    }
+
+    public boolean isReturnToPage()
+    {
+        return _isReturnToPage;
+    }
+
+    public void setReturnToPage( boolean returnToPage )
+    {
+        _isReturnToPage = returnToPage;
+    }
+
+    public boolean isReturnToAction()
+    {
+        return _isReturnToAction;
+    }
+
+    public void setReturnToAction( boolean returnToAction )
+    {
+        _isReturnToAction = returnToAction;
+    }
+
+    public String getReturnFormType()
+    {
+        return _returnFormType;
+    }
+
+    public void setReturnFormType( String returnFormType )
+    {
+        _returnFormType = returnFormType;
+    }
+
+    public String getReturnFormMember()
+    {
+        return _returnFormMember;
+    }
+
+    public void setReturnFormMember( String returnFormMember )
+    {
+        _returnFormMember = returnFormMember;
+    }
+
+    public boolean hasExplicitRedirectValue()
+    {
+        return _hasExplicitRedirectValue;
+    }
+
+    public void setHasExplicitRedirectValue( boolean hasExplicitRedirectValue )
+    {
+        _hasExplicitRedirectValue = hasExplicitRedirectValue;
+    }
+
+    public boolean isRestoreQueryString()
+    {
+        return _restoreQueryString;
+    }
+
+    public void setRestoreQueryString( boolean restoreQueryString )
+    {
+        _restoreQueryString = restoreQueryString;
+    }
+
+    public static class ActionOutput
+    {
+        private String _name;
+        private String _type;
+        private boolean _isNullable;
+        
+        public ActionOutput( String name, String type, boolean isNullable )
+        {
+            _name = name;
+            _type = type;
+            _isNullable = isNullable;
+        }
+
+        public String getName()
+        {
+            return _name;
+        }
+
+        public String getType()
+        {
+            return _type;
+        }
+
+        public boolean getNullable()
+        {
+            return _isNullable;
+        }
+    }
+
+    public void setActionOutputCount( String count )
+    {
+        setActionOutputCount( Integer.parseInt( count ) );
+    }
+    
+    public String getActionOutputCount()
+    {
+        return new Integer( _actionOutputs != null ? _actionOutputs.size() : 0 ).toString();
+    }
+    
+    public void setActionOutputCount( int count )
+    {
+        if ( _actionOutputs == null )
+        {
+            _actionOutputs = new ArrayList( count );
+        }
+        else
+        {
+            _actionOutputs.ensureCapacity( count );
+        }
+        
+        while ( _actionOutputs.size() < count )
+        {
+            _actionOutputs.add( null );
+        }
+    }
+    
+    protected void setActionOutput( int n, String concatenatedVals )
+    {
+        setActionOutputCount( n + 1 );
+        String[] vals = concatenatedVals.split( "\\|" );
+        assert vals.length == 3 : vals.length;
+        _actionOutputs.set( n, new ActionOutput( vals[2], vals[0], Boolean.valueOf( vals[1] ).booleanValue() ) );
+    }
+    
+    public ActionOutput[] getActionOutputs()
+    {
+        if ( _actionOutputs == null )
+        {
+            return new ActionOutput[0];
+        }
+        
+        return ( ActionOutput[] ) _actionOutputs.toArray( new ActionOutput[ _actionOutputs.size() ] );
+    }
+    
+    public void setActionOutput0( String str )
+    {
+        setActionOutput( 0, str );
+    }
+    
+    public void setActionOutput1( String str )
+    {
+        setActionOutput( 1, str );
+    }
+    
+    public void setActionOutput2( String str )
+    {
+        setActionOutput( 2, str );
+    }
+    
+    public void setActionOutput3( String str )
+    {
+        setActionOutput( 3, str );
+    }
+    
+    public void setActionOutput4( String str )
+    {
+        setActionOutput( 4, str );
+    }
+    
+    public void setActionOutput5( String str )
+    {
+        setActionOutput( 5, str );
+    }
+    
+    public void setActionOutput6( String str )
+    {
+        setActionOutput( 6, str );
+    }
+    
+    public void setActionOutput7( String str )
+    {
+        setActionOutput( 7, str );
+    }
+    
+    public void setActionOutput8( String str )
+    {
+        setActionOutput( 8, str );
+    }
+    
+    public void setActionOutput9( String str )
+    {
+        setActionOutput( 9, str );
+    }
+    
+    public void setActionOutput10( String str )
+    {
+        setActionOutput( 10, str );
+    }
+    
+    public void setActionOutput11( String str )
+    {
+        setActionOutput( 11, str );
+    }
+    
+    public void setActionOutput12( String str )
+    {
+        setActionOutput( 12, str );
+    }
+    
+    public void setActionOutput13( String str )
+    {
+        setActionOutput( 13, str );
+    }
+    
+    public void setActionOutput14( String str )
+    {
+        setActionOutput( 14, str );
+    }
+    
+    public void setActionOutput15( String str )
+    {
+        setActionOutput( 15, str );
+    }
+    
+    public void setActionOutput16( String str )
+    {
+        setActionOutput( 16, str );
+    }
+    
+    public void setActionOutput17( String str )
+    {
+        setActionOutput( 17, str );
+    }
+    
+    public void setActionOutput18( String str )
+    {
+        setActionOutput( 18, str );
+    }
+    
+    public void setActionOutput19( String str )
+    {
+        setActionOutput( 19, str );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionMapping.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionMapping.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,158 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.config;
+
+import org.apache.struts.action.ActionMapping;
+
+import java.util.Map;
+import java.util.LinkedHashMap;
+
+
+/**
+ * Bean class to handle our extensions to the Struts <action> tag.
+ * @exclude
+ */
+public class PageFlowActionMapping extends ActionMapping
+{
+    private String _unqualifiedActionPath;
+    private boolean _loginRequired = false;
+    private boolean _simpleAction = false;
+    private boolean _isOverloaded = false;
+    private String _formMember;
+    private String _formClass;  // applicable for non-ActionForm-derived form types
+    private boolean _readonly = false;
+    private Map< String, String > _conditionalForwards = new LinkedHashMap< String, String >();
+    private String _formBeanMessageResourcesKey;
+    
+
+    public String getUnqualifiedActionPath()
+    {
+        return _unqualifiedActionPath;
+    }
+
+    public final void setUnqualifiedActionPath( String unqualifiedActionPath )
+    {
+        _unqualifiedActionPath = unqualifiedActionPath;
+    }
+    
+    public final String getUnqualifiedActionName()
+    {
+        if ( _unqualifiedActionPath != null && _unqualifiedActionPath.startsWith( "/" ) )
+        {
+            return _unqualifiedActionPath.substring( 1 );
+        }
+        else
+        {
+            return _unqualifiedActionPath;
+        }
+    }
+    
+    public final boolean isLoginRequired()
+    {
+        return _loginRequired;
+    }
+    
+    public void setLoginRequired( boolean loginRequired )
+    {
+        _loginRequired = loginRequired;
+    }
+
+    public boolean isSimpleAction()
+    {
+        return _simpleAction;
+    }
+
+    public void setSimpleAction( boolean simpleAction )
+    {
+        _simpleAction = simpleAction;
+    }
+
+    public boolean isOverloaded()
+    {
+        return _isOverloaded;
+    }
+
+    public void setOverloaded( boolean overloaded )
+    {
+        _isOverloaded = overloaded;
+    }
+    
+    public String getFormMember()
+    {
+        return _formMember;
+    }
+
+    public void setFormMember( String formMember )
+    {
+        _formMember = formMember;
+    }
+
+    public String getFormClass()
+    {
+        return _formClass;
+    }
+
+    public void setFormClass( String formClass )
+    {
+        _formClass = formClass;
+    }
+
+    public boolean isReadonly()
+    {
+        return _readonly;
+    }
+
+    public void setReadonly( boolean readonly )
+    {
+        _readonly = readonly;
+    }
+    
+    public void setConditionalForwards( String conditionalForwards )
+    {
+        String[] pairs = conditionalForwards.split( ";" );
+        
+        for ( int i = 0; i < pairs.length; i++ )
+        {
+            String pair = pairs[i];
+            int delim = pair.indexOf( ':' );
+            assert delim != -1 : pair;
+            String forwardName = pair.substring( 0, delim );
+            String expression = pair.substring( delim + 1 );
+            _conditionalForwards.put( expression, forwardName );
+        }
+    }
+    
+    /**
+     * Get a map of expression -> forward-name.  If the expression evaluates to <code>true</code> the forward is used.
+     */ 
+    public Map< String, String > getConditionalForwardsMap()
+    {
+        return _conditionalForwards;
+    }
+
+    public String getFormBeanMessageResourcesKey()
+    {
+        return _formBeanMessageResourcesKey;
+    }
+
+    public void setFormBeanMessageResourcesKey( String formBeanMessageResourcesKey )
+    {
+        _formBeanMessageResourcesKey = formBeanMessageResourcesKey;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowControllerConfig.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowControllerConfig.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.config;
+
+import org.apache.struts.config.ControllerConfig;
+
+public class PageFlowControllerConfig extends ControllerConfig
+{
+    private boolean _isNestedPageFlow;
+    private boolean _isSingletonPageFlow;
+    private boolean _isReturnToPageDisabled;
+    private boolean _isReturnToActionDisabled;
+    private boolean _isMissingDefaultMessages;
+
+    
+    public boolean isNestedPageFlow()
+    {
+        return _isNestedPageFlow;
+    }
+
+    public void setIsNestedPageFlow( boolean nestedPageFlow )
+    {
+        _isNestedPageFlow = nestedPageFlow;
+    }
+
+    public boolean isSingletonPageFlow()
+    {
+        return _isSingletonPageFlow;
+    }
+
+    public void setIsSingletonPageFlow( boolean singletonPageFlow )
+    {
+        _isSingletonPageFlow = singletonPageFlow;
+    }
+
+    public boolean isReturnToPageDisabled()
+    {
+        return _isReturnToPageDisabled;
+    }
+
+    public void setIsReturnToPageDisabled( boolean returnToPageDisabled )
+    {
+        _isReturnToPageDisabled = returnToPageDisabled;
+    }
+
+    public boolean isReturnToActionDisabled()
+    {
+        return _isReturnToActionDisabled;
+    }
+
+    public void setIsReturnToActionDisabled( boolean returnToActionDisabled )
+    {
+        _isReturnToActionDisabled = returnToActionDisabled;
+    }
+
+    public boolean isMissingDefaultMessages()
+    {
+        return _isMissingDefaultMessages;
+    }
+
+    public void setIsMissingDefaultMessages( boolean missingDefaultMessages )
+    {
+        _isMissingDefaultMessages = missingDefaultMessages;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowExceptionConfig.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowExceptionConfig.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.config;
+
+import org.apache.struts.config.ExceptionConfig;
+
+
+/**
+ * Customization of the standard Struts class that corrresponds to <exception>.
+ * @exclude
+ */ 
+public class PageFlowExceptionConfig extends ExceptionConfig
+{
+    private boolean _isHandlerMethod;
+    private String _defaultMessage;
+    private boolean _isPathContextRelative;
+    private boolean _readonly;
+    
+
+    public boolean isHandlerMethod()
+    {
+        return _isHandlerMethod;
+    }
+
+    public void setIsHandlerMethod( boolean handlerMethod )
+    {
+        _isHandlerMethod = handlerMethod;
+    }
+
+    public String getDefaultMessage()
+    {
+        return _defaultMessage;
+    }
+
+    public void setDefaultMessage( String defaultMessage )
+    {
+        _defaultMessage = defaultMessage;
+    }
+
+    public boolean isPathContextRelative()
+    {
+        return _isPathContextRelative;
+    }
+
+    public void setIsPathContextRelative( boolean pathContextRelative )
+    {
+        _isPathContextRelative = pathContextRelative;
+    }
+
+    public boolean isReadonly()
+    {
+        return _readonly;
+    }
+
+    public void setReadonly( boolean readonly )
+    {
+        _readonly = readonly;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ExceptionsHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ExceptionsHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.handler;
+
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.beehive.netui.pageflow.FlowController;
+
+
+/**
+ * Handler for exception processing.
+ */
+public interface ExceptionsHandler
+    extends Handler
+{
+    ActionForward handleException( Throwable ex, ActionMapping actionMapping, String actionName,
+                                          ActionForm form, HttpServletRequest request, HttpServletResponse response,
+                                          FlowController flowController )
+        throws Exception;
+
+    Throwable unwrapException( Throwable ex );
+
+    void exposeException( Throwable ex, HttpServletRequest request, HttpServletResponse response,
+                          ActionMapping actionMapping );
+
+    void sendUnhandledExceptionError( Throwable ex, HttpServletRequest request, HttpServletResponse response );
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ForwardRedirectHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ForwardRedirectHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.handler;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletException;
+import java.io.IOException;
+
+
+/**
+ * Handler for Servlet forward and redirect.
+ */
+public interface ForwardRedirectHandler
+        extends Handler
+{
+    public void redirect( String uri, HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ServletException;
+
+    public void forward( String uri, HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ServletException;
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/Handler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/Handler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.handler;
+
+import javax.servlet.ServletContext;
+
+
+/**
+ * Base handler interface.
+ */
+public interface Handler
+{
+    /**
+     * Initialize.
+     * @param servletContext the ServletContext for the webapp that is creating this object.
+     */
+    public void init( ServletContext servletContext );
+    
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/LoginHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/LoginHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.handler;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.security.auth.login.LoginException;
+import java.security.Principal;
+
+
+/**
+ * Handler for login/logout/roles/
+ */ 
+public interface LoginHandler
+        extends Handler
+{
+    /**
+     * Log in the given user.
+     * 
+     * @param username the user to log in.
+     * @param password the user's password.
+     * @param request the current HttpServletRequest.
+     * @throws LoginException if the login fails.
+     */ 
+    public void login( String username, String password, HttpServletRequest request, HttpServletResponse response )
+        throws LoginException;
+    
+    /**
+     * Log out the current user.
+     * 
+     * @param invalidateSessions if <code>true</code>, current sessions associated with the current
+     *            logged-in user will be invalidated.
+     * @param request the current HttpServletRequest.
+     */ 
+    public void logout( boolean invalidateSessions, HttpServletRequest request, HttpServletResponse response );
+    
+    /**
+     * Tell whether the current user is in a given role.
+     * 
+     * @param roleName the role to check.
+     * @param request the current HttpServletRequest.
+     * @return <code>true</code> if the current logged-in user is in the given role.
+     */ 
+    public boolean isUserInRole( String roleName, HttpServletRequest request );
+    
+    /**
+     * Get the current user.
+     * @param request the current HttpServletRequest.
+     * @return a {@link Principal} that represents the current logged-in user.
+     */ 
+    public Principal getUserPrincipal( HttpServletRequest request );
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ReloadableClassHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ReloadableClassHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.handler;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * Handler for loading and reloading classes.
+ */
+public interface ReloadableClassHandler
+        extends Handler
+{
+    Object newInstance( String className, HttpServletRequest request )
+        throws ClassNotFoundException, InstantiationException, IllegalAccessException;
+
+    Class loadClass( String className, HttpServletRequest request )
+        throws ClassNotFoundException;
+
+    void reinit( HttpServletRequest request );
+
+    ClassLoader getClassLoader();
+
+    boolean isReloadEnabled();
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.interceptor;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
+
+/**
+ * Interface for page flow action interceptors.  These are configured in /WEB-INF/netui-config.xml like this:
+ * <pre>
+ *    &lt;netui-config xmlns="http://beehive.apache.org/netui/2004/server/config"&gt;
+ *        ...
+ *    
+ *        &lt;pageflow-action-interceptors&gt;
+ *            &lt;global&gt;
+ *                &lt;before-action&gt;
+ *                    &lt;action-interceptor&gt;
+ *                        &lt;interceptor-class&gt;test.BeforeActionInterceptor1&lt;/interceptor-class&gt;
+ *                    &lt;/action-interceptor&gt;
+ *                    &lt;action-interceptor&gt;
+ *                        &lt;interceptor-class&gt;test.BeforeActionInterceptor2&lt;/interceptor-class&gt;
+ *                    &lt;/action-interceptor&gt;
+ *                    ...
+ *                &lt;/before-action&gt;
+ *                &lt;after-action&gt;
+ *                    &lt;action-interceptor&gt;
+ *                        &lt;interceptor-class&gt;test.AfterActionInterceptor1&lt;/interceptor-class&gt;
+ *                    &lt;/action-interceptor&gt;
+ *                    &lt;action-interceptor&gt;
+ *                        &lt;interceptor-class&gt;test.AfterActionInterceptor2&lt;/interceptor-class&gt;
+ *                    &lt;/action-interceptor&gt;
+ *                &lt;/after-action&gt;
+ *            &lt;/global&gt;
+ *        &lt;/pageflow-action-interceptors&gt;
+ * 
+ *        ...
+ *    &lt;/netui-config&gt;
+
+ * </pre>
+ *
+ * Note that a registered ActionInterceptor is created and cached as a single instance per ServletContext.
+ * It should not hold any per-request or per-session state.
+ */ 
+public abstract interface ActionInterceptor
+{
+    /**
+     * Called when this interceptor is being initialized.
+     * 
+     * @param config the configuration object associated with this interceptor.
+     * @param servletContext the ServletContext for the current web application.
+     */ 
+    public void init( ActionInterceptorConfig config, ServletContext servletContext );
+    
+    /**
+     * Called either before or after (depending on registration; see {@link ActionInterceptor}) an action is raised on
+     * a page flow.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param pageFlow the page flow on which the action is being raised.
+     * @param originalForward a wrapper for the original URI from the action that was intercepted.  This value will be
+     *            <code>null</code> if the interceptor was run before the action, or if the action itself returned
+     *            <code>null</code>.
+     * @param actionName the name of the action being raised.
+     * @return an InterceptorForward that changes the destination URI, or <code>null</code> to allow flow to the
+     *             intended URI.  If the returned InterceptorForward points to a nested page flow, then 
+     *             {@link #doPostIntercept} will be called before the nested page flow returns to the original page
+     *             flow.
+     * @throws Exception
+     */ 
+    public InterceptorForward doIntercept( HttpServletRequest request, HttpServletResponse response,
+                                           PageFlowController pageFlow, InterceptorForward originalForward,
+                                           String actionName )
+            throws Exception;
+    
+    /**
+     * Called when returning to the original page flow after an action interceptor had shown a nested page flow.
+     *
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param pageFlow the page flow to which control is being returned.
+     * @param originalForward the forward in the original page flow that was intercepted (through #doIntercept)
+     *            to transfer control to the nested page flow.  This object may be returned, in which case the
+     *            original page flow navigates to the same URI it intended to show before interception occurred.
+     * @param returningActionName the action returned by the nested page flow.  If <code>null</code> is returned
+     *            from this method, then that action will be raised on the original page flow.
+     * @return an InterceptorForward that changes the destination URI when returning to the original page flow; or
+     *             <code>null</code> if the original page flow should handle the nested return normally.
+     * @throws Exception
+     */ 
+    public InterceptorForward doPostIntercept( HttpServletRequest request, HttpServletResponse response,
+                                               PageFlowController pageFlow, InterceptorForward originalForward,
+                                               String returningActionName )
+            throws Exception;
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChain.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChain.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,265 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.interceptor;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import java.util.Map;
+import java.util.ArrayList;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+/**
+ * Class for managing the chain of action interceptors at runtime.
+ * 
+ * @exclude
+ */ 
+public class ActionInterceptorChain
+{
+    private ActionInterceptor[] _actionInterceptors;
+    
+    public static final String CONFIG_FILE = "/WEB-INF/pageflow-action-interceptor.xml";
+    private static final String CONFIG_ATTR = ActionInterceptorChain.class.getName() + "_config";
+    private static final String BEFOREACTION_CACHE_ATTR = ActionInterceptorChain.class.getName() + "_beforeActionChain";
+    private static final String AFTERACTION_CACHE_ATTR = ActionInterceptorChain.class.getName() + "_afterActionChain";
+    private static final String ACTIVE_INTERCEPTOR_ATTR = ActionInterceptorChain.class.getName() + "_activeInterceptor";
+    private static final String INTERCEPTED_FWD_ATTR = ActionInterceptorChain.class.getName() + "_interceptedForward";
+    private static final String IS_RETURNING_ATTR = ActionInterceptorChain.class.getName() + "_returningFromIntercept";
+    
+    private static final Logger _log = Logger.getInstance( ActionInterceptorChain.class );
+    private static final ActionInterceptorChain NULL_CHAIN = new NullActionInterceptorChain();
+
+    
+    public ActionInterceptor[] getActionInterceptors()
+    {
+        return _actionInterceptors;
+    }
+
+    public void setActionInterceptors( ActionInterceptor[] actionInterceptors )
+    {
+        _actionInterceptors = actionInterceptors;
+    }
+
+    public static ActionInterceptorChain getBeforeActionChain( String actionName, HttpServletRequest request,
+                                                               ServletContext servletContext )
+    {
+        return getActionChain( actionName, request, servletContext, BEFOREACTION_CACHE_ATTR,
+                               ActionInterceptorsConfig.BEFORE_ACTION );
+    }
+    
+    public static ActionInterceptorChain getAfterActionChain( String actionName, HttpServletRequest request,
+                                                             ServletContext servletContext )
+    {
+        return getActionChain( actionName, request, servletContext, AFTERACTION_CACHE_ATTR,
+                               ActionInterceptorsConfig.AFTER_ACTION );
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public static ActionInterceptor getActiveInterceptor( HttpServletRequest request )
+    {
+        return ( ActionInterceptor ) request.getAttribute( ACTIVE_INTERCEPTOR_ATTR ); 
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public static InterceptorForward getInterceptedForward( HttpServletRequest request, boolean consume )
+    {
+        InterceptorForward ret = ( InterceptorForward ) request.getAttribute( INTERCEPTED_FWD_ATTR );
+        
+        if ( consume )
+        {
+            request.removeAttribute( INTERCEPTED_FWD_ATTR );
+        }
+        
+        return ret;
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public static void setIsReturningFromIntercept( HttpServletRequest request, boolean isReturning )
+    {
+        if ( isReturning )
+        {
+            request.setAttribute( IS_RETURNING_ATTR, Boolean.TRUE );
+        }
+        else
+        {
+            request.removeAttribute( IS_RETURNING_ATTR );
+        }
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public static boolean isReturningFromIntercept( HttpServletRequest request )
+    {
+        return request.getAttribute( IS_RETURNING_ATTR ) != null;
+    }
+    
+    public InterceptorForward doIntercept( HttpServletRequest request, HttpServletResponse response,
+                                           InterceptorForward originalForward, PageFlowController pageFlow,
+                                           String actionName )
+    {
+        if ( _actionInterceptors != null )
+        {
+            for ( int i = 0; i < _actionInterceptors.length; ++i )
+            {
+                ActionInterceptor interceptor = _actionInterceptors[i];
+                InterceptorForward interceptorForward = null;
+                
+                try
+                {
+                    interceptorForward = interceptor.doIntercept( request, response, pageFlow, originalForward,
+                                                                  actionName );
+                }
+                catch ( Exception e )
+                {
+                    _log.error( "Exception in " + interceptor.getClass().getName() + ".doIntercept", e );
+                }
+                
+                if ( interceptorForward != null )
+                {
+                    if ( originalForward == null )
+                    {
+                        originalForward = new OriginalForward( request );
+                    }
+                    
+                    request.setAttribute( ACTIVE_INTERCEPTOR_ATTR, interceptor );
+                    request.setAttribute( INTERCEPTED_FWD_ATTR, originalForward );
+                    return interceptorForward;
+                }
+            }
+        }
+        
+        return null;
+    }
+    
+    protected ActionInterceptorChain( ActionInterceptor[] interceptors )
+    {
+        _actionInterceptors = interceptors;
+    }
+    
+    private static class NullActionInterceptorChain extends ActionInterceptorChain
+    {
+        public NullActionInterceptorChain()
+        {
+            super( null );
+        }
+    }
+    
+    private static ActionInterceptorChain getActionChain( String actionName, HttpServletRequest request,
+                                                          ServletContext servletContext, String cacheAttr,
+                                                          int type )
+    {
+        assert actionName == actionName;  // Get rid of compile warning. We don't currently intercept specific actions.
+        
+        Map< String, ActionInterceptorChain > cache =
+            ( Map< String, ActionInterceptorChain > ) servletContext.getAttribute( cacheAttr );
+        
+        if ( cache == null )
+        {
+            cache = new ConcurrentHashMap< String, ActionInterceptorChain >();
+            servletContext.setAttribute( cacheAttr, cache );
+        }
+        
+        String requestURI = request.getRequestURI();
+        ActionInterceptorChain cachedChain = cache.get( requestURI );
+        
+        if ( cachedChain != null )
+        {
+            return ( cachedChain instanceof NullActionInterceptorChain ? null : cachedChain );
+        }
+        
+        //
+        // We didn't find it in the cache -- build it.
+        //
+        ActionInterceptorsConfig config = getConfig( servletContext );
+        ActionInterceptorChainConfig chainConfig = config.getChainConfig( type );
+        ActionInterceptorConfig[] interceptors = ( chainConfig != null ? chainConfig.getInterceptors() : null );
+        ActionInterceptorChain ret;
+        
+        if ( interceptors != null && interceptors.length > 0 )
+        {
+            ArrayList interceptorsArray = new ArrayList();
+            
+            for ( int i = 0; i < interceptors.length; ++i )
+            {
+                ActionInterceptorConfig interceptorConfig = interceptors[i];
+                String className = interceptorConfig.getInterceptorClass();
+                
+                try
+                {
+                    Class interceptorClass = Class.forName( className );
+                    ActionInterceptor interceptor = ( ActionInterceptor ) interceptorClass.newInstance();
+                    interceptor.init( interceptorConfig, servletContext );
+                    interceptorsArray.add( interceptor );
+                }
+                catch ( ClassNotFoundException e )
+                {
+                    _log.error( "Could not find action-interceptor class " + className );
+                }
+                catch ( InstantiationException e )
+                {
+                    _log.error( "Could not instantiate action-interceptor class " + className, e );
+                }
+                catch ( IllegalAccessException e )
+                {
+                    _log.error( "Could not instantiate action-interceptor class " + className, e );
+                }
+                catch ( ClassCastException e )
+                {
+                    _log.error( "Action-interceptor class " + className + " does not implement "
+                                + ActionInterceptor.class.getName() );
+                }
+            }
+            
+            ActionInterceptor[] ar = ( ActionInterceptor[] )
+                    interceptorsArray.toArray( new ActionInterceptor[ interceptorsArray.size() ] );
+            ret = new ActionInterceptorChain( ar );
+        }
+        else
+        {
+            ret = NULL_CHAIN;
+        }
+        
+        cache.put( requestURI, ret );
+        return ret;
+    }
+    
+    private static ActionInterceptorsConfig getConfig( ServletContext servletContext )
+    {
+        ActionInterceptorsConfig config = ( ActionInterceptorsConfig ) servletContext.getAttribute( CONFIG_ATTR );
+
+        if ( config == null )
+        {
+            config = new ActionInterceptorsConfig();
+            servletContext.setAttribute( CONFIG_ATTR, config );
+        }
+        
+        return config;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChainConfig.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChainConfig.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.interceptor;
+
+
+/**
+ * @exclude
+ */ 
+class ActionInterceptorChainConfig
+{
+    private ActionInterceptorConfig[] _interceptors;
+
+    public ActionInterceptorConfig[] getInterceptors()
+    {
+        return _interceptors;
+    }
+
+    public void setInterceptors( ActionInterceptorConfig[]  interceptors )
+    {
+        _interceptors = interceptors;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorConfig.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorConfig.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.interceptor;
+
+
+/**
+ * Configuration object used to initialize an {@link ActionInterceptor}.
+ */ 
+public class ActionInterceptorConfig
+{
+    private String _interceptorClass;
+
+    public ActionInterceptorConfig( String interceptorClass )
+    {
+        _interceptorClass = interceptorClass;
+    }
+
+    public String getInterceptorClass()
+    {
+        return _interceptorClass;
+    }
+
+    public void setInterceptorClass( String interceptorClass )
+    {
+        _interceptorClass = interceptorClass;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorsConfig.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorsConfig.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.interceptor;
+
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.bean.PageflowActionInterceptors;
+
+
+/**
+ * @exclude
+ */ 
+class ActionInterceptorsConfig
+{
+    private ActionInterceptorChainConfig _beforeAllActions;
+    private ActionInterceptorChainConfig _afterAllActions;
+    
+    public static final int BEFORE_ACTION = 1;
+    public static final int AFTER_ACTION = 2;
+    
+    
+    public ActionInterceptorsConfig()
+    {
+        if ( ConfigUtil.getConfig() != null )
+        {
+            PageflowActionInterceptors ai = ConfigUtil.getConfig().getPageflowActionInterceptors();
+            
+            if ( ai != null )
+            {
+                PageflowActionInterceptors.Global global = ai.getGlobal();
+                
+                if ( global != null )
+                {
+                    PageflowActionInterceptors.Global.BeforeAction beforeAction = global.getBeforeAction();
+                    
+                    if ( beforeAction != null )
+                    {
+                        _beforeAllActions = loadChainConfig( beforeAction.getActionInterceptorArray() );
+                    }
+                    
+                    PageflowActionInterceptors.Global.AfterAction afterAction = global.getAfterAction();
+                    
+                    if ( afterAction != null )
+                    {
+                        _afterAllActions = loadChainConfig( afterAction.getActionInterceptorArray() );
+                    }
+                }
+            }
+        }
+    }
+    
+    private static ActionInterceptorChainConfig loadChainConfig(
+            org.apache.beehive.netui.util.config.bean.ActionInterceptor[] interceptors )
+    {
+        ActionInterceptorConfig[] configs = new ActionInterceptorConfig[ interceptors.length ];
+        
+        for ( int i = 0; i < interceptors.length; i++ )
+        {
+            configs[i] = new ActionInterceptorConfig( interceptors[i].getInterceptorClass() );
+        }
+        
+        ActionInterceptorChainConfig config = new ActionInterceptorChainConfig();
+        config.setInterceptors( configs );
+        return config;
+    }
+    
+    public ActionInterceptorChainConfig getChainConfig( int type )
+    {
+        switch ( type )
+        {
+            case BEFORE_ACTION:
+                return _beforeAllActions;
+                
+            case AFTER_ACTION:
+                return _afterAllActions;
+        }
+        
+        assert false : "unknown type " + type;
+        return null;
+    }
+    
+    public ActionInterceptorChainConfig getBeforeAllActions()
+    {
+        return _beforeAllActions;
+    }
+
+    public ActionInterceptorChainConfig getAfterAllActions()
+    {
+        return _afterAllActions;
+    }
+}
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.interceptor;
+
+import org.apache.beehive.netui.pageflow.Forward;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.URI;
+
+import org.apache.struts.action.ActionForward;
+
+
+/**
+ * Forward returned from an {@link ActionInterceptor} to alter the destination URI of a page flow action.
+ */ 
+public class InterceptorForward extends Forward
+{
+    InterceptorForward( Forward originalForward )
+    {
+        super( originalForward );
+    }
+    
+    /**
+     * Internal.  Initialize from an existing Struts ActionForward
+     * @exclude
+     */ 
+    public InterceptorForward( ActionForward originalForward )
+    {
+        super( originalForward );
+    }
+    
+    InterceptorForward( HttpServletRequest request )
+    {
+        super( request );
+    }
+    
+    /**
+     * Construct from a URI.
+     * 
+     * @param uri the URI pointed to by this Forward.
+     */ 
+    public InterceptorForward( URI uri )
+    {
+        super( uri );
+    }
+    
+    /**
+     * Construct from a URI.
+     * 
+     * @param uri the URI pointed to by this Forward.
+     * @param redirect if <code>true</code>, the controller will redirect to the given URI; otherwise, a server forward
+     *            will be performed.
+     */ 
+    public InterceptorForward( URI uri, boolean redirect )
+    {
+        super( uri, redirect );
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public void rehydrateRequest( HttpServletRequest request )
+    {
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/OriginalForward.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/OriginalForward.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,92 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.interceptor;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.io.Serializable;
+
+/**
+ * @exclude
+ */ 
+class OriginalForward extends InterceptorForward
+{
+    private Map _savedAttrs;
+    
+    private static final Logger _log = Logger.getInstance( OriginalForward.class );
+    
+    
+    OriginalForward( Forward fwd, HttpServletRequest request )
+    {
+        super( fwd );
+        saveRequestAttrs( request );
+    }
+    
+    OriginalForward( HttpServletRequest request )
+    {
+        super( request );
+        saveRequestAttrs( request );
+    }
+    
+    private void saveRequestAttrs( HttpServletRequest request )
+    {
+        _savedAttrs = new HashMap();
+        
+        for ( Enumeration e = request.getAttributeNames(); e.hasMoreElements(); )
+        {
+            String attrName = ( String ) e.nextElement();
+            Object attrVal = request.getAttribute( attrName ); 
+            
+            if ( attrVal instanceof Serializable )
+            {
+                _savedAttrs.put( attrName, attrVal );
+            }
+            else
+            {
+                if ( _log.isWarnEnabled() )
+                {
+                    _log.warn( "Dropping non-serializable request attribute " + attrName + " (" + attrVal + ")." );
+                }
+            }
+        } 
+    }
+    
+    public void rehydrateRequest( HttpServletRequest request )
+    {
+        if ( _savedAttrs != null )
+        {
+            for ( Iterator i = _savedAttrs.entrySet().iterator(); i.hasNext(); )
+            {
+                Map.Entry entry = ( Map.Entry ) i.next();
+                
+                String attrName = ( String ) entry.getKey();
+                if ( request.getAttribute( attrName ) == null )
+                {
+                    request.setAttribute( attrName, entry.getValue() );
+                }
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ActionResultImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ActionResultImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,108 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.ActionResult;
+
+import java.io.PrintWriter;
+
+/**
+ * Encapsulation of the results returned by {@link org.apache.beehive.netui.pageflow.PageFlowUtils#strutsLookup}.
+ */ 
+public class ActionResultImpl implements ActionResult
+{
+    private String _uri = null;
+    private boolean _isRedirect = false;
+    private int _statusCode = 0;
+    private String _statusMessage = null;
+    private boolean _isError = false;
+
+    
+    protected ActionResultImpl()
+    {
+    }
+    
+    public ActionResultImpl( String uri, boolean redirect, int statusCode, String statusMessage, boolean isError )
+    {
+        _uri = uri;
+        _isRedirect = redirect;
+        _statusCode = statusCode;
+        _statusMessage = statusMessage;
+        _isError = isError;
+    }
+
+    public String getURI()
+    {
+        return _uri;
+    }
+
+    public void setURI( String uri )
+    {
+        _uri = uri;
+    }
+
+    public boolean isRedirect()
+    {
+        return _isRedirect;
+    }
+
+    public void setRedirect( boolean redirect )
+    {
+        _isRedirect = redirect;
+    }
+
+    public boolean isError()
+    {
+        return _isError;
+    }
+
+    public void setError( boolean error )
+    {
+        _isError = error;
+    }
+
+    public int getStatusCode()
+    {
+        return _statusCode;
+    }
+
+    public void setStatusCode( int statusCode )
+    {
+        _statusCode = statusCode;
+    }
+
+    public String getStatusMessage()
+    {
+        return _statusMessage;
+    }
+
+    public void setStatusMessage( String statusMessage )
+    {
+        _statusMessage = statusMessage;
+    }
+
+    public boolean hadCompileErrors()
+    {
+        return false;
+    }
+    
+    public void printCompileErrors( PrintWriter writer )
+    {
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AnyBeanActionForm.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AnyBeanActionForm.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Validatable;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
+import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionErrors;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+public class AnyBeanActionForm extends FormData
+{
+    private static final Logger _log = Logger.getInstance( AnyBeanActionForm.class );
+    
+    private Object _bean;
+
+    
+    public AnyBeanActionForm()
+    {
+    }
+    
+    public AnyBeanActionForm( Object bean )
+    {
+        _bean = bean;
+    }
+    
+    public Object getBean()
+    {
+        return _bean;
+    }
+
+    public void setBean( Object bean )
+    {
+        _bean = bean;
+    }
+    
+    public void reset( ActionMapping mapping, HttpServletRequest request )
+    {
+        if ( _bean == null )
+        {
+            assert mapping instanceof PageFlowActionMapping : mapping.getClass().getName();
+            
+            String formClass = ( ( PageFlowActionMapping ) mapping ).getFormClass();
+            assert formClass != null;
+            
+            try
+            {
+                ReloadableClassHandler reloadableHandler =
+                        ContextCache.get( getServlet().getServletContext() ).getReloadableClassHandler();
+                _bean = reloadableHandler.newInstance( formClass, request );
+            }
+            catch ( Exception e )
+            {
+                // Can be any exception -- not just the reflection-related exceptions...
+                // because the exception could be thrown from the bean's constructor.
+                if ( _log.isErrorEnabled() )
+                {
+                    _log.error( "Error while creating form-bean object of type " + formClass, e );
+                }
+            }
+        }
+    } 
+
+    public ActionErrors validate( ActionMapping mapping, HttpServletRequest request )
+    {
+        assert _bean != null;
+        assert mapping instanceof PageFlowActionMapping : mapping.getClass().getName();
+        
+        String beanClassName = ( ( PageFlowActionMapping ) mapping ).getFormClass();
+        ActionErrors errors = validateBean( _bean, beanClassName, mapping, request );
+        
+        if ( _bean instanceof Validatable )
+        {
+            if ( errors == null )
+            {
+                errors = new ActionErrors();
+            }
+            
+            ( ( Validatable ) _bean ).validate( mapping, request, errors );
+        }
+        
+        return errors;
+    }    
+    
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/BindingUpdateError.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/BindingUpdateError.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+
+/**
+ * Encapsulation of an error that happens when a databinding expression is applied on POST.
+ */ 
+public class BindingUpdateError
+{
+    private String _expression;
+    private String _message;
+    private Throwable _cause;
+
+    /**
+     * Constructor to initialize all values.
+     * 
+     * @param expression the expression associated with this error.
+     * @param message the error message.
+     * @param cause the Throwable that caused the error.
+     */ 
+    public BindingUpdateError( String expression, String message, Throwable cause )
+    {
+        _expression = expression;
+        _message = message;
+        _cause = cause;
+    }
+
+    /**
+     * Get the expression associated with this error.
+     * @return a String containing the expression associated with this error.
+     */ 
+    public String getExpression()
+    {
+        return _expression;
+    }
+
+    /**
+     * Set the expression associated with this error.
+     * @param expression a String containing the expression associated with this error.
+     */ 
+    public void setExpression( String expression )
+    {
+        _expression = expression;
+    }
+
+    /**
+     * Get the error message.
+     * @return a String containing the error message.
+     */ 
+    public String getMessage()
+    {
+        return _message;
+    }
+
+    /**
+     * Set the error message.
+     * @param message a String containing the error message.
+     */ 
+    public void setMessage( String message )
+    {
+        _message = message;
+    }
+
+    /**
+     * Get the cause of the error.
+     * @return the Throwable that caused the error.
+     */ 
+    public Throwable getCause()
+    {
+        return _cause;
+    }
+
+    /**
+     * Set the cause of the error.
+     * @param cause the Throwable that caused the error.
+     */ 
+    public void setCause( Throwable cause )
+    {
+        _cause = cause;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedPageFlowInfo.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedPageFlowInfo.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,116 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.PageFlowConstants;
+
+import java.lang.reflect.Field;
+
+
+/**
+ * Information that is cached per pageflow class.
+ * 
+ * @exclude
+ */ 
+public class CachedPageFlowInfo
+{
+    /**
+     * A cached copy of the module path for this PageFlowController (the path starting at the webapp root).
+     */
+    private String _modulePath;
+    
+    /**
+     * A cached copy of the webapp-relative URI for this PageFlowController.
+     */ 
+    private String _URI;
+    
+    /**
+     * The globalApp member field -- may or may not be present.
+     */ 
+    private Field _globalAppMemberField;
+    
+    
+    public CachedPageFlowInfo( Class pageFlowClass )
+    {
+        //
+        // globalApp field
+        //
+        try
+        {
+            _globalAppMemberField = pageFlowClass.getDeclaredField( PageFlowConstants.GLOBALAPP_MEMBER_NAME );
+            _globalAppMemberField.setAccessible( true );
+        }
+        catch ( NoSuchFieldException e )
+        {
+            // This means there is no declared globalApp field.
+            _globalAppMemberField = null;
+        }
+        
+        //
+        // URI
+        //
+        String className = pageFlowClass.getName();
+        _URI = "/" + className.replace( '.', '/' ) + PageFlowConstants.JPF_EXTENSION;
+        
+        //
+        // module path
+        //
+        int lastDot = className.lastIndexOf( '.' );
+
+        if ( lastDot != -1 )
+        {
+            className = className.substring( 0, lastDot );
+            _modulePath = "/" + className.replace( '.', '/' );
+        }
+        else
+        {
+            _modulePath = "";
+        }
+    }
+
+    public String getModulePath()
+    {
+        return _modulePath;
+    }
+
+    public void setModulePath( String modulePath )
+    {
+        _modulePath = modulePath;
+    }
+
+    public String getURI()
+    {
+        return _URI;
+    }
+
+    public void setURI( String URI )
+    {
+        _URI = URI;
+    }
+
+    public Field getGlobalAppMemberField()
+    {
+        return _globalAppMemberField;
+    }
+
+    public void setGlobalAppMemberField( Field globalAppMemberField )
+    {
+        _globalAppMemberField = globalAppMemberField;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,241 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument;
+import org.apache.beehive.netui.util.config.bean.PageflowHandlers;
+import org.apache.beehive.netui.pageflow.PageFlowActionServlet;
+import org.apache.beehive.netui.pageflow.PageFlowContextListener;
+import org.apache.beehive.netui.pageflow.PageFlowConstants;
+import org.apache.beehive.netui.pageflow.handler.LoginHandler;
+import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
+import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
+import org.apache.beehive.netui.pageflow.handler.Handler;
+import org.apache.beehive.netui.pageflow.handler.ExceptionsHandler;
+
+import javax.servlet.ServletContext;
+import java.io.Serializable;
+
+
+public class ContextCache implements Serializable, PageFlowConstants
+{
+    private static final Logger _log = Logger.getInstance( ContextCache.class );
+    
+    private static final String CACHE_ATTR = ContextCache.class.getName() + "_cache";
+    private static final String DEFAULT_LOGIN_HANDLER_CLASS = DefaultLoginHandler.class.getName();
+    private static final String DEFAULT_FWD_REDIRECT_HANDLER_CLASS = DefaultForwardRedirectHandler.class.getName();
+    private static final String DEFAULT_RELOADABLE_CLASS_HANDLER_CLASS = DefaultReloadableClassHandler.class.getName();
+    private static final String DEFAULT_EXCEPTIONS_HANDLER_CLASS = DefaultExceptionsHandler.class.getName();
+    
+    private boolean _secureForwards = false;
+    private int _forwardOverflowCount = DEFAULT_FORWARD_OVERFLOW_COUNT;
+    private int _nestingOverflowCount = DEFAULT_NESTING_OVERFLOW_COUNT;
+    
+    private ForwardRedirectHandler _forwardRedirectHandler = null;
+    private LoginHandler _loginHandler = null;
+    private ReloadableClassHandler _reloadableClassHandler = null;
+    private ExceptionsHandler _exceptionsHandler = null;
+    
+    
+    public ForwardRedirectHandler getForwardRedirectHandler()
+    {
+        return _forwardRedirectHandler;
+    }
+    
+    public LoginHandler getLoginHandler()
+    {
+        return _loginHandler;
+    }
+    
+    public ReloadableClassHandler getReloadableClassHandler()
+    {
+        return _reloadableClassHandler;
+    }
+    
+    public ExceptionsHandler getExceptionsHandler()
+    {
+        return _exceptionsHandler;
+    }
+    
+    public static ContextCache get( ServletContext servletContext )
+    {
+        ContextCache cache = ( ContextCache ) servletContext.getAttribute( CACHE_ATTR );
+        
+        if ( cache == null )
+        {
+            if ( _log.isErrorEnabled() )
+            {
+                _log.error( "Page Flow ServletContext cache not initialized; either "
+                            + PageFlowActionServlet.class.getName() + " must be the Struts action servlet, or "
+                            + PageFlowContextListener.class.getName() + " must be registered as a listener in web.xml." );
+            }
+            
+            //
+            // We can initialize it now, but it's not good because many requests could conceivably be in this
+            // code at the same time.
+            //
+            return init( servletContext );
+        }
+        
+        return cache;
+    }
+    
+    public static ContextCache init( ServletContext servletContext )
+    {
+        ContextCache cache = new ContextCache( servletContext );
+        servletContext.setAttribute( CACHE_ATTR, cache );
+        return cache;
+    }
+    
+    private ContextCache( ServletContext servletContext )
+    {
+        String doSecureForwards = servletContext.getInitParameter( SECURE_FORWARDS_PARAM );
+        _secureForwards = ( Boolean.TRUE.toString().equals( doSecureForwards ) );
+        
+        // TODO: deprecate these, and move them to netui-config.xml
+        _forwardOverflowCount =
+            loadIntParam( FORWARD_OVERFLOW_COUNT_PARAM, DEFAULT_FORWARD_OVERFLOW_COUNT, servletContext );
+        _nestingOverflowCount =
+            loadIntParam( NESTING_OVERFLOW_COUNT_PARAM, DEFAULT_NESTING_OVERFLOW_COUNT, servletContext );
+
+        
+        NetuiConfigDocument.NetuiConfig netuiConfig = ConfigUtil.getConfig();
+        PageflowHandlers handlers = netuiConfig.getPageflowHandlers();
+        
+        if ( handlers != null )
+        {
+            _loginHandler = ( LoginHandler ) getHandlerInstance(
+                    handlers.getLoginHandlerClass(), DEFAULT_LOGIN_HANDLER_CLASS, LoginHandler.class, servletContext );
+            
+            _forwardRedirectHandler = ( ForwardRedirectHandler ) getHandlerInstance(
+                    handlers.getForwardRedirectHandlerClass(), DEFAULT_FWD_REDIRECT_HANDLER_CLASS,
+                    ForwardRedirectHandler.class, servletContext );
+            
+            _reloadableClassHandler = ( ReloadableClassHandler ) getHandlerInstance(
+                    handlers.getReloadableClassHandlerClass(), DEFAULT_RELOADABLE_CLASS_HANDLER_CLASS,
+                    ReloadableClassHandler.class, servletContext );
+            
+            _exceptionsHandler = ( ExceptionsHandler ) getHandlerInstance(
+                    handlers.getExceptionsHandlerClass(), DEFAULT_EXCEPTIONS_HANDLER_CLASS,
+                    ExceptionsHandler.class, servletContext );
+        }
+        else
+        {
+            _loginHandler = ( LoginHandler ) getHandlerInstance(
+                    DEFAULT_LOGIN_HANDLER_CLASS, null, LoginHandler.class, servletContext );
+            
+            _forwardRedirectHandler = ( ForwardRedirectHandler ) getHandlerInstance(
+                    DEFAULT_FWD_REDIRECT_HANDLER_CLASS, null, ForwardRedirectHandler.class, servletContext );
+            
+            _reloadableClassHandler = ( ReloadableClassHandler ) getHandlerInstance(
+                    DEFAULT_RELOADABLE_CLASS_HANDLER_CLASS, null, ReloadableClassHandler.class, servletContext );
+            
+            _exceptionsHandler = ( ExceptionsHandler ) getHandlerInstance(
+                    DEFAULT_EXCEPTIONS_HANDLER_CLASS, null, ExceptionsHandler.class, servletContext );
+        }
+    }
+    
+    private Handler getHandlerInstance( String className, String alternateClassName, Class desiredClass,
+                                        ServletContext servletContext )
+    {
+        if ( className != null )
+        {
+            if ( _log.isInfoEnabled() )
+            {
+                _log.info( "Loading handler class " + className );
+            }
+            
+            try
+            {
+                Object instance = Class.forName( className ).newInstance();
+                
+                if ( desiredClass.isInstance( instance ) )
+                {
+                    Handler handlerInstance = ( Handler ) instance;
+                    handlerInstance.init( servletContext );
+                    return handlerInstance;
+                }
+                else
+                {
+                    if ( _log.isErrorEnabled() )
+                    {
+                        _log.error( "Handler instance is of wrong type; expected " + desiredClass.getName()
+                                    + ", got " + instance.getClass().getName() );
+                    }
+                }
+            }
+            catch ( ClassNotFoundException e )
+            {
+                if ( _log.isErrorEnabled() ) _log.error( "Could not find handler class " + className );
+            }
+            catch ( InstantiationException e )
+            {
+                if ( _log.isErrorEnabled() ) _log.error( "Could not instantiate handler of type " + className );
+            }
+            catch ( IllegalAccessException e )
+            {
+                if ( _log.isErrorEnabled() ) _log.error( "Could not instantiate handler of type " + className );
+            }
+        }
+        
+        if ( alternateClassName != null )
+        {
+            return getHandlerInstance( alternateClassName, null, desiredClass, servletContext );
+        }
+        
+        return null;
+    }
+    
+    public boolean shouldDoSecureForwards()
+    {
+        return _secureForwards;
+    }
+    
+    public int getForwardOverflowCount()
+    {
+        return _forwardOverflowCount;
+    }
+    
+    public int getNestingOverflowCount()
+    {
+        return _nestingOverflowCount;
+    }
+    
+    private static int loadIntParam( String paramName, int defaultVal, ServletContext servletContext )
+    {
+        String strVal = servletContext.getInitParameter( paramName );
+        
+        if ( strVal != null )
+        {
+            try
+            {
+                return Integer.parseInt( strVal );
+            }
+            catch ( NumberFormatException e )
+            {
+                _log.error( "Could not parse integer value from context-param " + paramName + "; using default "
+                            + defaultVal + ".", e );
+            }
+        }
+        
+        return defaultVal;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,424 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ExceptionHandler;
+import org.apache.struts.Globals;
+import org.apache.struts.util.RequestUtils;
+import org.apache.struts.util.MessageResources;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ExceptionConfig;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.lang.reflect.Method;
+import java.util.Locale;
+import java.io.StringWriter;
+import java.io.PrintWriter;
+import java.io.IOException;
+
+import org.apache.beehive.netui.pageflow.config.PageFlowExceptionConfig;
+import org.apache.beehive.netui.pageflow.FlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.PageFlowException;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.handler.ExceptionsHandler;
+import org.apache.beehive.netui.pageflow.internal.DefaultHandler;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.cache.ClassLevelCache;
+import org.apache.beehive.netui.util.logging.Logger;
+
+
+public class DefaultExceptionsHandler
+    extends DefaultHandler
+    implements ExceptionsHandler
+{
+    private static final Logger _log = Logger.getInstance( DefaultExceptionsHandler.class );
+    
+    private static final String CACHEID_EXCEPTION_HANDLER_METHODS = "_netui:exceptionHandlers";
+    
+    
+    public ActionForward handleException( Throwable ex, ActionMapping actionMapping, String actionName,
+                                          ActionForm form, HttpServletRequest request, HttpServletResponse response,
+                                          FlowController flowController )
+        throws Exception
+    {
+        if ( _log.isInfoEnabled() )
+        {
+            _log.info( "Handling uncaught Throwable " + ex.getClass().getName() );
+        }
+    
+        //
+        // Look up the ExceptionConfig that's associated with this Throwable.
+        //
+        Class exClass = ex.getClass();
+        ExceptionConfig exceptionConfig = null;
+        if ( actionMapping != null )
+        {
+            exceptionConfig = actionMapping.findException( exClass );
+        }
+        else
+        {
+            //
+            // If the mapping was null (i.e., the exception happened before we got the action mapping), look for the
+            // exception only in the module config.
+            //
+            exceptionConfig = getExceptionConfig( exClass, flowController.getModuleConfig() );
+        }
+        
+        //
+        // If there was no applicable exception handler in the current ModuleConfig, look in Global.app's module.
+        //
+        if ( exceptionConfig == null )
+        {
+            ServletContext servletContext = flowController.getServlet().getServletContext();
+            exceptionConfig = getAlternateExceptionConfig( exClass, request, servletContext );
+            
+            if ( exceptionConfig != null )
+            {
+                flowController = getAlternateFlowController( request, response, servletContext );
+                if ( flowController == null ) exceptionConfig = null;   // must have both for this to work.
+            }
+            
+            actionMapping = null;   // This action mapping isn't relevant if we found the exception elsewhere.
+        }
+        
+        if ( exceptionConfig != null )
+        {
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Found exception-config for exception " + exClass.getName()
+                            + ": handler=" + exceptionConfig.getHandler() + ", path=" + exceptionConfig.getPath() );
+            }
+
+            //
+            // First, see if it should be handled by invoking a handler method.
+            //
+            if ( exceptionConfig instanceof PageFlowExceptionConfig )
+            {
+                PageFlowExceptionConfig pfExceptionConfig = ( PageFlowExceptionConfig ) exceptionConfig;
+                
+                if ( pfExceptionConfig.isHandlerMethod() )
+                {
+                    return invokeExceptionHandlerMethod( ex, pfExceptionConfig, form, actionName, actionMapping,
+                                                         flowController, request, response );
+                }
+            }
+            
+            return invokeExceptionHandlerClass( ex, exceptionConfig, actionMapping, form, request, response );
+        }
+        
+        if ( _log.isErrorEnabled() )
+        {
+            StringBuffer msg = new StringBuffer( "Throwable " ).append( exClass.getName() );
+            _log.error( msg.append( " unhandled by current page flow and Global.app." ).toString(), ex );
+        }
+        
+        sendUnhandledExceptionError( ex, request, response );
+        return null;
+    }
+    
+    public Throwable unwrapException( Throwable ex )
+    {
+        //
+        // If the exception was thrown in a method we called through reflection, it will be an
+        // InvocationTargetException.  Unwrap it.  Do the same for the UndeclaredThrowable exceptions thrown when
+        // invoking methods through dynamic proxies.
+        //
+        if ( ex instanceof InvocationTargetException )
+        {
+            return unwrapException( ( ( InvocationTargetException ) ex ).getTargetException() );
+        }
+        
+        if ( ex instanceof UndeclaredThrowableException )
+        {
+            return unwrapException( ( ( UndeclaredThrowableException ) ex ).getUndeclaredThrowable() );
+        }
+        
+        return ex;
+    }
+    
+    public void exposeException( Throwable ex, HttpServletRequest request, HttpServletResponse response,
+                                 ActionMapping actionMapping )
+    {
+        //
+        // Put the exception in a place where Struts/NetUI tags will find it.
+        //
+        request.setAttribute( Globals.EXCEPTION_KEY, ex );
+    }
+    
+    protected ExceptionConfig getExceptionConfig( Class exceptionType, ModuleConfig moduleConfig )
+    {
+        ExceptionConfig config = null;
+                
+        if ( moduleConfig != null )
+        {
+            while ( config == null && exceptionType != null )
+            {
+                config = moduleConfig.findExceptionConfig( exceptionType.getName() );
+                
+                // Loop again for our superclass (if any)
+                exceptionType = exceptionType.getSuperclass();
+            }
+        }
+        
+        return config;
+    }
+    
+    protected ExceptionConfig getAlternateExceptionConfig( Class exClass, HttpServletRequest request,
+                                                           ServletContext servletContext )
+    {
+        ModuleConfig exceptionHandlerModuleConfig = InternalUtils.getGlobalAppConfig( servletContext );                
+        return getExceptionConfig( exClass, exceptionHandlerModuleConfig );
+    }
+    
+    protected FlowController getAlternateFlowController( HttpServletRequest request, HttpServletResponse response,
+                                                         ServletContext servletContext )
+    {
+        FlowController exceptionController = InternalUtils.ensureGlobalApp( request, response, servletContext );
+                    
+        //
+        // If there's no Global.app class, then it means there's an orphan module configuration file
+        // for Global.app (jpf-struts-config--global.xml).  Effectively there's no Global.app.
+        //
+        if ( exceptionController != null )
+        {
+            InternalUtils.setCurrentModule( exceptionController.getModuleConfig(), request );
+
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Found exception-config in Global.app" );
+            }                    
+        }
+        
+        return exceptionController;
+    }
+    
+    protected ActionForward invokeExceptionHandlerClass( Throwable throwable, ExceptionConfig exceptionConfig,
+                                                         ActionMapping actionMapping, ActionForm form,
+                                                         HttpServletRequest request, HttpServletResponse response )
+        throws Exception
+    {
+        //
+        // Get the exception-handler class and delegate to it.
+        //
+        String handlerClassName = exceptionConfig.getHandler();
+        ExceptionHandler handler = ( ExceptionHandler ) RequestUtils.applicationInstance( handlerClassName );
+        Exception ex = throwable instanceof Exception ? ( Exception ) throwable : new Exception( throwable );
+        ActionForward result = handler.execute( ex, exceptionConfig, actionMapping, form, request, response );
+                
+        //
+        // See if the path is really relative to the webapp root, not relative to the module.  Struts doesn't by default
+        // support paths that are webapp-relative.
+        //
+        if ( exceptionConfig instanceof PageFlowExceptionConfig
+                && ( ( PageFlowExceptionConfig ) exceptionConfig ).isPathContextRelative() )
+        {
+            result.setContextRelative( true );
+        }
+                
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( "Exception-handler: forward to " + result.getPath() );
+        }
+                
+        return result;
+    }
+    
+    protected ActionForward invokeExceptionHandlerMethod( Throwable ex, PageFlowExceptionConfig exceptionConfig,
+                                                          ActionForm form, String actionName,
+                                                          ActionMapping actionMapping, FlowController flowController,
+                                                          HttpServletRequest request, HttpServletResponse response )
+        throws Exception
+    {
+        String methodName = exceptionConfig.getHandler();
+        Object unwrappedFormBean = InternalUtils.unwrapFormBean( form );
+        Method method = getExceptionHandlerMethod( methodName, ex, unwrappedFormBean, flowController );
+
+        if ( method != null )
+        {
+            String message = exceptionConfig.getDefaultMessage();
+            String messageKey = exceptionConfig.getKey();
+                    
+            if ( messageKey != null && messageKey.length() > 0 )
+            {
+                message = getMessage( messageKey, null, null, request, flowController );
+            }
+                    
+            return flowController.invokeExceptionHandler( method, ex, actionName, message, unwrappedFormBean,
+                                                          form, actionMapping, request, response,
+                                                          exceptionConfig.isReadonly() );
+        }
+        else
+        {
+            //
+            // This shouldn't happen except in out-of-date-class situations.  JpfChecker
+            // should prevent this at compilation time.
+            //
+            String err;
+            if ( form != null )
+            {
+                err= Bundle.getString( "PageFlow_MissingExceptionHandlerWithForm",
+                                       new Object[]{ methodName, form.getClass().getName() } );
+            }
+            else
+            {
+                err = Bundle.getString( "PageFlow_MissingExceptionHandler", methodName );
+            }
+                    
+            InternalUtils.sendError( "PageFlow_Custom_Error", request, response, null, flowController.getURI(), err );
+            return null;
+        }        
+    }
+    
+    protected String getMessage( String messageKey, String bundle, Object[] args, HttpServletRequest request,
+                                 FlowController flowController )
+    {
+        if ( bundle == null ) bundle = Globals.MESSAGES_KEY;
+        
+        MessageResources resources = ( MessageResources ) request.getAttribute( bundle );
+        if ( resources == null )
+        {
+            resources = ( MessageResources ) flowController.getServlet().getServletContext().getAttribute( bundle );
+        }
+
+        if ( resources == null )
+        {
+            _log.error( "Could not find message-resources for bundle " + bundle );
+            return null;
+        }
+
+        Locale userLocale = FlowController.retrieveUserLocale( request, null );
+    
+        if ( args == null ) return ( resources.getMessage( userLocale, messageKey ) );
+        else return ( resources.getMessage( userLocale, messageKey, args ) );
+    }
+    
+    public void sendUnhandledExceptionError( Throwable ex, HttpServletRequest request, HttpServletResponse response )
+    {
+        _log.error( "Unhandled Page Flow Exception", ex );
+
+        try
+        {
+            //
+            // PageFlowExceptions know what to do in the unhandled case.
+            //
+            if ( ex instanceof PageFlowException )
+            {
+                ( ( PageFlowException ) ex ).sendError( request, response );
+            }
+            else
+            {
+                StringWriter sw = new StringWriter();
+                PrintWriter out = new PrintWriter( sw );
+                ex.printStackTrace( out );
+                out.close();
+
+                String msg = ex.getMessage();
+                if ( msg == null ) msg = " ";
+
+                InternalUtils.sendDevTimeError( "PageFlow_UnhandledException", request, response, ex,
+                                                HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                                                ex.getClass().getName(), msg, sw.toString() );
+            }
+        }
+        catch ( IOException ioEx )
+        {
+            _log.error( ioEx.getMessage(), ioEx );
+        }
+    }
+    
+    /**
+     * Get an Exception handler method.
+     * 
+     * @param methodName the name of the method to get.
+     * @param ex the Exception that is to be handled.
+     * @return the Method with the given name that handles the given Exception, or <code>null</code>
+     *             if none matches.
+     * @exclude
+     */ 
+    protected Method getExceptionHandlerMethod( String methodName, Throwable ex, Object formBean,
+                                                FlowController flowController )
+    {
+        String cacheKey = methodName + '/' + ex.getClass().getName();
+        ClassLevelCache cache = ClassLevelCache.getCache( flowController.getClass() );
+        Method method = ( Method ) cache.get( CACHEID_EXCEPTION_HANDLER_METHODS, cacheKey );
+        
+        if ( method != null )
+        {
+            return method;
+        }
+     
+        Class flowControllerClass = flowController.getClass();
+        for ( Class exClass = ex.getClass(); exClass != null; exClass = exClass.getSuperclass() )
+        {
+            Class[] args = new Class[]{ exClass, String.class, String.class, Object.class };
+            Method foundMethod = InternalUtils.lookupMethod( flowControllerClass, methodName, args );
+            
+            //
+            // If we didn't find an exception-handler with the right signature, look for the deprecated signature with
+            // FormData as the last argument.
+            //
+            if ( foundMethod == null && ( formBean == null || formBean instanceof FormData ) )
+            {
+                args = new Class[]{ exClass, String.class, String.class, FormData.class };         
+                foundMethod = InternalUtils.lookupMethod( flowControllerClass, methodName, args );
+            }
+            
+            //
+            // If we didn't find an exception-handler with the right signature, look for the deprecated signature with
+            // ActionForm as the last argument.
+            //
+            if ( foundMethod == null && ( formBean == null || formBean instanceof ActionForm ) )
+            {
+                args = new Class[]{ exClass, String.class, String.class, ActionForm.class };         
+                foundMethod = InternalUtils.lookupMethod( flowControllerClass, methodName, args );
+            }
+            
+            if ( foundMethod != null )
+            {
+                if ( _log.isDebugEnabled() )
+                {
+                    _log.debug( "Found exception handler for " + exClass.getName() );
+                }
+                
+                foundMethod.setAccessible( true );
+                cache.put( CACHEID_EXCEPTION_HANDLER_METHODS, cacheKey, foundMethod );
+                return foundMethod;
+            }
+            else
+            {
+                if ( _log.isErrorEnabled() )
+                {
+                    StringBuilder msg = new StringBuilder( "Could not find exception handler method " );
+                    msg.append( methodName ).append( " for " ).append( exClass.getName() ).append( '.' );
+                    _log.error( msg.toString() );
+                }
+            }
+        }
+        
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,116 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.PageFlowStack;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletException;
+import javax.servlet.RequestDispatcher;
+import java.io.IOException;
+
+import org.apache.struts.upload.MultipartRequestWrapper;
+
+
+/**
+ * Handler for redirects and server forwards.
+ */
+public class DefaultForwardRedirectHandler
+        extends DefaultHandler
+        implements ForwardRedirectHandler
+{
+    private static final Logger _log = Logger.getInstance( DefaultForwardRedirectHandler.class );
+    
+    
+    public void redirect( String uri, HttpServletRequest request, HttpServletResponse response )
+        throws IOException, ServletException
+    {
+        response.sendRedirect( response.encodeRedirectURL( uri ) );
+    }
+
+    public void forward( String uri, HttpServletRequest request, HttpServletResponse response )
+        throws IOException, ServletException
+    {
+        ContextCache contextCache = ContextCache.get( getServletContext() );
+        int requestCount = RequestValues.getForwardedRequestCount( request );
+        
+        //
+        // See if we've exceeded the maximum number of forwards.
+        //
+        int forwardOverflowCount = contextCache.getForwardOverflowCount();
+        if ( requestCount > forwardOverflowCount )
+        {
+            InternalUtils.sendDevTimeError( "PageFlow_Forward_Overflow", request, response, null,
+                                            HttpServletResponse.SC_INTERNAL_SERVER_ERROR, forwardOverflowCount, uri );
+            return;
+        }
+        
+        //
+        // See if we've exceeded the maximum nesting depth.
+        //
+        PageFlowStack pfStack = PageFlowStack.get( request, false );
+        
+        int nestingOverflowCount = contextCache.getNestingOverflowCount();
+        if ( pfStack != null && pfStack.size() > nestingOverflowCount )
+        {
+            InternalUtils.sendDevTimeError( "PageFlow_Nesting_Overflow", request, response, null,
+                                            HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                                            pfStack.size(), nestingOverflowCount );
+            return;
+        }
+            
+        //
+        // We're OK -- do the forward.
+        //
+        RequestValues.setForwardedRequestCount( request, requestCount + 1 );
+        
+        
+        //
+        // The following is a replacement for RequestDispatcher.doForward().
+        //
+        
+        // Unwrap the multipart request, if there is one.
+        if ( request instanceof MultipartRequestWrapper )
+        {
+            request = ( ( MultipartRequestWrapper ) request ).getRequest();
+        }
+
+        //
+        // Note that we get a RequestDispatcher from the request, not from the ServletContext.
+        // The request may be a ScopedRequest, which provides a special RequestDispatcher.
+        //
+        RequestDispatcher rd = request.getRequestDispatcher( uri );
+
+        if ( rd == null )
+        {
+            if ( _log.isErrorEnabled() )
+            {
+                _log.error( "Could not get requestDispatcher for URI " + uri );
+            }
+            response.sendError( HttpServletResponse.SC_NOT_FOUND );
+            return;
+        }
+    
+        rd.forward( request, response );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.handler.Handler;
+
+import javax.servlet.ServletContext;
+
+
+/**
+ * Default implementation of the base Handler interface.  Simply stores a reference to the ServletContext.
+ */
+public class DefaultHandler
+        implements Handler
+{
+    private ServletContext _servletContext;
+    
+    
+    /**
+     * Initialize.
+     * 
+     * @param servletContext the ServletContext for the webapp that is creating this object.
+     */
+    public void init( ServletContext servletContext )
+    {
+        _servletContext = servletContext;
+    }
+    
+    protected final ServletContext getServletContext()
+    {
+        return _servletContext;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,61 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.handler.LoginHandler;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.security.auth.login.LoginException;
+import java.io.Serializable;
+import java.security.Principal;
+
+
+/**
+ * Implements default J2EE web-tier login handling.
+ */ 
+public class DefaultLoginHandler
+    implements LoginHandler, Serializable
+{
+    public void init( ServletContext servletContext )
+    {
+    }
+
+    public void login( String username, String password, HttpServletRequest request, HttpServletResponse response )
+        throws LoginException
+    {
+        InternalUtils.getServerAdapter().login( username, password, request, response );
+    }
+
+    public void logout( boolean invalidateSessions, HttpServletRequest request, HttpServletResponse response )
+    {
+        InternalUtils.getServerAdapter().logout( invalidateSessions, request, response );
+    }
+
+    public boolean isUserInRole( String roleName, HttpServletRequest request )
+    {
+        return request.isUserInRole( roleName );
+    }
+
+    public Principal getUserPrincipal( HttpServletRequest request )
+    {
+        return request.getUserPrincipal();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,162 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.AutoRegisterActionServlet;
+import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
+import org.apache.beehive.netui.util.classloader.BouncyClassLoader;
+import org.apache.beehive.netui.util.cache.ClassLevelCache;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.ServletContext;
+import java.util.Enumeration;
+import java.io.File;
+
+import org.apache.struts.action.ActionServlet;
+
+
+public class DefaultReloadableClassHandler
+        extends DefaultHandler
+    implements ReloadableClassHandler
+{
+    private static final Logger _log = Logger.getInstance( DefaultReloadableClassHandler.class );
+    
+    private BouncyClassLoader _pageFlowClassLoader = null;
+    
+    
+    public void init( ServletContext servletContext )
+    {
+        super.init( servletContext );
+        
+        // This feature is disabled for now.
+        if ( false )
+        {
+            ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+            File[] classDirs = InternalUtils.getServerAdapter().getReloadableClassDirs( servletContext );
+            
+            if ( classDirs != null && ! InternalUtils.getServerAdapter().isInProductionMode() )
+            {
+                _pageFlowClassLoader = new BouncyClassLoader( classDirs, contextClassLoader );
+            }
+        }
+    }
+    
+    public Object newInstance( String className, HttpServletRequest request )
+        throws ClassNotFoundException, InstantiationException, IllegalAccessException
+    {
+        return loadClass( className, request ).newInstance();
+    }
+    
+    public Class loadClass( String className, HttpServletRequest request )
+        throws ClassNotFoundException
+    {
+        if ( _pageFlowClassLoader != null )
+        {
+            synchronized ( this )
+            {
+                return _pageFlowClassLoader.loadClass( className );
+            }
+        }
+        else
+        {
+            return Class.forName( className );
+        }
+    }
+    
+    public void reinit( HttpServletRequest request )
+    {
+        if ( _pageFlowClassLoader == null )
+        {
+            return;
+        }
+        
+        synchronized ( this )
+        {
+            if ( _pageFlowClassLoader.isStale() )
+            {
+                _log.debug( "Classes modified; bouncing classloader." );
+                
+                //
+                // First go through the session and remove any attributes whose classes were loaded by the stale
+                // classloader.
+                //
+                HttpSession session = request.getSession( false );
+                
+                if ( session != null )
+                {
+                    for ( Enumeration e = session.getAttributeNames(); e.hasMoreElements(); )
+                    {
+                        String attrName = ( String ) e.nextElement();
+                        Object attr = session.getAttribute( attrName );
+                        if ( attr.getClass().getClassLoader() == _pageFlowClassLoader )
+                        {
+                            if ( _log.isDebugEnabled() )
+                            {
+                                _log.debug( "Removing session attribute " + attrName + " (" + attr
+                                             + ") because its ClassLoader is being bounced." );
+                            }
+                            
+                            session.removeAttribute( attrName );
+                        }
+                    }
+                }
+                
+                //
+                // Clear all caches of methods, etc.
+                //
+                ClassLevelCache.clearAll();
+                
+                //
+                // Clear out all registered modules from the ActionServlet.
+                //
+                ActionServlet actionServlet = InternalUtils.getActionServlet( getServletContext() );
+                
+                if ( actionServlet instanceof AutoRegisterActionServlet )
+                {
+                    ( ( AutoRegisterActionServlet ) actionServlet ).clearRegisteredModules();
+                }
+                
+                //
+                // Bounce the classloader.
+                //
+                init( getServletContext() );
+            }
+        }
+    }
+    
+    public ClassLoader getClassLoader()
+    {
+        if ( _pageFlowClassLoader != null )
+        {
+            synchronized ( this )
+            {
+                return _pageFlowClassLoader;
+            }
+        }
+        
+        return _pageFlowClassLoader;
+    }
+    
+    public boolean isReloadEnabled()
+    {
+        return _pageFlowClassLoader != null;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultServerAdapter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultServerAdapter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,113 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.ServerAdapter;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.security.auth.login.LoginException;
+
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.runtime.servlet.ServletBeanContext;
+
+import java.io.File;
+
+
+public class DefaultServerAdapter implements ServerAdapter
+{
+    public static final String DEV_MODE_PROPERTY = "pageflow:devmode";
+    
+    private static final boolean DEV_MODE = Boolean.parseBoolean( System.getProperty( DEV_MODE_PROPERTY ) );
+    
+    
+    public boolean isInProductionMode()
+    {
+        return ! DEV_MODE;
+    }
+
+    public ServletContext getServletContext( HttpServletRequest request )
+    {
+        return request.getSession( true ).getServletContext();
+    }
+    
+    public Boolean isSecureResource( String uri, HttpServletRequest request, ServletContext servletContext )
+    {
+        return null;
+    }
+
+    public boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response,
+                                  ServletContext servletContext )
+    {
+        return false;
+    }
+
+    public int getListenPort( HttpServletRequest request )
+    {
+        return -1;
+    }
+
+    public int getSecureListenPort( HttpServletRequest request )
+    {
+        return -1;
+    }
+
+    public void login( String username, String password, HttpServletRequest request, HttpServletResponse response )
+            throws LoginException
+    {
+    }
+
+    public void logout( boolean invalidateSessions, HttpServletRequest request, HttpServletResponse response )
+    {
+    }
+    
+    public String getFullContextPath( HttpServletRequest request )
+    {
+        return request.getContextPath();
+    }
+
+    public void ensureFailover( String attrName, Object attrVal, HttpServletRequest request )
+    {
+        // By default, this doesn't do anything -- it's server-specific.
+    }
+
+    public void initServletContext( ServletContext servletContext )
+    {
+    }
+
+    public void beginRequest( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext )
+    {
+    }
+
+    public void endRequest( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext )
+    {
+    }
+
+    public ControlBeanContext createControlBeanContext( HttpServletRequest request, HttpServletResponse response )
+    {
+        return new ServletBeanContext();
+    }
+
+    public File[] getReloadableClassDirs( ServletContext servletContext )
+    {
+        String path = servletContext.getRealPath( "/WEB-INF/classes" );
+        return path != null ? new File[]{ new File( path ) } : null;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalConstants.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalConstants.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+public class InternalConstants
+{
+    /**
+     * The page flow compiler generates this message key when the message is actually an expression for us to evaluate
+     * at runtime.
+     */ 
+    public static final String MESSAGE_IS_EXPRESSION_PREFIX = "NETUI-EXPRESSION:";
+    public static final int MESSAGE_IS_EXPRESSION_PREFIX_LENGTH = MESSAGE_IS_EXPRESSION_PREFIX.length();
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,937 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.FlowControllerFactory;
+import org.apache.beehive.netui.pageflow.PageFlowConstants;
+import org.apache.beehive.netui.pageflow.ActionResolver;
+import org.apache.beehive.netui.pageflow.AutoRegisterActionServlet;
+import org.apache.beehive.netui.pageflow.ServerAdapter;
+import org.apache.beehive.netui.pageflow.GlobalApp;
+import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
+import org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.ServletUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletException;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Enumeration;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionServlet;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ActionConfig;
+import org.apache.struts.config.ControllerConfig;
+import org.apache.struts.config.FormBeanConfig;
+import org.apache.struts.Globals;
+
+public class InternalUtils
+        implements PageFlowConstants
+{
+    private static final Logger _log = Logger.getInstance( InternalUtils.class );
+    
+    private static final String BEA_XMLOBJECT_CLASSNAME = "com.bea.xml.XmlObject";
+    private static final String APACHE_XMLOBJECT_CLASSNAME = "org.apache.xmlbeans.XmlObject";
+    private static final Class BEA_XMLOBJECT_CLASS = loadClassNonFatal( BEA_XMLOBJECT_CLASSNAME );
+    private static final Class APACHE_XMLOBJECT_CLASS = loadClassNonFatal( APACHE_XMLOBJECT_CLASSNAME );
+    private static final String FORWARDED_OUTPUT_FORM_ATTR = PageFlowUtils.class.getName() + "_forwardedForm";    
+    private static final String SINGLETON_PAGEFLOWS_ATTR_PREFIX = PageFlowUtils.class.getName() + "_singleton:";
+    private static final String ACTIONOUTPUT_MAP_ATTR = PageFlowUtils.class.getName() + "_actionOutputs";
+    private static final String BINDING_UPDATE_ERRORS_ATTR = PageFlowUtils.class.getName() + "_bindingUpdateErrors";
+    private static final String CATALINA_HOME_PROP = "catalina.home";
+    private static final String SERVER_ADAPTER_PROP = "pageflow.serveradapter";
+    private static final String WL_SERVER_ADAPTER_CLASS = "org.apache.beehive.netui.pageflow.internal.WebLogicServerAdapter";
+    private static final String TOMCAT_SERVER_ADAPTER_CLASS = "org.apache.beehive.netui.tomcat.TomcatServerAdapter";
+    
+    private static final ServerAdapter SERVER_ADAPTER = createServerAdapter();
+    
+    
+    /**
+     * If not in production mode, write an error to the response; otherwise, set a response error code.
+     */ 
+    public static void sendDevTimeError( String messageKey, HttpServletRequest request, HttpServletResponse response, 
+                                         Throwable cause, int productionTimeErrorCode, Object ... messageArgs )
+            throws IOException
+    {
+        sendDevTimeError( messageKey, messageArgs, request, response, cause, productionTimeErrorCode );
+    }
+    
+    /**
+     * If not in production mode, write an error to the response; otherwise, set a response error code.
+     */ 
+    public static void sendDevTimeError( String messageKey, Object[] messageArgs, HttpServletRequest request, 
+                                         HttpServletResponse response, Throwable cause, int productionTimeErrorCode )
+            throws IOException
+    {
+        if ( SERVER_ADAPTER.isInProductionMode()
+                && ! RequestValues.avoidDirectResponseOutput( request ) )
+        {
+            if ( _log.isErrorEnabled() )
+            {
+                _log.error( "Error (message key " + messageKey + ") occurred.  Response error was set to "
+                            + productionTimeErrorCode, cause );
+            }
+            response.sendError( productionTimeErrorCode );
+        }
+        else
+        {
+            sendError( messageKey, messageArgs, request, response, cause );
+        }
+    }
+    
+    /**
+     * Write an error to the response.
+     */ 
+    public static void sendError( String messageKey, HttpServletRequest request, HttpServletResponse response,
+                                  Throwable cause, Object ... messageArgs )
+            throws IOException
+    {
+        sendError( messageKey, messageArgs, request, response, cause );
+    }
+    
+    /**
+     * Write an error to the response.
+     */ 
+    public static void sendError( String messageKey, Object[] messageArgs, HttpServletRequest request, 
+                                  HttpServletResponse response, Throwable cause )
+            throws IOException
+    {
+        assert messageArgs.length == 0 || ! ( messageArgs[0] instanceof Object[] )
+                : "Object[] passed to sendError; this is probably a mistaken use of varargs";
+        
+        // request may be null because of deprecated FlowController.sendError().
+        if ( request != null && RequestValues.avoidDirectResponseOutput( request ) )
+        {
+            String baseMessage = Bundle.getString( messageKey + "_Message", messageArgs );
+            throw new ResponseOutputException( baseMessage, cause );
+        }
+        
+        String html = Bundle.getString( messageKey + "_Page", messageArgs );
+        response.setContentType( "text/html;charset=UTF-8" );
+        response.getWriter().println( html );        
+        ServletUtils.preventCache( response );        
+    }
+    
+    /**
+     * We unwrap two special form types: XmlBeanActionForm and AnyBeanActionForm.
+     */ 
+    // TODO: make this pluggable
+    public static Object unwrapFormBean( ActionForm form )
+    {
+        if ( form == null ) return null;
+        
+        if ( form instanceof AnyBeanActionForm )
+        {
+            return ( ( AnyBeanActionForm ) form ).getBean();
+        }
+        
+        return form;
+    }
+    
+    public static ActionForm wrapFormBean( Object formBean )
+    {
+        if ( formBean == null ) return null;
+        
+        if ( formBean instanceof ActionForm )
+        {
+            return ( ActionForm ) formBean;
+        }
+        else
+        {
+            Class formClass = formBean.getClass();
+            
+            if ( BEA_XMLOBJECT_CLASS != null && BEA_XMLOBJECT_CLASS.isAssignableFrom( formClass ) )
+            {
+                return new XmlBeanActionForm( formBean );
+            }
+            else if ( APACHE_XMLOBJECT_CLASS != null && APACHE_XMLOBJECT_CLASS.isAssignableFrom( formClass ) )
+            {
+                return new XmlBeanActionForm( formBean );
+            }
+            
+            return new AnyBeanActionForm( formBean );
+        }
+    }
+    
+    private static Class loadClassNonFatal( String className )
+    {
+        try
+        {
+            return Class.forName( className );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            // Not fatal -- we don't require this to be there.  Only if the user wants to use it.
+            
+            if ( _log.isDebugEnabled() )
+            {
+                _log.debug( "Could not load class " + className );
+            }
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Get a Method in a Class.
+     * 
+     * @param parentClass the Class in which to find the Method.
+     * @param methodName the name of the Method.
+     * @param signature the argument types for the Method.
+     * @return the Method with the given name and signature, or <code>null</code> if the method does not exist.
+     */ 
+    public static Method lookupMethod( Class parentClass, String methodName, Class[] signature )
+    {
+        try
+        {
+            return parentClass.getDeclaredMethod( methodName, signature );
+        }
+        catch ( NoSuchMethodException e )
+        {
+            return null;
+        }
+    }    
+
+    /**
+     * Get or create the current PageFlowConroller for the given request.  Deduces the
+     * ServletContext from the request.
+     * 
+     * @exclude
+     * 
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse
+     * @return the current PageFlowController in the user session, or if there is none, create one
+     * appropriate to the given request if possible.  Failing that, return <code>null</code>.
+     */ 
+    public static final PageFlowController ensureCurrentPageFlow( HttpServletRequest request,
+                                                                  HttpServletResponse response )
+    {
+        assert request != null;
+        assert response != null;
+        
+        //
+        // This method is provided for org.apache.beehive.netui.script.xscript.context.PageFlowContextResolver.
+        //
+        ServletContext servletContext = SERVER_ADAPTER.getServletContext( request );
+        
+        if ( servletContext == null && _log.isWarnEnabled() )
+        {
+            _log.warn( "could not get ServletContext from request " + request );
+        }
+        
+        return ensureCurrentPageFlow( request, response, servletContext );
+    }
+    
+    /**
+     * Get or create the current PageFlowConroller for the given request.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param context the current ServletContext.
+     * @return the current PageFlowController in the user session, or if there is none, create one
+     * appropriate to the given request if possible.  Failing that, return <code>null</code>.
+     */ 
+    public static final PageFlowController ensureCurrentPageFlow( HttpServletRequest request,
+                                                                  HttpServletResponse response,
+                                                                  ServletContext context )
+    {
+        assert request != null;
+        assert response != null;
+                
+        PageFlowController cur = getCurrentPageFlow( request, false );
+        
+        //
+        // If there's no current PageFlow, or if the current PageFlowController has a module path that
+        // is incompatible with the current request URI, then create the appropriate PageFlowController.
+        //
+        if ( cur == null
+             || ! PageFlowUtils.getModulePathForRelativeURI( cur.getURI() ).equals( PageFlowUtils.getModulePath( request ) ) )
+        {
+            cur = FlowControllerFactory.getPageFlowForRequest( request, response, context );
+        }
+        
+        return cur;        
+    }
+    
+    /**
+     * Get the class name for a {@link PageFlowController} (.jpf) in the given module path (the
+     * given directory, relative to the web application root).
+     * @exclude
+     * 
+     * @param modulePath the module path, relative to the web application root.
+     * @return the class name of the PageFlowController, or <code>null</code> if none is found.
+     */
+    public static String getPageFlowClassName( String modulePath, ServletRequest request, ServletContext context )
+    {
+        if ( modulePath.equals( GLOBALAPP_MODULE_CONTEXT_PATH ) )
+        {
+            return GLOBALAPP_CLASSNAME;
+        }
+
+        //
+        // We're going to look in the struts config to get the PageFlowController class.
+        //
+        ModuleConfig mc = null;
+        
+        try
+        {
+            mc = ensureModuleConfig( modulePath, request, context );
+        }        
+        catch ( Exception e )
+        {
+            _log.error( "Error while registering Struts module " + modulePath, e );
+        }
+        
+        if ( mc != null )
+        {
+            ActionConfig beginActionConfig = mc.findActionConfig( BEGIN_ACTION_PATH );
+                
+            if ( beginActionConfig != null )
+            {
+                return beginActionConfig.getType();
+            }
+        }
+
+        if ( _log.isInfoEnabled() )
+        {
+            _log.info( "Could not find pageflow for path " + modulePath );
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Get the current ActionResolver ({@link PageFlowController}).
+     * 
+     * @return the current ActionResolver from the user session, or <code>null</code> if there is none.
+     */ 
+    public static ActionResolver getCurrentActionResolver( HttpServletRequest request, boolean warnAboutClassLoaders )
+    {
+        //
+        // First see if the current page flow is a singleton, which is stored in its own attribute.
+        //
+        HttpServletRequest unwrappedRequest = PageFlowUtils.unwrapMultipart( request );
+        String currentSingletonModulePath =
+                ( String ) ScopedServletUtils.getScopedSessionAttr( CURRENT_SINGLETON_ATTR, unwrappedRequest );
+        ActionResolver retVal;
+        
+        if ( currentSingletonModulePath != null )
+        {
+            retVal = getSingletonPageFlow( currentSingletonModulePath, unwrappedRequest, warnAboutClassLoaders );
+        }
+        else
+        {
+            retVal = ( ActionResolver ) ScopedServletUtils.getScopedSessionAttr( CURRENT_JPF_ATTR, unwrappedRequest );
+        }
+        
+        if ( warnAboutClassLoaders ) 
+        {
+            warnAboutClassLoaders( retVal, request );
+        }
+        
+        return retVal;
+    }
+    
+    public static void warnAboutClassLoaders( Object object, HttpServletRequest request )
+    {
+        warnAboutClassLoaders( object, SERVER_ADAPTER.getServletContext( request ) );   
+    }
+    
+    public static void warnAboutClassLoaders( Object object, ServletContext servletContext )
+    {
+        ReloadableClassHandler rh = ContextCache.get( servletContext ).getReloadableClassHandler();
+        
+        if ( rh.isReloadEnabled() )
+        {
+            ClassLoader objectClassLoader = object.getClass().getClassLoader();
+            
+            if ( objectClassLoader == rh.getClassLoader()
+                 && objectClassLoader != Thread.currentThread().getContextClassLoader() )
+            {
+                if ( _log.isWarnEnabled() )
+                {
+                    StringBuilder builder = new StringBuilder();
+                    builder.append( "Object " ).append( object ).append( " was loaded by ClassLoader " );
+                    builder.append( objectClassLoader );
+                    builder.append( ", which is not visible from the current ClassLoader (" );
+                    builder.append( Thread.currentThread().getContextClassLoader() ).append( "). ");
+                    builder.append( "This will cause a ClassCastException if the object is cast to a type loaded by " );
+                    builder.append( "the current ClassLoader.  To avoid this, either interact with the object " );
+                    builder.append( "through reflection APIs or disable the fast-reload feature." );
+                    // TODO: instructions for disabling fast-reload
+                    _log.warn( builder.toString() );
+                }
+            }
+        }
+    }
+    
+    /**
+     * Get the current PageFlowController.
+     * 
+     * @param request the current HttpServletRequest.
+     * @return the current PageFlowController from the user session, or <code>null</code>
+     *         if there is none.
+     */ 
+    public static final PageFlowController getCurrentPageFlow( HttpServletRequest request,
+                                                               boolean warnAboutClassLoaders )
+    {
+        ActionResolver cur = getCurrentActionResolver( request, warnAboutClassLoaders );
+        return cur != null && cur.isPageFlow() ? ( PageFlowController ) cur : null;
+    }
+    
+    /**
+     * Get the singleton page flow instance associated with the given module (directory) path.
+     * 
+     * @param modulePath the webapp-relative path to the directory containing the singleton page flow.
+     * @param request the current HttpServletRequest.
+     * @return the singleton page flow instance associated with the given module, or <code>null</code> if none is found.
+     */ 
+    public static PageFlowController getSingletonPageFlow( String modulePath, HttpServletRequest request,
+                                                           boolean warnAboutClassLoaders )
+    {
+        String attr = getSingletonFlowAttr( modulePath );
+        PageFlowController retVal =  ( PageFlowController )
+                ScopedServletUtils.getScopedSessionAttr( attr, PageFlowUtils.unwrapMultipart( request ) );
+        if ( warnAboutClassLoaders ) warnAboutClassLoaders( retVal, request );
+        return retVal;
+    }
+    
+    /**
+     * Tell whether the given module is a singleton page flow.
+     */
+    public static boolean isSingleton( ModuleConfig moduleConfig )
+    {
+        ControllerConfig cc = moduleConfig.getControllerConfig();
+        
+        if ( cc instanceof PageFlowControllerConfig )
+        {
+            return ( ( PageFlowControllerConfig ) cc ).isSingletonPageFlow();
+        }
+        else
+        {
+            return false;
+        }
+    }
+    
+    public static String getSingletonFlowAttr( String modulePath )
+    {
+        return SINGLETON_PAGEFLOWS_ATTR_PREFIX + modulePath;
+    }
+    
+    public static void deleteGlobalApp( HttpServletRequest request )
+    {
+        request.getSession().removeAttribute( GLOBALAPP_ATTR );
+    }
+    
+    public static void setCurrentPageFlow( PageFlowController jpf, HttpServletRequest request )
+    {
+        setCurrentActionResolver( jpf, request );
+    }
+    
+    public static void deleteCurrentPageFlow( HttpServletRequest request )
+    {
+        HttpServletRequest unwrappedRequest = PageFlowUtils.unwrapMultipart( request );
+        ScopedServletUtils.removeScopedSessionAttr( CURRENT_JPF_ATTR, unwrappedRequest );
+        ScopedServletUtils.removeScopedSessionAttr( CURRENT_SINGLETON_ATTR, unwrappedRequest );
+    }
+    
+    public static String decodeURI( HttpServletRequest request )
+    {
+        return ScopedServletUtils.decodeURI( request );
+    }
+        
+    public static void addActionOutputs( Map toAdd, ServletRequest request, boolean overwrite )
+    {
+        if ( toAdd != null )
+        {
+            Map map = getActionOutputMap( request, true );
+
+            for ( Iterator i = toAdd.entrySet().iterator(); i.hasNext(); )
+            {
+                Map.Entry entry = ( Map.Entry ) i.next();
+                String name = ( String ) entry.getKey();
+                boolean alreadyExists = map.containsKey( name );
+                
+                if ( overwrite || ! alreadyExists )
+                {
+                    if ( alreadyExists )
+                    {
+                        if ( _log.isWarnEnabled() )
+                        {
+                            _log.warn( "Overwriting action output \"" + name + "\"." );
+                        }
+                    }
+                    
+                    map.put( name, entry.getValue() );
+                }
+            }
+        }
+    }
+    
+    /**
+     * Set the forwarded form.  This overrides the auto-generated form created by processActionForm
+     * and populated by processPopulate (in PageFlowRequestProcessor).
+     */ 
+    public static void setForwardedForm( ActionForm form, ServletRequest request )
+    {
+        if ( form == null )
+        {
+            request.removeAttribute( FORWARDED_OUTPUT_FORM_ATTR );
+        }
+        else
+        {
+            request.setAttribute( FORWARDED_OUTPUT_FORM_ATTR, form );
+        }
+    }
+    
+    public static ActionForm getForwardedForm( ServletRequest request, boolean removeFromRequest )
+    {
+        ActionForm form = ( ActionForm ) request.getAttribute( FORWARDED_OUTPUT_FORM_ATTR );
+        
+        if ( removeFromRequest )
+        {
+            request.removeAttribute( FORWARDED_OUTPUT_FORM_ATTR );
+        }
+        
+        return form;
+    }
+        
+    public static void addValidationError( String propertyName, ActionError error, ServletRequest request )
+    {
+        ActionErrors errors = ( ActionErrors ) request.getAttribute( Globals.ERROR_KEY );
+        
+        if ( errors == null )
+        {
+            request.setAttribute( Globals.ERROR_KEY, errors = new ActionErrors() );
+        }
+        
+        errors.add( propertyName, error );
+    }
+    
+    
+    public static String getActionName( ActionMapping mapping )
+    {
+        String actionName = mapping.getPath();
+        return ( actionName.charAt( 0 ) == '/' ? actionName.substring( 1 ) : actionName );
+    }
+        
+        
+    public static Object newReloadableInstance( String className, HttpServletRequest request, ServletContext servletContext )
+        throws ClassNotFoundException, InstantiationException, IllegalAccessException
+    {
+        return getReloadableClass( className, request, servletContext ).newInstance();
+    }
+    
+    public static Class getReloadableClass( String className, HttpServletRequest request, ServletContext servletContext )
+        throws ClassNotFoundException
+    {
+        ReloadableClassHandler handler = ContextCache.get( servletContext ).getReloadableClassHandler();
+        return handler.loadClass( className, request );
+    }
+    
+    /**
+     * Provided as public for access from databinding tag classes.
+     * @exclude
+     */
+    public static Map getActionOutputMap( ServletRequest request, boolean createIfNotExist )
+    {
+        Map map = ( Map ) request.getAttribute( ACTIONOUTPUT_MAP_ATTR );
+
+        if ( map == null && createIfNotExist )
+        {
+            map = new HashMap();
+            request.setAttribute( ACTIONOUTPUT_MAP_ATTR, map );
+        }
+
+        return map;
+    }
+    
+    /**
+     * Get the Struts ModuleConfig associated with Global.app
+     * 
+     * @param context the current ServletContext
+     */ 
+    public static ModuleConfig getGlobalAppConfig( ServletContext context )
+    {
+        return getModuleConfig( GLOBALAPP_MODULE_CONTEXT_PATH, context );
+    }
+    
+    /**
+     * Get the Struts ModuleConfig for the given module path.
+     */ 
+    public static ModuleConfig getModuleConfig( String modulePath, ServletContext context )
+    {
+        return ( ModuleConfig ) context.getAttribute( Globals.MODULE_KEY + modulePath );        
+    }
+    
+    /**
+     * Get the Struts ModuleConfig for the given module path.  If there is none registered,
+     * and if it is possible to register one automatically, do so.
+     */ 
+    public static ModuleConfig ensureModuleConfig( String modulePath, ServletRequest request,
+                                                   ServletContext context )
+        throws IOException, ServletException
+    {
+        ModuleConfig ret = getModuleConfig( modulePath, context );
+        
+        if ( ret != null )
+        {
+            return ret;
+        }
+        else
+        {
+            ActionServlet as = getActionServlet( context );
+            
+            if ( as instanceof AutoRegisterActionServlet )
+            {
+                return ( ( AutoRegisterActionServlet ) as ).ensureModuleRegistered( modulePath, request ); 
+            }
+        }
+        
+        return null;
+    }
+   
+    public static final ServerAdapter getServerAdapter()
+    {
+        return SERVER_ADAPTER;
+    }
+    
+    /**
+     * Get the current ActionServlet.
+     * 
+     * @param context the current ServletContext
+     * @return the ActionServlet that is stored as an attribute in the ServletContext
+     */ 
+    public static ActionServlet getActionServlet( ServletContext context )
+    {
+        if ( context == null ) return null;
+        return ( ActionServlet ) context.getAttribute( Globals.ACTION_SERVLET_KEY );
+    }
+    
+    /**
+     * Add a BindingUpdateError to the request.
+     * 
+     * @param request the current ServletRequest.
+     * @param expression the expression associated with this error.
+     * @param message the error message.
+     * @param cause the Throwable that caused the error.
+     */ 
+    public static void addBindingUpdateError( ServletRequest request, String expression, String message, Throwable cause )
+    {
+        Map errors = ( Map ) request.getAttribute( BINDING_UPDATE_ERRORS_ATTR );
+        
+        if ( errors == null )
+        {
+            errors = new LinkedHashMap();
+            request.setAttribute( BINDING_UPDATE_ERRORS_ATTR, errors );
+        }
+        
+        errors.put( expression, new BindingUpdateError( expression, message, cause ) );
+    }
+    
+    /**
+     * Get a map of BindingUpdateErrors stored in the request.
+     * 
+     * @return a Map of expression (String) -> BindingUpdateError.
+     */ 
+    public static Map getBindingUpdateErrors( ServletRequest request )
+    {
+        return ( Map ) request.getAttribute( BINDING_UPDATE_ERRORS_ATTR );
+    }
+    
+    /**
+     * Print parameters and attributes in the given request.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param output a PrintStream to which to output request parameters and request/session
+     *            attributes; if <code>null</null>, <code>System.err</code> is used.
+     * 
+     */
+    public static void dumpRequest( HttpServletRequest request, PrintStream output )
+    {
+        if ( output == null ) output = System.err;
+        output.println( "*** HttpServletRequest " + request );
+        output.println( "        uri = " + request.getRequestURI() );
+
+        for ( Enumeration e = request.getParameterNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            output.println( "            parameter " + name + " = " + request.getParameter( name ) );
+        }
+
+        for ( Enumeration e = request.getAttributeNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            output.println( "            attribute " + name + " = " + request.getAttribute( name ) );
+        }
+
+        for ( Enumeration e = request.getSession().getAttributeNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            output.println( "            session attribute " + name + " = " + request.getSession().getAttribute( name ) );
+        }
+    }
+
+    /**
+     * Print attributes in the given ServletContext.
+     * 
+     * @param context the current ServletContext.
+     * @param output a PrintStream to which to output ServletContext attributes; if <code>null</null>,
+     *               <code>System.err</code> is used.
+     */
+    public static void dumpServletContext( ServletContext context, PrintStream output )
+    {
+        if ( output == null ) output = System.err;
+        output.println( "*** ServletContext " + context );
+
+        for ( Enumeration e = context.getAttributeNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            output.println( "            attribute " + name + " = " + context.getAttribute( name ) );
+        }
+    }
+    
+    public static void setCurrentModule( ModuleConfig mc, ServletRequest request )
+    {
+        request.setAttribute( Globals.MODULE_KEY, mc );
+    }
+    
+    public static ActionForm createActionForm( HttpServletRequest request, ActionMapping mapping,
+                                               ModuleConfig moduleConfig, ActionServlet actionServlet,
+                                               ServletContext servletContext )
+    {
+        String formName = mapping.getName();
+        FormBeanConfig config = moduleConfig.findFormBeanConfig(formName);
+        if (config == null) return null;
+        
+        try
+        {
+            ActionForm bean = ( ActionForm ) newReloadableInstance( config.getType(), request, servletContext );
+            bean.setServlet( actionServlet );
+            return bean;
+        }
+        catch ( Exception e )
+        {
+            if ( _log.isErrorEnabled() )
+            {
+                _log.error( "Error creating action form of type " + config.getType(), e );
+            }
+            
+            return null;
+        }
+    }
+    
+    /**
+     * Set the given form in either the request or session, as appropriate, so Struts/NetUI
+     * tags will have access to it.
+     */
+    public static void setFormInScope( String formName, ActionForm form, ActionMapping mapping,
+                                HttpServletRequest request, boolean overwrite )
+    {
+        if ( formName != null && form != null )
+        {
+            if ( isSessionScope( mapping ) )
+            {
+                HttpSession session = request.getSession();
+                
+                if ( overwrite || session.getAttribute( formName ) == null )
+                {
+                    session.setAttribute( formName, form );
+                }
+            }
+            else
+            {
+                if ( overwrite || request.getAttribute( formName ) == null )
+                {
+                    request.setAttribute( formName, form );
+                }
+            }
+        }
+    }
+    
+    public static boolean isSessionScope( ActionMapping mapping )
+    {
+        return ( mapping.getScope() == null || mapping.getScope().equals( "session" ) );
+    }
+    
+    public static ActionForm getFormBean( ActionMapping mapping, HttpServletRequest request )
+    {
+        String formBeanName = mapping.getName();
+        
+        if ( formBeanName != null )
+        {
+            if ( isSessionScope( mapping ) )
+            {
+                return ( ActionForm ) request.getSession().getAttribute( formBeanName );
+            }
+            else
+            {
+                return ( ActionForm ) request.getAttribute( formBeanName );
+            }
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Get or create the current {@link org.apache.beehive.netui.pageflow.GlobalApp} instance.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse
+     * @return the current {@link org.apache.beehive.netui.pageflow.GlobalApp} from the user session, or a newly-instantiated one
+     *         (based on the user's Global.app file) if none was in the session.  Failing that,
+     *         return <code>null</code>.
+     */ 
+    public static GlobalApp ensureGlobalApp( HttpServletRequest request, HttpServletResponse response )
+    {
+        return ensureGlobalApp( request, response, SERVER_ADAPTER.getServletContext( request ) );
+    }
+    
+    /**
+     * Get or create the current {@link GlobalApp} instance.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse
+     * @return the current {@link GlobalApp} from the user session, or a newly-instantiated one
+     *         (based on the user's Global.app file) if none was in the session.  Failing that,
+     *         return <code>null</code>.
+     */ 
+    public static GlobalApp ensureGlobalApp( HttpServletRequest request, HttpServletResponse response,
+                                             ServletContext servletContext )
+    {
+        assert request != null;
+        assert response != null;
+        
+        GlobalApp cur = PageFlowUtils.getGlobalApp( request );
+        
+        if ( cur != null )
+        {
+            cur.reInit( servletContext );
+            return cur;
+        }
+        else
+        {
+            return FlowControllerFactory.getGlobalApp( request, response, servletContext );
+        }
+    }
+
+    /**
+     * Set the current ActionResolver ({@link PageFlowController}) in the user session.
+     * 
+     * @param resolver the ActionResolver to set as the current one in the user session.
+     * @param request the current HttpServletRequest.
+     */ 
+    public static void setCurrentActionResolver( ActionResolver resolver, HttpServletRequest request )
+    {
+        HttpServletRequest unwrappedRequest = PageFlowUtils.unwrapMultipart( request );
+        
+        //
+        // If this is a singleton page flow, also store the instance in an attribute that never goes away.
+        //
+        if ( resolver.isPageFlow() &&
+                InternalUtils.isSingleton( ( ( PageFlowController ) resolver ).getModuleConfig() ) )
+        {
+            String singletonAttrName = InternalUtils.getSingletonFlowAttr( resolver.getModulePath() );
+            ScopedServletUtils.setScopedSessionAttr( singletonAttrName, resolver, unwrappedRequest );
+            ScopedServletUtils.setScopedSessionAttr( CURRENT_SINGLETON_ATTR, resolver.getModulePath(),
+                                                     unwrappedRequest );
+            ScopedServletUtils.removeScopedSessionAttr( CURRENT_JPF_ATTR, unwrappedRequest );
+        }
+        else
+        {
+            ScopedServletUtils.setScopedSessionAttr( CURRENT_JPF_ATTR, resolver, unwrappedRequest );
+            ScopedServletUtils.removeScopedSessionAttr( CURRENT_SINGLETON_ATTR, unwrappedRequest );
+        }
+    }
+    
+    private static ServerAdapter createServerAdapter()
+    {
+        String serverAdapterClassName = System.getProperty( SERVER_ADAPTER_PROP );
+        boolean userSpecifiedServerAdapter = serverAdapterClassName != null;
+        
+        if ( serverAdapterClassName == null )
+        {
+            if ( System.getProperty( CATALINA_HOME_PROP ) != null )
+            {
+                serverAdapterClassName = TOMCAT_SERVER_ADAPTER_CLASS;
+            }
+            else
+            {
+                serverAdapterClassName = WL_SERVER_ADAPTER_CLASS;
+            }
+            
+        }
+            
+        try
+        {
+            Class serverAdapterClass = Class.forName( serverAdapterClassName );
+            ServerAdapter serverAdapter = ( ServerAdapter ) serverAdapterClass.newInstance();
+            
+            if ( _log.isInfoEnabled() )
+            {
+                _log.info( "Created server adapter of type " + serverAdapterClass );
+            }
+            
+            return serverAdapter;
+        }
+        catch ( ClassNotFoundException e )
+        {
+            if ( userSpecifiedServerAdapter && _log.isErrorEnabled() )
+            {
+                _log.error( "Could not find ServerAdapter class " + serverAdapterClassName
+                            + "; using " + DefaultServerAdapter.class.getName() + "." );
+            }
+            
+            return new DefaultServerAdapter();
+        }
+        catch ( Exception e )
+        {
+            if ( _log.isErrorEnabled() )
+            {
+                _log.error( "Error instantiating ServerAdapter " + serverAdapterClassName
+                            + "; using " + DefaultServerAdapter.class.getName() + ".", e );
+            }
+            
+            return new DefaultServerAdapter();
+        }
+    }
+    
+    public static void setGlobalApp( GlobalApp ga, HttpServletRequest request )
+    {
+        request.getSession().setAttribute( GLOBALAPP_ATTR, ga );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,232 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.controls.runtime.servlet.ServletBeanContext;
+import org.apache.beehive.controls.api.bean.ControlBean;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.properties.AnnotatedElementMap;
+import org.apache.beehive.controls.api.properties.PropertyMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.ServletContext;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+
+
+/**
+ * @exclude
+ */ 
+public class JavaControlUtils
+{
+    private static final Logger _log = Logger.getInstance( JavaControlUtils.class );
+    private static final String CONTROL_CONTEXT_CLASSNAME = ServletBeanContext.class.getName();
+    private static final Class[] CONTROL_BEAN_CONSTRUCTOR_SIGNATURE =
+            new Class[]{ ControlBeanContext.class, String.class, PropertyMap.class };
+    
+    /** Map of control-container-class (e.g., PageFlowController) to Map of fields/control-properties. */
+    private static ConcurrentHashMap< String, Map< Field, PropertyMap > > _controlFieldCache =
+            new ConcurrentHashMap< String, Map< Field, PropertyMap > >();
+    
+    /** Cache of control-class-name to Constructor */
+    private static ConcurrentHashMap< String, Constructor > _controlConstructors =
+            new ConcurrentHashMap< String, Constructor >();
+    
+    
+    public static void initializeControlContext( HttpServletRequest request, HttpServletResponse response,
+                                                 ServletContext servletContext )
+    {
+        ControlBeanContext beanContext = getControlBeanContext( request, response, true );
+
+        //
+        // Start a new execution context
+        //
+        if ( beanContext instanceof ServletBeanContext )
+        {
+            ( ( ServletBeanContext ) beanContext ).beginContext( servletContext, request, response ); 
+        }
+    }
+
+    public static void uninitializeControlContext( HttpServletRequest request, HttpServletResponse response )
+    {
+        
+        ControlBeanContext beanContext = getControlBeanContext( request, response, false );
+        
+        if ( beanContext instanceof ServletBeanContext )
+        {
+            ( ( ServletBeanContext ) beanContext ).endContext();
+        }
+    }
+    
+    public static class ControlInstantiationException
+        extends Exception
+    {
+        private String _controlBeanClassName;
+        
+        public ControlInstantiationException( String controlBeanClassName, Throwable cause )
+        {
+            super( cause );
+            _controlBeanClassName = controlBeanClassName;
+        }
+
+        public String getControlBeanClassName()
+        {
+            return _controlBeanClassName;
+        }
+    }
+    
+    public static ControlBeanContext getControlBeanContext( HttpServletRequest request, HttpServletResponse response,
+                                                            boolean createIfMissing )
+    {
+        //
+        // Retrieve the control bean context from the request, and if it's not there, from the session.
+        // Using the request first ensures that we don't get confused by session invalidation.
+        //
+        // TODO: create our own context, with current-pageflow info.
+        ControlBeanContext beanContext = ( ControlBeanContext ) request.getAttribute( CONTROL_CONTEXT_CLASSNAME );
+        if ( beanContext != null ) return beanContext;
+        
+        HttpSession session = request.getSession( false );
+        if ( session != null )
+        {
+            beanContext = ( ControlBeanContext ) session.getAttribute( CONTROL_CONTEXT_CLASSNAME );
+            
+            if ( beanContext != null )
+            {
+                request.setAttribute( CONTROL_CONTEXT_CLASSNAME, beanContext );
+                return beanContext;
+            }
+        }
+        
+        //
+        // If no context exists, then create a new one and store it in the session.
+        //
+        if ( createIfMissing )
+        {
+            beanContext = InternalUtils.getServerAdapter().createControlBeanContext( request, response );
+            request.getSession().setAttribute( CONTROL_CONTEXT_CLASSNAME, beanContext );
+            request.setAttribute( CONTROL_CONTEXT_CLASSNAME, beanContext );
+        }
+       
+        return beanContext;
+    }
+    
+    /**
+     * @param controlClassName
+     * @param isBeanClass If <code>true</code>, <code>controlClassName</code> refers to a concrete (generated) control
+     *            bean class; if <code>false</code>, it refers to a control interface, and "Bean" will be appended to
+     *            get the bean class name.
+     * @param controlID
+     * @param properties
+     * @return 
+     */ 
+    public static ControlBean createControl( String controlClassName, boolean isBeanClass, String controlID,
+                                             PropertyMap properties, ControlBeanContext beanContext )
+        throws ControlInstantiationException
+    {
+        if ( ! isBeanClass ) controlClassName += "Bean";
+        
+        try
+        {
+            Constructor constructor = _controlConstructors.get( controlClassName );
+            
+            if ( constructor == null )
+            {
+                Class beanClass = Class.forName( controlClassName );
+                constructor = beanClass.getConstructor( CONTROL_BEAN_CONSTRUCTOR_SIGNATURE );
+                _controlConstructors.put( controlClassName, constructor );
+            }
+            
+            Object instance = constructor.newInstance( new Object[]{ beanContext, controlID, properties } );
+            assert instance instanceof ControlBean : instance.getClass().getName();
+            return ( ControlBean ) instance;
+        }
+        catch ( ClassNotFoundException e )
+        {
+            _log.error( "Could not find control bean class " + controlClassName );
+            throw new ControlInstantiationException( controlClassName, e );
+        }
+        catch ( NoSuchMethodException e )
+        {
+            _log.error( "Missing constructor (ControlBeanContext, String controlID) on control bean class.", e );
+            throw new ControlInstantiationException( controlClassName, e );
+        }
+        catch ( Exception e )
+        {
+            assert e instanceof InstantiationException || e instanceof IllegalAccessException
+                    || e instanceof InvocationTargetException : e.getClass().getName();
+            _log.error( "Error while constructing control bean of type " + controlClassName, e );
+            throw new ControlInstantiationException( controlClassName, e );
+        }
+    }
+    
+    public static void destroyControl( Object controlInstance )
+    {
+        assert controlInstance instanceof ControlBean : controlInstance.getClass().getName();
+        ( ( ControlBean ) controlInstance ).getBeanContext().remove( controlInstance ); 
+    }
+    
+       
+    /**
+     * @return a map of Field (accessible) -> AnnotationMap
+     */ 
+    public static Map getAccessibleControlFieldAnnotations( Class controlContainerClass )
+    {
+        String className = controlContainerClass.getName();
+        
+        //
+        // Reading the annotations is expensive.  See if there's a cached copy of the map.
+        //
+        Map< Field, PropertyMap > cached = _controlFieldCache.get( className );
+        
+        if ( cached != null )
+        {
+            return cached;
+        }
+
+        
+        Field[] fields = controlContainerClass.getDeclaredFields();
+        HashMap< Field, PropertyMap > ret = new HashMap< Field, PropertyMap >();
+        
+        for ( int i = 0; i < fields.length; i++ )
+        {
+            Field field = fields[i];
+            
+            if ( ! Modifier.isStatic( field.getModifiers() ) && field.getAnnotation( Control.class ) != null )
+            {
+                field.setAccessible( true );
+                ret.put( field, new AnnotatedElementMap( field ) );
+            }
+        }
+
+        _controlFieldCache.put( className, ret );
+        return ret;
+    } 
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * Methods for setting/getting page flow-related values in the request.
+ */
+public class RequestValues
+{
+    private static final String PREFIX = "_netui:";
+    private static final String FORWARDED_REQUEST_COUNT_ATTR = PREFIX + "forwardedRequestCount";
+    private static final String AVOID_DIRECT_RESPONSE_OUTPUT_ATTR = PREFIX + "_avoidDirectResponseOutput";
+    
+    
+    public static boolean isForwardedRequest( HttpServletRequest request )
+    {
+        return ( request.getAttribute( FORWARDED_REQUEST_COUNT_ATTR ) != null );
+    }
+    
+    public static int getForwardedRequestCount( HttpServletRequest request )
+    {
+        Integer count = ( Integer ) request.getAttribute( FORWARDED_REQUEST_COUNT_ATTR );
+        return count != null ? count.intValue() : 0;
+    }
+    
+    public static void setForwardedRequestCount( HttpServletRequest request, int count )
+    {
+        request.setAttribute( FORWARDED_REQUEST_COUNT_ATTR, count );
+    }
+    
+    /**
+     * Tell whether a special request attribute was set, indicating that we should avoid writing to the response (or
+     * setting response error codes).
+     */ 
+    public static boolean avoidDirectResponseOutput( HttpServletRequest request )
+    {
+        Boolean avoid = ( Boolean ) request.getAttribute( AVOID_DIRECT_RESPONSE_OUTPUT_ATTR );
+        return avoid != null && avoid.booleanValue();
+    }
+
+    /**
+     * Set a special request attribute to indicate that we should avoid writing to the response (or
+     * setting response error codes).
+     */ 
+    public static void setAvoidDirectResponseOutput( HttpServletRequest request )
+    {
+        request.setAttribute( AVOID_DIRECT_RESPONSE_OUTPUT_ATTR, Boolean.TRUE );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ResponseOutputException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ResponseOutputException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+/**
+ * Unchecked exception thrown in situations where output would normally be written to the response,
+ * but when the runtime is configured to throw an exception instead.
+ */ 
+public class ResponseOutputException extends RuntimeException
+{
+    public ResponseOutputException( String msg )
+    {
+        super( msg );
+    }
+
+    public ResponseOutputException( String msg, Throwable cause )
+    {
+        super( msg, cause );
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ReturnToException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ReturnToException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.PageFlowException;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FlowController;
+
+public abstract class ReturnToException extends PageFlowException
+{
+    private String _returnToType;
+    
+    
+    public ReturnToException( String actionName, Forward fwd, FlowController fc )
+    {
+        super( actionName, fc );
+        _returnToType = fwd.getReturnToTypeAsString();
+    }
+
+    public String getReturnToType()
+    {
+        return _returnToType;
+    }
+
+    protected Object[] getMessageArgs()
+    {
+        return new Object[]{ _returnToType, getActionName(), getFlowControllerURI() };
+    }
+
+    protected abstract String[] getMessageParts();
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/XmlBeanActionForm.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/XmlBeanActionForm.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,111 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.struts.action.ActionMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+
+public class XmlBeanActionForm extends AnyBeanActionForm
+{
+    private static final Logger _log = Logger.getInstance( XmlBeanActionForm.class );
+    
+    private String _formClassName;
+
+    
+    public XmlBeanActionForm()
+    {
+    }
+    
+    public XmlBeanActionForm( Object xml )
+    {
+        setBean( xml );
+    }
+    
+    public String getXmlString()
+    {
+        Object xmlBean = getBean();
+        
+        if ( xmlBean == null) return null;
+        
+        try
+        {
+            return ( String ) xmlBean.getClass().getMethod( "xmlText" ).invoke( xmlBean );
+        }
+        catch ( InvocationTargetException e )
+        {
+            _log.error( "Error while getting XML String", e.getCause() );
+        }
+        catch ( Exception e )
+        {
+            assert e instanceof NoSuchMethodException || e instanceof IllegalAccessException : e.getClass().getName();
+            _log.error( "Error while getting XML String", e );
+        }
+        
+        return null;
+    }
+    
+    public void setXmlString( String xml )
+    {
+        assert _formClassName != null;
+        setBean( invokeFactoryMethod( "parse", new Class[]{ String.class }, new Object[]{ xml } ) );
+    }
+
+    public void reset( ActionMapping mapping, HttpServletRequest request )
+    {
+        if ( _formClassName == null )
+        {
+            assert mapping instanceof PageFlowActionMapping : mapping.getClass().getName();    
+            _formClassName = ( ( PageFlowActionMapping ) mapping ).getFormClass();
+            assert _formClassName != null;
+        }
+        
+        if ( getBean() == null )
+        {
+            setBean( invokeFactoryMethod( "newInstance", new Class[0], new Object[0] ) );
+        }
+    }
+    
+    private Object invokeFactoryMethod( String methodName, Class[] argTypes, Object[] args )
+    {
+        String factoryClassName = _formClassName + "$Factory";
+
+        try
+        {
+            Class factoryClass = Class.forName( factoryClassName );
+            Method newInstanceMethod = factoryClass.getMethod( methodName, argTypes );
+            return newInstanceMethod.invoke( factoryClass, args );
+        }
+        catch ( Exception e )
+        {
+            // Can be any exception -- not just the reflection-related exceptions...
+            // because the exception could be thrown while creating the XML bean.
+            if ( _log.isErrorEnabled() )
+            {
+                _log.error( "Error while creating XML object of type " + _formClassName, e );
+            }
+            
+            return null;
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DOMUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DOMUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,204 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.util;
+
+// Java imports
+import java.util.List;
+import java.util.ArrayList;
+import org.w3c.dom.Node;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+import org.w3c.dom.Attr;
+
+/**
+ * <p>This class exists simply because DOM does so inconvenient to
+ * use.</p>
+ *
+ * @exclude
+ */
+abstract class DOMUtils
+{
+    /**
+     * <p>Returns the first child element with the given name. Returns
+     * <code>null</code> if not found.</p>
+     *
+     * @param parent parent element
+     * @param name name of the child element
+     * @return child element
+     */
+    public static Element getChildElementByName(Element parent, String name)
+    {
+        NodeList children = parent.getChildNodes();
+
+        for(int i = 0; i < children.getLength(); i++) {
+            Node node = children.item(i);
+            if(node.getNodeType() == Node.ELEMENT_NODE) {
+                Element element = (Element) node;
+                if(element.getTagName().equals(name)) {
+                    return element;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * <p>Returns a list of child elements with the given
+     * name. Returns an empty list if there are no such child
+     * elements.</p>
+     *
+     * @param parent parent element
+     * @param name name of the child element
+     * @return child elements
+     */
+    public static List getChildElementsByName(Element parent, String name)
+    {
+        List elements = new ArrayList();
+
+        NodeList children = parent.getChildNodes();
+
+        for(int i = 0; i < children.getLength(); i++) {
+            Node node = children.item(i);
+            if(node.getNodeType() == Node.ELEMENT_NODE) {
+                Element element = (Element) node;
+                if(element.getTagName().equals(name)) {
+                    elements.add(element);
+                }
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * <p>Returns the text value of a child element. Returns
+     * <code>null</code> if there is no child element found.</p>
+     *
+     * @param parent parent element
+     * @param name name of the child element
+     * @return text value
+     */
+    public static String getChildElementText(Element parent, String name)
+    {
+        // Get children
+        List list = DOMUtils.getChildElementsByName(parent, name);
+
+        if(list.size() == 1) {
+            Element child = (Element) list.get(0);
+
+            StringBuffer buf = new StringBuffer();
+
+            NodeList children = child.getChildNodes();
+            for(int i = 0; i < children.getLength(); i++) {
+                Node node = children.item(i);
+                if(node.getNodeType() == Node.TEXT_NODE ||
+                   node.getNodeType() == Node.CDATA_SECTION_NODE) {
+                    Text text = (Text) node;
+                    buf.append(text.getData().trim());
+                }
+            }
+
+            return buf.toString();
+        }
+        else {
+            return null;
+        }
+    }
+
+    /**
+     * <p>Returns the text value of a child element. Returns
+     * <code>null</code> if there is no child element found.</p>
+     *
+     * @param element element
+     * @return text value
+     */
+    public static String getElementText(Element element)
+    {
+        StringBuffer buf = new StringBuffer();
+
+        NodeList children = element.getChildNodes();
+        for(int i = 0; i < children.getLength(); i++) {
+            Node node = children.item(i);
+            if(node.getNodeType() == Node.TEXT_NODE ||
+               node.getNodeType() == Node.CDATA_SECTION_NODE) {
+                Text text = (Text) node;
+                buf.append(text.getData().trim());
+            }
+        }
+
+        return buf.toString();
+    }
+
+    /**
+     * <p>Returns an array of text values of a child element. Returns
+     * <code>null</code> if there is no child element found.</p>
+     *
+     * @param parent parent element
+     * @param name name of the child element
+     * @return text value
+     */
+    public static String[] getChildElementTextArr(Element parent, String name)
+    {
+        // Get all the elements
+        List children = getChildElementsByName(parent, name);
+
+        String str[] = new String[children.size()];
+
+        for(int i = 0; i < children.size(); i++) {
+            Node child = (Node) children.get(i);
+
+            StringBuffer buf = new StringBuffer();
+
+            NodeList nodes = child.getChildNodes();
+            for(int j = 0; j < nodes.getLength(); j++) {
+                Node node = nodes.item(j);
+                if(node.getNodeType() == Node.TEXT_NODE ||
+                   node.getNodeType() == Node.CDATA_SECTION_NODE) {
+                    Text text = (Text) node;
+                    buf.append(text.getData().trim());
+                }
+            }
+
+            str[i] = buf.toString();
+        }
+
+        return str;
+    }
+
+    /**
+     * <p>Retutns the value of the named attribute of the given
+     * element. If there is no such attribute, returns null.</p>
+     *
+     * @param element element
+     * @param name name
+     * @return value
+     */
+    public static String getAttributeValue(Element element, String name)
+    {
+        Attr attribute = element.getAttributeNode(name);
+        if(attribute == null) {
+            return null;
+        }
+        else {
+            return attribute.getValue();
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DefaultURLRewriter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DefaultURLRewriter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,109 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.util;
+
+//internal imports
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.util.FileUtils;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+public class DefaultURLRewriter extends URLRewriter
+{
+
+    public String rewriteName(ServletContext servletContext, ServletRequest request, String name)
+    {
+        // Continue chaining if there is another
+        URLRewriter next = getNextRewriter();
+        return (next != null) ? next.rewriteName( servletContext, request, name) : name;
+    }
+
+    public String rewriteURL(ServletContext servletContext, ServletRequest request, ServletResponse response, String url, String type)
+    {
+        // Look for the template config.  If it is found,
+        // do the lookup to get the right template.
+        // Apply the value to the template.
+        TemplateHelper templateHelper = new TemplateHelper((HttpServletRequest) request, (HttpServletResponse)response);
+        if (templateHelper.hasTemplateRef(type))
+        {
+            templateHelper.setTemplate(templateHelper.getTemplateName(type));
+            templateHelper.setUrl(url);
+            url = templateHelper.toString();
+        }
+        else
+        {
+            //Need to do default secure/unsecure rewriting
+            if ((type.equals(URLRewriter.ACTION_SECURE) || (type.equals(URLRewriter.RESOURCE_SECURE))))
+            {
+                if (!request.isSecure())
+                    url = internalRewriteUrl(url, "https", InternalUtils.getServerAdapter().getSecureListenPort((HttpServletRequest) request), request.getServerName());
+            }
+            else
+            {
+                if (request.isSecure())
+                    url = internalRewriteUrl(url, "http", InternalUtils.getServerAdapter().getListenPort((HttpServletRequest) request), request.getServerName());
+            }
+        }
+
+        //
+        // If the current request has a special parameter that makes it scoped, add the parameter to the URL.
+        //
+        String scopeID = request.getParameter(ScopedServletUtils.SCOPE_ID_PARAM);
+        if (scopeID != null)
+        {
+            // TODO: after we've rewritten this to use mutable URLs (i.e., when it's easier to check for existing
+            // parameters, we should check to see if the scope-id param is already there.
+            url = PageflowTagUtils.addParam(url, ScopedServletUtils.SCOPE_ID_PARAM, scopeID);
+        }
+        
+        // Continue chaining if there is another
+        URLRewriter next = getNextRewriter();
+        return (next != null) ? next.rewriteURL( servletContext, request, response, url, type) : url;
+    }
+
+    private String internalRewriteUrl(String url, String protocol, int port, String serverName)
+    {
+        //Check for an absolute url
+        if (FileUtils.isAbsoluteURI(url))
+        {
+            //Ignore this case - don't need to rewrite
+        }
+        else
+        {
+            //Need to build up the url
+            StringBuffer urlBuf = new StringBuffer( protocol );
+            urlBuf.append( "://" );
+            urlBuf.append( serverName );
+            urlBuf.append( ":" );
+            urlBuf.append( port );
+            urlBuf.append( url );
+            url = urlBuf.toString();
+        }
+
+        return url;
+    }
+
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/PageflowTagUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/PageflowTagUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,490 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.util;
+
+//java imports
+import java.net.URLEncoder;
+import java.net.MalformedURLException;
+import java.util.Map;
+import java.util.Iterator;
+
+//internal imports
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.pageflow.util.URLRewriter;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.FlowController;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.FileUtils;
+
+//external imports
+import javax.servlet.jsp.PageContext;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ForwardConfig;
+import org.apache.struts.Globals;
+import org.apache.struts.util.MessageResources;
+import org.apache.struts.util.RequestUtils;
+
+
+/**
+ * @exclude
+ */ 
+public class PageflowTagUtils
+{
+    private static final Logger logger = Logger.getInstance( PageflowTagUtils.class );
+
+    /**
+     * The message resources for this package.
+     */
+    private static MessageResources messages =
+        MessageResources.getMessageResources("org.apache.struts.util.LocalStrings");
+
+    public static String getRewrittenFormAction(String action, PageContext pageContext)
+    {
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+        String actionUrl = createActionURL(pageContext, action);
+
+        actionUrl = prepareActionUrl(pageContext, actionUrl);
+
+        return response.encodeURL(actionUrl);
+    }
+
+    public static String prepareActionUrl(PageContext pageContext, String url)
+    {
+        ServletContext servletContext = pageContext.getServletContext();
+        ServletRequest request = pageContext.getRequest();
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+
+        String templateType = URLRewriter.ACTION_UNSECURE;
+
+        if (URLRewriterService.needsSecure(request, servletContext, url, false))
+            templateType = URLRewriter.ACTION_SECURE;
+
+        url = URLRewriterService.rewriteURL(servletContext, request, response, url, templateType);
+
+        return response.encodeURL(url);
+    }
+
+    public static String prepareResourceUrl(PageContext pageContext, String url)
+    {
+        if ( FileUtils.isAbsoluteURI(url) )
+        {
+            return url;
+        }
+        
+        ServletContext servletContext = pageContext.getServletContext();
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+
+
+        if (!url.startsWith("/"))
+        {
+            String reqUri = request.getRequestURI();
+            String path = reqUri.substring(0, reqUri.lastIndexOf("/") + 1);
+            url = path + url;
+        }
+
+        String templateType = URLRewriter.RESOURCE_UNSECURE;
+
+        if (URLRewriterService.needsSecure(request, servletContext, url, true))
+            templateType = URLRewriter.RESOURCE_SECURE;
+
+        url = URLRewriterService.rewriteURL(servletContext, request, response, url, templateType);
+
+        return response.encodeURL(url);
+    }
+
+    public static String createActionURL(PageContext pageContext, String action)
+    {
+        ServletContext servletContext = pageContext.getServletContext();
+        HttpServletRequest servletRequest = (HttpServletRequest) pageContext.getRequest();
+
+        StringBuffer value = new StringBuffer();
+
+
+        String pageURI = servletRequest.getRequestURI();
+        int lastSlash = pageURI.lastIndexOf( '/' );
+        if ( lastSlash != -1 )
+        {
+            value.append( pageURI.substring( 0, lastSlash ) );
+        }
+        // Use our servlet mapping, if one is specified
+        String servletMapping = (String)
+            servletContext.getAttribute(Globals.SERVLET_KEY);
+
+        if (servletMapping != null)
+        {
+            String queryString = null;
+            int question = action.indexOf("?");
+            if (question >= 0)
+            {
+                queryString = action.substring(question);
+            }
+            String actionMapping = URLRewriterService.getActionMappingName(action);
+            if (servletMapping.startsWith("*."))
+            {
+                value.append(actionMapping);
+                value.append(servletMapping.substring(1));
+            }
+            else if (servletMapping.endsWith("/*"))
+            {
+                value.append(servletMapping.substring
+                             (0, servletMapping.length() - 2));
+                value.append(actionMapping);
+            }
+            else if (servletMapping.equals("/"))
+            {
+                value.append(actionMapping);
+            }
+            if (queryString != null) {
+                value.append(queryString);
+            }
+        }
+
+        // Otherwise, assume extension mapping is in use and extension is
+        // already included in the action property
+        else
+        {
+            if (!action.startsWith("/"))
+            {
+                value.append("/");
+            }
+            value.append(action);
+        }
+
+        return value.toString();
+    }
+
+    public static String createActionPath(ServletContext servletContext, HttpServletRequest request, String action)
+    {
+
+        StringBuffer value = new StringBuffer();
+
+        ModuleConfig appConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
+        if (appConfig != null)
+        {
+            value.append(appConfig.getPrefix());
+        }
+
+        // Use our servlet mapping, if one is specified
+        String servletMapping = (String)
+            servletContext.getAttribute(Globals.SERVLET_KEY);
+
+        if (servletMapping != null)
+        {
+            String queryString = null;
+            int question = action.indexOf("?");
+            if (question >= 0)
+            {
+                queryString = action.substring(question);
+            }
+            String actionMapping = URLRewriterService.getActionMappingName(action);
+            if (servletMapping.startsWith("*."))
+            {
+                value.append(actionMapping);
+                value.append(servletMapping.substring(1));
+            }
+            else if (servletMapping.endsWith("/*"))
+            {
+                value.append(servletMapping.substring
+                             (0, servletMapping.length() - 2));
+                value.append(actionMapping);
+            }
+            else if (servletMapping.equals("/"))
+            {
+                value.append(actionMapping);
+            }
+            if (queryString != null) {
+                value.append(queryString);
+            }
+        }
+
+        // Otherwise, assume extension mapping is in use and extension is
+        // already included in the action property
+        else
+        {
+            if (!action.startsWith("/"))
+            {
+                value.append("/");
+            }
+            value.append(action);
+        }
+
+        return value.toString();
+    }
+
+    public static String getActionPath(PageContext pageContext, String action)
+    {
+        return createActionPath(pageContext.getServletContext(), (HttpServletRequest) pageContext.getRequest(), action);
+    }
+
+    public static boolean isAction(HttpServletRequest request, HttpServletResponse response, ServletContext servletContext, String action)
+    {
+        boolean isAnAction = true;
+        FlowController flowController = InternalUtils.getCurrentPageFlow(request, false);
+        if (flowController != null)
+        {
+            String checkAction = action;
+            if (checkAction.startsWith("/"))
+                checkAction = checkAction.substring(1);
+            if (checkAction.endsWith(".do"))
+                checkAction = checkAction.substring(0, checkAction.indexOf(".do"));
+            isAnAction = flowController.isAction(checkAction);
+
+            if (!isAnAction)
+            {
+                FlowController globalController = InternalUtils.ensureGlobalApp(request, response, servletContext);
+                if (globalController != null)
+                    isAnAction = globalController.isAction(checkAction);
+            }
+        }
+
+        return isAnAction;
+    }
+
+
+    // @struts : from org.apache.struts.util.RequestUtils RC 1.1
+    public static String computeURL
+    (
+        PageContext pageContext,
+        String forward,
+        String href,
+        String page,
+        Map params,
+        String anchor,
+        boolean redirect)
+        throws MalformedURLException {
+
+        return computeURL(pageContext, forward, href, page, null, params,
+			  anchor, redirect);
+    }
+
+    // @struts : from org.apache.struts.util.RequestUtils RC 1.1
+    public static String computeURL(
+        PageContext pageContext,
+        String forward,
+        String href,
+        String page,
+        String action,
+        Map params,
+        String anchor,
+        boolean redirect)
+        throws MalformedURLException
+    {
+
+        String encoding = pageContext.getResponse().getCharacterEncoding();
+
+        // Validate that exactly one specifier was included
+        int n = 0;
+        if (forward != null) {
+            n++;
+        }
+        if (href != null) {
+            n++;
+        }
+        if (page != null) {
+            n++;
+        }
+        if (action != null) {
+            n++;
+        }
+        if (n != 1) {
+            throw new MalformedURLException(messages.getMessage("computeURL.specifier"));
+        }
+
+        // Look up the module configuration for this request
+        ModuleConfig config =
+            (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY);
+        if (config == null) { // Backwards compatibility hack
+            config =
+                (ModuleConfig) pageContext.getServletContext().getAttribute(Globals.MODULE_KEY);
+            InternalUtils.setCurrentModule( config, pageContext.getRequest() );
+        }
+
+        // Calculate the appropriate URL
+        StringBuffer url = new StringBuffer();
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        if (forward != null) {
+            ForwardConfig fc = config.findForwardConfig(forward);
+            if (fc == null) {
+                throw new MalformedURLException(messages.getMessage("computeURL.forward", forward));
+            }
+            if (fc.getRedirect()) {
+                redirect = true;
+            }
+            if (fc.getPath().startsWith("/")) {
+                url.append(request.getContextPath());
+                url.append(RequestUtils.forwardURL(request, fc));
+            } else {
+                url.append(fc.getPath());
+            }
+        } else if (href != null) {
+            url.append(href);
+        } else if (action != null) {
+            url.append(RequestUtils.getActionMappingURL(action, pageContext));
+
+        } else /* if (page != null) */ {
+            url.append(request.getContextPath());
+            url.append(RequestUtils.pageURL(request, page));
+        }
+
+        // Add anchor if requested (replacing any existing anchor)
+        if (anchor != null) {
+            String temp = url.toString();
+            int hash = temp.indexOf('#');
+            if (hash >= 0) {
+                url.setLength(hash);
+            }
+            url.append('#');
+            url.append(encodeURL(anchor,encoding));
+        }
+
+        // Add dynamic parameters if requested
+        if ((params != null) && (params.size() > 0)) {
+            addParameters(url,encoding,redirect,params);
+        }
+
+        return (url.toString());
+    }
+
+    //
+    public static void addParameters(StringBuffer url,String encoding,
+                                     boolean redirect,Map params)
+    {
+        String anchor;
+        // Add dynamic parameters if requested
+        if ((params != null) && (params.size() > 0)) {
+
+            // Save any existing anchor
+            String temp = url.toString();
+            int hash = temp.indexOf('#');
+            if (hash >= 0) {
+                anchor = temp.substring(hash + 1);
+                url.setLength(hash);
+                temp = url.toString();
+            } else {
+                anchor = null;
+            }
+
+            // Define the parameter separator
+            String separator = "&amp;";
+            if (redirect) {
+                separator = "&";
+            }
+
+            // Add the required request parameters
+            boolean question = temp.indexOf('?') >= 0;
+            Iterator keys = params.keySet().iterator();
+            while (keys.hasNext()) {
+                String key = (String) keys.next();
+                Object value = params.get(key);
+                if (value == null) {
+                    if (!question) {
+                        url.append('?');
+                        question = true;
+                    } else {
+                        url.append(separator);
+                    }
+                    url.append(encodeURL(key,encoding));
+                    url.append('='); // Interpret null as "no value"
+                } else if (value instanceof String) {
+                    if (!question) {
+                        url.append('?');
+                        question = true;
+                    } else {
+                        url.append(separator);
+                    }
+                    url.append(encodeURL(key,encoding));
+                    url.append('=');
+                    url.append(encodeURL((String) value,encoding));
+                } else if (value instanceof String[]) {
+                    String values[] = (String[]) value;
+                    for (int i = 0; i < values.length; i++) {
+                        if (!question) {
+                            url.append('?');
+                            question = true;
+                        } else {
+                            url.append(separator);
+                        }
+                        url.append(encodeURL(key,encoding));
+                        url.append('=');
+                        url.append(encodeURL(values[i],encoding));
+                    }
+                } else /* Convert other objects to a string */ {
+                    if (!question) {
+                        url.append('?');
+                        question = true;
+                    } else {
+                        url.append(separator);
+                    }
+                    url.append(encodeURL(key,encoding));
+                    url.append('=');
+                    url.append(encodeURL(value.toString(),encoding));
+                }
+            }
+
+            // Re-add the saved anchor (if any)
+            if (anchor != null) {
+                url.append('#');
+                url.append(encodeURL(anchor,encoding));
+            }
+        }
+    }
+
+
+    // @struts : from org.apache.struts.util.RequestUtils RC 1.1
+    // This has been modified from the strut to assume 1.4 because we ship 
+    // with that.
+    public static String encodeURL(String url, String encoding)
+    {
+        String encodedURL = null;
+        try {
+            encodedURL = URLEncoder.encode(url,encoding);
+        }
+        catch (java.io.UnsupportedEncodingException e) {
+            logger.error( "Unsupported encoding:" + encoding, e );
+            // try this in utf-8 and log the exception
+            try {
+                encodedURL = URLEncoder.encode(url,"UTF-8");
+            }
+            catch (java.io.UnsupportedEncodingException ignore) {}
+        }
+        return encodedURL;
+    }
+    
+    /**
+     * Add a parameter to the given URL.
+     * 
+     * @param url the URL to which to append. 
+     * @param paramName the name of the parameter to add.
+     * @param paramVal the value of the parameter to add.
+     * @return the URL, with the given parameter added.
+     */ 
+    public static String addParam(String url, String paramName, String paramVal)
+    {
+        return url + (url.indexOf('?') != -1 ? '&' : '?') + paramName + '=' + paramVal;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/TemplateHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/TemplateHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,721 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.util;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.net.URI;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+/**
+ * Class for creating URLs from parameterized templates.
+ * This mechanism recognizes the following parameters in URL templates:
+ * <p>
+ *
+ * <table>
+ *   <tr>
+ *     <td>url:scheme</td>
+ *     <td>Scheme</td>
+ *     <td>Usage</td>
+ *   </tr>
+ *
+ *   <tr>
+ *     <td>url:domain</td>
+ *     <td>Domain</td>
+ *     <td>May be set</td>
+ *   </tr>
+ *
+ *   <tr>
+ *     <td>url:port</td>
+ *     <td>Port</td>
+ *     <td>May be set</td>
+ *   </tr>
+ *
+ *   <tr>
+ *     <td>url:path</td>
+ *     <td>Extra path information</td>
+ *     <td>Reserved, must be present in a template.</td>
+ *   </tr>
+ *
+ *   <tr>
+ *     <td>url:queryString</td>
+ *     <td>Reserved query parameters</td>
+ *     <td>Reserved, must be present in a template.</td>
+ *   </tr>
+ *
+ * <p>If one or more parameters of a template are not set at runtime,
+ * the implementation will use defaults if appropriate. </p>
+ */
+public class TemplateHelper implements Cloneable
+{
+
+    /**
+     * <p>Postback request query parameter (reserved).</p>
+     */
+    public static final String POSTBACK_PARAM = "_nfpb";
+
+    /**
+     * <p>Window label query parameter (reserved).</p>
+     */
+    public static final String WINDOW_LABEL_PARAM = "_windowLabel";
+
+    /**
+     * <p>Window state query parameter (reserved).</p>
+     */
+    public static final String STATE_PARAM = "_state";
+
+    /**
+     * <p>Window mode query parameter (reserved).</p>
+     */
+    public static final String MODE_PARAM = "_mode";
+
+    /**
+     * <p>Page label query parameter (reserved).</p>
+     */
+    public static final String PAGE_LABEL_PARAM = "_pageLabel";
+
+    /**
+     * <p>Control state parameter (reserved).</p>
+     */
+    public static final String CONTROL_STATE_PARAM = "__controlState";
+
+    /**
+     * <p>HTTP request.</p>
+     */
+    protected HttpServletRequest httpRequest;
+
+    /**
+     * <p>HTTP response<./p>
+     */
+    protected HttpServletResponse httpResponse;
+
+    /**
+     * <p>Template.</p>
+     */
+    private String template;
+
+    /**
+     * <p>Protocol scheme (http or https).</p>
+     */
+    private String scheme;
+
+    /**
+     * <p>Port.</p>
+     */
+    private int port;
+
+    /**
+     * <p>Server domain.</p>
+     */
+    private String domain;
+
+    /**
+     * <p>Path prefix</p>
+     */
+    private String pathPrefix;
+
+    /**
+     * <p>Path</p>
+     */
+    private String path;
+
+    private String queryString;
+
+    /**
+     * <p>Encode session.</p>
+     */
+    private boolean encodeSession;
+
+    /**
+     * <p>Query parameters</p>
+     */
+    protected LinkedHashMap params;
+
+    /**
+     * <p>Constructs a <code>GenericURL</code>.</p>
+     *
+     * @param httpRequest HTTP request
+     * @param httpResponse HTTP response
+     */
+    public TemplateHelper(HttpServletRequest httpRequest, HttpServletResponse httpResponse)
+    {
+        this.httpRequest = httpRequest;
+        this.httpResponse = httpResponse;
+
+        // Initialize defaults
+        this.scheme = httpRequest.getScheme();
+        this.port = httpRequest.getServerPort();
+        this.domain = httpRequest.getServerName();
+        this.encodeSession = true;
+
+    }
+
+    public boolean hasTemplateRef(String templateRef)
+    {
+        String ref = UrlTemplateDescriptor.getInstance().getJPFUrlTemplateRef(templateRef);
+
+        return (ref != null);
+    }
+
+    public String getTemplateName(String templateRef)
+    {
+        String ref = UrlTemplateDescriptor.getInstance().getJPFUrlTemplateRef(templateRef);
+
+        return ref;
+    }
+
+    /**
+     * <p>Sets a URL template for this URL.</p>
+     *
+     * @param templateName name of the url template
+     * @throws IllegalArgumentException thrown if the named template does not exist
+     *         or if the template is not valid
+     */
+    public void setTemplate(String templateName)
+    {
+        String _template = UrlTemplateDescriptor.getInstance().getUrlTemplate(templateName);
+
+        if(_template == null) {
+            // @TODO: i18n
+            throw new IllegalArgumentException("URL template " + templateName + " does not exist");
+        }
+
+        // Set
+        this.template = _template;
+    }
+
+    /**
+     * <p>Returns the current template.</p>
+     *
+     * @return URL template
+     */
+    public String getTemplate()
+    {
+        return template;
+    }
+
+    /**
+     * <p>Sets the protocol scheme. Should be one of "HTTP" or "HTTPS". If a
+     * protocol is not specified, the protocol that was used to make
+     * the current request will be used.</p>
+     *
+     * @param scheme protocol scheme
+     */
+    public void setScheme(String scheme)
+    {
+        //assert (scheme.equals("http") || scheme.equals("https"));
+        this.scheme = scheme;
+    }
+
+    /**
+     * <p>Returns the protocol scheme. If no protocol was previously set,
+     * returns the protocol that was used to make the current
+     * request.</p>
+     *
+     * @return protocol scheme
+     */
+    public String getScheme()
+    {
+        return scheme;
+    }
+
+    /**
+     * <p>Sets a port. If a port is not specified, the port that was
+     * used to make the current request will be used.</p>
+     *
+     * @param port port
+     */
+    public void setPort(int port)
+    {
+        this.port = port;
+    }
+
+    /**
+     * <p>Returns the port. If no port was previously set, returns the
+     * port that was used to make the current request.</p>
+     *
+     * @return port
+     */
+    public int getPort()
+    {
+        return port;
+    }
+
+    /**
+     * <p>Sets the domain. If a domain is not specified, the domain
+     * that was used to make the current request will be used.</p>
+     *
+     * @param domain domain
+     */
+    public void setDomain(String domain)
+    {
+        this.domain = domain;
+    }
+
+    /**
+     * <p>Returns the domain. If no domain was previously set, returns
+     * the domain that was used to make the current request.</p>
+     *
+     * @return domain
+     */
+    public String getDomain()
+    {
+        return domain;
+    }
+
+    /**
+     * <p>Sets path.</p>
+     *
+     * @param path path
+     */
+    public void setPath(String path)
+    {
+        this.path = path;
+    }
+
+    /**
+     * <p>Returns the path.</p>
+     *
+     * @return path
+     */
+    private String getPath()
+    {
+        return path;
+    }
+
+    public String getQueryString()
+    {
+        return queryString;
+    }
+
+    public void setQueryString(String queryString)
+    {
+        this.queryString = queryString;
+    }
+
+    /**
+     * <p>Sets a path prefix.</p>
+     *
+     * @param pathPrefix path prefix
+     */
+    public void setPathPrefix(String pathPrefix)
+    {
+        this.pathPrefix = pathPrefix;
+    }
+
+    /**
+     * <p>Returns the path prefix.</p>
+     *
+     * @return path prefix
+     */
+    public String getPathPrefix()
+    {
+        return pathPrefix;
+    }
+
+    /**
+     * <p>Enables URL rewriting for encoding a session ID in the
+     * URL. If not set to <code>true</code>, does not encode the URL
+     * with the session ID. Default is <code>true</code>.</p>
+     *
+     * @param encodeSession boolean
+     */
+    public void setEncodeSession(boolean encodeSession)
+    {
+        this.encodeSession = encodeSession;
+    }
+
+    /**
+     * <p>Returns <code>true</code> if URL rewriting is enabled.</p>
+     *
+     * @return boolean
+     */
+    public boolean getEncodeSession()
+    {
+        return encodeSession;
+    }
+
+    public void setUrl(String url)
+    {
+        try
+        {
+            int query = url.indexOf('?');
+            String queryString = null;
+            
+            if (query != -1)
+            {
+                queryString = url.substring(query + 1);
+                url = url.substring(0, query);
+            }
+            URI uri = new URI(url);
+            //Parse this url into its component parts
+            if (uri.getScheme() != null)
+                setScheme(uri.getScheme());
+            if (uri.getHost() != null)
+            {
+                setDomain(uri.getHost());
+            }
+            if (uri.getPort() > -1)
+            {
+                setPort(uri.getPort());
+            }
+            if (uri.getPath() != null)
+                setPath(uri.getPath());
+            if (queryString != null)
+            {
+                setQueryString(queryString);
+            }
+        }
+        catch (Exception e)
+        {
+            //TODO: Change to handle more specific exception, handle better
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * <p>Add a parameter. Multiple values for the same parameter can
+     * be set by calling this method multiple times with the same
+     * name.</p>
+     *
+     * @param name name
+     * @param value value
+     */
+    public void addParameter(String name, String value)
+    {
+        if(params == null) {
+            params = new LinkedHashMap();
+        }
+
+        List values = (List) params.get(name);
+        if(values == null) {
+            values = new ArrayList();
+            params.put(name, values);
+        }
+
+        values.add(value);
+    }
+
+    /**
+     * <p>Removes the given parameter.</p>
+     *
+     * @param name name
+     */
+    public void removeParameter(String name)
+    {
+        if(params == null) {
+            return;
+        }
+
+        params.remove(name);
+    }
+
+    /**
+     * <p>Returns the value of the parameter. If the parameter has
+     * several values, returns the first value.</p>
+     *
+     * @param name name of the parameter
+     * @return value value of the parameter
+     */
+    public String getParameter(String name)
+    {
+        if(params == null) {
+            return null;
+        }
+
+        List values = (List) params.get(name);
+        if(values != null && values.size() > 0) {
+            return (String) values.get(0);
+        }
+        else {
+            return null;
+        }
+    }
+
+    /**
+     * <p>Returns the values of the given parameter.</p>
+     *
+     * @param name name of the parameter
+     * @return values of the parameter
+     */
+    public List getParameters(String name)
+    {
+        if(params == null) {
+            return new ArrayList(0);
+        }
+        else {
+            List values = (List) params.get(name);
+            return values;
+        }
+    }
+
+    /**
+     * <p>Returns a deep copy.</p>
+     *
+     * @return clone
+     */
+    public Object clone()
+    {
+        TemplateHelper other = new TemplateHelper(httpRequest, httpResponse);
+        other.setDomain(this.getDomain());
+        other.setEncodeSession(this.getEncodeSession());
+        other.setPathPrefix(this.getPath());
+        other.setPathPrefix(this.getPathPrefix());
+        other.setPort(this.getPort());
+        other.setScheme(this.getScheme());
+        other.setTemplate(this.getTemplate());
+        other.setQueryString(this.getQueryString());
+
+        if(this.params != null) {
+            other.params = new LinkedHashMap(this.params.size());
+            Iterator iterator = this.params.keySet().iterator();
+            while(iterator.hasNext()) {
+                String name = (String) iterator.next();
+                ArrayList values = (ArrayList) params.get(name);
+
+                // Since the list contains strings, it is okay
+                // to clone (shallow copy
+                other.params.put(name, values.clone());
+            }
+        }
+        return other;
+    }
+
+    private static StringBuffer appendEnsureSeparator(StringBuffer buf, String token)
+    {
+        if(token != null && token.length() > 0) {
+            if(buf.charAt(buf.length() - 1) != '/' && token.charAt(0) != '/') {
+                buf.append("/");
+            }
+            if(buf.charAt(buf.length() - 1) == '/' && token.charAt(0) == '/') {
+                token = token.substring(1);
+            }
+            buf.append(token);
+        }
+        return buf;
+    }
+
+    /**
+     * <p>Returns a string form (fully-quanlfied) of this URL.</p>
+     *
+     * @return string
+     */
+    public String toString()
+    {
+        // Stringify
+        String val = null;
+        if(getTemplate() == null) {
+            val = toStringDefault();
+        }
+        else {
+            val = toStringTemplate();
+        }
+
+        return val;
+    }
+
+    private String toStringDefault()
+    {
+        StringBuffer buf = new StringBuffer();
+
+        // Append the server
+        buf.append(scheme).append("://");
+        buf.append(domain).append(":").append(port);
+
+        // Append any prefix
+        buf = appendEnsureSeparator(buf, getPathPrefix());
+
+        // Append the path.
+        if(getPath() != null) {
+            // Append the webapp name
+            buf = appendEnsureSeparator(buf, getPath());
+        }
+        else {
+            // We could constants here - but that would
+            // create an unnecessary package dependency.
+            // @REVIEW Internal attributes?
+            String desktopPath = (String) httpRequest.getAttribute("desktopPath");
+            String portalPath = (String) httpRequest.getAttribute("portalPath");
+            if(desktopPath == null && portalPath == null) {
+                buf = appendEnsureSeparator(buf, httpRequest.getRequestURI());
+            }
+            else {
+                // Append the webapp name
+                String webAppName = InternalUtils.getServerAdapter().getFullContextPath(httpRequest);
+                buf = appendEnsureSeparator(buf, webAppName);
+
+                // Append the servlet name (mapping)
+                String servletName = httpRequest.getServletPath();
+                buf = appendEnsureSeparator(buf, servletName);
+                buf = appendEnsureSeparator(buf, portalPath);
+                buf = appendEnsureSeparator(buf, desktopPath);
+            }
+        }
+
+        // Append all parameters
+        if(params != null && params.size() > 0)
+        {
+            buf.append("?");
+            if (queryString != null)
+                buf.append(queryString);
+            Iterator iterator = params.keySet().iterator();
+            while(iterator.hasNext()) {
+                String name = (String) iterator.next();
+                List values = (List) params.get(name);
+                for(int i = 0; i < values.size(); i++) {
+                    char lastChar = buf.charAt(buf.length() - 1);
+                    if(lastChar != '?' && lastChar != '&') {
+                        buf.append("&");
+                    }
+                    buf.append(name).append("=").append(values.get(i));
+                }
+            }
+        }
+        else {
+            // Remove the trailing &
+            if(buf.charAt(buf.length() - 1) == '&' ||
+               buf.charAt(buf.length() - 1) == '?') {
+                buf.deleteCharAt(buf.length() - 1);
+            }
+        }
+
+        String url = buf.toString();
+
+        // Encode
+        if(encodeSession) {
+            url = httpResponse.encodeURL(url);
+        }
+
+        return url;
+    }
+
+
+    private String toStringTemplate()
+    {
+        // Create a copy of the template
+        String _template = new String(template);
+
+        // Scheme
+        _template = replace(_template, "{url:scheme}", getScheme());
+
+        // Domain
+        _template = replace(_template, "{url:domain}", getDomain());
+
+        // Port
+        _template = replace(_template, "{url:port}", getPort());
+
+        // Path prefix
+        _template = replace(_template, "{url:prefix}", getPathPrefix());
+
+        // Replace currentPage
+        _template = replace(_template, "{url:currentPage}", "");
+        
+        // Path - this is reserved
+        StringBuffer buf = new StringBuffer();
+        if(getPath() != null) {
+            // Append the webapp name
+            //String webAppName = ApplicationHelper.getWebAppName(httpRequest);
+            //buf.append(webAppName);
+            //buf = appendEnsureSeparator(buf, getPath());
+            buf.append(getPath());
+        }
+        else {
+            // We could constants here - but that would
+            // create an unnecessary package dependency.
+            String desktopPath = (String) httpRequest.getAttribute("desktopPath");
+            String portalPath = (String) httpRequest.getAttribute("portalPath");
+            if(desktopPath == null && portalPath == null) {
+                buf = buf.append(httpRequest.getRequestURI());
+            }
+            else {
+                // Append the webapp name
+                String webAppName = InternalUtils.getServerAdapter().getFullContextPath(httpRequest);
+                buf.append(webAppName);
+
+                // Append the servlet name (mapping)
+                String servletName = httpRequest.getServletPath();
+                buf = appendEnsureSeparator(buf, servletName);
+                buf = appendEnsureSeparator(buf, portalPath);
+                buf = appendEnsureSeparator(buf, desktopPath);
+            }
+        }
+        _template = replace(_template, "{url:path}", buf.toString());
+
+        // Query string - this is reserved
+        buf = new StringBuffer();
+        if (queryString != null)
+                buf.append(queryString);
+        if(params != null && params.size() > 0) {
+            Iterator iterator = params.keySet().iterator();
+            while(iterator.hasNext()) {
+                String name = (String) iterator.next();
+                List values = (List) params.get(name);
+                for(int i = 0; i < values.size(); i++) {
+                    if(buf.length() > 0) {
+                        char lastChar = buf.charAt(buf.length() - 1);
+                        if(lastChar != '?' && lastChar != '&') {
+                            buf.append("&");
+                        }
+                    }
+                    buf.append(name).append("=").append(values.get(i));
+                }
+            }
+        }
+        _template = replace(_template, "{url:queryString}", buf.toString());
+
+        return _template;
+    }
+
+    private static String replace(String template, String param, String value)
+    {
+        if(value == null) {
+            return template;
+        }
+        int index = template.indexOf(param);
+        if(index != -1) {
+            String pre = template.substring(0, index);
+            if(pre.length() > 0 && value.length() > 0 &&
+               pre.charAt(pre.length() - 1) == '/' && value.charAt(0) == '/') {
+                value = value.substring(1);
+            }
+            String post = template.substring(index + param.length());
+            if(post.length() > 0 && value.length() > 0 &&
+               post.charAt(0) == '/' && value.charAt(value.length() - 1) == '/') {
+                post = post.substring(1);
+            }
+            template = pre + value + post;
+        }
+
+        return template;
+    }
+
+    private String replace(String template, String param, int value)
+    {
+        String valueStr = Integer.toString(value);
+        return replace(template, param, valueStr);
+    }
+}
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/URLRewriter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/URLRewriter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,115 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.util;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+
+/**
+ * URL rewriter interface.  Offers methods for rewriting URLs/query parameters, and adding URL rewriters
+ * to the chain.
+ */
+public abstract class URLRewriter
+{
+    private URLRewriter nextRewriter = null;
+
+    
+    /**
+     * Passed to {@link #rewriteURL} for normal (non-resource) non-secure URLs.
+     */
+    public static String ACTION_UNSECURE = "action";
+
+    /**
+     * Passed to {@link #rewriteURL} for normal (non-resource) secure URLs.
+     */
+    public static String ACTION_SECURE = "secure-action";
+
+    /**
+     * Passed to {@link #rewriteURL} for resource (e.g., image) non-secure URLs.
+     */
+    public static String RESOURCE_UNSECURE = "resource";
+
+    /**
+     * Passed to {@link #rewriteURL} for resource (e.g., image) secure URLs.
+     */
+    public static String RESOURCE_SECURE = "secure-resource";
+
+
+    /**
+     * Rewrite the given query parameter name.
+     * 
+     * @param servletContext the current ServletContext.
+     * @param request the current HttpServletRequest.
+     * @param name the query parameter name to rewrite.
+     * @return the rewritten query parameter name.
+     */
+    public abstract String rewriteName( ServletContext servletContext, ServletRequest request, String name );
+
+    /**
+     * Rewrite the given URL.
+     * 
+     * @param servletContext the current ServletContext.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param url the URL to rewrite.
+     * @param type the type of URL to be rewritten.  This is one of the following values:
+     *             <ul>
+     *                 <li><code>action</code>: a standard (non-resource) URL, for which SSL is not required
+     *                 <li><code>secure-action</code>: a standard (non-resource) URL, for which SSL is required
+     *                 <li><code>resource</code>: a resource (e.g., image) URL, for which SSL is not required
+     *                 <li><code>secure-resource</code>: a resource (e.g., image) URL, for which SSL is required
+     *             </ul>
+     * @return the rewritten URL.
+     */
+    public abstract String rewriteURL( ServletContext servletContext, ServletRequest request,
+                                       ServletResponse response, String url, String type );
+
+    /**
+     * Get the next URLRewriter in the chain.
+     * 
+     * @see #setNextRewriter
+     */
+    public URLRewriter getNextRewriter()
+    {
+        return nextRewriter;
+    }
+
+    /**
+     * Set the next URLRewriter in the chain.  When {@link URLRewriterService#rewriteURL} is called, it will
+     * start with the URLRewriter registered in the request ({@link URLRewriterService#registerURLRewriter}),
+     * and call {@link #rewriteURL} on each URLRewriter in the chain.
+     */
+    public void setNextRewriter( URLRewriter nextRewriter )
+    {
+        this.nextRewriter = nextRewriter;
+    }
+    
+    /**
+     * Tell whether rewritten form actions should be allowed to have query parameters.  If this returns
+     * <code>false</code>, then a form-tag implementation should render query parameters into hidden
+     * fields on the form instead of allowing them to remain in the URL.
+     * @exclude
+     */
+    public boolean allowParamsOnFormAction( ServletContext servletContext, ServletRequest request )
+    {
+        return false;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/URLRewriterService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/URLRewriterService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,276 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.util;
+
+
+
+//java imports
+
+//internal imports
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+
+//external imports
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * Methods for registering URL rewriters, and for rewriting URLs using registered rewriters.
+ */ 
+public class URLRewriterService
+{
+    private static URLRewriter defaultRewriter = new DefaultURLRewriter();
+    private static String URL_REWRITER_KEY = "url_rewriter";
+
+
+    /**
+     * Get the default URLRewriter.
+     * 
+     * @return an instance of {@link DefaultURLRewriter}.
+     */ 
+    public static final URLRewriter getDefaultRewriter()
+    {
+        return new DefaultURLRewriter();
+    }
+
+    /**
+     * Rewrite the given parameter name, using the registered URLRewriter.
+     * @param servletContext the current ServletContext.
+     * @param request the current HttpServletRequest.
+     * @param name the parameter name to rewrite.
+     * @return the rewritten parameter name.
+     */ 
+    public static String rewriteName(ServletContext servletContext, ServletRequest request, String name)
+    {
+        URLRewriter rewriter = (URLRewriter) request.getAttribute(URL_REWRITER_KEY);
+        String rewrittenName = null;
+
+        if (rewriter != null)
+        {
+            rewrittenName = rewriter.rewriteName(servletContext, request, name);
+        }
+        else
+        {
+            rewrittenName = defaultRewriter.rewriteName(servletContext, request, name);
+        }
+
+        return rewrittenName;
+
+    }
+
+    /**
+     * Rewrite the given URL, using the registered URLRewriter.
+     * 
+     * @param servletContext the current ServletContext.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param url the URL to rewrite.
+     * @param type the type of URL to be rewritten.  This is one of the following values:
+     *             <ul>
+     *                 <li><code>action</code>: a standard (non-resource) URL, for which SSL is not required
+     *                 <li><code>secure-action</code>: a standard (non-resource) URL, for which SSL is required
+     *                 <li><code>resource</code>: a resource (e.g., image) URL, for which SSL is not required
+     *                 <li><code>secure-resource</code>: a resource (e.g., image) URL, for which SSL is required
+     *             </ul>
+     * @return the rewritten URL.
+     * 
+     * @see #registerURLRewriter
+     */ 
+    public static String rewriteURL(ServletContext servletContext, ServletRequest request, ServletResponse response, String url, String type)
+    {
+        return rewriteURL(servletContext, request, response, url, type, true);
+    }
+
+    /**
+     * Rewrite the given URL, using the registered URLRewriter.
+     * 
+     * @param servletContext the current ServletContext.
+     * @param request the current HttpServletRequest.
+     * @param response the current HttpServletResponse.
+     * @param url the URL to rewrite.
+     * @param type the type of URL to be rewritten.  This is one of the following values:
+     *             <ul>
+     *                 <li><code>action</code>: a standard (non-resource) URL, for which SSL is not required
+     *                 <li><code>secure-action</code>: a standard (non-resource) URL, for which SSL is required
+     *                 <li><code>resource</code>: a resource (e.g., image) URL, for which SSL is not required
+     *                 <li><code>secure-resource</code>: a resource (e.g., image) URL, for which SSL is required
+     *             </ul>
+     * @param doEncode if <code>true</code>, the rewritten URL will be encoded using
+     *                 {@link HttpServletResponse#encodeRedirectURL}.
+     * @return the rewritten URL.
+     * 
+     * @see #registerURLRewriter
+     */ 
+    public static String rewriteURL(ServletContext servletContext, ServletRequest request, ServletResponse response, String url, String type, boolean doEncode)
+    {
+        URLRewriter rewriter = (URLRewriter) request.getAttribute(URL_REWRITER_KEY);
+        String rewrittenURL = null;
+
+        if (rewriter != null)
+        {
+            rewrittenURL = rewriter.rewriteURL(servletContext, request, response, url, type);
+        }
+        else
+        {
+            rewrittenURL = defaultRewriter.rewriteURL(servletContext, request, response, url, type);
+        }
+
+        if (doEncode)
+        {
+            HttpServletResponse httpResponse = (HttpServletResponse) response;
+            rewrittenURL = httpResponse.encodeRedirectURL(rewrittenURL.toString());
+        }
+
+        return rewrittenURL;
+
+    }
+
+    /**
+     * Register a URLRewriter in the request.  This rewriter will be used if {@link #rewriteURL} is called.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param rewriter the URLRewriter to register.
+     */ 
+    public static void registerURLRewriter(ServletRequest request, URLRewriter rewriter)
+    {
+        request.setAttribute(URL_REWRITER_KEY, rewriter);
+    }
+
+    /**
+     * Unregister the URLRewriter from the request.
+     * 
+     * @see #registerURLRewriter
+     * @param request the current HttpServletRequest.
+     * @return the URLRewriter that was unregistered, or <code>null</code> if there was none registered.
+     */ 
+    public static URLRewriter unregisterURLRewriter(ServletRequest request)
+    {
+        URLRewriter rewriter = (URLRewriter) request.getAttribute(URL_REWRITER_KEY);
+        request.removeAttribute(URL_REWRITER_KEY);
+
+        return rewriter;
+    }
+
+
+    /**
+     * Return the form action converted into an action mapping path.  The
+     * value of the <code>action</code> property is manipulated as follows in
+     * computing the name of the requested mapping:
+     * <ul>
+     * <li>Any filename extension is removed (on the theory that extension
+     *     mapping is being used to select the controller servlet).</li>
+     * <li>If the resulting value does not start with a slash, then a
+     *     slash is prepended.</li>
+     * </ul>
+     * 
+     * @param action the action name to be converted.
+     * @return an action path, suitable for lookup in the Struts configuration file.
+     */
+    public static String getActionMappingName(String action)
+    {
+        String value = action;
+        int question = action.indexOf("?");
+        if (question >= 0) {
+            value = value.substring(0, question);
+        }
+        int slash = value.lastIndexOf("/");
+        int period = value.lastIndexOf(".");
+        if ((period >= 0) && (period > slash)) {
+            value = value.substring(0, period);
+        }
+
+        if (value.startsWith("/")) {
+            return (value);
+        } else {
+            return ("/" + value);
+        }
+    }
+
+    /**
+     * Tell whether a given URI should be written to be secure.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param context the current ServletContext.
+     * @param uri the URI to check.
+     * @param stripContextPath if <code>true</code>, strip the webapp context path from the URI before
+     *                         processing it.
+     * @return <code>true</code> when:
+     *         <ul>
+     *             <li>the given URI is configured in the deployment descriptor to be secure (according to
+     *                 {@link PageFlowUtils#isSecureResource}), or
+     *             <li>the given URI is not configured in the deployment descriptor, and the current request
+     *                 is secure ({@link javax.servlet.http.HttpServletRequest#isSecure} returns
+     *                 <code>true</code>).
+     *         </ul>
+     *         <code>false</code> when:
+     *         <ul>
+     *             <li>the given URI is configured explicitly in the deployment descriptor to be unsecure
+     *                 (according to {@link PageFlowUtils#isSecureResource}), or
+     *             <li>the given URI is not configured in the deployment descriptor, and the current request
+     *                 is unsecure ({@link javax.servlet.http.HttpServletRequest#isSecure} returns
+     *                 <code>false</code>).
+     *         </ul>
+     */ 
+    public static boolean needsSecure(ServletRequest request, ServletContext context, String uri,
+                                      boolean stripContextPath)
+    {
+
+        //Get the web-app relative path for security check
+        String secureCheck = uri;
+        if (stripContextPath)
+        {
+            if (secureCheck.substring(1).indexOf("/") > -1)
+            {
+                secureCheck = secureCheck.substring(1);
+                secureCheck = secureCheck.substring(secureCheck.indexOf("/"));
+            }
+        }
+        boolean secure = false;
+        if (secureCheck.indexOf("?") > -1)
+        {
+            secureCheck = secureCheck.substring(0, secureCheck.indexOf("?"));
+        }
+
+        Boolean secureResource = PageFlowUtils.isSecureResource(secureCheck, context, (HttpServletRequest)request);
+        if (secureResource == null)
+        {
+            secure = request.isSecure();
+        }
+        else
+            secure = secureResource.booleanValue();
+        return secure;
+
+    }    
+    
+    /**
+     * Tell whether rewritten form actions should be allowed to have query parameters.  If this returns
+     * <code>false</code>, then a form-tag implementation should render query parameters into hidden
+     * fields on the form instead of allowing them to remain in the URL.
+     * @exclude
+     */
+    public static boolean allowParamsOnFormAction(ServletContext servletContext, ServletRequest request)
+    {
+        URLRewriter rewriter = (URLRewriter) request.getAttribute(URL_REWRITER_KEY);
+        return (rewriter != null ? rewriter.allowParamsOnFormAction(servletContext, request) : true);
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/UrlTemplateDescriptor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/UrlTemplateDescriptor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,274 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.util;
+
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import javax.servlet.ServletContext;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+// NetUIx imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+/**
+ * <p>Maintains optional deployment information.</p>
+ *
+ * @exclude
+ */
+public class UrlTemplateDescriptor
+{
+    // App descriptor
+    private static final String DESCRIPTOR_PATH = "/WEB-INF/url-template-config.xml";
+
+    // Logger
+    private static final Logger _log = new Logger(UrlTemplateDescriptor.class);
+
+    // Singleton instance
+    private static UrlTemplateDescriptor instance = new UrlTemplateDescriptor();
+
+    // DD constants (maintain this alphabetical order)
+    private static final String JPF_URL_TEMPLATES = "jpf-url-templates";
+    private static final String NAME = "name";
+    private static final String TYPE = "type";
+    private static final String URL_TEMPLATE = "url-template";
+    private static final String URL_TEMPLATE_REF = "url-template-ref";
+
+
+    // Constants for URL template types
+    public static final String DEFAULT_TEMPLATE = "default";
+    public static final String SECURE_DEFAULT_TEMPLATE = "secure-default";
+    public static final String RENDER_TEMPLATE = "render-template";
+    public static final String SECURE_RENDER_TEMPLATE = "secure-render-template";
+    public static final String ACTION_TEMPLATE = "action";
+    public static final String SECURE_ACTION_TEMPLATE = "secure-action-template";
+    public static final String RESOURCE_TEMPLATE = "resource-template";
+    public static final String SECURE_RESOURCE_TEMPLATE = "secure-resource-template";
+
+
+    // URL templates
+    private HashMap _urlTemplates = new HashMap();
+    private HashMap _jpfTemplates = new HashMap();
+    
+    private boolean _loaded = false;
+    
+
+    /**
+     * <p>Constructs an instance.</p>
+     */
+    protected UrlTemplateDescriptor()
+    {
+    }
+
+    /**
+     * <p>Returns URL template given the name of the template.</p>
+     *
+     * @param name name of the template
+     * @return template
+     */
+    public String getUrlTemplate(String name)
+    {
+        return (String) _urlTemplates.get(name);
+    }
+
+    /**
+     * <p>Returns URL template name of the given type.</p>
+     *
+     * @param type type of the template type
+     * @return template name
+     */
+    public String getJPFUrlTemplateRef(String type)
+    {
+        String ref = (String) _jpfTemplates.get(type);
+        if(ref == null)
+        {
+            // If the template is a secure template, look for the secure default
+            // before resolving to the default
+            if(type.equals(SECURE_RENDER_TEMPLATE) ||
+                    type.equals(SECURE_ACTION_TEMPLATE) ||
+                    type.equals(SECURE_RESOURCE_TEMPLATE)) {
+                ref = (String) _jpfTemplates.get(SECURE_DEFAULT_TEMPLATE);
+            }
+        }
+
+        return ref;
+    }
+
+    /**
+     * <p>Returns an instance of <code>UrlTemplateDescriptor</code>.</p>
+     *
+     * @return portal app descriptor
+     */
+    public static UrlTemplateDescriptor getInstance()
+    {
+        return instance;
+    }
+    
+    /**
+     * <p>Loads the deployment descriptor and creates an instance of
+     * <code>UrlTemplateDescriptor</code>.</p>
+     *
+     * @param stream an input stream for the deployment descriptor
+     */
+    // @todo Exception
+    protected void load(InputStream stream) throws Exception
+    {
+        // Setup DOMBuilder
+        DocumentBuilderFactory dbFactory = null;
+
+        dbFactory = DocumentBuilderFactory.newInstance();
+
+        DocumentBuilder dBuilder = null;
+
+        dBuilder = dbFactory.newDocumentBuilder();
+
+        // Set an entity resolver
+        //dBuilder.setEntityResolver(DefaultEntityResolver.instance);
+
+        // Set an error handler
+        /*ErrorHandler errorHandler = new InternalErrorHandler(AppDescriptor.contextName,
+                DESCRIPTOR_PATH,
+                AppDescriptor.logger);
+        dBuilder.setErrorHandler(errorHandler);*/
+
+        // Parse the document
+        Document document = null;
+        document = dBuilder.parse(stream);
+
+        Element root = document.getDocumentElement();
+
+        // Load
+        loadTemplates(root);
+    }
+
+    private void loadTemplates(Element parent)
+    {
+        List templates = DOMUtils.getChildElementsByName(parent, URL_TEMPLATE);
+        for(int i = 0; i < templates.size(); i++) {
+            Element template = (Element) templates.get(i);
+            String name = DOMUtils.getAttributeValue(template, NAME);
+            String value = DOMUtils.getElementText(template);
+            if(_log.isDebugEnabled()) {
+                _log.debug("[URLTemplate] " + name + " = " + value);
+            }
+            try {
+                verifyTemplate(value);
+            }
+            catch(IllegalArgumentException ie) {
+                if(_log.isDebugEnabled()) {
+                    _log.debug("Exception while loading URL templates.", ie);
+                }
+                // @TODO: Log this, or set a constraint in the schema
+                continue;
+            }
+
+            _urlTemplates.put(name, value);
+        }
+
+        // Now load the JPF templates
+        Element jpfTemplatesRoot = DOMUtils.getChildElementByName(parent, JPF_URL_TEMPLATES);
+        if(jpfTemplatesRoot != null) {
+            List refs = DOMUtils.getChildElementsByName(jpfTemplatesRoot, URL_TEMPLATE_REF);
+            for(int i = 0; i < refs.size(); i++) {
+                Element templateRef = (Element) refs.get(i);
+                String name = DOMUtils.getAttributeValue(templateRef, TYPE);
+                String ref = DOMUtils.getAttributeValue(templateRef, NAME);
+                _jpfTemplates.put(name, ref);
+            }
+        }
+    }
+
+    public synchronized void load(ServletContext servletContext)
+    {
+        if ( _loaded )
+        {
+            return;
+        }
+        
+        InputStream stream = null;
+        try {
+            stream = servletContext.getResourceAsStream(DESCRIPTOR_PATH);
+            if (stream != null) {
+                load(stream);
+            }
+            else {
+                // No descriptor
+                _log.warn("Could not find URL template descriptor at path " +  DESCRIPTOR_PATH);
+            }
+        }
+        catch (Exception e) {
+            if(_log.isDebugEnabled()) {
+                _log.debug("Exception while loading URL templates.", e);
+            }
+            // Bad descriptor
+            _log.error("Bad URL template descriptor in path " +  DESCRIPTOR_PATH);
+            e.printStackTrace();
+        }
+        finally {
+            // Close the stream
+            if (stream != null) {
+                try {
+                    stream.close();
+                }
+                catch (Exception ignore) {
+                }
+            }
+        }
+        
+        _loaded = true;
+    }
+
+    private static String[] TEMPLATE_TOKENS = {"url:scheme",
+                                                "url:domain",
+                                                "url:port",
+                                                "url:prefix",
+                                                "url:path",
+                                                "url:queryString"};
+
+    private static void verifyTemplate(String template) throws IllegalStateException
+    {
+        // For each known token, make sure there is a leading and trailing brace
+        for(int i = 0; i < TEMPLATE_TOKENS.length; i++) {
+            int index = template.indexOf(TEMPLATE_TOKENS[i]);
+            if(index != -1) {
+                if(template.charAt(index - 1) != '{' &&
+                   template.charAt(index + TEMPLATE_TOKENS[i].length()) != '}') {
+                    // @TODO: i18n
+                    throw new IllegalStateException("Token " + TEMPLATE_TOKENS[i] + " not enclosed in {}s");
+                }
+            }
+        }
+
+        // Check if the known tokens are present
+        if(template.indexOf("{url:path}") == -1) {
+            // @TODO: i18n
+            throw new IllegalStateException("Required token {url:path} not present in template " + template);
+        }
+        if(template.indexOf("{url:queryString}") == -1) {
+            // @TODO: i18n
+            throw new IllegalStateException("Required token {url:queryString} not present in template " + template);
+        }
+    }
+}
+
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/validation/defaultMessages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/pageflow/validation/defaultMessages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+errors.required={0} is required.
+errors.minlength={0} cannot be less than {1} characters.
+errors.maxlength={0} cannot be greater than {1} characters.
+errors.invalid={0} is invalid.
+                                                                                                                                                  
+errors.byte={0} must be a byte.
+errors.short={0} must be a short.
+errors.integer={0} must be an integer.
+errors.long={0} must be a long.
+errors.float={0} must be a float.
+errors.double={0} must be a double.
+                                                                                                                                                  
+errors.date={0} is not a date.
+errors.range={0} is not in the range {1} through {2}.
+errors.creditcard={0} is an invalid credit card number.
+errors.email={0} is an invalid e-mail address.

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/Expression.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/Expression.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script;
+
+// java imports
+import java.util.List;
+
+// internal imports
+
+// external imports
+
+/**
+ * This class implements an abstraction atop an Expression object.
+ * It provides access to metadata about the parsed expression
+ * including the data binding context and tokens that constitute
+ * the expression.
+ */
+public abstract class Expression
+{
+    /**
+     * Get the expression's data binding context.
+     */
+    public abstract String getContext();
+
+    /**
+     * Get the expression's token list.  For an expression that looks like
+     * "actionForm.customer.name", this will include the tokens "actionForm",
+     * "customer", and "name".
+     */
+    public abstract List getTokens();
+    
+    /**
+     * Return an expression that is created starting with the
+     * token at the given index.
+     *
+     * @throws {@link java.lang.IllegalStateException} if the provided start token is out of bounds
+     *         given the number of tokens in the expression
+     */
+    public abstract String getExpression(int start);
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEngineFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEngineFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public abstract class ExpressionEngineFactory
+{
+    public abstract ExpressionEvaluator getInstance();
+}
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluationException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluationException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * The most general exception thrown when an error occurs in evaluating 
+ * an expression.
+ */
+public class ExpressionEvaluationException
+    extends Exception
+{    
+    private String expression = null;
+    private String[] contexts = null;
+    private String localizedMessage = null;
+
+    /**
+     * Construct an ExpressionEvaluationException.
+     */
+    public ExpressionEvaluationException()
+    {
+        super();
+    }
+
+    /**
+     * Construct an ExpressionEvaluationException with the given message and 
+     * the failed expression.
+     *
+     * @param message a String containing the text of the exception message
+     * @param expression the expression whose evaluation failed
+     */
+    public ExpressionEvaluationException(String message, String expression)
+    {
+        super(message);
+        this.expression = expression;
+    }
+
+    /**
+     * Construct an ExpressionEvaluationException with the given message,
+     * the failed expression, and cause.
+     *
+     * @param message a String containing the text of the exception message
+     * @param expression the expression whose evaluation failed
+     * @param cause a <code>Throwable</code> that is wrapped by this exception
+     */
+    public ExpressionEvaluationException(String message, String expression, Throwable cause)
+    {
+        super(message, cause);
+        this.expression = expression;
+    }
+
+    /**
+     * Construct a ExpressionEvaluationException with the given <code>message</code> and <code>cause</code>.
+     *
+     * @param message a String containing the text of the exception message
+     * @param cause a <code>Throwable</code> that is wrapped by this exception
+     */
+    public ExpressionEvaluationException(String expression, Throwable cause)
+    {
+        super(cause);
+        this.expression = expression;
+    }
+
+    /**
+     * Get the expression whose failed evaluation cause this exception to be thrown.
+     *
+     * @return the expression that caused the problem
+     */
+    public String getExpression()
+    {
+        return expression;
+    }
+
+    /**
+     * Set the set of top-level contexts that were available at the time
+     * that the expression failed.
+     *
+     * @param contexts the list of available contexts.
+     */
+    public void setAvailableContexts(String[] contexts)
+    {
+        this.contexts = contexts;
+    }
+    
+    /**
+     * Get the top-level contexts that were available at the time that the 
+     * expression failed.
+     *
+     * @return the contexts that were available at the time the expression was evaluated or <code>null</code>
+     * if the contexts were not set.
+     */
+    public String[] getAvailableContexts()
+    {
+        return contexts;
+    }
+
+    public void setLocalizedMessage(String localizedMessage)
+    {
+        this.localizedMessage = localizedMessage;
+    }
+
+    public String getLocalizedMessage()
+    {
+        return localizedMessage;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.script.common.ImplicitObjectBean;
+
+// external imports
+
+/**
+ * An interface for evaluating expressions in NetUI.  Different languages may implement
+ * this to expose the language for use in the NetUI JSP tags.
+ * 
+ */
+public interface ExpressionEvaluator
+{
+    /**
+     * Evaluate an expression and return the result.
+     * 
+     * @param expression the expression to evaluate
+     * @param implicitObjects the set of contexts that may be used in expression evaluation.  This set
+     * is not necessarily complete as some objects that can be used as top-level expression contexts
+     * may be contained within an object available in this JavaBean.
+     * @throws ExcpressionEvaluationException when an error occurs
+     */
+    public Object evaluateStrict(String expression, ImplicitObjectBean implicitObjects) 
+        throws ExpressionEvaluationException;
+
+    /**
+     * Update an expression with the given value.  This will apply the parameter <code>value</code>
+     * to the object referenced by the expression <code>expression</code>.  The <code>requestParameter</code>
+     * flag is used by a caller to restrict the set of contexts into which an update can occur on 
+     * the request. 
+     *
+     * @param expression the expression whose value to update
+     * @param value the new value for the update
+     * @param availableContexts the set of contexts that may be used in expression evaluation.  This set
+     * is not necessarily complete as some objects that can be used as top-level expression contexts
+     * may be contained within an object available in this JavaBean.
+     * @param requestParameter a boolean that marks this update as occurring from data in the request, if 
+     * <code>true</code> or simply as a regular update. 
+     * @throws ExcpressionUpdateException when an error occurs
+     */
+    public void update(String expression, Object value, ImplicitObjectBean implicitObjects, boolean requestParameter) 
+        throws ExpressionUpdateException;
+
+    /**
+     * Change the evaluation context of an expression.  This is used to rewrite some expressions
+     * that need to be qualified into a different context for evaluation.  The context
+     * of an expression is its first identifier, up to the first delimiter.
+     *
+     * @param expression the expression whose context to change
+     * @param oldContext the old context to replace, if present
+     * @param newContext the new context to replace if the expression starts with the <code>oldContext</code>
+     * @param lookupIndex an index used to qualify an expression into an array look-up.
+     * @throws ExcpressionUpdateException when an error occurs
+     * @exclude
+     */
+    public String changeContext(String expression, String oldContext, String newContext, int lookupIndex) 
+        throws ExpressionEvaluationException;
+
+    /**
+     * Qualify the expression into the given context.  This will take the <code>expression</code>
+     * and simply qualify it into the new context <code>contextName</code>.  
+     *
+     * @param contextName the new context
+     * @param expression the expression to qualify
+     * @throws ExcpressionUpdateException when an error occurs
+     * @exclude
+     */
+    public String qualify(String contextName, String expression) 
+        throws ExpressionEvaluationException;
+
+    /**
+     * Checks to see if a particular String is exactly an expression.  
+     *
+     * @param expression the expression to check
+     * @return <code>true</code> if the expression is exactly an expression; <code>false</code> otherwise.
+     * @throws IllegalExpressionException if the given expression <code>expression</code> is not legal.
+     */
+    public boolean isExpression(String expression);
+
+    /**
+     * Checks to see if a particular expression contains an expression.  This method will return
+     * <code>true</code> if there is an expression surrounded by whitespace, other expressions, 
+     * or literal text.
+     * 
+     * @param expression the expression to check
+     * @return <code>true</code> if the expression contains an expression; <code>false</code> otherwise.
+     */
+    public boolean containsExpression(String expression);
+
+    /**
+     * Parse an atomic expression into a common parsed expression
+     * representation.
+     *
+     * @param expression the String expression to parse
+     * @return the parsed expression
+     * @throws IllegalExpresspionException if the expression can not be parsed or is not atomic
+     */
+    public Expression parseExpression(String expression);
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,182 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script;
+
+// java imports
+import java.io.InputStream;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+// internal imports
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig;
+import org.apache.beehive.netui.util.config.bean.ExpressionLanguages;
+import org.apache.beehive.netui.util.config.bean.ExpressionLanguages.ExpressionLanguage;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * Get an expression evaluator.
+ */
+public class ExpressionEvaluatorFactory
+{
+    private static final Logger _logger = Logger.getInstance(ExpressionEvaluatorFactory.class);
+
+    private static final HashMap _factoryMap = new HashMap();
+    private static ExpressionEngineFactory _defaultFactory;
+
+    static
+    {
+        try
+        {
+            _defaultFactory = initialize(_factoryMap);
+        }
+        catch(Exception e)
+        {
+            _defaultFactory = null;
+
+            if(_logger.isErrorEnabled()) 
+                _logger.error("An exception occurred loading the expression evaluator configuration.  Cause: " + e, e);
+        }
+    }
+
+    /**
+     * Get the default instance of an expression evaluator.
+     *
+     * @return an {@link ExpressionEvaluator} 
+     */
+    public final static ExpressionEvaluator getInstance()
+    {
+        return getInstance(null);
+    }
+
+    /**
+     * Get an {@link ExpressionEvaluator} named <code>name</code>.
+     *
+     * @return an ExpressionEvaluator matching the given name.
+     * @throws IllegalArgumentException if an ExpressionEvaluator matching the name is not found
+     */
+    public final static ExpressionEvaluator getInstance(String name)
+    {
+        assert _defaultFactory != null;
+
+        if(name == null)
+            return _defaultFactory.getInstance();
+        else
+        {
+            assert _factoryMap != null;
+
+            if(_factoryMap.containsKey(name))
+                return ((ExpressionEngineFactory)_factoryMap.get(name)).getInstance();
+        }
+
+        String msg = "An ExpressionEvaluator named \"" + name + "\" is not available.";
+        if(_logger.isErrorEnabled()) _logger.error(msg);
+
+        throw new IllegalArgumentException(msg);
+    }
+    
+    /**
+     *
+     *
+     */
+    private static final ExpressionEngineFactory initialize(Map factoryMap)
+    {
+        assert factoryMap != null;
+
+        NetuiConfig config = ConfigUtil.getConfig();
+        assert config != null;
+
+        ExpressionLanguages languages  = config.getExpressionLanguages();
+        assert languages != null;
+
+        ExpressionLanguage[] array = languages.getExpressionLanguageArray();
+        assert array != null;
+        
+        for(int i = 0; i < array.length; i++)
+        {
+            String name = array[i].getName();
+            String className = array[i].getFactoryClass();
+
+            ExpressionEngineFactory factory = null;
+            try
+            {
+                Class type = Class.forName(className);
+                factory = (ExpressionEngineFactory)type.newInstance();
+            }
+            catch(ClassNotFoundException cnf)
+            {
+                if(_logger.isInfoEnabled()) 
+                    _logger.info("Could not create an ExpressionEngineFactory for type \"" + className + 
+                        "\" because the implementation class could not be found.");
+
+                continue;
+            }
+            catch(Exception ex)
+            {
+                assert ex instanceof IllegalAccessException || ex instanceof InstantiationException;
+
+                if(_logger.isWarnEnabled()) 
+                    _logger.warn("Could not create an ExpressionEngineFactory for type \"" + className + 
+                                 "\" because an error occurred creating the factory.  Cause: " + ex, ex);
+                continue;
+            }
+            
+            if(factoryMap.containsKey(name))
+                if(_logger.isWarnEnabled()) _logger.warn("Overwriting a previously defined ExpressionEngineFactory named \"" + name + 
+                                                         "\" with a new ExpressionEngineFactory of type \"" + className + "\"");
+                else _logger.info("Adding an ExpressionEngineFactory named \"" + name + "\" with implementation \"" + className + "\"");
+            
+            factoryMap.put(name, factory);
+        }
+
+        ExpressionEngineFactory def = null;
+        String defaultLanguage = languages.getDefaultLanguage();
+        if(defaultLanguage != null)
+        {
+            def = (ExpressionEngineFactory)factoryMap.get(defaultLanguage);
+            if(def != null)
+            {
+                if(_logger.isInfoEnabled()) 
+                    _logger.info("Using a default expression evaluator of type \"" + factoryMap.get(defaultLanguage).getClass().getName() + "\"");
+            }
+            else
+            {
+                String msg = 
+                    "The default ExpressionEvaluator named \"" + defaultLanguage + "\" was specified, but the ExpressionEngineFactory could not be found.";
+                if(_logger.isWarnEnabled()) _logger.warn(msg);
+                throw new RuntimeException(msg);
+            }
+        }
+        else 
+        {
+            String msg = "There is no default expression engine specified.";
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+            throw new RuntimeException(msg);
+        }
+        
+        return def;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionUpdateException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionUpdateException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,82 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * An exception thrown when an error occurs during an expression update.
+ */
+public class ExpressionUpdateException
+    extends ExpressionEvaluationException
+{    
+    /**
+     * Construct an ExpressionUpdateException.
+    */
+    public ExpressionUpdateException()
+    {
+        super();
+    }
+
+    /**
+     * Construct an ExpressionUpdateException with the given message, failed expression, expected updated value,
+     * and expression that was used to perform the update.
+     *
+     * @param message a String containing the text of the exception message
+     * @param expression the expression whose update failed
+     * @param cause the <code>Throwable</code> that is wrapped as the cause of this exception
+     * 
+     */
+    public ExpressionUpdateException(String message, String expression, Throwable cause)
+    {
+        super(message, expression, cause);
+    }
+
+    /**
+     * Construct an ExpressionUpdateException with the given message, failed expression, expected updated value,
+     * and expression that was used to perform the update.
+     *
+     * @param message a String containing the text of the exception message
+     * @param expression the expression whose update failed
+     * @param updateValue the value that should have been set to the value referenced by the expression
+     * 
+     */
+    public ExpressionUpdateException(String message, String expression)
+    {
+        super(message, expression);
+    }
+
+    /**
+     * Get the value that should have been written to the object
+     * referenced by the failed update expression.  This method is deprecated
+     * and will always return null because of the security risk associated
+     * with making the value available.
+     *
+     * @deprecated 
+     * @return the failed update value
+     */
+    public Object getUpdateValue()
+    {
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/IllegalExpressionException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/IllegalExpressionException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,109 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * An exception thrown when an expression is written in an illegal syntax.
+ */
+public class IllegalExpressionException
+    extends RuntimeExpressionException
+{
+    private String expression = null;
+
+    /**
+     * Construct an IllegalExpressionException.
+     */
+    public IllegalExpressionException()
+    {
+        super();
+    }
+
+    /**
+     * Construct an IllegalExpressionException with the given message.
+     *
+     * @param message a String containing the text of the exception message
+     */
+    public IllegalExpressionException(String message)
+    {
+        super(message);
+    }
+
+    /**
+     * Construct an IllegalExpressionException with the given cause
+     *
+     * @param cause a <code>Throwable<code> that caused this exception to be thrown
+     */
+    public IllegalExpressionException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    /**
+     * Construct an IllegalExpressionException with the given <code>message</code> and <code>cause</code>.
+     *
+     * @param message a String containing the text of the exception message
+     * @param cause a <code>Throwable</code> that caused this exception to be thrown
+     */
+    public IllegalExpressionException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+
+    /**
+     * Construct an IllegalExpressionException with the given <code>message</code> and the malformed expression.
+     * 
+     * @param message a String containing the text of this exception message
+     * @param expression the expression that was malformed and caused this exception to be thrown
+     */
+    public IllegalExpressionException(String message, String expression)
+    {
+        this(message);
+        this.expression = expression;
+    }
+
+    /**
+     * Construct an IllegalExpressionException with the given <code>message</code>, the malformed expression, and the <code>cause</code>.
+     * 
+     * @param message a String containing the text of this exception message
+     * @param expression the expression that was malformed and caused this exception to be thrown
+     * @param cause a <code>Throwable</code> that caused this exception to be thrown
+     */
+    public IllegalExpressionException(String message, String expressoin, Throwable cause)
+    {
+        this(message, cause);
+        this.expression = expression;
+    }
+    
+    /**
+     * Get the malformed expression.
+     *
+     * @return the malformed expression
+     */
+    public String getExpression()
+    {
+        return expression;
+    }
+}
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/RuntimeExpressionException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/RuntimeExpressionException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public abstract class RuntimeExpressionException
+    extends RuntimeException
+{
+    private String localizedMessage = null;
+
+    public RuntimeExpressionException()
+    {
+        super();
+    }
+
+    public RuntimeExpressionException(String message)
+    {
+        super(message);
+    }
+
+    public RuntimeExpressionException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+
+    public RuntimeExpressionException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    public void setLocalizedMessage(String localizedMessage)
+    {
+        this.localizedMessage = localizedMessage;
+    }
+
+    public String getLocalizedMessage()
+    {
+        return (localizedMessage != null ? localizedMessage : getMessage());
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/AbstractScriptableMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/AbstractScriptableMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+import java.util.AbstractMap;
+import java.util.Map;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public abstract class AbstractScriptableMap
+    extends AbstractMap
+{
+    public AbstractScriptableMap()
+    {
+    }
+    
+    public void clear()
+    {
+        throw new UnsupportedOperationException("The clear method is not supported");
+    }
+    
+    public Object put(Object key, Object value)
+    {
+        throw new UnsupportedOperationException("The put method is not supported");
+    }
+
+    public void putAll(Map map)
+    {
+        throw new UnsupportedOperationException("The putAll method is not supported");
+    }
+
+    public Object remove(Object key)
+    {
+        throw new UnsupportedOperationException("The key method is not supported");
+    }
+
+    public static class Entry 
+        implements Map.Entry
+    {
+        private final Object _key;
+        private final Object _value;
+        
+        Entry(Object key, Object value)
+        {
+            _key = key;
+            _value = value;
+        }
+        
+        public Object getKey() {return _key;}
+        public Object getValue() {return _value;}
+        
+        public Object setValue(Object value)
+        {
+            throw new UnsupportedOperationException("The setValue method is not supported");
+        }
+        
+        public int hashCode()
+        {
+            return ((_key == null ? 0 : _key.hashCode()) ^ (_value == null ? 0 : _value.hashCode()));
+        }
+        
+        public boolean equals(Object obj)
+        {
+            if(obj == null || !(obj instanceof Map.Entry))
+                return false;
+            
+            Map.Entry entry = (Map.Entry)obj;
+            Object key = entry.getKey();
+            Object value = entry.getValue();
+            if((key == null || (key != null && key.equals(_key)))
+               &&
+               (value == null || (value != null && value.equals(_value))))
+                return true;
+            
+            return false;
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,237 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import org.apache.struts.util.MessageResources;
+
+/**
+ * An object that acts as a storage location for ResourceBundles that are 
+ * declared inside of a JSP.  This object is cached in the PageContext
+ * and is re-created on every page that declares a bundle with the 
+ * {@link DeclareBundle} tag.
+ *
+ * @exclude
+ */
+public class BundleContext
+{
+    /**
+     * The attribute name under which a BundleContext object will be stored in a 
+     * PageContext attribute map during the rendering of the page.
+     */
+    public static final String KEY = "_netui_pageContext_bundleContext";
+
+    public static final String DEFAULT_STRUTS_BUNDLE_NAME = "default";
+
+    private static final Logger _logger = Logger.getInstance(BundleContext.class);
+
+    private static final Locale DEFAULT_LOCALE = Locale.getDefault();
+
+    private Map bundles = null;
+
+    public BundleContext() 
+    {
+        super();
+    }
+
+    /**
+     * Add a bundle to the bundle set.  Both the name and properties 
+     * are assumed to be non-null; the Bundle tag should check 
+     * these before adding them to the BundleContext.
+     *
+     * @param name the name of the bundle
+     * @param bundleName the path to the {@link ResourceBundle} file that contains the messages
+     */
+    public void addBundle(String name, String bundleName)
+    {
+        addBundle(name, bundleName, null);
+    }
+    
+    public void addBundle(String name, String bundleName, Locale localeOverride)
+    {
+        if(bundles == null)
+            bundles = new HashMap();
+
+        if(bundles.containsKey(name))
+            if(_logger.isInfoEnabled()) 
+                _logger.info("The bundle map already contains a key \"" + name + "\" overwriting the previous value.");
+
+        BundleNode node = new NetUIBundleNode(bundleName, (localeOverride != null ? localeOverride : DEFAULT_LOCALE));
+
+        bundles.put(name, node);
+    }
+    
+    public Iterator getBundleNames()
+    {
+        if(bundles == null)
+            return org.apache.beehive.netui.util.iterator.IteratorFactory.EMPTY_ITERATOR;
+        else return bundles.keySet().iterator();
+    }
+
+    public boolean containsBundle(String name)
+    {
+        if(bundles == null)
+            return false;
+        else return bundles.containsKey(name);
+    }
+
+    /**
+     * 
+     * @throws MissingResourceException if an error occurs while loading a properties file
+     */
+    public BundleNode getBundle(String name)
+    {
+        if(bundles == null)
+            return null;
+        
+        BundleNode bn = (BundleNode)bundles.get(name);
+
+        if(bn == null)
+            return null;
+
+        bn.init();
+        
+        return bn;
+    }
+    
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder(256);
+
+        Iterator iterator = getBundleNames();
+        if(iterator.hasNext())
+        {
+            while(iterator.hasNext())
+            {
+                Object key = iterator.next();
+                buf.append("bundle name: " + key + " bundle path: " + ((BundleNode)bundles.get(key)).bundleName + "\n");
+            }
+        }
+        else
+        {
+            buf.append("No registered bundles.\n");
+        }
+
+        return buf.toString();
+    }
+
+    public static BundleNode createBundleNode(String name, Object messageResource, Locale locale)
+    {
+        if(messageResource instanceof MessageResources)
+        {
+            return new StrutsBundleNode(name, locale, (MessageResources)messageResource);
+        }
+        
+        // only called from one place; just want the interface to be correct.  this won't _ever_ happen in V1.
+        return null;
+    }
+
+    public static abstract class BundleNode
+    {
+        protected String bundleName;
+        protected Locale locale;
+        
+        /* package */ BundleNode(String bundleName, Locale locale)
+        {
+            this.bundleName = bundleName;
+            this.locale = locale;
+        }
+        
+        // if necessary
+        public void init() {}
+
+        public abstract boolean containsKey(String key);
+        public abstract String getString(String key);
+        public abstract Enumeration getKeys();
+    }
+
+    public static class NetUIBundleNode
+        extends BundleNode
+    {
+        private ResourceBundle bundle;
+        
+        /* package */ NetUIBundleNode(String bundleName, Locale locale) 
+        {
+            super(bundleName, locale);
+        }
+        
+        public void init()
+        {
+            if(bundle == null)
+                bundle = ResourceBundle.getBundle(bundleName, locale);
+        }
+
+        public boolean containsKey(String key)
+        {
+            return (bundle.getString(key) != null);
+        }
+
+        public String getString(String key)
+        {
+            return bundle.getString(key);
+        }
+
+        public Enumeration getKeys()
+        {
+            return bundle.getKeys();
+        }
+    }
+
+    public static class StrutsBundleNode
+        extends BundleNode
+    {
+        private String name;
+        private MessageResources messageResource;
+
+        /* package */ StrutsBundleNode(String name, Locale locale, MessageResources messageResource)
+        {
+            super(null, locale);
+
+            this.name = name;
+            this.messageResource = messageResource;
+        }
+
+        public boolean containsKey(String key)
+        {
+            return (messageResource.getMessage(locale, key) != null);
+        }
+
+        public String getString(String key)
+        {
+            return messageResource.getMessage(locale, key);
+        }
+
+        public Enumeration getKeys()
+        {
+            throw new UnsupportedOperationException("The getKeys() method is not supported on a Struts bundle.");
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,239 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Locale;
+
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
+
+// internal imports
+import org.apache.beehive.netui.script.common.BundleContext.BundleNode;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import org.apache.struts.Globals;
+import org.apache.struts.config.MessageResourcesConfig;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.util.MessageResources;
+
+/**
+ *
+ */
+public class BundleMap
+    extends AbstractScriptableMap
+{
+    private Logger _logger = Logger.getInstance(BundleMap.class);
+
+    private BundleContext _bundleContext = null;
+    private HttpServletRequest _request = null;
+    private HttpSession _session = null;
+    private ServletContext _application = null;
+
+    public BundleMap(HttpServletRequest request, ServletContext application, BundleContext bundleContext)
+    {
+        assert bundleContext != null;
+
+        _request = request;
+        _session = request.getSession();
+        _application = application;
+        _bundleContext = bundleContext;
+    }
+
+    public BundleContext getBundleContext()
+    {
+        return _bundleContext;
+    }
+
+    public Object get(Object name)
+    {
+        assert name instanceof String;
+        return createScriptableBundle((String)name, _bundleContext);
+    }
+    
+    public boolean containsKey(Object key)
+    {
+        if(key == null)
+            return false;
+
+        return _bundleContext.containsBundle(key.toString());
+    }
+
+    public Set entrySet()
+    {
+        throw new UnsupportedOperationException("The entrySet method is not supported");
+    }
+
+    private Object createScriptableBundle(String name, BundleContext bundleContext)
+    {
+        if(bundleContext != null && bundleContext.containsBundle(name))
+        {
+            try
+            {
+                return new ScriptableBundle(name, bundleContext.getBundle(name));
+            }
+            catch(Exception e)
+            {
+                String msg = "Unable to load bundle named \"" + name + "\"; Cause: " + e.getMessage() + ".  Cause: " + e;
+                if(_logger.isErrorEnabled()) _logger.error(msg, e);
+                throw new RuntimeException(msg, e);
+            }
+        }
+        else if(name.equals(BundleContext.DEFAULT_STRUTS_BUNDLE_NAME))
+        {
+            MessageResources resources = (MessageResources)_request.getAttribute(Globals.MESSAGES_KEY);
+
+            if(resources != null)
+            {
+                BundleNode bundleNode = BundleContext.createBundleNode(name, resources, retrieveUserLocale());
+                return new ScriptableBundle(name, bundleNode);
+            }
+        }
+        else if(_application.getAttribute(name) != null)
+        {
+            MessageResources resources = (MessageResources)_application.getAttribute(name);
+            
+            if(resources != null)
+            {
+                BundleNode bundleNode = BundleContext.createBundleNode(name, resources, retrieveUserLocale());
+                return new ScriptableBundle(name, bundleNode);
+            }
+        }
+
+        String bundleList = createBundleList(bundleContext);
+        String strutsBundleList = createStrutsBundleList();
+        
+        String msg = "The bundle named \"" + name + "\" was not found in the list of registered bundles with names " + 
+            bundleList + " or implicit bundle names " + strutsBundleList + ".";
+
+        if(_logger.isErrorEnabled()) _logger.error(msg);
+        throw new RuntimeException(msg);
+    }
+
+    private final Locale retrieveUserLocale()
+    {
+        String locale = null;
+        Locale userLocale = null;
+
+        if (locale == null) {
+            locale = Globals.LOCALE_KEY;
+        }
+
+        // Only check session if sessions are enabled
+        if (_session != null) {
+            userLocale = (Locale)_session.getAttribute(locale);
+        }
+
+        if (userLocale == null) {
+            // Returns Locale based on Accept-Language header or the server default
+            userLocale = _request.getLocale();
+        }
+
+        return userLocale;
+    }
+
+    private final String createBundleList(BundleContext bundleContext)
+    {
+        StringBuilder nameList = new StringBuilder(32);
+        nameList.append("[");
+        if(bundleContext != null)
+        {
+            Iterator iterator = bundleContext.getBundleNames();
+            for(int i = 0; iterator.hasNext(); i++)
+            {
+                if(i > 0) nameList.append(", ");
+                nameList.append(iterator.next().toString());
+            }
+        }
+        nameList.append("]");
+        
+        return nameList.toString();
+    }
+    
+    private final String createStrutsBundleList()
+    {
+        StringBuilder strutsNameList = new StringBuilder(32);
+        strutsNameList.append("[");
+        ModuleConfig config = (ModuleConfig)_request.getAttribute(Globals.MODULE_KEY);
+        if(config != null)
+        {
+            MessageResourcesConfig[] mrs = config.findMessageResourcesConfigs();
+            if(mrs != null)
+            {
+                for(int i = 0; i < mrs.length; i++)
+                {
+                    if(i > 0) strutsNameList.append(", ");
+                    
+                    if(mrs[i].getKey().equals(Globals.MESSAGES_KEY))
+                        strutsNameList.append("default");
+                    else strutsNameList.append(mrs[i].getKey() + config.getPrefix());
+                }
+            }
+        }
+        strutsNameList.append("]");
+        
+        return strutsNameList.toString();
+    }
+
+    /*
+     * 
+     */
+    public class ScriptableBundle
+        extends AbstractScriptableMap
+    {
+        private BundleNode _bundle = null;
+        private String _propertiesName = null;
+
+        ScriptableBundle(String propertiesName, BundleNode bundle)
+        {
+            _bundle = bundle;
+            _propertiesName = propertiesName;
+        }
+
+        public Set entrySet()
+        {
+            throw new UnsupportedOperationException("The entrySet method is not supported");
+        }
+
+        public Object get(Object name)
+        {
+            assert name instanceof String;
+
+            String result = _bundle.getString((String)name);
+            
+            if(result == null)
+            {
+                String msg = "The bundle property name \"" + name + "\" could not be found in the properties bundle \"" + _propertiesName + "\".";
+                if(_logger.isErrorEnabled()) _logger.error(msg);
+                throw new RuntimeException(msg);
+            }
+            else return result;
+        }
+
+        public boolean containsKey(Object key)
+        {
+            return _bundle.getString(key.toString()) != null;
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ContextFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ContextFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+import javax.servlet.jsp.el.VariableResolver;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public abstract class ContextFactory
+{
+    public abstract Object getInstance(VariableResolver vr);
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/DataAccessProviderBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/DataAccessProviderBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class DataAccessProviderBean
+{
+    private static final Logger _logger = Logger.getInstance(DataAccessProviderBean.class);
+
+    private IDataAccessProvider _provider = null;
+
+    public DataAccessProviderBean(IDataAccessProvider provider)
+    {
+        _provider = provider;
+    }
+
+    public Object getItem()
+    {
+        return _provider.getCurrentItem();
+    }
+
+    public Object getContainer()
+    {
+        return new DataAccessProviderBean(_provider.getProviderParent());
+    }
+    
+    public int getIndex()
+    {
+        return _provider.getCurrentIndex();
+    }
+    
+    public Object getMetadata()
+    {
+        return _provider.getCurrentMetadata();
+    }
+}
+
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/DataAccessProviderStack.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/DataAccessProviderStack.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,97 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+import javax.servlet.jsp.PageContext;
+import java.util.Stack;
+
+public class DataAccessProviderStack
+{
+    private static final String KEY = "org.apache.beehive.netui.script.common.DataAccessProviderStack";
+
+    private Stack _stack = null;
+
+    public static final void addDataAccessProvider(IDataAccessProvider provider, PageContext pageContext)
+    {
+        DataAccessProviderBean bean = new DataAccessProviderBean(provider);
+        
+        Object val = pageContext.getAttribute(KEY);
+        DataAccessProviderStack curStack = null;
+        if(val == null)
+        {
+            curStack = new DataAccessProviderStack();
+
+            pageContext.setAttribute(KEY, curStack);
+        }
+        else curStack = (DataAccessProviderStack)val;
+
+        curStack.push(bean);
+
+        pageContext.setAttribute("container", bean);
+
+        return;
+    }
+
+    public static final DataAccessProviderBean removeDataAccessProvider(PageContext pageContext)
+    {
+        DataAccessProviderStack curStack = null;
+        Object val = pageContext.getAttribute(KEY);
+        if(val != null)
+        {
+            curStack = (DataAccessProviderStack)val;
+            DataAccessProviderBean lastTop = curStack.pop();
+
+            if(!curStack.isEmpty())
+                pageContext.setAttribute("container", curStack.peek());
+            else pageContext.removeAttribute("container");
+
+            return lastTop;
+        }
+
+        // TODO: error reporting when no stack is found in the PageContext
+
+        return null;
+    }
+
+    public DataAccessProviderStack()
+    {
+        _stack = new Stack();
+    }
+
+    public boolean isEmpty()
+    {
+        return _stack.empty();
+    }
+
+    public DataAccessProviderBean peek()
+    {
+        return (DataAccessProviderBean)_stack.peek();
+    }
+
+    public DataAccessProviderBean pop()
+    {
+        return (DataAccessProviderBean)_stack.pop();
+    }
+
+    public void push(DataAccessProviderBean bean)
+    {
+        _stack.push(bean);
+    }
+
+}
\ No newline at end of file

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/IDataAccessProvider.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/IDataAccessProvider.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,104 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * The IDataAccessProvider interface is implemented by objects
+ * that need to provide their children with data and wish
+ * to make it available to them with the <code>container</code>
+ * binding context.  Expression evaluation will process
+ * all <code>container</code> context references against this interface;
+ * several read-only properties are exposed:
+ * <table cellpadding="2" cellspacing="0" border="1">
+ * <tr><th>Method</th><th>NetUI Data Binding Expression</th><th>Required</th></tr>
+ * <tr><td>getCurrentIndex()</td><td><code>container.index</code></td><td>Yes</td></tr>
+ * <tr><td>getCurrentItem()</td><td><code>container.item</code></td><td>Yes</td></tr>
+ * <tr><td>getCurrentMetadata()</td><td><code>container.metadata</code></td><td>No</td></tr>
+ * <tr><td>getDataSource()</td><td><code>container.dataSource</code></td><td>Yes</td></tr>
+ * <tr><td>getProviderParent()</td><td><code>container.container</code></td><td>Yes</td></tr>
+ * </table>
+ * <p>
+ * In cases where a IDataAccessProvider contains another IDataAccessProvider, the
+ * grandparent IDataAccessProvider may be referenced with the binding expression
+ * <code>container.container</code>.  For example, the item, with the property firstName,
+ * may be accessed with the expression <code>container.container.item.firstName</code>.
+ * </p>
+ * <p>
+ * The general use of the IDataAccessProvider is as an interface that is implemented
+ * by repeating databound tags that iterate over a data set and render each item
+ * in that data set.  The item and iteration index are exposed through this
+ * interface and can be bound to by tags inside of the repeating tag
+ * that implements the IDataAccessProvider interface.  This binding expression
+ * should start with <code>container</code> and reference one of the properties above.
+ * </p>
+ */
+public interface IDataAccessProvider
+{
+    /**
+     * Get the current index in this iteration.  This should be a
+     * zero based integer that increments after each iteration.
+     * @return the current index of iteration or 0
+     */
+    public int getCurrentIndex();
+
+    /**
+     * Get the current data item in this IDataAccessProvider.
+     * @return the current data item or <code>null</code>
+     */
+    public Object getCurrentItem();
+
+    public void setDataSource(String dataSource);
+
+    /**
+     * Get the expression that references the data item to which the
+     * IDataAccessProvider is bound.
+     * @return the expression referencing the data source or <code>null</code> if no
+     *         dataSource is set
+     */
+    public String getDataSource();
+
+    /**
+     * Get a metadata object for the current item.  This interface
+     * is optional, and implementations of this interface are
+     * provided by the IDataAccessProvider interface.  See these
+     * implementations for information about their support for
+     * current item metadata.
+     * @return the current metadata or <code>null</code> if no metadata can be
+     *         found or metadata is not supported by a IDataAccessProvider implementation
+     */
+    public Object getCurrentMetadata();
+
+    /**
+     * Get the parent IDataAccessProvider of a DataAccessProvider.  A DataAccessProvider
+     * implementation may be able to nest DataAccessProviders.  In this case,
+     * it can be useful to be able to also nest access to data from parent
+     * providers.  Implementations of this interface are left with having
+     * to discover and export parents.  The return value from this call
+     * on an implementing Object can be <code>null</code>.
+     * @return the parent DataAccessProvider or <code>null</code> if this method
+     *         is not supported or the parent can not be found.
+     */
+    public IDataAccessProvider getProviderParent();
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,174 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.Tag;
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class ImplicitObjectBean
+{
+    private static final Logger _logger = Logger.getInstance(ImplicitObjectUtil.class);
+
+    private PageContext _pageContext;
+    private Tag _tag;
+    private Object _actionForm;
+    private ServletRequest _request;
+    private ServletResponse _response;
+    private ServletContext _application;
+    private HttpSession _session;
+    private Map _altContexts;
+        
+    /*package*/ ImplicitObjectBean() 
+    {
+        super();
+    }
+        
+    public PageContext getPageContext() {return _pageContext;}
+    public void setPageContext(PageContext pageContext)
+    {
+        _pageContext = pageContext;
+            
+        _application = _pageContext.getServletContext();
+        _request = _pageContext.getRequest();
+        _response = _pageContext.getResponse();
+        _session = _pageContext.getSession();
+    }
+
+    public ServletRequest getServletRequest() {return _request;}
+    public void setServletRequest(ServletRequest request)
+    {
+        _request = request;
+    }
+
+    public ServletResponse getServletResponse() {return _response;}
+    public void setServletResponse(ServletResponse response)
+    {
+        _response = response;
+    }
+
+    public HttpSession getSession() {return _session;}
+    public void setSession(HttpSession session)
+    {
+        _session = session;
+    }
+
+    public ServletContext getApplication() {return _application;}
+    public void setApplication(ServletContext servletContext)
+    {
+        _application = servletContext;
+    }
+
+    public Tag getCurrentTag() {return _tag;}
+    public void setCurrentTag(Tag tag)
+    {
+        _tag = tag;
+    }
+
+    public Object getActionForm() {return _actionForm;}
+    public void setActionForm(Object actionForm)
+    {
+        _actionForm = actionForm;
+    }
+
+    public void addImplicitObject(String name, Object object)
+    {
+        if(_altContexts == null)
+            _altContexts = new HashMap();
+            
+        // @todo: for nested tags, this should probably be a Stack of contexts
+        if(_altContexts.containsKey(name))
+        {
+            String msg = "Can't add the implicit object named \"" + name + "\" when the name already exists";
+            if(_logger.isDebugEnabled()) _logger.debug(msg);
+            throw new RuntimeException(msg);
+        }
+        else
+        {
+            if(_logger.isDebugEnabled()) _logger.debug("Adding implicit object named \"" + name + "\" to custom implicit object map.");
+            _altContexts.put(name, object);
+        }
+    }
+
+    public void removeImplicitObject(String name)
+    {
+        if(_altContexts != null)
+        {
+            if(_logger.isDebugEnabled()) _logger.debug("Removing context named \"" + name + "\" from custom implicit object map.");
+            _altContexts.remove(name);
+        }
+    }
+
+    public String[] getImplicitObjectNames()
+    {
+        List names = new ArrayList();
+        if(_tag != null)
+            names.add("currentTag");
+        if(_actionForm != null)
+            names.add("actionForm");
+        if(_pageContext != null)
+            names.add("pageContext");
+        if(_request != null)
+            names.add("request");
+        if(_response != null)
+            names.add("response");
+        if(_session != null)
+            names.add("session");
+        if(_application != null)
+            names.add("application");
+            
+        if(_altContexts != null)
+        {
+            Iterator iterator = _altContexts.keySet().iterator();
+            while(iterator.hasNext())
+                names.add(iterator.next().toString());
+        }
+
+        // bail if there aren't any implicit objects
+        if(names == null)
+            return null;
+
+        String[] ary = new String[names.size()];
+        for(int i = 0; i < names.size(); i++)
+            ary[i] = (String)names.get(i);
+
+        return ary;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,251 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+import java.util.LinkedHashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.el.VariableResolver;
+import javax.servlet.jsp.tagext.Tag;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.GlobalApp;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.internal.AnyBeanActionForm;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig;
+import org.apache.beehive.netui.util.config.bean.ExpressionLanguages;
+import org.apache.beehive.netui.util.config.bean.ExpressionLanguages.ExpressionLanguage;
+import org.apache.beehive.netui.util.config.bean.BindingContexts;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import org.apache.struts.action.ActionForm;
+
+/**
+ *
+ */
+public class ImplicitObjectUtil
+{
+    private static final Logger _logger = Logger.getInstance(ImplicitObjectUtil.class);
+    private static final String IMPLICIT_OBJECT_BEAN = (ImplicitObjectBean.class).getName() + "_KEY";
+    
+    private ImplicitObjectUtil() {}
+
+    public static final ImplicitObjectBean getImplicitObjects(PageContext pageContext, Tag currentTag)
+    {
+        ImplicitObjectBean bean = (ImplicitObjectBean)pageContext.getRequest().getAttribute(IMPLICIT_OBJECT_BEAN);
+
+        if(bean == null)
+        {
+            bean = new ImplicitObjectBean();
+            pageContext.getRequest().setAttribute(IMPLICIT_OBJECT_BEAN, bean);
+        }
+
+        bean.setPageContext(pageContext);
+
+        // @todo: need to be able to clean-up the ActionForm.  right now, this update is done for all 
+        // calls to this method so that the action form is always 'up to date' in the ImplicitObjectBean
+        // for every call.  It might be possible to move this into the form tag to add / remove as needed.
+        ActionForm actionForm = ((ActionForm)pageContext.getRequest().getAttribute(org.apache.struts.taglib.html.Constants.BEAN_KEY));
+        bean.setActionForm(unwrapForm(actionForm));
+        bean.setCurrentTag(currentTag);
+
+        return bean;
+    }
+
+    public static final ImplicitObjectBean getImplicitObjects(ServletRequest request, ServletResponse response, ActionForm actionForm)
+    {
+        ImplicitObjectBean bean = new ImplicitObjectBean();
+        bean.setServletRequest(request);
+        bean.setServletResponse(response);
+        bean.setActionForm(unwrapForm(actionForm));
+        
+        return bean;
+    }
+
+    public static final PageFlowController getPageFlow(ServletRequest request, ServletResponse response)
+    {
+        assert request instanceof HttpServletRequest;
+        assert response instanceof HttpServletResponse;
+
+        PageFlowController jpf = InternalUtils.ensureCurrentPageFlow((HttpServletRequest)request, 
+                                                                     (HttpServletResponse)response);
+        if(jpf != null)
+            return jpf;
+        else 
+        {
+            RuntimeException re = new RuntimeException("There is no current PageFlow for the expression.");
+            if(_logger.isErrorEnabled()) _logger.error("", re);
+            throw re;
+        }
+    }
+
+    public static final GlobalApp getGlobalApp(ServletRequest request, ServletResponse response)
+    {
+        HttpServletRequest hReq = (HttpServletRequest)request;
+        HttpServletResponse hResp = (HttpServletResponse)response;
+
+        GlobalApp ga = InternalUtils.ensureGlobalApp(hReq, hResp);
+        
+        if(ga == null) 
+        {
+            RuntimeException re = new RuntimeException("Can not create the globalApp binding context; the GlobalApp object is null.");
+            if(_logger.isErrorEnabled()) _logger.error("", re);
+            throw re;
+        }
+        
+        return ga;
+    }
+
+    /**
+     * Lookup an implicit object given an implicit object name.
+     *
+     * @throws RuntimeException if a factory for the given context name could not be resolved
+     */
+    public static final Object getImplicitObject(Map factories, VariableResolver vr, String name)
+    {
+        assert factories != null;
+
+        ContextFactory factory = (ContextFactory)factories.get(name);
+
+        if(factory == null)
+        {
+            String msg = "Could not resolve ContextFactory for binding context named \"" + name + "\"";
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+            throw new RuntimeException(msg);
+        }
+        
+        return factory.getInstance(vr);
+    }
+
+    /**
+     * Read entires from the netui-config.xml file and add the objects
+     * to this implicit object map.
+     */
+    public static final Map initialize(String languageName)
+    {
+        NetuiConfig netuiConfig = ConfigUtil.getConfig();
+        if(netuiConfig == null) return null;
+        ExpressionLanguages languages = netuiConfig.getExpressionLanguages();
+        if(languages == null) return null;
+        ExpressionLanguage[] langArray = languages.getExpressionLanguageArray();
+        if(langArray == null) return null;
+        ExpressionLanguage language = null;
+        for(int i = 0; i < langArray.length; i++)
+        {
+            if(langArray[i].getName().equals(languageName))
+                language = langArray[i];
+        }
+        if(language == null) return null;
+
+        Map config = readFromConfig(language);
+
+        // likely didn't find the config file
+        if(config == null) return null;
+
+        LinkedHashMap map = new LinkedHashMap();
+        ContextFactory factory = null;
+        Iterator iterator = config.keySet().iterator();
+        while(iterator.hasNext())
+        {
+            String name = (String)iterator.next();
+            String className = (String)config.get(name);
+
+            // try to find the ContextFactory implementation
+            try
+            {
+                // @todo: need to use a context classloader here
+                Class type = Class.forName(className);
+                factory = (ContextFactory)type.newInstance();
+            }
+            catch(ClassNotFoundException cnf)
+            {
+                if(_logger.isWarnEnabled()) 
+                    _logger.warn("Could not create a ContextFactory for type \"" + className + "\" because the ContextFactory implementation class could not be found.");
+                
+                continue;
+            }
+            catch(Exception ex)
+            {
+                if(_logger.isWarnEnabled()) 
+                    _logger.warn("Could not create a ContextFactory for type \"" + className + 
+                                 "\" because an error occurred creating the factory.  Cause: " + ex, ex);
+                continue;
+            }
+            
+            if(map.containsKey(name))
+            {
+                if(_logger.isWarnEnabled())
+                    _logger.warn("Overwriting a previously defined ContextFactory named \"" + name + 
+                                 "\" with a new ContextFactory of type \"" + className + "\"");
+            }
+            else 
+            {
+                if(_logger.isInfoEnabled()) 
+                    _logger.info("Adding a ContextFactory named \"" + name + "\" with implementation \"" + className + "\"");
+            }
+            
+            map.put(name, factory);
+        }
+
+        return map;
+    }
+
+    private static final Map readFromConfig(ExpressionLanguage language)
+    {
+        assert language != null;
+
+        BindingContexts contexts  = language.getBindingContexts();
+        if(contexts == null) return null;
+
+        org.apache.beehive.netui.util.config.bean.BindingContexts.BindingContext[] array = contexts.getBindingContextArray();
+        if(array == null) return null;
+        
+        LinkedHashMap map = new LinkedHashMap();
+        for(int i = 0; i < array.length; i++)
+        {
+            map.put(array[i].getName(), array[i].getFactoryClass());
+        }
+        
+        return map;
+    }
+
+    private static final Object unwrapForm(ActionForm form)
+    {
+        Object realForm = form;
+        if(form instanceof AnyBeanActionForm)
+            realForm = ((AnyBeanActionForm)form).getBean();
+        
+        if(_logger.isDebugEnabled()) 
+            _logger.debug("using form of type: " + (realForm != null ? realForm.getClass().getName() : "null"));
+
+        return realForm;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ScriptablePageInput.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/common/ScriptablePageInput.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.common;
+
+// java imports
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * @todo: need to finish this implementation
+ */
+public class ScriptablePageInput
+    extends AbstractScriptableMap
+{
+    private static final Logger _logger = Logger.getInstance(ScriptablePageInput.class);
+
+    private HttpServletRequest _request = null;
+
+    public ScriptablePageInput(ServletRequest request)
+    {
+        assert request instanceof HttpServletRequest;
+
+        _request = (HttpServletRequest)request;
+    }
+
+    public Object get(Object name)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("page input get: " + name);
+
+        assert name instanceof String;
+
+        return PageFlowUtils.getActionOutput((String)name, _request);
+    }
+    
+    public Set entrySet()
+    {
+        throw new UnsupportedOperationException("Operation entrySet not supported on the PageInput Map");
+    }
+    
+    public boolean equals(Object obj)
+    {
+        if(obj == null || !(obj instanceof ScriptablePageInput))
+            return false;
+        return super.equals(obj);
+    }
+    
+    public boolean containsKey(Object key)
+    {
+        Map piMap = InternalUtils.getActionOutputMap(_request, false);
+        return (piMap != null ? piMap.containsKey(key) : false);
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,215 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+import java.util.Map;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.Tag;
+
+// internal imports
+import org.apache.beehive.netui.script.el.util.ParseUtils;
+
+import org.apache.beehive.netui.script.Expression;
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+import org.apache.beehive.netui.script.ExpressionUpdateException;
+import org.apache.beehive.netui.script.IllegalExpressionException;
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+import org.apache.beehive.netui.script.common.ImplicitObjectBean;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class ExpressionEvaluatorImpl
+    implements ExpressionEvaluator
+{
+    private static Logger _logger = Logger.getInstance(ExpressionEvaluatorImpl.class);
+    private static final boolean debugEnabled = _logger.isDebugEnabled();
+
+    public static class NetUIELEngineFactory
+        extends org.apache.beehive.netui.script.ExpressionEngineFactory
+    {
+        public ExpressionEvaluator getInstance()
+        {
+            return new ExpressionEvaluatorImpl();
+        }
+    }
+
+    public Object evaluateStrict(String expression, ImplicitObjectBean bean)
+        throws ExpressionEvaluationException
+    {
+        NetUIVariableResolver vr = null;
+        try
+        {
+            // @TODO: need to cache VariableResolvers for a request -- need a request ExpressionEvaluationContext
+            vr = new NetUIReadVariableResolver(bean.getActionForm(),
+                                               bean.getCurrentTag(),
+                                               bean.getPageContext());
+            
+            return ParseUtils.evaluate(expression, vr);
+        }
+        catch(Exception e)
+        {
+            if(debugEnabled)
+            {
+                _logger.debug("Expression evaluation failed in NetUIEL.  Cause: " + e, e);
+            }
+
+            Exception act = e;
+
+            String contextStr = ParseUtils.getContextString(vr.getAvailableVariables());
+            String msg = "Caught exception when evaluating expression \"" + expression + "\" with available binding contexts " + 
+                contextStr + ". Root cause: " + ParseUtils.getRootCause(act).toString();
+
+            if(_logger.isErrorEnabled()) _logger.error(msg, act);
+        
+            ExpressionEvaluationException eee = new ExpressionEvaluationException(msg, expression, act);
+
+            throw eee;
+        }
+    }
+
+    // TODO: need to cache VariableResolvers for a request -- need a request ExpressionEvaluationContext
+    public void update(String expression, Object value, ImplicitObjectBean bean, boolean requestParameter)
+        throws ExpressionUpdateException
+    {
+        NetUIVariableResolver vr = null;
+        try
+        {
+            if(debugEnabled) _logger.debug("Update expression \"" + expression + "\"");
+            
+            vr = new NetUIUpdateVariableResolver(bean.getActionForm(),
+                                                 bean.getServletRequest(),
+                                                 bean.getServletResponse(), 
+                                                 requestParameter);
+            
+            ParseUtils.update(expression, value, vr);
+        }
+        catch(Exception e)
+        {
+            if(debugEnabled)
+                _logger.debug("Expression update failed in NetUIEL.  Cause: " + e, e);
+
+            String contextStr = ParseUtils.getContextString(vr.getAvailableVariables());
+            String msg = "Exception when attempting to update the expression \"" + expression + "\" with available binding contexts " + 
+                contextStr + ". Root cause: " + ParseUtils.getRootCause(e).toString();
+            
+            if(_logger.isErrorEnabled()) _logger.error(msg, e);
+
+            ExpressionUpdateException eee = new ExpressionUpdateException(msg, expression, e);
+            eee.setLocalizedMessage(msg);
+
+            throw eee;
+        }
+    }
+
+    // TODO: fix the lookup index to be Object
+    public String changeContext(String expression, String oldContext, String newContext, int lookupIndex)
+        throws ExpressionEvaluationException
+    {
+        try
+        {
+            ParsedExpression pe = ParseUtils.parse(expression);
+            return pe.changeContext(oldContext, newContext, new Integer(lookupIndex));
+        }
+        catch(Exception e)
+        {
+            String msg = "Error when trying to replace old context '" + oldContext + "' with new context '" + 
+                newContext + "' and index '" + lookupIndex + "': " + ParseUtils.getRootCause(e).toString();
+
+            if(_logger.isErrorEnabled()) _logger.error(msg, e);
+
+            throw new ExpressionEvaluationException(msg, e);
+        }
+    }
+
+    public String qualify(String contextName, String expression)
+        throws ExpressionEvaluationException
+    {
+        try
+        {
+            ParsedExpression pe = ParseUtils.parse(expression);
+            return pe.qualify(contextName);
+        }
+        catch(Exception e)
+        {
+            String msg = "Error when trying to create an expression in namespace \"" + contextName + "\" with fragment \"" + 
+                expression + "\".  Root cause: " + ParseUtils.getRootCause(e).toString();
+
+            throw new ExpressionEvaluationException(msg, e);
+        }
+    }
+
+    public boolean isExpression(String expression)
+    {
+        try
+        {
+            ParsedExpression pe = ParseUtils.parse(expression);
+            return pe.isExpression();
+        }
+        catch(Exception e)
+        {
+            if(_logger.isErrorEnabled()) _logger.error("Exception parsing expression \"" + expression + "\".  Cause: " +
+                                                           ParseUtils.getRootCause(e).toString(), e);
+
+            if(e instanceof IllegalExpressionException)
+                throw (IllegalExpressionException)e;
+            else if(e instanceof ExpressionParseException)
+                throw new IllegalExpressionException(e);
+            else return false;
+        }
+    }
+    
+    public boolean containsExpression(String expression)
+    {
+        if(expression == null) return false;
+
+        try
+        {
+            ParsedExpression pe = ParseUtils.parse(expression);
+
+            return pe.containsExpression();
+        }
+        catch(Exception e)
+        {
+            if(_logger.isErrorEnabled()) _logger.error("Exception checking for expressions in \"" + expression + "\"", e);
+            return false;
+        }
+    }
+
+    public Expression parseExpression(String expression)
+    {
+        if(isExpression(expression))
+        {
+            ParsedExpression pe = ParseUtils.parse(expression);
+            
+            return pe.getAtomicExpressionTerm();
+        }
+        else throw new IllegalExpressionException("The expression \"" + expression + "\" can not be parsed as it is not an atomic expression.");
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class ExpressionParseException
+    extends RuntimeException
+{
+
+    /** 
+     *  
+     *  
+     */ 
+    public ExpressionParseException()
+    {
+        super();
+    }
+
+    /** 
+     *  
+     * @param message 
+     */ 
+    public ExpressionParseException(String message)
+    {
+        super(message);
+    }
+
+    /** 
+     *  
+     * @param cause 
+     */ 
+    public ExpressionParseException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    /** 
+     *  
+     * @param message 
+     * @param cause 
+     */ 
+    public ExpressionParseException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+}
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,272 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+// internal imports
+import org.apache.beehive.netui.script.Expression;
+
+import org.apache.beehive.netui.script.el.NetUIVariableResolver;
+import org.apache.beehive.netui.script.el.tokens.ArrayIndexToken;
+import org.apache.beehive.netui.script.el.tokens.ContextToken;
+import org.apache.beehive.netui.script.el.tokens.ExpressionToken;
+import org.apache.beehive.netui.script.el.tokens.IdentifierToken;
+import org.apache.beehive.netui.script.el.tokens.MapKeyToken;
+import org.apache.beehive.netui.script.el.util.BindingContext;
+import org.apache.beehive.netui.script.el.util.ParseUtils;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class ExpressionTerm
+    extends Expression
+    implements Term
+{
+    private static Logger _logger = Logger.getInstance(ExpressionTerm.class);
+
+    private List tokens = null;
+    private String exprStr = null;
+    private ContextToken context = null;
+    private ExpressionToken[] tokenArray = null;
+    private List _noModTokens = null;
+
+    public ExpressionTerm()
+    {
+        super();
+        tokens = new ArrayList();
+    }
+
+    public void seal()
+    {
+        context = (ContextToken)tokens.get(0);
+        tokenArray = new ExpressionToken[tokens.size()];
+
+        StringBuffer buf = new StringBuffer();
+        for(int i = 0; i < tokens.size(); i++)
+        {
+            buf.append(((ExpressionToken)tokens.get(i)).getTokenString());
+            tokenArray[i] = (ExpressionToken)tokens.get(i);
+        }
+        
+        exprStr = buf.toString();
+
+        _noModTokens = Collections.unmodifiableList(tokens);
+    }
+
+    public String getContext()
+    {
+        return context.getName();
+    }
+
+    public List getTokens()
+    {
+        return _noModTokens;
+    }
+
+    public String getExpression(int start)
+    {
+        if(start >= tokens.size())
+            throw new IllegalStateException("The index \"" + start + "\" is an invalid reference into an expression with \"" + 
+                                            tokens.size() + "\" tokens.");
+
+        boolean needDot = true;
+        StringBuffer buf = new StringBuffer();
+        buf.append("{");
+        for(int i = start; i < tokens.size(); i++)
+        {
+            ExpressionToken tok = (ExpressionToken)tokens.get(i);
+            if(tok instanceof ArrayIndexToken)
+            {
+                buf.append(tok.getTokenString());
+                needDot = false;
+            }
+            else if(tok instanceof IdentifierToken)
+            {
+                if(needDot && i != start) buf.append(".");
+                buf.append(tok.toString());
+                needDot = true;
+            }
+            else if(tok instanceof MapKeyToken)
+            {
+                buf.append(tok.getTokenString());
+                needDot = false;
+            }
+        }
+        buf.append("}");
+        return buf.toString();
+    }
+
+    public void addToken(ExpressionToken token)
+    {
+        tokens.add(token);
+    }
+
+    public Iterator getExpressionTokens()
+    {
+        return tokens.iterator();
+    }
+
+    public int getTokenCount()
+    {
+        return tokenArray.length;
+    }
+    
+    public ExpressionToken getToken(int index)
+    {
+        // @TODO: error checking
+        return tokenArray[index];
+    }
+
+    public String getExpressionString()
+    {
+        return exprStr;
+    }
+
+    public Object evaluate(NetUIVariableResolver vr)
+    {
+        return _evaluate(tokens.size(), vr);
+    }
+    
+    public void update(Object newValue, NetUIVariableResolver vr)
+    {
+        // find leaf
+        Object branch = _evaluate(tokens.size()-1, vr);
+        
+        ExpressionToken token = tokenArray[tokens.size()-1];
+
+        if(_logger.isDebugEnabled()) _logger.debug("Update leaf token: " + token + " on object: " + branch);
+
+        // apply value
+        token.update(branch, newValue);
+    }
+
+    // @TODO: this could be done more effectively / efficiently
+    public String changeContext(String oldContext, String newContext, Object index)
+    {
+        String thisExpr = getExpressionString();
+
+        if(_logger.isDebugEnabled()) _logger.debug("oldContext: " + oldContext + " newContext: " + newContext + " thisExpr: " + thisExpr);
+
+        // needs to be checked for atomicity
+        ParsedExpression pe = ParseUtils.parse(newContext);
+        
+        if(!pe.isExpression())
+        {
+            String msg = "The expression can not be qualified into new context because the new context is not atomic.";
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+            throw new RuntimeException(msg);
+        }
+
+        // this isn't a failure; it just means that there isn't anything else to replace
+        if(!thisExpr.startsWith(oldContext))
+        {
+            return "{" + thisExpr  + "}";
+        }
+        
+        if(index instanceof Integer && ((Integer)index).intValue() > 32767)
+        {
+            String msg = "Can not create an indexed expression with an array index greater than the Java array limit for the expression \"" + 
+                thisExpr + "\"";
+
+            if(_logger.isWarnEnabled()) _logger.warn(msg);
+            throw new RuntimeException(msg);
+        }
+
+        String ctxStr = pe.getExpressionString();
+
+        ctxStr = ctxStr + "[" + index + "]";
+
+        if(_logger.isDebugEnabled()) _logger.debug("thisExpr: " + thisExpr + " ctxStr: " + ctxStr);
+
+        thisExpr = thisExpr.replaceFirst(oldContext, ctxStr);
+
+        StringBuffer buf = new StringBuffer();
+        buf.append("{");
+        buf.append(thisExpr);
+        buf.append("}");
+
+        return buf.toString();
+    }
+
+    public String qualify(String contextName)
+    {
+        StringBuffer buf = new StringBuffer();
+        buf.append("{");
+        buf.append(contextName);
+        buf.append(".");
+        buf.append(getExpressionString());
+        buf.append("}");
+
+        return buf.toString();
+    }
+
+    public String toString()
+    {
+        StringBuffer buf = new StringBuffer();
+        buf.append("ExpressionTerm:\n");
+        for(int i = 0; i < tokens.size(); i++)
+        {
+            buf.append("  " + tokens.get(i).toString() + "\n");
+        }
+        return buf.toString();
+    }
+
+    private final Object _evaluate(int index, NetUIVariableResolver vr)
+    {
+        Object result = null;
+
+        if(tokens.size() == 1)
+        {
+            if(_logger.isDebugEnabled()) _logger.debug("found single term expression");
+
+            result = vr.resolveVariable(context.getName());
+
+            if(result != null && result instanceof BindingContext)
+            {
+                if(_logger.isDebugEnabled()) 
+                    _logger.debug("result is of type BindingContext; return type: " + (((BindingContext)result).unwrap().getClass()));
+
+                return ((BindingContext)result).unwrap();
+            }
+            else return result;
+        }
+        else
+        {
+            for(int i = 0; i < index; i++)
+            {
+                if(i == 0)
+                {
+                    result = vr.resolveVariable(context.getName());
+                }
+                else result = tokenArray[i].evaluate(result);
+            }
+
+            return result;
+        }
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,69 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class LiteralTerm
+    implements Term 
+{
+    private static final Logger logger = Logger.getInstance(LiteralTerm.class);
+
+    private String text = null;
+
+    public LiteralTerm(String text)
+    {
+        super();
+
+        // hack for Radar 39861.  probably being lazy in not fixing the grammar...
+        if(text.equals("\\{"))
+            this.text = "{";
+        else this.text = text;
+
+        if(logger.isDebugEnabled()) logger.debug("LiteralTerm text: " + text + " this.text: " + this.text);
+    }
+
+    public void seal()
+    {
+    }
+
+    public String getExpressionString()
+    {
+        return text;
+    }
+
+    public Object evaluate(NetUIVariableResolver vr)
+    {
+        return text;
+    }
+
+    public String toString()
+    {
+        return "LiteralTerm:\n  " + text + "\n";
+    }
+}
+

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIEL.jj
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIEL.jj	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,240 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+options {
+  JAVA_UNICODE_ESCAPE = false;
+  UNICODE_INPUT = true;
+  STATIC = false;
+  DEBUG_PARSER=false;
+}
+
+PARSER_BEGIN(NetUIELParser)
+
+package org.apache.beehive.netui.script.el.parser;
+
+import org.apache.beehive.netui.script.el.ExpressionTerm;
+import org.apache.beehive.netui.script.el.LiteralTerm;
+import org.apache.beehive.netui.script.el.ParsedExpression;
+import org.apache.beehive.netui.script.el.Term;
+import org.apache.beehive.netui.script.el.tokens.*;
+
+public class NetUIELParser
+{
+    public static void main(String[] args)
+        throws Exception
+    {
+        NetUIELParser parser = new NetUIELParser(System.in);
+        parser.parse();
+    }
+}
+
+PARSER_END(NetUIELParser)
+
+<DEFAULT> TOKEN:
+{
+< NON_EXPRESSION_TEXT: (~["{", "\\"])+ | "\\{" | "\\" >
+|
+< START_EXPRESSION: "{" > : IN_EXPRESSION
+|
+< ESCAPED_START_EXPRESSION: "\\\\{" > : IN_EXPRESSION
+}
+
+<IN_EXPRESSION> TOKEN: 
+{
+< END_EXPRESSION: "}" > : DEFAULT
+|
+  /* String Literal -- This will accept a Java String literal that is converted internally into an EcmaScript compliant literal
+     See: http://www.ecma-international.org/publications/files/ecma-st/Ecma-262.pdf -- Annex A, StringLiteral production
+   */
+< STRING_LITERAL: 
+  ("\"" ((~["\"", "\\", "\n", "\r"])|<ECMA_ESCAPE_SEQUENCE>)* "\"") |
+  ("'"  ((~["'",  "\\", "\n", "\r"])|<ECMA_ESCAPE_SEQUENCE>)* "'") 
+  >
+| <#ECMA_ESCAPE_SEQUENCE:
+  "\\" | 
+  (
+  ["n", "t", "b", "r", "f", "\\", "'", "\""] |
+  ["0"-"7"] (["0"-"7"])? |
+  ["0"-"3"] ["0"-"7"] ["0"-"7"] |
+  ["x","X"] <HIT> <HIT> |
+  ["u","U"] <HIT> <HIT> <HIT> <HIT>
+  )
+  >
+| <#HIT: ["0"-"9","a"-"f","A"-"F"] >
+|
+/* Identifiers */
+< IDENTIFIER: (<LETTER>|<IMPL_OBJ_START>) (<LETTER>|<DIGIT>)* >
+| < #IMPL_OBJ_START: "#" >
+| < #LETTER:
+      [
+       "\u0024",
+       "\u0041"-"\u005a",
+       "\u005f",
+       "\u0061"-"\u007a",
+       "\u00c0"-"\u00d6",
+       "\u00d8"-"\u00f6",
+       "\u00f8"-"\u00ff",
+       "\u0100"-"\u1fff",
+       "\u3040"-"\u318f",
+       "\u3300"-"\u337f",
+       "\u3400"-"\u3d2d",
+       "\u4e00"-"\u9fff",
+       "\uf900"-"\ufaff"
+      ]
+  >
+|
+  < #DIGIT:
+      [
+       "\u0030"-"\u0039",
+       "\u0660"-"\u0669",
+       "\u06f0"-"\u06f9",
+       "\u0966"-"\u096f",
+       "\u09e6"-"\u09ef",
+       "\u0a66"-"\u0a6f",
+       "\u0ae6"-"\u0aef",
+       "\u0b66"-"\u0b6f",
+       "\u0be7"-"\u0bef",
+       "\u0c66"-"\u0c6f",
+       "\u0ce6"-"\u0cef",
+       "\u0d66"-"\u0d6f",
+       "\u0e50"-"\u0e59",
+       "\u0ed0"-"\u0ed9",
+       "\u1040"-"\u1049"
+      ]
+  >
+| < INTEGER: ["0"-"9"] (["0"-"9"])* >
+| <DOT: ".">
+| <DQUOTE: "\"">
+| <SQUOTE: "'">
+| <LBRACKET: "[">
+| <RBRACKET: "]">
+}
+
+// 3.
+ParsedExpression parse() :
+{
+Token t = null;
+ParsedExpression pe = new ParsedExpression();
+Term term = null;
+}
+{
+    (
+     (term = parseLiteralTerm() {pe.addTerm(term);}) | 
+     (<START_EXPRESSION> term = parseExpression() <END_EXPRESSION> {pe.addTerm(term);}) |
+     (<ESCAPED_START_EXPRESSION> term = parseExpression() <END_EXPRESSION> {pe.addTerm(new LiteralTerm("\\")); pe.addTerm(term);}) 
+    )* <EOF>
+{
+return pe;
+}
+}
+
+LiteralTerm parseLiteralTerm() :
+{
+Token t = null;
+LiteralTerm ls = null;
+}
+{
+  (t = <NON_EXPRESSION_TEXT> {ls = new LiteralTerm(t.image); return ls;})
+}
+
+
+ExpressionTerm parseExpression() :
+{
+ExpressionTerm expr = new ExpressionTerm();
+ExpressionToken eTok = null;
+}
+{
+
+(
+eTok = Context() 
+{
+expr.addToken(eTok);
+}
+(
+  (<DOT> eTok = ExprIdentifier() | LOOKAHEAD(2) eTok = MapKey() | eTok = ArrayIndex())
+  {
+    {
+      expr.addToken(eTok);
+    }
+  }
+
+)*
+)
+{
+expr.seal();
+return expr;
+}
+}
+
+ExpressionToken Context() :
+{
+Token t = null;
+ExpressionToken eTok = null;
+}
+{
+(t = <IDENTIFIER>)
+{
+//System.out.println("** Parser found context: " + t.image);
+eTok = new ContextToken(t.image);
+return eTok;
+}
+}
+
+ExpressionToken ExprIdentifier() :
+{
+Token t = null;
+ExpressionToken eTok = null;
+}
+{
+(t = <IDENTIFIER>)
+{
+//System.out.println("** Parser found identifier: " + t.image);
+eTok = new IdentifierToken(t.image);
+return eTok;
+}
+}
+
+// handle text inside of map braces as ["..."] or ['...']
+ExpressionToken MapKey() :
+{
+Token t = null;
+ExpressionToken eTok = null;
+}
+{
+(
+<LBRACKET> (t=<STRING_LITERAL>) <RBRACKET>
+)
+{
+eTok = new MapKeyToken(t.image);
+return eTok;
+}
+}
+
+ExpressionToken ArrayIndex() :
+{
+Token t = null;
+ExpressionToken eTok = null;
+}
+{
+(<LBRACKET> (t = <INTEGER>) <RBRACKET>)
+{
+//System.out.println("** Parser found array index: " + t.image);
+eTok = new ArrayIndexToken(t.image);
+return eTok;
+}
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,132 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+import java.util.Map;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.el.ELException;
+import javax.servlet.jsp.el.VariableResolver;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.GlobalApp;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+
+import org.apache.beehive.netui.script.IllegalExpressionException;
+
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+import org.apache.beehive.netui.script.common.ScriptablePageInput;
+
+import org.apache.beehive.netui.script.el.util.ApplicationAttributeMap;
+import org.apache.beehive.netui.script.el.util.PageContextAttributeMap;
+import org.apache.beehive.netui.script.el.util.RequestAttributeMap;
+import org.apache.beehive.netui.script.el.util.RequestParameterMap;
+import org.apache.beehive.netui.script.el.util.SessionAttributeMap;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class NetUIReadVariableResolver
+    extends NetUIVariableResolver
+{
+    private static final Logger _logger = Logger.getInstance(NetUIReadVariableResolver.class);
+    private static final Map _contextFactories;
+
+    static
+    {
+        _contextFactories = ImplicitObjectUtil.initialize("netuiel");
+    }
+
+    private PageContext _pc = null;
+    private Tag _currentTag = null;
+    private Object _form = null;
+
+    public NetUIReadVariableResolver(Object form, Tag currentTag, PageContext pc)
+    {
+        _pc = pc;
+        _form = form;
+        _currentTag = currentTag;
+    }
+
+    public Object resolveVariable(String name)
+    {
+        if(name.equals("pageContext"))
+            return new PageContextAttributeMap(_pc);
+        else if(name.equals("request"))
+            return new RequestAttributeMap(_pc.getRequest());
+        else if(name.equals("session"))
+            return new SessionAttributeMap(_pc.getSession());
+        else if(name.equals("application"))
+            return new ApplicationAttributeMap(_pc.getServletContext());
+        else if(name.equals("actionForm"))
+            return _form;
+        else if(name.equals("pageFlow"))
+            return getPageFlow(_pc.getRequest(), _pc.getResponse());
+        else if(name.equals("globalApp"))
+            return getGlobalApp(_pc.getRequest(), _pc.getResponse());
+        else if(name.equals("bundle"))
+            return getScriptableObject(_contextFactories, this, name);
+        else if(name.equals("container"))
+            return getScriptableObject(_contextFactories, this, name);
+        else if(name.equals("url"))
+            return new RequestParameterMap(_pc.getRequest());
+        else if(name.equals("pageInput"))
+            return new ScriptablePageInput(_pc.getRequest());
+        // in order to look-up ContextFactories that are used to create ScriptableObjects, 
+        // need to call the contextFactory map to find those that aren't known about 
+        // explicitly here.  The statements above are used to look-up binding contexts
+        // that are well-known because it's faster than dropping into the 
+        // ContextFactory map for each lookup -- optimizing for the common case.
+        else if(_contextFactories != null && _contextFactories.containsKey(name))
+        {
+            return getScriptableObject(_contextFactories, this, name);
+        }
+        else 
+        {
+            RuntimeException re = new RuntimeException("Could not resolve variable named \"" + name + "\"", new IllegalExpressionException());
+            if(_logger.isErrorEnabled()) _logger.error("", re);
+            throw re;
+        }
+    }
+
+    public String[] getAvailableVariables()
+    {
+        return new String[] {"actionForm", "pageFlow", "globalApp", "request", "session", "appication", "pageContext", "bundle", "container", "url", "pageInput"};
+    }
+
+    public Tag getCurrentTag()
+    {
+        return _currentTag;
+    }
+
+    private static final Object getScriptableObject(Map contextFactories, VariableResolver vr, String name)
+    {
+        return ImplicitObjectUtil.getImplicitObject(contextFactories, vr, name);
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,109 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.el.ELException;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.GlobalApp;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+
+import org.apache.beehive.netui.script.IllegalExpressionException;
+
+import org.apache.beehive.netui.script.el.util.RequestAttributeMap;
+import org.apache.beehive.netui.script.el.util.RequestParameterMap;
+import org.apache.beehive.netui.script.el.util.SessionAttributeMap;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class NetUIUpdateVariableResolver
+    extends NetUIVariableResolver
+{
+    private static final Logger _logger = Logger.getInstance(NetUIVariableResolver.class);
+
+    private ServletRequest _request = null;
+    private ServletResponse _response = null;
+    private Object _form = null;
+    private boolean _requestParameter = true;
+
+    public NetUIUpdateVariableResolver(Object form, ServletRequest request, ServletResponse response, boolean requestParameter)
+    {
+        super();
+        
+        _requestParameter = requestParameter;
+        _form = form;
+        _request = request;
+        _response = response;
+    }
+
+    public Object resolveVariable(String name)
+    {
+        if(name.equals("actionForm"))
+            return _form;
+        else if(name.equals("pageFlow"))
+            return getPageFlow(_request, _response);
+        else if(name.equals("globalApp"))
+            return getGlobalApp(_request, _response);
+        else if(name.equals("request"))
+        {
+            if(_requestParameter == false)
+                return new RequestAttributeMap(_request);
+            else throw new IllegalExpressionException("The request data binding context can not be updated from a request parameter.");
+        }
+        else if(name.equals("session"))
+        {
+            if(_requestParameter == false)
+                return new SessionAttributeMap(((HttpServletRequest)_request).getSession());
+            else throw new IllegalExpressionException("The session data binding context can not be updated from a request parameter.");
+        }
+        // @bug: need to get the application from somewhere
+        else if(name.equals("application"))
+        {
+            if(_requestParameter == false)
+                return null; //new ApplicationAttributeMap(pc.getServletContext());
+            else throw new IllegalExpressionException("The application data binding context can not be updated from a request parameter.");
+                                                      
+        }
+        else 
+        {
+            String msg = "Could not resolve variable named \"" + name + "\" for an expression update.";
+            _logger.error(msg);
+            throw new IllegalExpressionException(msg);
+        }
+    }
+
+    public String[] getAvailableVariables()
+    {
+        if(_requestParameter)
+            return new String[] {"actionForm", "pageFlow", "globalApp"};
+        else return new String[] {"actionForm", "pageFlow", "globalApp", "request", "session", "appication"};
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import javax.servlet.jsp.el.VariableResolver;
+
+// internal imports
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+
+import org.apache.beehive.netui.pageflow.GlobalApp;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public abstract class NetUIVariableResolver
+    implements VariableResolver
+{
+    private static final Logger _logger = Logger.getInstance(NetUIVariableResolver.class);
+    
+    public Object resolveVariable(String name)
+    {
+        return null;
+    }
+
+    public abstract String[] getAvailableVariables();
+
+    protected PageFlowController getPageFlow(ServletRequest request, ServletResponse response)
+    {
+        return ImplicitObjectUtil.getPageFlow(request, response);
+    }
+
+    protected GlobalApp getGlobalApp(ServletRequest request, ServletResponse response)
+    {
+        return ImplicitObjectUtil.getGlobalApp(request, response);
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,193 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+import java.util.ArrayList;
+import java.util.List;
+
+// internal imports
+import org.apache.beehive.netui.script.el.tokens.ExpressionToken;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class ParsedExpression
+{
+    private static Logger _logger = Logger.getInstance(ParsedExpression.class);
+
+    // this needs to be fast
+    private static final boolean debugEnabled = _logger.isDebugEnabled();
+
+    private static final String EMPTY_STRING = "";
+
+    private List terms = new ArrayList();
+    private boolean isExpression = false;
+    private boolean containsExpression = false;
+
+    private ExpressionTerm atomicExpression = null;
+    private Term[] termArray = null;
+    private String exprStr;
+    
+    public void seal()
+    {
+        termArray = new Term[terms.size()];
+
+        StringBuffer buf = new StringBuffer();
+        for(int i = 0; i < terms.size(); i++)
+        {
+            Term t = (Term)terms.get(i);
+            t.seal();
+
+            if(t instanceof ExpressionTerm)
+            {
+                if(terms.size() == 1)
+                {
+                    atomicExpression = (ExpressionTerm)terms.get(0);
+                    isExpression = true;
+                }
+                containsExpression = true;
+            }
+            else if(t instanceof LiteralTerm)
+            {
+                String lit = t.getExpressionString();
+                if(lit != null && lit.indexOf("{") > -1)
+                    containsExpression = true;
+            }
+
+            termArray[i] = (Term)terms.get(i);
+            buf.append(t.getExpressionString());
+        }
+        exprStr = buf.toString();
+    }
+
+    public boolean isExpression()
+    {
+        return isExpression;
+    }
+
+    public boolean containsExpression()
+    {
+        return containsExpression;
+    }
+
+    public void addTerm(Term term)
+    {
+        terms.add(term);
+    }
+
+    public int getTokenCount()
+    {
+        return terms.size();
+    }
+
+    public Term getTerm(int i)
+    {
+        // @TODO: error checking
+        return termArray[i];
+    }
+
+    public ExpressionTerm getAtomicExpressionTerm()
+    {
+        return atomicExpression;
+    }
+
+    public Object evaluate(NetUIVariableResolver vr)
+    {
+        if(debugEnabled) _logger.debug("evaluate expression: " + exprStr);
+
+        if(isExpression)
+        {
+            if(debugEnabled) _logger.debug("atoimc expression");
+
+            return atomicExpression.evaluate(vr);
+        }
+        else
+        {
+            StringBuffer buf = new StringBuffer();
+            
+            for(int i = 0; i < terms.size(); i++)
+            {
+                if(debugEnabled) _logger.debug("term[" + i + "]: " + termArray[i].getClass().getName() + 
+                                               " expression string: " + termArray[i].getExpressionString());
+
+                Object result = termArray[i].evaluate(vr);
+
+                buf.append(result != null ? result.toString() : EMPTY_STRING);
+            }
+            
+            return buf.toString();
+        }
+    }
+
+    public void update(Object value, NetUIVariableResolver vr)
+    {
+        if(!isExpression)
+        {
+            String msg = "The expression can not be updated because it is not atomic.";
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+            throw new RuntimeException(msg);
+        }
+
+        atomicExpression.update(value, vr);
+    }
+
+    public String changeContext(String oldContext, String newContext, Object index)
+    {
+        if(!isExpression)
+        {
+            String msg = "The expression can not change context because it is not atomic.";
+            
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+
+            throw new RuntimeException(msg);
+        }
+
+        return atomicExpression.changeContext(oldContext, newContext, index);
+    }
+
+    public String qualify(String contextName)
+    {
+        // @TODO: could check to see if first term is literal
+
+        return "{" + contextName + "." + getExpressionString() + "}";
+    }
+
+    // only call on atomic expressions
+    public String getExpressionString()
+    {
+        if(isExpression)
+            return atomicExpression.getExpressionString();
+        else return exprStr;
+    }
+
+    public String toString()
+    {
+        StringBuffer buf = new StringBuffer();
+        for(int i = 0; i < terms.size(); i++)
+        {
+            buf.append(terms.get(i).toString());
+        }
+        return buf.toString();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el;
+
+// java imports
+
+// internal imports
+
+// externaml imprts
+
+public interface Term
+{
+    public Object evaluate(NetUIVariableResolver vr);
+
+    public String getExpressionString();
+    
+    public void seal();
+}
+   

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParser.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParser.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,454 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.parser;
+
+import org.apache.beehive.netui.script.el.ExpressionTerm;
+import org.apache.beehive.netui.script.el.LiteralTerm;
+import org.apache.beehive.netui.script.el.ParsedExpression;
+import org.apache.beehive.netui.script.el.Term;
+import org.apache.beehive.netui.script.el.tokens.*;
+
+public class NetUIELParser implements NetUIELParserConstants {
+    public static void main(String[] args)
+        throws Exception
+    {
+        NetUIELParser parser = new NetUIELParser(System.in);
+        parser.parse();
+    }
+
+// 3.
+  final public ParsedExpression parse() throws ParseException {
+Token t = null;
+ParsedExpression pe = new ParsedExpression();
+Term term = null;
+    label_1:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case NON_EXPRESSION_TEXT:
+      case START_EXPRESSION:
+      case ESCAPED_START_EXPRESSION:
+        ;
+        break;
+      default:
+        jj_la1[0] = jj_gen;
+        break label_1;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case NON_EXPRESSION_TEXT:
+        term = parseLiteralTerm();
+                                 pe.addTerm(term);
+        break;
+      case START_EXPRESSION:
+        jj_consume_token(START_EXPRESSION);
+        term = parseExpression();
+        jj_consume_token(END_EXPRESSION);
+                                                                    pe.addTerm(term);
+        break;
+      case ESCAPED_START_EXPRESSION:
+        jj_consume_token(ESCAPED_START_EXPRESSION);
+        term = parseExpression();
+        jj_consume_token(END_EXPRESSION);
+                                                                            pe.addTerm(new LiteralTerm("\\")); pe.addTerm(term);
+        break;
+      default:
+        jj_la1[1] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+    jj_consume_token(0);
+{if (true) return pe;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public LiteralTerm parseLiteralTerm() throws ParseException {
+Token t = null;
+LiteralTerm ls = null;
+    t = jj_consume_token(NON_EXPRESSION_TEXT);
+                              ls = new LiteralTerm(t.image); {if (true) return ls;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ExpressionTerm parseExpression() throws ParseException {
+ExpressionTerm expr = new ExpressionTerm();
+ExpressionToken eTok = null;
+    eTok = Context();
+expr.addToken(eTok);
+    label_2:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DOT:
+      case LBRACKET:
+        ;
+        break;
+      default:
+        jj_la1[2] = jj_gen;
+        break label_2;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DOT:
+        jj_consume_token(DOT);
+        eTok = ExprIdentifier();
+        break;
+      default:
+        jj_la1[3] = jj_gen;
+        if (jj_2_1(2)) {
+          eTok = MapKey();
+        } else {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case LBRACKET:
+            eTok = ArrayIndex();
+            break;
+          default:
+            jj_la1[4] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        }
+      }
+    {
+      expr.addToken(eTok);
+    }
+    }
+expr.seal();
+{if (true) return expr;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ExpressionToken Context() throws ParseException {
+Token t = null;
+ExpressionToken eTok = null;
+    t = jj_consume_token(IDENTIFIER);
+//System.out.println("** Parser found context: " + t.image);
+eTok = new ContextToken(t.image);
+{if (true) return eTok;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ExpressionToken ExprIdentifier() throws ParseException {
+Token t = null;
+ExpressionToken eTok = null;
+    t = jj_consume_token(IDENTIFIER);
+//System.out.println("** Parser found identifier: " + t.image);
+eTok = new IdentifierToken(t.image);
+{if (true) return eTok;}
+    throw new Error("Missing return statement in function");
+  }
+
+// handle text inside of map braces as ["..."] or ['...']
+  final public ExpressionToken MapKey() throws ParseException {
+Token t = null;
+ExpressionToken eTok = null;
+    jj_consume_token(LBRACKET);
+    t = jj_consume_token(STRING_LITERAL);
+    jj_consume_token(RBRACKET);
+eTok = new MapKeyToken(t.image);
+{if (true) return eTok;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ExpressionToken ArrayIndex() throws ParseException {
+Token t = null;
+ExpressionToken eTok = null;
+    jj_consume_token(LBRACKET);
+    t = jj_consume_token(INTEGER);
+    jj_consume_token(RBRACKET);
+//System.out.println("** Parser found array index: " + t.image);
+eTok = new ArrayIndexToken(t.image);
+{if (true) return eTok;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final private boolean jj_2_1(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    boolean retval = !jj_3_1();
+    jj_save(0, xla);
+    return retval;
+  }
+
+  final private boolean jj_3_1() {
+    if (jj_3R_3()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_3() {
+    if (jj_scan_token(LBRACKET)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(STRING_LITERAL)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  public NetUIELParserTokenManager token_source;
+  SimpleCharStream jj_input_stream;
+  public Token token, jj_nt;
+  private int jj_ntk;
+  private Token jj_scanpos, jj_lastpos;
+  private int jj_la;
+  public boolean lookingAhead = false;
+  private boolean jj_semLA;
+  private int jj_gen;
+  final private int[] jj_la1 = new int[5];
+  static private int[] jj_la1_0;
+  static {
+      jj_la1_0();
+   }
+   private static void jj_la1_0() {
+      jj_la1_0 = new int[] {0xe,0xe,0x12000,0x2000,0x10000,};
+   }
+  final private JJCalls[] jj_2_rtns = new JJCalls[1];
+  private boolean jj_rescan = false;
+  private int jj_gc = 0;
+
+  public NetUIELParser(java.io.InputStream stream) {
+    jj_input_stream = new SimpleCharStream(stream, 1, 1);
+    token_source = new NetUIELParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 5; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public void ReInit(java.io.InputStream stream) {
+    jj_input_stream.ReInit(stream, 1, 1);
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 5; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public NetUIELParser(java.io.Reader stream) {
+    jj_input_stream = new SimpleCharStream(stream, 1, 1);
+    token_source = new NetUIELParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 5; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public void ReInit(java.io.Reader stream) {
+    jj_input_stream.ReInit(stream, 1, 1);
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 5; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public NetUIELParser(NetUIELParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 5; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  public void ReInit(NetUIELParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 5; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  final private Token jj_consume_token(int kind) throws ParseException {
+    Token oldToken;
+    if ((oldToken = token).next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    if (token.kind == kind) {
+      jj_gen++;
+      if (++jj_gc > 100) {
+        jj_gc = 0;
+        for (int i = 0; i < jj_2_rtns.length; i++) {
+          JJCalls c = jj_2_rtns[i];
+          while (c != null) {
+            if (c.gen < jj_gen) c.first = null;
+            c = c.next;
+          }
+        }
+      }
+      return token;
+    }
+    token = oldToken;
+    jj_kind = kind;
+    throw generateParseException();
+  }
+
+  final private boolean jj_scan_token(int kind) {
+    if (jj_scanpos == jj_lastpos) {
+      jj_la--;
+      if (jj_scanpos.next == null) {
+        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
+      } else {
+        jj_lastpos = jj_scanpos = jj_scanpos.next;
+      }
+    } else {
+      jj_scanpos = jj_scanpos.next;
+    }
+    if (jj_rescan) {
+      int i = 0; Token tok = token;
+      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
+      if (tok != null) jj_add_error_token(kind, i);
+    }
+    return (jj_scanpos.kind != kind);
+  }
+
+  final public Token getNextToken() {
+    if (token.next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    jj_gen++;
+    return token;
+  }
+
+  final public Token getToken(int index) {
+    Token t = lookingAhead ? jj_scanpos : token;
+    for (int i = 0; i < index; i++) {
+      if (t.next != null) t = t.next;
+      else t = t.next = token_source.getNextToken();
+    }
+    return t;
+  }
+
+  final private int jj_ntk() {
+    if ((jj_nt=token.next) == null)
+      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
+    else
+      return (jj_ntk = jj_nt.kind);
+  }
+
+  private java.util.Vector jj_expentries = new java.util.Vector();
+  private int[] jj_expentry;
+  private int jj_kind = -1;
+  private int[] jj_lasttokens = new int[100];
+  private int jj_endpos;
+
+  private void jj_add_error_token(int kind, int pos) {
+    if (pos >= 100) return;
+    if (pos == jj_endpos + 1) {
+      jj_lasttokens[jj_endpos++] = kind;
+    } else if (jj_endpos != 0) {
+      jj_expentry = new int[jj_endpos];
+      for (int i = 0; i < jj_endpos; i++) {
+        jj_expentry[i] = jj_lasttokens[i];
+      }
+      boolean exists = false;
+      for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
+        int[] oldentry = (int[])(e.nextElement());
+        if (oldentry.length == jj_expentry.length) {
+          exists = true;
+          for (int i = 0; i < jj_expentry.length; i++) {
+            if (oldentry[i] != jj_expentry[i]) {
+              exists = false;
+              break;
+            }
+          }
+          if (exists) break;
+        }
+      }
+      if (!exists) jj_expentries.addElement(jj_expentry);
+      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
+    }
+  }
+
+  public ParseException generateParseException() {
+    jj_expentries.removeAllElements();
+    boolean[] la1tokens = new boolean[18];
+    for (int i = 0; i < 18; i++) {
+      la1tokens[i] = false;
+    }
+    if (jj_kind >= 0) {
+      la1tokens[jj_kind] = true;
+      jj_kind = -1;
+    }
+    for (int i = 0; i < 5; i++) {
+      if (jj_la1[i] == jj_gen) {
+        for (int j = 0; j < 32; j++) {
+          if ((jj_la1_0[i] & (1<<j)) != 0) {
+            la1tokens[j] = true;
+          }
+        }
+      }
+    }
+    for (int i = 0; i < 18; i++) {
+      if (la1tokens[i]) {
+        jj_expentry = new int[1];
+        jj_expentry[0] = i;
+        jj_expentries.addElement(jj_expentry);
+      }
+    }
+    jj_endpos = 0;
+    jj_rescan_token();
+    jj_add_error_token(0, 0);
+    int[][] exptokseq = new int[jj_expentries.size()][];
+    for (int i = 0; i < jj_expentries.size(); i++) {
+      exptokseq[i] = (int[])jj_expentries.elementAt(i);
+    }
+    return new ParseException(token, exptokseq, tokenImage);
+  }
+
+  final public void enable_tracing() {
+  }
+
+  final public void disable_tracing() {
+  }
+
+  final private void jj_rescan_token() {
+    jj_rescan = true;
+    for (int i = 0; i < 1; i++) {
+      JJCalls p = jj_2_rtns[i];
+      do {
+        if (p.gen > jj_gen) {
+          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
+          switch (i) {
+            case 0: jj_3_1(); break;
+          }
+        }
+        p = p.next;
+      } while (p != null);
+    }
+    jj_rescan = false;
+  }
+
+  final private void jj_save(int index, int xla) {
+    JJCalls p = jj_2_rtns[index];
+    while (p.gen > jj_gen) {
+      if (p.next == null) { p = p.next = new JJCalls(); break; }
+      p = p.next;
+    }
+    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
+  }
+
+  static final class JJCalls {
+    int gen;
+    Token first;
+    int arg;
+    JJCalls next;
+  }
+
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParserConstants.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParserConstants.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.parser;
+
+public interface NetUIELParserConstants {
+
+  int EOF = 0;
+  int NON_EXPRESSION_TEXT = 1;
+  int START_EXPRESSION = 2;
+  int ESCAPED_START_EXPRESSION = 3;
+  int END_EXPRESSION = 4;
+  int STRING_LITERAL = 5;
+  int ECMA_ESCAPE_SEQUENCE = 6;
+  int HIT = 7;
+  int IDENTIFIER = 8;
+  int IMPL_OBJ_START = 9;
+  int LETTER = 10;
+  int DIGIT = 11;
+  int INTEGER = 12;
+  int DOT = 13;
+  int DQUOTE = 14;
+  int SQUOTE = 15;
+  int LBRACKET = 16;
+  int RBRACKET = 17;
+
+  int DEFAULT = 0;
+  int IN_EXPRESSION = 1;
+
+  String[] tokenImage = {
+    "<EOF>",
+    "<NON_EXPRESSION_TEXT>",
+    "\"{\"",
+    "\"\\\\\\\\{\"",
+    "\"}\"",
+    "<STRING_LITERAL>",
+    "<ECMA_ESCAPE_SEQUENCE>",
+    "<HIT>",
+    "<IDENTIFIER>",
+    "\"#\"",
+    "<LETTER>",
+    "<DIGIT>",
+    "<INTEGER>",
+    "\".\"",
+    "\"\\\"\"",
+    "\"\\\'\"",
+    "\"[\"",
+    "\"]\"",
+  };
+
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParserTokenManager.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/NetUIELParserTokenManager.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,812 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.parser;
+import org.apache.beehive.netui.script.el.ExpressionTerm;
+import org.apache.beehive.netui.script.el.LiteralTerm;
+import org.apache.beehive.netui.script.el.ParsedExpression;
+import org.apache.beehive.netui.script.el.Term;
+import org.apache.beehive.netui.script.el.tokens.*;
+
+public class NetUIELParserTokenManager implements NetUIELParserConstants
+{
+  public  java.io.PrintStream debugStream = System.out;
+  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
+private final int jjStopStringLiteralDfa_0(int pos, long active0)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active0 & 0x8L) != 0L)
+         {
+            jjmatchedKind = 1;
+            return 1;
+         }
+         return -1;
+      case 1:
+         if ((active0 & 0x8L) != 0L)
+         {
+            if (jjmatchedPos == 0)
+            {
+               jjmatchedKind = 1;
+               jjmatchedPos = 0;
+            }
+            return -1;
+         }
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_0(int pos, long active0)
+{
+   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
+}
+private final int jjStopAtPos(int pos, int kind)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   return pos + 1;
+}
+private final int jjStartNfaWithStates_0(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_0(state, pos + 1);
+}
+private final int jjMoveStringLiteralDfa0_0()
+{
+   switch(curChar)
+   {
+      case 92:
+         return jjMoveStringLiteralDfa1_0(0x8L);
+      case 123:
+         return jjStopAtPos(0, 2);
+      default :
+         return jjMoveNfa_0(2, 0);
+   }
+}
+private final int jjMoveStringLiteralDfa1_0(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(0, active0);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 92:
+         return jjMoveStringLiteralDfa2_0(active0, 0x8L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(0, active0);
+}
+private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(0, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(1, active0);
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 123:
+         if ((active0 & 0x8L) != 0L)
+            return jjStopAtPos(2, 3);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(1, active0);
+}
+private final void jjCheckNAdd(int state)
+{
+   if (jjrounds[state] != jjround)
+   {
+      jjstateSet[jjnewStateCnt++] = state;
+      jjrounds[state] = jjround;
+   }
+}
+private final void jjAddStates(int start, int end)
+{
+   do {
+      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+   } while (start++ != end);
+}
+private final void jjCheckNAddTwoStates(int state1, int state2)
+{
+   jjCheckNAdd(state1);
+   jjCheckNAdd(state2);
+}
+private final void jjCheckNAddStates(int start, int end)
+{
+   do {
+      jjCheckNAdd(jjnextStates[start]);
+   } while (start++ != end);
+}
+private final void jjCheckNAddStates(int start)
+{
+   jjCheckNAdd(jjnextStates[start]);
+   jjCheckNAdd(jjnextStates[start + 1]);
+}
+static final long[] jjbitVec0 = {
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec2 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+private final int jjMoveNfa_0(int startState, int curPos)
+{
+   int[] nextStates;
+   int startsAt = 0;
+   jjnewStateCnt = 4;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int j, kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 2:
+               case 0:
+                  kind = 1;
+                  jjCheckNAdd(0);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 2:
+                  if ((0xf7ffffffefffffffL & l) != 0L)
+                  {
+                     if (kind > 1)
+                        kind = 1;
+                     jjCheckNAdd(0);
+                  }
+                  else if (curChar == 92)
+                  {
+                     if (kind > 1)
+                        kind = 1;
+                  }
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 1;
+                  break;
+               case 0:
+                  if ((0xf7ffffffefffffffL & l) == 0L)
+                     break;
+                  kind = 1;
+                  jjCheckNAdd(0);
+                  break;
+               case 1:
+                  if (curChar == 123)
+                     kind = 1;
+                  break;
+               case 3:
+                  if (curChar == 92 && kind > 1)
+                     kind = 1;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 2:
+               case 0:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 1)
+                     kind = 1;
+                  jjCheckNAdd(0);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+private final int jjStopStringLiteralDfa_1(int pos, long active0)
+{
+   switch (pos)
+   {
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_1(int pos, long active0)
+{
+   return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
+}
+private final int jjStartNfaWithStates_1(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_1(state, pos + 1);
+}
+private final int jjMoveStringLiteralDfa0_1()
+{
+   switch(curChar)
+   {
+      case 34:
+         return jjStartNfaWithStates_1(0, 14, 33);
+      case 39:
+         return jjStartNfaWithStates_1(0, 15, 34);
+      case 46:
+         return jjStopAtPos(0, 13);
+      case 91:
+         return jjStopAtPos(0, 16);
+      case 93:
+         return jjStopAtPos(0, 17);
+      case 125:
+         return jjStopAtPos(0, 4);
+      default :
+         return jjMoveNfa_1(0, 0);
+   }
+}
+static final long[] jjbitVec3 = {
+   0x1ff00000fffffffeL, 0xffffffffffffc000L, 0xffffffffL, 0x600000000000000L
+};
+static final long[] jjbitVec4 = {
+   0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL
+};
+static final long[] jjbitVec5 = {
+   0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec6 = {
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L
+};
+static final long[] jjbitVec7 = {
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0x0L, 0x0L
+};
+static final long[] jjbitVec8 = {
+   0x3fffffffffffL, 0x0L, 0x0L, 0x0L
+};
+private final int jjMoveNfa_1(int startState, int curPos)
+{
+   int[] nextStates;
+   int startsAt = 0;
+   jjnewStateCnt = 33;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int j, kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 33:
+                  if ((0xffffffffffffdbffL & l) != 0L)
+                     jjCheckNAddStates(0, 5);
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(6, 11);
+                  else if (curChar == 34)
+                  {
+                     if (kind > 5)
+                        kind = 5;
+                  }
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 10;
+                  break;
+               case 34:
+                  if ((0xffffffffffffdbffL & l) != 0L)
+                     jjCheckNAddStates(12, 17);
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(18, 23);
+                  else if (curChar == 39)
+                  {
+                     if (kind > 5)
+                        kind = 5;
+                  }
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 25;
+                  break;
+               case 0:
+                  if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 12)
+                        kind = 12;
+                     jjCheckNAdd(32);
+                  }
+                  else if ((0x1800000000L & l) != 0L)
+                  {
+                     if (kind > 8)
+                        kind = 8;
+                     jjCheckNAdd(31);
+                  }
+                  else if (curChar == 39)
+                     jjCheckNAddStates(12, 17);
+                  else if (curChar == 34)
+                     jjCheckNAddStates(0, 5);
+                  break;
+               case 1:
+                  if ((0xffffffffffffdbffL & l) != 0L)
+                     jjCheckNAddStates(0, 5);
+                  break;
+               case 3:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 4;
+                  break;
+               case 4:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 5;
+                  break;
+               case 5:
+               case 8:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAdd(6);
+                  break;
+               case 6:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 5);
+                  break;
+               case 9:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 10;
+                  break;
+               case 10:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 11;
+                  break;
+               case 11:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 5);
+                  break;
+               case 12:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(6, 11);
+                  break;
+               case 13:
+                  if (curChar == 34 && kind > 5)
+                     kind = 5;
+                  break;
+               case 14:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(24, 30);
+                  break;
+               case 15:
+                  if (curChar == 39)
+                     jjCheckNAddStates(12, 17);
+                  break;
+               case 16:
+                  if ((0xffffffffffffdbffL & l) != 0L)
+                     jjCheckNAddStates(12, 17);
+                  break;
+               case 18:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 19;
+                  break;
+               case 19:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 20;
+                  break;
+               case 20:
+               case 23:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAdd(21);
+                  break;
+               case 21:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(12, 17);
+                  break;
+               case 24:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 25;
+                  break;
+               case 25:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 26;
+                  break;
+               case 26:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(12, 17);
+                  break;
+               case 27:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(18, 23);
+                  break;
+               case 28:
+                  if (curChar == 39 && kind > 5)
+                     kind = 5;
+                  break;
+               case 29:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(31, 37);
+                  break;
+               case 30:
+                  if ((0x1800000000L & l) == 0L)
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  jjCheckNAdd(31);
+                  break;
+               case 31:
+                  if ((0x3ff001000000000L & l) == 0L)
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  jjCheckNAdd(31);
+                  break;
+               case 32:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(32);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 33:
+                  jjCheckNAddStates(0, 5);
+                  if ((0x100000001000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 8;
+                  else if ((0x20000000200000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 3;
+                  break;
+               case 34:
+                  jjCheckNAddStates(12, 17);
+                  if ((0x100000001000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 23;
+                  else if ((0x20000000200000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 18;
+                  break;
+               case 0:
+               case 31:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  jjCheckNAdd(31);
+                  break;
+               case 1:
+                  jjCheckNAddStates(0, 5);
+                  break;
+               case 2:
+                  if ((0x20000000200000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 3;
+                  break;
+               case 3:
+                  if ((0x7e0000007eL & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 4;
+                  break;
+               case 4:
+                  if ((0x7e0000007eL & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 5;
+                  break;
+               case 5:
+               case 8:
+                  if ((0x7e0000007eL & l) != 0L)
+                     jjCheckNAdd(6);
+                  break;
+               case 6:
+                  if ((0x7e0000007eL & l) != 0L)
+                     jjCheckNAddStates(0, 5);
+                  break;
+               case 7:
+                  if ((0x100000001000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 8;
+                  break;
+               case 16:
+                  jjCheckNAddStates(12, 17);
+                  break;
+               case 17:
+                  if ((0x20000000200000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 18;
+                  break;
+               case 18:
+                  if ((0x7e0000007eL & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 19;
+                  break;
+               case 19:
+                  if ((0x7e0000007eL & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 20;
+                  break;
+               case 20:
+               case 23:
+                  if ((0x7e0000007eL & l) != 0L)
+                     jjCheckNAdd(21);
+                  break;
+               case 21:
+                  if ((0x7e0000007eL & l) != 0L)
+                     jjCheckNAddStates(12, 17);
+                  break;
+               case 22:
+                  if ((0x100000001000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 23;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 33:
+               case 1:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(0, 5);
+                  break;
+               case 34:
+               case 16:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(12, 17);
+                  break;
+               case 0:
+               case 31:
+                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 8)
+                     kind = 8;
+                  jjCheckNAdd(31);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 33 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+static final int[] jjnextStates = {
+   1, 2, 7, 9, 12, 13, 1, 2, 7, 9, 13, 14, 16, 17, 22, 24, 
+   27, 28, 16, 17, 22, 24, 28, 29, 1, 2, 7, 9, 12, 13, 14, 16, 
+   17, 22, 24, 27, 28, 29, 
+};
+private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec2[i2] & l2) != 0L);
+      default : 
+         if ((jjbitVec0[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec4[i2] & l2) != 0L);
+      case 48:
+         return ((jjbitVec5[i2] & l2) != 0L);
+      case 49:
+         return ((jjbitVec6[i2] & l2) != 0L);
+      case 51:
+         return ((jjbitVec7[i2] & l2) != 0L);
+      case 61:
+         return ((jjbitVec8[i2] & l2) != 0L);
+      default : 
+         if ((jjbitVec3[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+public static final String[] jjstrLiteralImages = {
+"", null, "\173", "\134\134\173", "\175", null, null, null, null, null, null, 
+null, null, "\56", "\42", "\47", "\133", "\135", };
+public static final String[] lexStateNames = {
+   "DEFAULT", 
+   "IN_EXPRESSION", 
+};
+public static final int[] jjnewLexState = {
+   -1, -1, 1, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+};
+protected SimpleCharStream input_stream;
+private final int[] jjrounds = new int[33];
+private final int[] jjstateSet = new int[66];
+protected char curChar;
+public NetUIELParserTokenManager(SimpleCharStream stream)
+{
+   if (SimpleCharStream.staticFlag)
+      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+   input_stream = stream;
+}
+public NetUIELParserTokenManager(SimpleCharStream stream, int lexState)
+{
+   this(stream);
+   SwitchTo(lexState);
+}
+public void ReInit(SimpleCharStream stream)
+{
+   jjmatchedPos = jjnewStateCnt = 0;
+   curLexState = defaultLexState;
+   input_stream = stream;
+   ReInitRounds();
+}
+private final void ReInitRounds()
+{
+   int i;
+   jjround = 0x80000001;
+   for (i = 33; i-- > 0;)
+      jjrounds[i] = 0x80000000;
+}
+public void ReInit(SimpleCharStream stream, int lexState)
+{
+   ReInit(stream);
+   SwitchTo(lexState);
+}
+public void SwitchTo(int lexState)
+{
+   if (lexState >= 2 || lexState < 0)
+      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
+   else
+      curLexState = lexState;
+}
+
+protected Token jjFillToken()
+{
+   Token t = Token.newToken(jjmatchedKind);
+   t.kind = jjmatchedKind;
+   String im = jjstrLiteralImages[jjmatchedKind];
+   t.image = (im == null) ? input_stream.GetImage() : im;
+   t.beginLine = input_stream.getBeginLine();
+   t.beginColumn = input_stream.getBeginColumn();
+   t.endLine = input_stream.getEndLine();
+   t.endColumn = input_stream.getEndColumn();
+   return t;
+}
+
+int curLexState = 0;
+int defaultLexState = 0;
+int jjnewStateCnt;
+int jjround;
+int jjmatchedPos;
+int jjmatchedKind;
+
+public Token getNextToken() 
+{
+  int kind;
+  Token specialToken = null;
+  Token matchedToken;
+  int curPos = 0;
+
+  EOFLoop :
+  for (;;)
+  {   
+   try   
+   {     
+      curChar = input_stream.BeginToken();
+   }     
+   catch(java.io.IOException e)
+   {        
+      jjmatchedKind = 0;
+      matchedToken = jjFillToken();
+      return matchedToken;
+   }
+
+   switch(curLexState)
+   {
+     case 0:
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_0();
+       break;
+     case 1:
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_1();
+       break;
+   }
+     if (jjmatchedKind != 0x7fffffff)
+     {
+        if (jjmatchedPos + 1 < curPos)
+           input_stream.backup(curPos - jjmatchedPos - 1);
+           matchedToken = jjFillToken();
+       if (jjnewLexState[jjmatchedKind] != -1)
+         curLexState = jjnewLexState[jjmatchedKind];
+           return matchedToken;
+     }
+     int error_line = input_stream.getEndLine();
+     int error_column = input_stream.getEndColumn();
+     String error_after = null;
+     boolean EOFSeen = false;
+     try { input_stream.readChar(); input_stream.backup(1); }
+     catch (java.io.IOException e1) {
+        EOFSeen = true;
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+        if (curChar == '\n' || curChar == '\r') {
+           error_line++;
+           error_column = 0;
+        }
+        else
+           error_column++;
+     }
+     if (!EOFSeen) {
+        input_stream.backup(1);
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+     }
+     throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+  }
+}
+
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/ParseException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/ParseException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,209 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.parser;
+
+/**
+ * This exception is thrown when parse errors are encountered.
+ * You can explicitly create objects of this exception type by
+ * calling the method generateParseException in the generated
+ * parser.
+ *
+ * You can modify this class to customize your error reporting
+ * mechanisms so long as you retain the public fields.
+ */
+public class ParseException extends Exception {
+
+  /**
+   * This constructor is used by the method "generateParseException"
+   * in the generated parser.  Calling this constructor generates
+   * a new object of this type with the fields "currentToken",
+   * "expectedTokenSequences", and "tokenImage" set.  The boolean
+   * flag "specialConstructor" is also set to true to indicate that
+   * this constructor was used to create this object.
+   * This constructor calls its super class with the empty string
+   * to force the "toString" method of parent class "Throwable" to
+   * print the error message in the form:
+   *     ParseException: <result of getMessage>
+   */
+  public ParseException(Token currentTokenVal,
+                        int[][] expectedTokenSequencesVal,
+                        String[] tokenImageVal
+                       )
+  {
+    super("");
+    specialConstructor = true;
+    currentToken = currentTokenVal;
+    expectedTokenSequences = expectedTokenSequencesVal;
+    tokenImage = tokenImageVal;
+  }
+
+  /**
+   * The following constructors are for use by you for whatever
+   * purpose you can think of.  Constructing the exception in this
+   * manner makes the exception behave in the normal way - i.e., as
+   * documented in the class "Throwable".  The fields "errorToken",
+   * "expectedTokenSequences", and "tokenImage" do not contain
+   * relevant information.  The JavaCC generated code does not use
+   * these constructors.
+   */
+
+  public ParseException() {
+    super();
+    specialConstructor = false;
+  }
+
+  public ParseException(String message) {
+    super(message);
+    specialConstructor = false;
+  }
+
+  /**
+   * This variable determines which constructor was used to create
+   * this object and thereby affects the semantics of the
+   * "getMessage" method (see below).
+   */
+  protected boolean specialConstructor;
+
+  /**
+   * This is the last token that has been consumed successfully.  If
+   * this object has been created due to a parse error, the token
+   * followng this token will (therefore) be the first error token.
+   */
+  public Token currentToken;
+
+  /**
+   * Each entry in this array is an array of integers.  Each array
+   * of integers represents a sequence of tokens (by their ordinal
+   * values) that is expected at this point of the parse.
+   */
+  public int[][] expectedTokenSequences;
+
+  /**
+   * This is a reference to the "tokenImage" array of the generated
+   * parser within which the parse error occurred.  This array is
+   * defined in the generated ...Constants interface.
+   */
+  public String[] tokenImage;
+
+  /**
+   * This method has the standard behavior when this object has been
+   * created using the standard constructors.  Otherwise, it uses
+   * "currentToken" and "expectedTokenSequences" to generate a parse
+   * error message and returns it.  If this object has been created
+   * due to a parse error, and you do not catch it (it gets thrown
+   * from the parser), then this method is called during the printing
+   * of the final stack trace, and hence the correct error message
+   * gets displayed.
+   */
+  public String getMessage() {
+    if (!specialConstructor) {
+      return super.getMessage();
+    }
+    String expected = "";
+    int maxSize = 0;
+    for (int i = 0; i < expectedTokenSequences.length; i++) {
+      if (maxSize < expectedTokenSequences[i].length) {
+        maxSize = expectedTokenSequences[i].length;
+      }
+      for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+        expected += tokenImage[expectedTokenSequences[i][j]] + " ";
+      }
+      if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
+        expected += "...";
+      }
+      expected += eol + "    ";
+    }
+    String retval = "Encountered \"";
+    Token tok = currentToken.next;
+    for (int i = 0; i < maxSize; i++) {
+      if (i != 0) retval += " ";
+      if (tok.kind == 0) {
+        retval += tokenImage[0];
+        break;
+      }
+      retval += add_escapes(tok.image);
+      tok = tok.next; 
+    }
+    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
+    retval += "." + eol;
+    if (expectedTokenSequences.length == 1) {
+      retval += "Was expecting:" + eol + "    ";
+    } else {
+      retval += "Was expecting one of:" + eol + "    ";
+    }
+    retval += expected;
+    return retval;
+  }
+
+  /**
+   * The end of line string for this machine.
+   */
+  protected String eol = System.getProperty("line.separator", "\n");
+ 
+  /**
+   * Used to convert raw characters to their escaped version
+   * when these raw version cannot be used as part of an ASCII
+   * string literal.
+   */
+  protected String add_escapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/SimpleCharStream.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/SimpleCharStream.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,418 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.parser;
+
+/**
+ * An implementation of interface CharStream, where the stream is assumed to
+ * contain only ASCII characters (without unicode processing).
+ */
+
+public class SimpleCharStream
+{
+  public static final boolean staticFlag = false;
+  int bufsize;
+  int available;
+  int tokenBegin;
+  public int bufpos = -1;
+  protected int bufline[];
+  protected int bufcolumn[];
+
+  protected int column = 0;
+  protected int line = 1;
+
+  protected boolean prevCharIsCR = false;
+  protected boolean prevCharIsLF = false;
+
+  protected java.io.Reader inputStream;
+
+  protected char[] buffer;
+  protected int maxNextCharInd = 0;
+  protected int inBuf = 0;
+
+  protected void ExpandBuff(boolean wrapAround)
+  {
+     char[] newbuffer = new char[bufsize + 2048];
+     int newbufline[] = new int[bufsize + 2048];
+     int newbufcolumn[] = new int[bufsize + 2048];
+
+     try
+     {
+        if (wrapAround)
+        {
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+           System.arraycopy(buffer, 0, newbuffer,
+                                             bufsize - tokenBegin, bufpos);
+           buffer = newbuffer;
+
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
+           bufline = newbufline;
+
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
+           bufcolumn = newbufcolumn;
+
+           maxNextCharInd = (bufpos += (bufsize - tokenBegin));
+        }
+        else
+        {
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+           buffer = newbuffer;
+
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+           bufline = newbufline;
+
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+           bufcolumn = newbufcolumn;
+
+           maxNextCharInd = (bufpos -= tokenBegin);
+        }
+     }
+     catch (Throwable t)
+     {
+        throw new Error(t.getMessage());
+     }
+
+
+     bufsize += 2048;
+     available = bufsize;
+     tokenBegin = 0;
+  }
+
+  protected void FillBuff() throws java.io.IOException
+  {
+     if (maxNextCharInd == available)
+     {
+        if (available == bufsize)
+        {
+           if (tokenBegin > 2048)
+           {
+              bufpos = maxNextCharInd = 0;
+              available = tokenBegin;
+           }
+           else if (tokenBegin < 0)
+              bufpos = maxNextCharInd = 0;
+           else
+              ExpandBuff(false);
+        }
+        else if (available > tokenBegin)
+           available = bufsize;
+        else if ((tokenBegin - available) < 2048)
+           ExpandBuff(true);
+        else
+           available = tokenBegin;
+     }
+
+     int i;
+     try {
+        if ((i = inputStream.read(buffer, maxNextCharInd,
+                                    available - maxNextCharInd)) == -1)
+        {
+           inputStream.close();
+           throw new java.io.IOException();
+        }
+        else
+           maxNextCharInd += i;
+        return;
+     }
+     catch(java.io.IOException e) {
+        --bufpos;
+        backup(0);
+        if (tokenBegin == -1)
+           tokenBegin = bufpos;
+        throw e;
+     }
+  }
+
+  public char BeginToken() throws java.io.IOException
+  {
+     tokenBegin = -1;
+     char c = readChar();
+     tokenBegin = bufpos;
+
+     return c;
+  }
+
+  protected void UpdateLineColumn(char c)
+  {
+     column++;
+
+     if (prevCharIsLF)
+     {
+        prevCharIsLF = false;
+        line += (column = 1);
+     }
+     else if (prevCharIsCR)
+     {
+        prevCharIsCR = false;
+        if (c == '\n')
+        {
+           prevCharIsLF = true;
+        }
+        else
+           line += (column = 1);
+     }
+
+     switch (c)
+     {
+        case '\r' :
+           prevCharIsCR = true;
+           break;
+        case '\n' :
+           prevCharIsLF = true;
+           break;
+        case '\t' :
+           column--;
+           column += (8 - (column & 07));
+           break;
+        default :
+           break;
+     }
+
+     bufline[bufpos] = line;
+     bufcolumn[bufpos] = column;
+  }
+
+  public char readChar() throws java.io.IOException
+  {
+     if (inBuf > 0)
+     {
+        --inBuf;
+
+        if (++bufpos == bufsize)
+           bufpos = 0;
+
+        return buffer[bufpos];
+     }
+
+     if (++bufpos >= maxNextCharInd)
+        FillBuff();
+
+     char c = buffer[bufpos];
+
+     UpdateLineColumn(c);
+     return (c);
+  }
+
+  /**
+   * @deprecated 
+   * @see #getEndColumn
+   */
+
+  public int getColumn() {
+     return bufcolumn[bufpos];
+  }
+
+  /**
+   * @deprecated 
+   * @see #getEndLine
+   */
+
+  public int getLine() {
+     return bufline[bufpos];
+  }
+
+  public int getEndColumn() {
+     return bufcolumn[bufpos];
+  }
+
+  public int getEndLine() {
+     return bufline[bufpos];
+  }
+
+  public int getBeginColumn() {
+     return bufcolumn[tokenBegin];
+  }
+
+  public int getBeginLine() {
+     return bufline[tokenBegin];
+  }
+
+  public void backup(int amount) {
+
+    inBuf += amount;
+    if ((bufpos -= amount) < 0)
+       bufpos += bufsize;
+  }
+
+  public SimpleCharStream(java.io.Reader dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    available = bufsize = buffersize;
+    buffer = new char[buffersize];
+    bufline = new int[buffersize];
+    bufcolumn = new int[buffersize];
+  }
+
+  public SimpleCharStream(java.io.Reader dstream, int startline,
+                                                           int startcolumn)
+  {
+     this(dstream, startline, startcolumn, 4096);
+  }
+
+  public SimpleCharStream(java.io.Reader dstream)
+  {
+     this(dstream, 1, 1, 4096);
+  }
+  public void ReInit(java.io.Reader dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    if (buffer == null || buffersize != buffer.length)
+    {
+      available = bufsize = buffersize;
+      buffer = new char[buffersize];
+      bufline = new int[buffersize];
+      bufcolumn = new int[buffersize];
+    }
+    prevCharIsLF = prevCharIsCR = false;
+    tokenBegin = inBuf = maxNextCharInd = 0;
+    bufpos = -1;
+  }
+
+  public void ReInit(java.io.Reader dstream, int startline,
+                                                           int startcolumn)
+  {
+     ReInit(dstream, startline, startcolumn, 4096);
+  }
+
+  public void ReInit(java.io.Reader dstream)
+  {
+     ReInit(dstream, 1, 1, 4096);
+  }
+  public SimpleCharStream(java.io.InputStream dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+     this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
+  }
+
+  public SimpleCharStream(java.io.InputStream dstream, int startline,
+                                                           int startcolumn)
+  {
+     this(dstream, startline, startcolumn, 4096);
+  }
+
+  public SimpleCharStream(java.io.InputStream dstream)
+  {
+     this(dstream, 1, 1, 4096);
+  }
+
+  public void ReInit(java.io.InputStream dstream, int startline,
+                          int startcolumn, int buffersize)
+  {
+     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
+  }
+
+  public void ReInit(java.io.InputStream dstream)
+  {
+     ReInit(dstream, 1, 1, 4096);
+  }
+  public void ReInit(java.io.InputStream dstream, int startline,
+                                                           int startcolumn)
+  {
+     ReInit(dstream, startline, startcolumn, 4096);
+  }
+  public String GetImage()
+  {
+     if (bufpos >= tokenBegin)
+        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
+     else
+        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
+                              new String(buffer, 0, bufpos + 1);
+  }
+
+  public char[] GetSuffix(int len)
+  {
+     char[] ret = new char[len];
+
+     if ((bufpos + 1) >= len)
+        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
+     else
+     {
+        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
+                                                          len - bufpos - 1);
+        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
+     }
+
+     return ret;
+  }
+
+  public void Done()
+  {
+     buffer = null;
+     bufline = null;
+     bufcolumn = null;
+  }
+
+  /**
+   * Method to adjust line and column numbers for the start of a token.<BR>
+   */
+  public void adjustBeginLineColumn(int newLine, int newCol)
+  {
+     int start = tokenBegin;
+     int len;
+
+     if (bufpos >= tokenBegin)
+     {
+        len = bufpos - tokenBegin + inBuf + 1;
+     }
+     else
+     {
+        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
+     }
+
+     int i = 0, j = 0, k = 0;
+     int nextColDiff = 0, columnDiff = 0;
+
+     while (i < len &&
+            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
+     {
+        bufline[j] = newLine;
+        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
+        bufcolumn[j] = newCol + columnDiff;
+        columnDiff = nextColDiff;
+        i++;
+     } 
+
+     if (i < len)
+     {
+        bufline[j] = newLine++;
+        bufcolumn[j] = newCol + columnDiff;
+
+        while (i++ < len)
+        {
+           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
+              bufline[j] = newLine++;
+           else
+              bufline[j] = newLine;
+        }
+     }
+
+     line = bufline[j];
+     column = bufcolumn[j];
+  }
+
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/Token.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/Token.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.parser;
+
+/**
+ * Describes the input token stream.
+ */
+
+public class Token {
+
+  /**
+   * An integer that describes the kind of this token.  This numbering
+   * system is determined by JavaCCParser, and a table of these numbers is
+   * stored in the file ...Constants.java.
+   */
+  public int kind;
+
+  /**
+   * beginLine and beginColumn describe the position of the first character
+   * of this token; endLine and endColumn describe the position of the
+   * last character of this token.
+   */
+  public int beginLine, beginColumn, endLine, endColumn;
+
+  /**
+   * The string image of the token.
+   */
+  public String image;
+
+  /**
+   * A reference to the next regular (non-special) token from the input
+   * stream.  If this is the last token from the input stream, or if the
+   * token manager has not read tokens beyond this one, this field is
+   * set to null.  This is true only if this token is also a regular
+   * token.  Otherwise, see below for a description of the contents of
+   * this field.
+   */
+  public Token next;
+
+  /**
+   * This field is used to access special tokens that occur prior to this
+   * token, but after the immediately preceding regular (non-special) token.
+   * If there are no such special tokens, this field is set to null.
+   * When there are more than one such special token, this field refers
+   * to the last of these special tokens, which in turn refers to the next
+   * previous special token through its specialToken field, and so on
+   * until the first special token (whose specialToken field is null).
+   * The next fields of special tokens refer to other special tokens that
+   * immediately follow it (without an intervening regular token).  If there
+   * is no such token, this field is null.
+   */
+  public Token specialToken;
+
+  /**
+   * Returns the image.
+   */
+  public String toString()
+  {
+     return image;
+  }
+
+  /**
+   * Returns a new Token object, by default. However, if you want, you
+   * can create and return subclass objects based on the value of ofKind.
+   * Simply add the cases to the switch for all those special cases.
+   * For example, if you have a subclass of Token called IDToken that
+   * you want to create if ofKind is ID, simlpy add something like :
+   *
+   *    case MyParserConstants.ID : return new IDToken();
+   *
+   * to the following switch statement. Then you can cast matchedToken
+   * variable to the appropriate type and use it in your lexical actions.
+   */
+  public static final Token newToken(int ofKind)
+  {
+     switch(ofKind)
+     {
+       default : return new Token();
+     }
+  }
+
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/TokenMgrError.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/parser/TokenMgrError.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,150 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.parser;
+
+public class TokenMgrError extends Error
+{
+   /*
+    * Ordinals for various reasons why an Error of this type can be thrown.
+    */
+
+   /**
+    * Lexical error occured.
+    */
+   static final int LEXICAL_ERROR = 0;
+
+   /**
+    * An attempt wass made to create a second instance of a static token manager.
+    */
+   static final int STATIC_LEXER_ERROR = 1;
+
+   /**
+    * Tried to change to an invalid lexical state.
+    */
+   static final int INVALID_LEXICAL_STATE = 2;
+
+   /**
+    * Detected (and bailed out of) an infinite loop in the token manager.
+    */
+   static final int LOOP_DETECTED = 3;
+
+   /**
+    * Indicates the reason why the exception is thrown. It will have
+    * one of the above 4 values.
+    */
+   int errorCode;
+
+   /**
+    * Replaces unprintable characters by their espaced (or unicode escaped)
+    * equivalents in the given string
+    */
+   protected static final String addEscapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+   /**
+    * Returns a detailed message for the Error when it is thrown by the
+    * token manager to indicate a lexical error.
+    * Parameters : 
+    *    EOFSeen     : indicates if EOF caused the lexicl error
+    *    curLexState : lexical state in which this error occured
+    *    errorLine   : line number when the error occured
+    *    errorColumn : column number when the error occured
+    *    errorAfter  : prefix that was seen before this error occured
+    *    curchar     : the offending character
+    * Note: You can customize the lexical error message by modifying this method.
+    */
+   protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
+      return("Lexical error at line " +
+           errorLine + ", column " +
+           errorColumn + ".  Encountered: " +
+           (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
+           "after : \"" + addEscapes(errorAfter) + "\"");
+   }
+
+   /**
+    * You can also modify the body of this method to customize your error messages.
+    * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
+    * of end-users concern, so you can return something like : 
+    *
+    *     "Internal Error : Please file a bug report .... "
+    *
+    * from this method for such cases in the release version of your parser.
+    */
+   public String getMessage() {
+      return super.getMessage();
+   }
+
+   /*
+    * Constructors of various flavors follow.
+    */
+
+   public TokenMgrError() {
+   }
+
+   public TokenMgrError(String message, int reason) {
+      super(message);
+      errorCode = reason;
+   }
+
+   public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
+      this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
+   }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ArrayIndexToken.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ArrayIndexToken.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,82 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.tokens;
+
+// java imports
+import java.util.List;
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class ArrayIndexToken
+    extends ExpressionToken
+{
+    private static final Logger _logger = Logger.getInstance(ArrayIndexToken.class);
+
+    private int index;
+    
+    public ArrayIndexToken(String identifier)
+    {
+        index = Integer.parseInt(identifier);
+    }
+
+    public void update(Object root, Object newValue)
+    {
+        if(root instanceof List)
+            listUpdate((List)root, index, newValue);
+        else if(root.getClass().isArray())
+            arrayUpdate(root, index, newValue);
+        else 
+        {
+            RuntimeException re = new RuntimeException("The index \"" + index + "\" can not be used to look-up the type of a property" + 
+                                                       " on an object that is not an array or list.");
+            _logger.error("", re);
+            throw re;
+        }
+    }
+
+    public Object evaluate(Object value)
+    {
+        if(value instanceof List)
+            return listLookup((List)value, index);
+        else if(value.getClass().isArray())
+            return arrayLookup(value, index);
+        else 
+        {
+            RuntimeException re = new RuntimeException("The index \"" + index + "\" can not be used to look-up a property on an object that is not an array or list.");
+            _logger.error("", re);
+            throw re;
+        }
+    }
+
+    public String getTokenString()
+    {
+        return "[" + index + "]";
+    }
+
+    public String toString()
+    {
+        return "" + index;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ContextToken.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ContextToken.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.tokens;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+public class ContextToken
+    extends ExpressionToken
+{
+    private String context = null;
+    
+    public ContextToken(String context)
+    {
+        this.context = context;
+    }
+
+    public void update(Object value, Object newValue)
+    {
+    }
+
+    public String getName()
+    {
+        return context;
+    }
+
+    public Object evaluate(Object value)
+    {
+        return null;
+    }
+
+    public String getTokenString()
+    {
+        return context;
+    }
+
+    public String toString()
+    {
+        return context;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,297 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.tokens;
+
+// java imports
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import java.util.List;
+import java.util.Map;
+
+// internal imports
+import org.apache.beehive.netui.util.cache.PropertyCache;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import org.apache.beehive.netui.script.el.util.ParseUtils;
+
+// external imports
+
+/**
+ *
+ */
+public abstract class ExpressionToken
+{
+    private static final Logger _logger = Logger.getInstance(ArrayIndexToken.class);
+
+    private static final PropertyCache cache = new PropertyCache();
+
+    public abstract Object evaluate(Object value);
+
+    public abstract void update(Object root, Object newValue);
+
+    public abstract String getTokenString();
+
+
+    /*
+     *
+     * Property Lookup
+     *
+     */
+
+    protected final Object mapLookup(Map map, Object identifier)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("mapLookup: " + identifier);
+        return map.get(identifier);
+    }
+
+    protected final Object beanLookup(Object bean, Object identifier)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("beanLookup: " + identifier);
+
+        return ParseUtils.getProperty(bean, identifier.toString(), cache);
+    }
+
+    protected final Object listLookup(List list, int index)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("listLookup: " + index);
+
+        return list.get(index);
+    }
+
+    protected final Object arrayLookup(Object array, int index)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("arrayLookup: " + index);
+
+        return Array.get(array, index);
+    }
+
+    protected final void mapUpdate(Map map, Object identifier, Object value)
+    {
+        Object converted = value;
+
+        Object o = map.get(identifier);
+        if(o != null)
+        {
+            Class type = o.getClass();
+            value = ParseUtils.convertType(value, type);
+        }
+
+        map.put(identifier, value);
+    }
+
+    protected final void arrayUpdate(Object array, int index, Object value)
+    {
+        Object converted = value;
+        
+        Class elementType = array.getClass().getComponentType();
+        if(!elementType.isAssignableFrom(value.getClass()))
+        {
+            converted = ParseUtils.convertType(value, elementType);
+        }
+        
+        try
+        {
+            Array.set(array, index, converted);
+        }
+        catch(Exception e)
+        {
+            String msg = "An error occurred setting a value at index \"" + index + "\" on an array with component types \"" + 
+                elementType + "\".  Cause: " + e.toString();
+            
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+            throw new RuntimeException(msg);
+        }
+    }
+
+    protected final void listUpdate(List list, int index, Object value)
+    {
+        Object converted = value;
+
+        if(list.size() > index)
+        {
+            Object o = list.get(index);
+            // can only convert types when there is an item in the currently requested place
+            if(o != null)
+            {
+                Class itemType = o.getClass();
+                converted = ParseUtils.convertType(value, itemType);
+            }
+            
+            list.set(index, value);
+        }
+        else
+        {
+            // @note: not sure that this is the right thing.  Question is whether or not to insert nulls here to fill list up to "index"
+            // @update: List doesn't guarantee that implementations will accept nulls.  So, we can't rely on that as a solution.
+            // @update: this is an unfortunate but necessary solution...unless the List has enough elements to 
+            // accomodate the new item at a particular index, this must be an error case.  The reasons are this:
+            // 1) can't fill the list with nulls, List implementations are allowed to disallow them
+            // 2) can't just do an "add" to the list -- in processing [0] and [1] on an empty list, [1] may get processed first. 
+            //    this will go into list slot [0].  then, [0] gets processed and simply overwrites the previous because it's 
+            //    already in the list
+            // 3) can't go to a mixed approach because there's no metadata about what has been done and no time to build
+            //    something that is apt to be complicated and exposed to the user
+            // so...
+            // the ultimate 8.1sp2 functionality is to simply disallow updating a value in a list that doesn't exist.  that 
+            // being said, it is still possible to simply add to the list.  if {actionForm.list[42]} inserts into the 42'nd 
+            // item, {actionForm.list} will just do an append on POST since there is no index specified.  this fix does 
+            // not break backwards compatability because it will work on full lists and is completely broken now on empty 
+            // lists, so changing this just gives a better exception message that "ArrayIndexOutOfBounds".  :)
+            // 
+            // September 2, 2003
+            // ekoneil@bea.com
+            // 
+            String msg = "An error occurred setting a value at index \"" + index + "\" because the list is " + 
+                (list != null ? (" of size " + list.size()) : "null") + ".  " + 
+                "Be sure to allocate enough items in the List to accomodate any updates which may occur against the list.";
+
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+
+            throw new RuntimeException(msg);
+        }
+    }
+
+    protected final void beanUpdate(Object bean, Object identifier, Object value)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("Update \"" + bean + "\" type field/property \"" + identifier + "\"");
+
+        String id = identifier.toString();
+        Class beanType = bean.getClass();
+        Field f = cache.getField(beanType, id);
+        if(f != null)
+        {
+            Class targetType = f.getType();
+            try
+            {
+                if(java.util.List.class.isAssignableFrom(targetType))
+                {
+                    List list = (List)f.get(bean);
+                    applyValuesToList(value, list);
+
+                    return;
+                }
+                else 
+                {
+                    if(_logger.isDebugEnabled()) _logger.debug("Apply value via field: " + f);
+
+                    Object converted = ParseUtils.convertType(value, targetType);
+                    f.set(bean, converted);
+
+                    return;
+                }
+            }
+            catch(Exception e)
+            {
+                String msg = "Could not update field named \"" + id + "\" on bean of type \"" + beanType + "\".  Cause: " + e;
+                if(_logger.isErrorEnabled()) _logger.error(msg, e);
+                throw new RuntimeException(msg, e);
+            }
+        }
+        
+        Class propType = cache.getPropertyType(beanType, id);
+        if(propType != null)
+        {
+            try
+            {
+                if(java.util.List.class.isAssignableFrom(propType))
+                {
+                    Method lm = cache.getPropertyGetter(beanType, id);
+                    if(lm != null)
+                    {
+                        List list = (List)lm.invoke(bean, (Object[])null);
+                        applyValuesToList(value, list);
+                        return;
+                    }
+                }
+                else
+                {
+                    Method m = cache.getPropertySetter(beanType, id);
+                    
+                    if(m != null)
+                    {
+                        if(_logger.isDebugEnabled()) _logger.debug("Apply value to property via method: " + m);
+
+                        Class targetType = m.getParameterTypes()[0];
+                        Object converted = ParseUtils.convertType(value, targetType);
+                        
+                        m.invoke(bean, new Object[] {converted});
+                        return;
+                    }
+                }
+            }
+            catch(Exception e)
+            {
+                String msg = "Could not update proprety named \"" + id + "\" on bean of type \"" + beanType + "\".  Cause: " + e;
+                if(_logger.isErrorEnabled()) _logger.error(msg, e);
+                throw new RuntimeException(msg, e);
+            }
+        }
+
+        String msg = "Could not update expression because a public field named \"" + id + "\" or setter for the property \"" + 
+            identifier + "\" could not be found.";
+
+        if(_logger.isErrorEnabled()) _logger.error(msg);
+
+        throw new RuntimeException(msg);
+    }
+
+    protected final int parseIndex(String identifier)
+    {
+        try
+        {
+            return Integer.parseInt(identifier);
+        }
+        catch(Exception e)
+        {
+            String msg = "Error performing an array look-up with the index \"" + identifier + "\". Cause: " + e;
+            
+            if(_logger.isDebugEnabled()) _logger.debug(msg, e);
+
+            throw new RuntimeException(msg, e);
+        }
+    }
+
+    private static final void applyValuesToList(Object value, List list)
+    {
+        if(list == null)
+        {
+            String msg = "Can not add a field onto a null java.util.List";
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+
+            throw new RuntimeException(msg);
+        }
+
+        if(value instanceof String[])
+        {
+            String[] ary = (String[])value;
+            for(int i = 0; i < ary.length; i++)
+            {
+                list.add(ary[i]);
+            }
+        }
+        else if(value instanceof String)
+        {
+            list.add(value);
+        }
+        // types that are not String[] or String are just set on the object
+        else list.add(value);
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/IdentifierToken.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/IdentifierToken.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,115 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.tokens;
+
+// java imports
+import java.util.List;
+import java.util.Map;
+
+// internal imports
+import org.apache.beehive.netui.script.el.util.ParseUtils;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+/**
+ *
+ */
+public class IdentifierToken
+    extends ExpressionToken
+{
+    private static final Logger _logger = Logger.getInstance(IdentifierToken.class);
+    private static final boolean debugEnabled = _logger.isDebugEnabled();
+
+    private String identifier = null;
+    
+    public IdentifierToken(String identifier)
+    {
+        this.identifier = identifier;
+    }
+
+    public Object evaluate(Object value)
+    {
+        // @TODO: error handling
+        if(value == null)
+        {
+            String msg = "Can not evaluate the identifier \"" + identifier + "\" on a null value object.";
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+            throw new RuntimeException(msg);
+        }
+
+        if(debugEnabled)
+        { 
+            _logger.debug("evaluate: " + identifier);
+            _logger.debug("value type: " + value.getClass().getName());
+        }
+
+        if(value instanceof Map)
+        {
+            return mapLookup((Map)value, identifier);
+        }
+        else if(value instanceof List)
+        {
+            int i = parseIndex(identifier);
+            return listLookup((List)value, i);
+        }
+        else if(value.getClass().isArray())
+        {
+            int i = parseIndex(identifier);
+            return arrayLookup(value, i);
+        }            
+        else return beanLookup(value, identifier);
+    }
+
+    public void update(Object root, Object newValue)
+    {
+        // @TODO: error handling
+        if(root == null)
+        {
+            String msg = "Can not update the identifier \"" + identifier + "\" on a null value object.";
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+            throw new RuntimeException(msg);
+        }
+
+        if(debugEnabled) _logger.debug("Update identifier \"" + identifier + "\" on object of type: \"" + root.getClass().getName() + "\"");
+
+        if(root instanceof Map)
+            mapUpdate((Map)root, identifier, newValue);
+        else if(root instanceof List)
+        {
+            int i = parseIndex(identifier);
+            listUpdate((List)root, i, newValue);
+        }
+        else if(root.getClass().isArray())
+        {
+            int i = parseIndex(identifier);
+            arrayUpdate(root, i, newValue);
+        }
+        else beanUpdate(root, identifier, newValue);
+    }
+
+    public String getTokenString()
+    {
+        return "." + identifier;
+    }
+
+    public String toString()
+    {
+        return identifier;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/MapKeyToken.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/MapKeyToken.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,118 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.tokens;
+
+// java imports
+import java.util.Map;
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class MapKeyToken
+    extends ExpressionToken
+{
+    private static final Logger _logger = Logger.getInstance(MapKeyToken.class);
+
+    private String identifier = null;
+    private boolean dblQuote = false;
+    
+    public MapKeyToken(String identifier)
+    {
+        this.identifier = identifier;
+
+        if(identifier.startsWith("\""))
+            dblQuote = true;
+
+        // convert the Java string to an EcmaScript string.  Strip the quotes that exist because they're
+        // always there for this token.
+        this.identifier = convertToEcmaScriptString(this.identifier.substring(1, identifier.length()-1));
+    }
+
+    /**
+     * Given a Java String, this value needs to be converted into a JavaScript compliant String.
+     * See JavaScript: The Definitive Guide for how to do this
+     */
+    private final String convertToEcmaScriptString(String string)
+    {
+        CharSequence cs = string;
+
+        int len = cs.length();
+        StringBuffer buf = new StringBuffer(len);
+        for(int i = 0; i < len; i++)
+        {
+            char c = cs.charAt(i);
+            // skip the \\ and consume the next character either appending it or turning it back into the single character
+            // that it should have been in the first place.
+            // 
+            // if slash and not at the last character...
+            if(c == '\\' && i+1 < len)
+            {
+                i++;
+
+                // skip the slash
+                c = cs.charAt(i);
+
+                if(c == 'b') c = '\b';
+                else if(c == 't') c = '\t';
+                else if(c == 'n') c = '\n';
+                //else if(c == 'v') c = '\v';
+                else if(c == 'f') c = '\f';
+                else if(c == 'r') c = '\r';
+                // @TODO: unicode escaping...
+            }
+            
+            buf.append(c);
+        }
+
+        if(_logger.isDebugEnabled()) _logger.debug("new identifier: " + buf.toString());
+        
+        return buf.toString();
+    }
+
+    public void update(Object root, Object newValue)
+    {
+        if(root instanceof Map)
+            mapUpdate((Map)root, identifier, newValue);
+        else beanUpdate(root, identifier, newValue);
+    }
+
+    public Object evaluate(Object value)
+    {
+        if(value instanceof Map)
+            return mapLookup((Map)value, identifier);
+        else return beanLookup(value, identifier);
+    }
+
+    public String getTokenString()
+    {
+        if(dblQuote)
+            return "[\"" + identifier + "\"]";
+        else return "['" + identifier + "']";
+    }
+
+    public String toString()
+    {
+        return identifier;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/AbstractAttributeMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/AbstractAttributeMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,133 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.util;
+
+// java imports
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public abstract class AbstractAttributeMap
+    implements Map
+{
+    private Map map = null;
+    
+    protected abstract Object getValue(Object key);
+
+    protected abstract Object putValue(Object key, Object value);
+
+    protected abstract Enumeration getKeysEnumeration();
+
+    public void clear() {}
+    
+    public boolean containsKey(Object key)
+    {
+        return (getValue(key) != null);
+    }
+
+    public boolean containsValue(Object key)
+    {
+        return getMap().containsValue(key);
+    }
+
+    public Set entrySet()
+    {
+        return getMap().entrySet();
+    }
+
+    public Object get(Object key)
+    {
+        return getValue(key);
+    }
+
+    public boolean isEmpty()
+    {
+        return getMap().isEmpty();
+    }
+
+    public Set keySet()
+    {
+        return getMap().keySet();
+    }
+
+    public Object put(Object key, Object value)
+    {
+        return putValue(key, value);
+    }
+
+    public void putAll(Map t)
+    {
+        getMap().putAll(t);
+    }
+
+    public Object remove(Object key)
+    {
+        return getMap().remove(key);
+    }
+
+    public int size()
+    {
+        return getMap().size();
+    }
+
+    public Collection values()
+    {
+        return getMap().values();
+    }
+
+    private Map getMap()
+    {
+        if(map == null)
+            map = convertToMap();
+
+        return map;
+    }
+
+    private Map convertToMap()
+    {
+        if(map == null)
+            map = new HashMap();
+
+        // why are we still stuck on enums?
+        Enumeration keys = getKeysEnumeration();
+        while(keys.hasMoreElements())
+        {
+            Object key = keys.nextElement();
+            map.put(key, getValue(key));
+        }
+
+//         Iterator keys = map.getKeys();
+//         while(keys.hasNext())
+//         {
+//             Object key = keys.next();
+//             map.put(key, getValue(key))
+//         }
+
+        return map;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ApplicationAttributeMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ApplicationAttributeMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.util;
+
+// java imports
+import java.util.Enumeration;
+import javax.servlet.ServletContext;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class ApplicationAttributeMap
+    extends AbstractAttributeMap
+    implements BindingContext
+{
+    private ServletContext sc = null;
+
+    public ApplicationAttributeMap(ServletContext sc)
+    {
+        this.sc = sc;
+    }
+
+    public Object unwrap()
+    {
+        return sc;
+    }
+
+    protected Object getValue(Object key)
+    {
+        return sc.getAttribute(key.toString());
+    }
+
+    protected Object putValue(Object key, Object value)
+    {
+        String strKey = key.toString();
+        Object prev = sc.getAttribute(strKey);
+
+        sc.setAttribute(strKey, value);
+
+        return prev;
+    }
+
+    protected Enumeration getKeysEnumeration()
+    {
+        return sc.getAttributeNames();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/BindingContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/BindingContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.util;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public interface BindingContext
+{
+    public Object unwrap();
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/PageContextAttributeMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/PageContextAttributeMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.util;
+
+// java imports
+import java.util.Enumeration;
+import javax.servlet.jsp.PageContext;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class PageContextAttributeMap
+    extends AbstractAttributeMap
+    implements BindingContext
+{
+    private PageContext pc = null;
+
+    public PageContextAttributeMap(PageContext pc)
+    {
+        this.pc = pc;
+    }
+
+    public Object unwrap()
+    {
+        return pc;
+    }
+
+    protected Object getValue(Object key)
+    {
+        return pc.getAttribute(key.toString());
+    }
+
+    protected Object putValue(Object key, Object value)
+    {
+        String strKey = key.toString();
+        Object prev = pc.getAttribute(strKey, PageContext.PAGE_SCOPE);
+
+        pc.setAttribute(strKey, value);
+
+        return prev;
+    }
+
+    protected Enumeration getKeysEnumeration()
+    {
+        return pc.getAttributeNamesInScope(PageContext.PAGE_SCOPE);
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,294 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.util;
+
+// java imports
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import java.util.HashMap;
+import java.util.Map;
+
+// internal imports
+import org.apache.beehive.netui.script.el.parser.NetUIELParser;
+import org.apache.beehive.netui.script.el.ExpressionTerm;
+import org.apache.beehive.netui.script.el.NetUIVariableResolver;
+import org.apache.beehive.netui.script.el.ParsedExpression;
+import org.apache.beehive.netui.script.el.ExpressionParseException;
+
+import org.apache.beehive.netui.script.el.parser.TokenMgrError;
+import org.apache.beehive.netui.script.el.parser.ParseException;
+
+import org.apache.beehive.netui.util.cache.PropertyCache;
+
+import org.apache.beehive.netui.util.type.TypeUtils;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class ParseUtils
+{
+    private static final Logger _logger = Logger.getInstance(ParseUtils.class);
+
+    private static final Map parsedCache = new HashMap();
+
+    private ParseUtils() {}
+
+    public static ParsedExpression parse(String exprStr)
+    {
+        Object obj = parsedCache.get(exprStr);
+
+        if(obj != null)
+            return (ParsedExpression)obj;
+
+        try
+        {
+            Reader reader = new StringReader(exprStr);
+            NetUIELParser learn = new NetUIELParser(reader);
+            
+            ParsedExpression expr = learn.parse();
+            expr.seal();
+
+            // infrequent
+            synchronized(parsedCache)
+            {
+                parsedCache.put(exprStr, expr);
+            }
+
+            return expr;
+        }
+        catch(ParseException e)
+        {
+            String msg = "Error occurred parsing expression \"" + exprStr + "\".";
+            if(_logger.isErrorEnabled()) _logger.error(msg, e);
+
+            throw new ExpressionParseException(msg, e);
+        }
+        catch(TokenMgrError tm)
+        {
+            String msg = "Error occurred parsing expression \"" + exprStr + "\".";
+            if(_logger.isErrorEnabled()) _logger.error(msg, tm);
+
+            throw new ExpressionParseException(msg, tm);
+        }
+    }
+
+    public static Object evaluate(String exprStr, NetUIVariableResolver vr)
+    {
+        ParsedExpression expr = parse(exprStr);
+
+        return expr.evaluate(vr);
+    }
+
+    public static void update(String exprStr, Object value, NetUIVariableResolver vr)
+    {
+        ParsedExpression expr = parse(exprStr);
+
+        expr.update(value, vr);
+    }
+
+    public static Class getPropertyType(Object value, String name, PropertyCache cache)
+    {
+        Class type = value.getClass();
+        Field f = cache.getField(type, name);
+        if(f != null)
+            return f.getType();
+
+        Method m = cache.getPropertySetter(type, name);
+        if(m == null)
+        {
+            String msg = "Can not find setter method for property \"" + name + "\" on object of type \"" + value.getClass() + "\".";
+            
+            if(_logger.isErrorEnabled()) _logger.error(msg);
+            throw new RuntimeException(msg);
+        }
+        // PropertyCache guarantees that props are found and match JavaBean naming rules
+        else return m.getParameterTypes()[0];
+    }
+
+    public static Object getProperty(Object value, String name, PropertyCache cache)
+    {
+        Class type = value.getClass();
+        
+        Field f = cache.getField(type, name);
+        if(f != null)
+        {
+            try
+            {
+                return f.get(value);
+            }
+            catch(Exception e)
+            {
+                String msg = "An error occurred evaluating the field \"" + name + "\" on an object of type \"" + type + "\".";
+                if(_logger.isDebugEnabled()) _logger.debug(msg, e);
+                throw new RuntimeException(msg, e);
+            }
+        }
+
+        Method m = cache.getPropertyGetter(type, name);
+        if(m != null)
+        {
+            try
+            {
+                return m.invoke(value, (Object[])null);
+            }
+            catch(Exception e)
+            {
+                String msg = "An error occurred invoking a getter for the property  \"" + name + "\" on an object of type \"" + type + "\".";
+                if(_logger.isDebugEnabled()) _logger.debug(msg, e);
+                throw new RuntimeException(msg, e);
+            }
+        }
+        
+        String msg = "Could not find property or field \"" + name + "\" on object of type \"" + type + "\"";
+        if(_logger.isDebugEnabled()) _logger.debug(msg);
+        throw new RuntimeException(msg);
+    }
+
+    public static Object convertType(Object value, Class toType)
+    {
+        try
+        {
+            boolean sourceIsArray = false;
+
+            // only convert String types; other Object types are already assumed to be in their target types.
+            if(value != null && !(value instanceof String || (sourceIsArray = (value instanceof String[])) ))
+                return value;
+
+            // for a String[], convert each item in the array into its target type and return the resulting array.
+            if(toType.isArray())
+            {
+                if(value == null)
+                    return null;
+                else
+                {
+                    Class compType = toType.getComponentType();
+                    
+                    String[] strs = null;
+                    if(value.getClass().isArray())
+                        strs = (String[])value;
+                    else strs = new String[] {(String)value};
+                    
+                    Object tgt = Array.newInstance(compType, strs.length);
+                    
+                    for(int i = 0; i < strs.length; i++)
+                    {
+                        Object o = null;
+                        try
+                        {
+                            o = TypeUtils.convertToObject(strs[i], compType);
+                        }
+                        catch(IllegalArgumentException e)
+                        {
+                            String msg = "Can not set Object types via expressions that are not supported by the set of registered type converters.  Cause: " + e;
+                            if(_logger.isErrorEnabled()) _logger.error(msg, e);
+                            throw new RuntimeException(msg, e);
+                        }
+
+                        Array.set(tgt, i, o);
+                    }
+                    
+                    return tgt;
+                }
+            }
+            // convert the String into its target type and return the result
+            else
+            {
+                if(_logger.isDebugEnabled()) _logger.debug("convert value \"" + value + "\" to type: " + toType);
+
+                // If the "value" is multi-valued (String[]), it needs to be converted into a single-valued object. 
+                // There is no policy defined for how we do this right now, so the first one will always win when 
+                // multiple expressions reference the same property.  When that property is a String type, the result
+                // is an HttpServletRequest that contains a String[], and here, we'll always the String[0].
+                if(sourceIsArray)
+                {
+                    assert value instanceof String[];
+                    assert Array.getLength(value) > 0 && Array.getLength(value)-1 >= 0;
+
+                    value = Array.get(value, Array.getLength(value)-1);
+                }
+                
+                try
+                {
+                    assert value == null || value instanceof String;
+
+                    return TypeUtils.convertToObject((String)value, toType);
+                }
+                catch(IllegalArgumentException e)
+                {
+                    String msg = "The type \"" + toType.getName() + "\" can not be set through XScript with the update value \"" + value + "\"";
+                    if(_logger.isErrorEnabled()) _logger.error(msg, e);
+                    throw new RuntimeException(msg, e);
+                }
+            }
+        }
+        catch(Exception e)
+        {
+            String msg = "Unable to convert a value of type \"" + value.getClass() + "\" to the array element type of \"" + toType + "\".  Cause: " + e;
+            if(_logger.isErrorEnabled()) _logger.error(msg, e);
+            throw new RuntimeException(msg, e);
+        }
+    }
+
+    public static void printStack(String message, Throwable t)
+    {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        t.printStackTrace(pw);
+        pw.flush();
+        pw.close();
+        if(_logger.isDebugEnabled()) _logger.debug(message, t);
+        else System.err.println(message + "Cause: " + sw.toString());
+    }
+
+    public static String getContextString(String[] contexts)
+    {
+        StringBuffer buf = new StringBuffer();
+        buf.append("[");
+        if(contexts != null)
+        {
+            for(int i = 0; i < contexts.length; i++)
+            {
+                if(i > 0) buf.append(", ");
+                buf.append(contexts[i]);
+            }
+        }
+        buf.append("]");
+        return buf.toString();
+    }
+
+    public static Throwable getRootCause(Throwable t)
+    {
+        Throwable root = t;
+        while(root.getCause() != null)
+            root = root.getCause();
+
+        return root;
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.util;
+
+// java imports
+import java.util.Enumeration;
+import javax.servlet.ServletRequest;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class RequestAttributeMap
+    extends AbstractAttributeMap
+    implements BindingContext
+{
+    private ServletRequest request = null;
+
+    public RequestAttributeMap(ServletRequest request)
+    {
+        this.request = request;
+    }
+
+    public Object unwrap()
+    {
+        return request;
+    }
+
+    protected Object getValue(Object key)
+    {
+        return request.getAttribute(key.toString());
+    }
+
+    protected Object putValue(Object key, Object value)
+    {
+        String strKey = key.toString();
+        Object prev = request.getAttribute(strKey);
+
+        request.setAttribute(strKey, value);
+
+        return prev;
+    }
+
+    protected Enumeration getKeysEnumeration()
+    {
+        return request.getAttributeNames();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestParameterMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestParameterMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.util;
+
+// java imports
+import java.util.Enumeration;
+import javax.servlet.ServletRequest;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class RequestParameterMap
+    extends AbstractAttributeMap
+    implements BindingContext
+{
+    private ServletRequest request = null;
+
+    public RequestParameterMap(ServletRequest request)
+    {
+        this.request = request;
+    }
+
+    public Object unwrap()
+    {
+        return request;
+    }
+
+    protected Object getValue(Object key)
+    {
+        return request.getParameter(key.toString());
+    }
+
+    protected Object putValue(Object key, Object value)
+    {
+        throw new RuntimeException("The Request's parameter map is not updatable");
+    }
+
+    protected Enumeration getKeysEnumeration()
+    {
+        return request.getParameterNames();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.script.el.util;
+
+// java imports
+import java.util.Enumeration;
+import javax.servlet.http.HttpSession;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class SessionAttributeMap
+    extends AbstractAttributeMap
+    implements BindingContext
+{
+    private HttpSession session = null;
+
+    public SessionAttributeMap(HttpSession session)
+    {
+        this.session = session;
+    }
+
+    public Object unwrap()
+    {
+        return session;
+    }
+
+    protected Object getValue(Object key)
+    {
+        return session.getAttribute(key.toString());
+    }
+
+    protected Object putValue(Object key, Object value)
+    {
+        String strKey = key.toString();
+        Object prev = session.getAttribute(strKey);
+
+        session.setAttribute(strKey, value);
+
+        return prev;
+    }
+
+    protected Enumeration getKeysEnumeration()
+    {
+        return session.getAttributeNames();
+    }
+}

Added: incubator/beehive/netui/src/pageflow/schema/Webapp23.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/schema/Webapp23.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com) by Kyle Marvin (BEA) -->
+<!--W3C Schema generated by XMLSPY v5 rel. 3 U (http://www.xmlspy.com)-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+           elementFormDefault="qualified">
+	<xs:element name="ejb-link" type="xs:string"/>
+	<xs:element name="ejb-ref-name" type="xs:string"/>
+	<xs:element name="ejb-ref-type" type="xs:string"/>
+	<xs:element name="filter-name" type="xs:string"/>
+	<xs:complexType name="iconType">
+		<xs:sequence>
+			<xs:element name="small-icon" type="xs:string" minOccurs="0"/>
+			<xs:element name="large-icon" type="xs:string" minOccurs="0"/>
+		</xs:sequence>
+	</xs:complexType>
+	<xs:complexType name="init-paramType">
+		<xs:sequence>
+			<xs:element name="param-name" type="xs:string"/>
+			<xs:element name="param-value" type="xs:string"/>
+			<xs:element name="description" type="xs:string" minOccurs="0"/>
+		</xs:sequence>
+	</xs:complexType>
+	<xs:element name="web-app">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="icon" type="iconType" minOccurs="0"/>
+				<xs:element name="display-name" type="xs:string" minOccurs="0"/>
+				<xs:element name="description" type="xs:string" minOccurs="0"/>
+				<xs:element name="distributable" minOccurs="0">
+					<xs:complexType/>
+				</xs:element>
+				<xs:element name="context-param" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="param-name" type="xs:string"/>
+							<xs:element name="param-value" type="xs:string"/>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="filter" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="icon" type="iconType" minOccurs="0"/>
+							<xs:element ref="filter-name"/>
+							<xs:element name="display-name" type="xs:string" minOccurs="0"/>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+							<xs:element name="filter-class" type="xs:string"/>
+							<xs:element name="init-param" type="init-paramType" minOccurs="0" maxOccurs="unbounded"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="filter-mapping" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element ref="filter-name"/>
+							<xs:choice>
+								<xs:element name="url-pattern" type="xs:string"/>
+								<xs:element name="servlet-name" type="xs:string"/>
+							</xs:choice>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="listener" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="listener-class" type="xs:string"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="servlet" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="icon" type="iconType" minOccurs="0"/>
+							<xs:element name="servlet-name" type="xs:string"/>
+							<xs:element name="display-name" type="xs:string" minOccurs="0"/>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+							<xs:choice>
+								<xs:element name="servlet-class" type="xs:string"/>
+								<xs:element name="jsp-file" type="xs:string"/>
+							</xs:choice>
+							<xs:element name="init-param" type="init-paramType" minOccurs="0" maxOccurs="unbounded"/>
+							<xs:element name="load-on-startup" type="xs:string" minOccurs="0"/>
+							<xs:element name="run-as" minOccurs="0">
+								<xs:complexType>
+									<xs:sequence>
+										<xs:element name="description" type="xs:string" minOccurs="0"/>
+										<xs:element name="role-name" type="xs:string"/>
+									</xs:sequence>
+								</xs:complexType>
+							</xs:element>
+							<xs:element name="security-role-ref" minOccurs="0" maxOccurs="unbounded">
+								<xs:complexType>
+									<xs:sequence>
+										<xs:element name="description" type="xs:string" minOccurs="0"/>
+										<xs:element name="role-name" type="xs:string"/>
+										<xs:element name="role-link" type="xs:string" minOccurs="0"/>
+									</xs:sequence>
+								</xs:complexType>
+							</xs:element>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="servlet-mapping" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="servlet-name" type="xs:string"/>
+							<xs:element name="url-pattern" type="xs:string"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="session-config" minOccurs="0">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="session-timeout" type="xs:string" minOccurs="0"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="mime-mapping" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="extension" type="xs:string"/>
+							<xs:element name="mime-type" type="xs:string"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="welcome-file-list" minOccurs="0">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="welcome-file" type="xs:string" maxOccurs="unbounded"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="error-page" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:choice>
+								<xs:element name="error-code" type="xs:string"/>
+								<xs:element name="exception-type" type="xs:string"/>
+							</xs:choice>
+							<xs:element name="location" type="xs:string"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="taglib" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="taglib-uri" type="xs:string"/>
+							<xs:element name="taglib-location" type="xs:string"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="resource-env-ref" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+							<xs:element name="resource-env-ref-name" type="xs:string"/>
+							<xs:element name="resource-env-ref-type" type="xs:string"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="resource-ref" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+							<xs:element name="res-ref-name" type="xs:string"/>
+							<xs:element name="res-type" type="xs:string"/>
+							<xs:element name="res-auth" type="xs:string"/>
+							<xs:element name="res-sharing-scope" type="xs:string" minOccurs="0"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="security-constraint" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="display-name" type="xs:string" minOccurs="0"/>
+							<xs:element name="web-resource-collection" maxOccurs="unbounded">
+								<xs:complexType>
+									<xs:sequence>
+										<xs:element name="web-resource-name" type="xs:string"/>
+										<xs:element name="description" type="xs:string" minOccurs="0"/>
+										<xs:element name="url-pattern" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+										<xs:element name="http-method" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+									</xs:sequence>
+								</xs:complexType>
+							</xs:element>
+							<xs:element name="auth-constraint" minOccurs="0">
+								<xs:complexType>
+									<xs:sequence>
+										<xs:element name="description" type="xs:string" minOccurs="0"/>
+										<xs:element name="role-name" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+									</xs:sequence>
+								</xs:complexType>
+							</xs:element>
+							<xs:element name="user-data-constraint" minOccurs="0">
+								<xs:complexType>
+									<xs:sequence>
+										<xs:element name="description" type="xs:string" minOccurs="0"/>
+										<xs:element name="transport-guarantee" type="xs:string"/>
+									</xs:sequence>
+								</xs:complexType>
+							</xs:element>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="login-config" minOccurs="0">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="auth-method" type="xs:string" minOccurs="0"/>
+							<xs:element name="realm-name" type="xs:string" minOccurs="0"/>
+							<xs:element name="form-login-config" minOccurs="0">
+								<xs:complexType>
+									<xs:sequence>
+										<xs:element name="form-login-page" type="xs:string"/>
+										<xs:element name="form-error-page" type="xs:string"/>
+									</xs:sequence>
+								</xs:complexType>
+							</xs:element>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="security-role" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+							<xs:element name="role-name" type="xs:string"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="env-entry" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+							<xs:element name="env-entry-name" type="xs:string"/>
+							<xs:element name="env-entry-value" type="xs:string" minOccurs="0"/>
+							<xs:element name="env-entry-type" type="xs:string"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="ejb-ref" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+							<xs:element ref="ejb-ref-name"/>
+							<xs:element ref="ejb-ref-type"/>
+							<xs:element name="home" type="xs:string"/>
+							<xs:element name="remote" type="xs:string"/>
+							<xs:element ref="ejb-link" minOccurs="0"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="ejb-local-ref" minOccurs="0" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="description" type="xs:string" minOccurs="0"/>
+							<xs:element ref="ejb-ref-name"/>
+							<xs:element ref="ejb-ref-type"/>
+							<xs:element name="local-home" type="xs:string"/>
+							<xs:element name="local" type="xs:string"/>
+							<xs:element ref="ejb-link" minOccurs="0"/>
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>

Added: incubator/beehive/netui/src/pageflow/schema/config.xsdconfig
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/pageflow/schema/config.xsdconfig	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,5 @@
+<xb:config xmlns:xb="http://www.bea.com/2002/09/xbean/config">
+  <xb:namespace>
+    <xb:package>org.apache.beehive.netui.pageflow.schema.webapp23</xb:package>
+  </xb:namespace>
+</xb:config>

Added: incubator/beehive/netui/src/scoping/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/Scoping" default="compile" basedir=".">
+
+    <property name="module.classpath" value="${struts.jar};${tomcat-servlet.4x.jar};${util.jar};${commons-beanutils.jar};${commons-logging.jar};${commons-collections.jar};${commons-digester.jar};${log4j.jar};${servlet24.jar}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+               source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+        </copy>
+
+
+        <jar jarfile="${build.lib.dir}/${scoping.jar.name}">
+            <fileset dir="${classes.dir}/${module.name}">
+              <include name="**/*.class"/>
+              <include name="**/*.properties"/>
+            </fileset>
+        </jar>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete dir="${build.lib.dir}/${scoping.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Scoping"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedRequest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedRequest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+
+/**
+ * A wrapper around HttpServletRequest, associated with a given scope-key.  All calls to setAttribute,
+ * getAttribute, removeAttribute, etc. are scoped to this object, while most other functionality
+ * delegates to the wrapped HttpServletRequest.
+ * Instances of this class also keep track of their own request-URIs, which are independent of the
+ * wrapped request-URIs.
+ */
+public interface ScopedRequest
+        extends HttpServletRequest
+{
+    public String AUTOSCOPE_PREFIX = "_autoscope_";
+    
+    
+    public void setRequestURI( String uri );
+
+    /**
+     * Adds a scope to "listen" to.  This scope will see all request parameters from a ScopedRequest
+     * of the given scope.
+     */ 
+    public void addListenScope( Object scopeKey );
+    
+    public void doForward();
+
+    public String getForwardedURI();
+
+    /**
+     * @deprecated Use {@link ScopedResponse#didRedirect} instead.
+     */ 
+    public boolean didRedirect();
+    
+    /**
+     * Stores the current map of request attributes in the Session.
+     */
+    public void persistAttributes();
+
+    /**
+     * Restores the map of request attributes from a map saved in the Session.
+     */
+    public void restoreAttributes();
+    
+    public HttpServletRequest getOuterRequest();
+    
+    public Object getScopeKey();
+    
+    public void renameScope( Object newScopeKey );
+    
+    /**
+     * Makes this request listen to specially-prefixed request parameters.
+     */ 
+    public void setActiveRequest();
+    
+    public String getScopedName( String baseName );
+
+    public void registerOuterAttribute( String attrName );
+
+    public String getLocalParameter( String attrName );
+    public String getListenScopeParameter( String attrName );
+    public boolean hasListenScopes();
+    
+    /**
+     * @exclude
+     */ 
+    public Map filterParameterMap( Map parameterMap );
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedResponse.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedResponse.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,112 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Cookie;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+
+
+/**
+ * A wrapper around HttpServletResponse, associated with a given scope-key.  Delegates to the wrapped
+ * response object for some functionality, but prevents output or error codes or forwards from actually
+ * happening.
+ */
+public interface ScopedResponse
+        extends HttpServletResponse
+{
+    /**
+     * Get a cookie that was added to the response.
+     */ 
+    public Cookie getCookie( String cookieName );
+    
+    /**
+     * Get all Cookies that were added to the response.
+     */ 
+    public Cookie[] getCookies();
+    
+    /**
+     * Get all headers.
+     *
+     * @return a Map of header-name (String) -> headers (List).
+     */
+    public Map getHeaders();
+    
+    /**
+     * Get all headers with the given name.
+     * 
+     * @return a List of headers (String, Integer, Date), or <code>null</code> if none are found.
+     */ 
+    public List getHeaders( String name );
+    
+    /**
+     * Get the first header with the given name.
+     * @return an Object (String, Integer, Date) that is the first header with the given name,
+     *         or <code>null</code> if none is found.
+     */ 
+    public Object getFirstHeader( String name );
+    
+    public HttpServletResponse getOuterResponse();
+    
+    /**
+     * Tell whether the response is in error.
+     * 
+     * @return <code>true</code> if {@link #sendError(int,String)} or {@link #sendError(int)} was called.
+     */ 
+    public boolean isError();
+
+    /**
+     * Get the status code on the response.
+     * 
+     * @return the status code, set by {@link #setStatus(int)}, {@link #sendError(int,String)}, or
+     *         {@link #sendError(int)}; -1 if no status was set explicitly.
+     */ 
+    public int getStatusCode();
+
+    /**
+     * Get the status message on the response.
+     * 
+     * @return the status code, set by {@link #sendError(int,String)}, or <code>null</code> if none was set.
+     */ 
+    public String getStatusMessage();
+    
+    /**
+     * Tell whether a browser redirect was sent.
+     * 
+     * @return <code>true</code> if {@link #sendRedirect} was called.
+     */ 
+    public boolean didRedirect();
+    
+    /**
+     * Get the redirect URI.
+     * 
+     * @return the URI passed to {@link #sendRedirect}, or <code>null</code> if there was no redirect.
+     */ 
+    public String getRedirectURI();
+    
+    /**
+     * Actually send the redirect that was suggested by {@link #sendRedirect}.
+     * 
+     * @throws IllegalStateException if {@link #sendRedirect} was not called.
+     * @throws IOException if {@link HttpServletResponse#sendRedirect} causes an IOException.
+     */ 
+    public void applyRedirect() throws IOException;
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedServletUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedServletUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,426 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping;
+
+import org.apache.beehive.netui.pageflow.scoping.internal.ScopedRequestImpl;
+import org.apache.beehive.netui.pageflow.scoping.internal.ScopedResponseImpl;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestWrapper;
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletResponseWrapper;
+
+import org.apache.log4j.Logger;
+
+import java.net.URLDecoder;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.io.UnsupportedEncodingException;
+
+
+/**
+ * Utilities for creating scoped wrapper versions of HttpRequest, HttpResponse, ServletContext.  These
+ * wrappers are the basis for a scoped servlet environment, which can be used to scope the Struts
+ * framework.
+ */
+public class ScopedServletUtils
+{
+    public static final String SCOPE_ID_PARAM = "jpfScopeID";
+    
+    private static final String OVERRIDE_REQUEST_ATTR = ScopedServletUtils.class.getName() + "_overrideRequest";
+    private static final String OVERRIDE_RESPONSE_ATTR = ScopedServletUtils.class.getName() + "_overrideResponse";
+    private static final String ORIGINAL_URI_ATTR = ScopedServletUtils.class.getName() + "_originalURI";
+    private static final String DECODED_URI_ATTR = ScopedServletUtils.class.getName() + "_decodedURI";
+    
+    private static final Logger logger = Logger.getLogger( ScopedServletUtils.class );
+    
+    
+    /**
+     * Get the cached wrapper servlet request.  If none exists, creates one and caches it.
+     *
+     * @param realRequest the "real" (outer) HttpServletRequest, which will be wrapped.
+     * @param overrideURI the request-URI for the wrapped object.  This is a <i>webapp-relative</i> URI,
+     *                    i.e., it does not include the context path.
+     * @param servletContext the current ServletContext.
+     * @return the cached (or newly-created) ScopedRequest.
+     */
+    public static ScopedRequest getScopedRequest( HttpServletRequest realRequest,
+                                                  String overrideURI,
+                                                  ServletContext servletContext,
+                                                  Object scopeKey )
+    {
+        assert ! ( realRequest instanceof ScopedRequest );
+        
+        String requestAttr = getScopedName( OVERRIDE_REQUEST_ATTR, scopeKey );
+        ScopedRequest scopedRequest = ( ScopedRequest ) realRequest.getAttribute( requestAttr );
+        
+        //
+        // If it doesn't exist, create it and cache it.
+        //
+        if ( scopedRequest == null )
+        {
+            //
+            // The override URI must start with a slash -- it's webapp-relative.
+            //
+            if ( overrideURI != null && ! overrideURI.startsWith( "/" ) )
+            {
+                overrideURI = "/" + overrideURI;
+            }
+            
+            scopedRequest = new ScopedRequestImpl( realRequest, overrideURI, scopeKey, servletContext );
+            realRequest.setAttribute( requestAttr, scopedRequest );            
+        }
+        
+        return scopedRequest;
+    }
+
+    /**
+     * Get the cached wrapper servlet response.  If none exists, creates one and caches it.
+     *
+     * @param realResponse the "real" (outer) ServletResponse, which will be wrapped.
+     * @param scopedRequest the ScopedRequest returned from {@link #getScopedRequest}.
+     * @return the cached (or newly-created) ScopedResponse.
+     */
+    public static ScopedResponse getScopedResponse( HttpServletResponse realResponse,
+                                                    ScopedRequest scopedRequest )
+    {
+        assert ! ( realResponse instanceof ScopedResponse );
+        
+        String responseAttr = getScopedName( OVERRIDE_RESPONSE_ATTR,
+                                                                      scopedRequest.getScopeKey() );
+        HttpServletRequest outerRequest = scopedRequest.getOuterRequest();
+        ScopedResponse scopedResponse = ( ScopedResponse ) outerRequest.getAttribute( responseAttr );
+        
+        //
+        // If it doesn't exist, create it and cache it.
+        //
+        if ( scopedResponse == null )
+        {
+            scopedResponse = new ScopedResponseImpl( realResponse );
+            outerRequest.setAttribute( responseAttr, scopedResponse );
+        }
+        
+        return scopedResponse;
+    }
+
+    /**
+     * Find all scoped objects ({@link ScopedRequest}, {@link ScopedResponse})
+     * which have a certain scope-key, replaces this scope-key with the new one, and re-caches the objects
+     * the new scope-key.
+     * @param oldScopeKey
+     * @param newScopeKey
+     * @param request the real (outer) request, where the scoped objects are cached.
+     */ 
+    public static void renameScope( Object oldScopeKey, Object newScopeKey, HttpServletRequest request )
+    {
+        assert ! ( request instanceof ScopedRequest );
+        
+        String requestAttr = getScopedName( OVERRIDE_REQUEST_ATTR, oldScopeKey );
+        String responseAttr = getScopedName( OVERRIDE_RESPONSE_ATTR, oldScopeKey );
+        ScopedRequest scopedRequest = ( ScopedRequest ) request.getAttribute( requestAttr );
+        ScopedResponse scopedResponse = ( ScopedResponse ) request.getAttribute( responseAttr );
+        
+        if ( scopedRequest != null )
+        {
+            scopedRequest.renameScope( newScopeKey );
+            request.removeAttribute( requestAttr );
+            requestAttr = getScopedName( OVERRIDE_REQUEST_ATTR, newScopeKey );
+            request.setAttribute( requestAttr, scopedRequest );
+        }
+        else
+        {
+            ScopedRequestImpl.renameSessionScope( oldScopeKey, newScopeKey, request );
+        }
+
+        if ( scopedResponse != null )
+        {
+            request.removeAttribute( responseAttr );
+            responseAttr = getScopedName( OVERRIDE_RESPONSE_ATTR, newScopeKey );
+            request.setAttribute( responseAttr, scopedResponse );
+        }
+    }    
+    
+    /**
+     * Get a scoped version of a given name.
+     * 
+     * @param baseName the name to be scoped.
+     * @param scopeKey the context key for scoping the name.
+     * @return a scoped version of the given name.
+     */ 
+    public static String getScopedName( String baseName, Object scopeKey )
+    {
+        return scopeKey + baseName;
+    }    
+    
+    /**
+     * Tell whether this is a scoped request.
+     * 
+     * @param request the ServletRequest to test.
+     * @return <code>true</code> if the given ServletRequest is a ScopedRequest.
+     */ 
+    /*
+    public static boolean isScoped( ServletRequest request )
+    {
+ 
+    }
+    */
+        
+    /**
+     * Get the outer (unwrapped) request.
+     * 
+     * @param request the request to unwrap.
+     * @return the outer request, if the given request is a ScopedRequest (or wraps a ScopedRequest);
+     *         otherwise, the given request itself.
+     */ 
+    public static HttpServletRequest getOuterRequest( HttpServletRequest request )
+    {
+        ScopedRequest scopedRequest = unwrapRequest( request );
+        return ( scopedRequest != null ? scopedRequest.getOuterRequest() : request );
+    }
+    
+    /**
+     * Unwraps the contained ScopedRequest from the given ServletRequest, which may be a
+     * ServletRequestWrapper.
+     * 
+     * @param request the ScopedRequest, or a wrapper (ServletRequestWrapper) around it.
+     * @return the unwrapped ScopedRequest.
+     * 
+     * @exclude
+     */ 
+    public static ScopedRequest unwrapRequest( ServletRequest request )
+    {
+        while ( request instanceof ServletRequestWrapper )
+        {
+            if ( request instanceof ScopedRequest )
+            {
+                return ( ScopedRequest ) request;
+            }
+            else
+            {
+                request = ( ( ServletRequestWrapper ) request ).getRequest();
+            }
+        }
+        
+        return null;
+    }  
+    
+    /**
+     * Unwraps the contained ScopedResponseImpl from the given ServletResponse, which may be a
+     * ServletResponseWrapper.
+     * 
+     * @param response the ScopedResponse, or a wrapper (ServletResponseWrapper) around it.
+     * @return the unwrapped ScopedResponseImpl.
+     * 
+     * @exclude
+     */ 
+    public static ScopedResponse unwrapResponse( ServletResponse response )
+    {
+        while ( response instanceof ServletResponseWrapper )
+         {
+             if ( response instanceof ScopedResponse )
+             {
+                 return ( ScopedResponse ) response;
+             }
+             else
+             {
+                 response = ( ( ServletResponseWrapper ) response ).getResponse();
+             }
+         }
+        
+         return null;
+     }
+    
+    /**
+     * If the request is a ScopedRequest, this returns an attribute name scoped to
+     * that request's scope-ID; otherwise, it returns the given attribute name.
+     * 
+     * @exclude
+     */ 
+    public static String getScopedSessionAttrName( String attrName, HttpServletRequest request )
+    {
+        String requestScopeParam = request.getParameter( SCOPE_ID_PARAM );
+        
+        if ( requestScopeParam != null )
+        {
+            return getScopedName( attrName, requestScopeParam );
+        }
+        
+        ScopedRequest scopedRequest = unwrapRequest( request );
+        return ( scopedRequest != null ? scopedRequest.getScopedName( attrName ) : attrName );
+    }
+    
+    /**
+     * If the request is a ScopedRequest, this returns an attribute whose name is scoped to
+     * that request's scope-ID; otherwise, it is a straight passthrough to
+     * {@link javax.servlet.http.HttpSession#getAttribute}.
+     * 
+     * @exclude
+     */ 
+    public static Object getScopedSessionAttr( String attrName, HttpServletRequest request )
+    {
+        HttpSession session = request.getSession( false );
+        
+        if ( session != null )
+        {
+            return session.getAttribute( getScopedSessionAttrName( attrName, request ) );
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    /**
+     * If the request is a ScopedRequest, this sets an attribute whose name is scoped to
+     * that request's scope-ID; otherwise, it is a straight passthrough to
+     * {@link javax.servlet.http.HttpSession#setAttribute}.
+     * 
+     * @exclude
+     */ 
+    public static void setScopedSessionAttr( String attrName, Object val, HttpServletRequest request )
+    {
+        request.getSession().setAttribute( getScopedSessionAttrName( attrName, request ), val );
+    }
+
+    /**
+     * If the request is a ScopedRequest, this removes an attribute whose name is scoped to
+     * that request's scope-ID; otherwise, it is a straight passthrough to
+     * {@link javax.servlet.http.HttpSession#removeAttribute}.
+     * 
+     * @exclude
+     */ 
+    public static void removeScopedSessionAttr( String attrName, HttpServletRequest request )
+    {
+        HttpSession session = request.getSession( false );
+        
+        if ( session != null )
+        {
+            session.removeAttribute( getScopedSessionAttrName( attrName, request ) );
+        }
+    }
+    
+    /**
+     * Get the request URI, relative to the webapp root.
+     *
+     * @param request the current HttpServletRequest.
+     */
+    public static final String getRelativeURI( HttpServletRequest request )
+    {
+        return getRelativeURI( request, decodeURI( request ) );
+    }
+
+    /**
+     * Get a URI relative to the webapp root.
+     *
+     * @param request the current HttpServletRequest.
+     * @param uri the URI which should be made relative.
+     */
+    public static final String getRelativeURI( HttpServletRequest request, String uri )
+    {
+        String contextPath = request.getContextPath();
+
+        String requestUrl = uri;
+        int overlap = requestUrl.indexOf( contextPath );
+
+        if ( overlap != -1 )
+        {
+            return requestUrl.substring( overlap + contextPath.length() );
+        }
+        else
+        {
+            return requestUrl;
+        }
+    }
+
+    /**
+     * Resolve "." and ".." in a URI.
+     * @exclude
+     */ 
+    public static String normalizeURI( String uri )
+    {
+        //
+        // If it's a relative URI, normalize it.  Note that we don't want to create a URI
+        // (very expensive) unless we think we'll need to.  "./" catches "../" and "./".
+        //
+        if ( uri.indexOf( "./" ) != -1 )
+        {
+            try
+            {
+                uri = new URI( uri ).normalize().toString();
+            }
+            catch ( URISyntaxException e )
+            {
+                logger.error( "Could not parse relative URI " + uri );
+            }
+        }
+        
+        return uri;
+    }
+    
+    
+    /**
+     * @exclude
+     */ 
+    public static String decodeURI( HttpServletRequest request )
+    {
+        //
+        // First see if we've cached it.  But make sure it hasn't changed (e.g. on a forwarded request).
+        //
+        String requestURI = request.getRequestURI();
+        String originalURI = ( String ) request.getAttribute( ORIGINAL_URI_ATTR );
+        String decodedURI;
+        
+        if ( originalURI != null && originalURI.equals( requestURI ) )
+        {
+            decodedURI = ( String ) request.getAttribute( DECODED_URI_ATTR );
+            
+            if ( decodedURI != null )
+            {
+                return decodedURI;
+            }
+        }
+        
+        
+        String encoding = request.getCharacterEncoding();
+
+        try
+        {            
+            if ( encoding == null )
+            {
+                encoding = "utf-8"; // @TODO is this a safe assumption?
+            }
+            
+            decodedURI = URLDecoder.decode( requestURI, encoding );
+        }
+        catch ( UnsupportedEncodingException e )
+        {
+            logger.error( "unsupported encoding " + encoding + " in request " + requestURI, e );
+            decodedURI = request.getRequestURI();
+        }
+        
+        decodedURI = normalizeURI( decodedURI );
+        request.setAttribute( ORIGINAL_URI_ATTR, requestURI );
+        request.setAttribute( DECODED_URI_ATTR, decodedURI );
+        return decodedURI;
+    }
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/AttributeContainer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/AttributeContainer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping.internal;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.Priority;
+
+import java.util.HashMap;
+import java.util.Enumeration;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Iterator;
+import java.io.Serializable;
+
+
+public class AttributeContainer
+{
+    private static final Logger logger = Logger.getLogger( AttributeContainer.class );
+    
+    private Map _attrs;
+
+    public Object getAttribute( String attrName )
+    {
+        return ( _attrs != null ? _attrs.get( attrName ) : null );
+    }
+
+    public void setAttribute( String attrName, Object o )
+    {
+        if ( _attrs == null )
+        {
+            _attrs = new HashMap();
+        }
+
+        _attrs.put( attrName, o );
+    }
+
+    public Enumeration getAttributeNames()
+    {
+        if ( _attrs == null )
+        {
+            _attrs = new HashMap();
+        }
+
+        return Collections.enumeration( _attrs.keySet() );
+    }
+
+    public String[] getAttributeNamesArray()
+    {
+        if ( _attrs == null )
+        {
+            return new String[0];
+        }
+
+        return ( String[] ) _attrs.keySet().toArray( new String[0] );
+    }
+
+    public void removeAttribute( String attrName )
+    {
+        if ( _attrs != null )
+        {
+            _attrs.remove( attrName );
+        }
+    }
+
+    public void removeAllAttributes()
+    {
+        _attrs = null;
+    }
+
+    protected final Map getSerializableAttrs()
+    {
+        Map ret = new HashMap();
+
+        for ( Iterator i = _attrs.entrySet().iterator(); i.hasNext(); )
+        {
+            Map.Entry entry = ( Map.Entry ) i.next();
+
+            if ( entry.getValue() instanceof Serializable )
+            {
+                ret.put( entry.getKey(), entry.getValue() );
+            }
+            else
+            {
+                if ( logger.isEnabledFor( Priority.WARN ) )
+                {
+                    logger.warn( "Dropping non-serializable request attribute " + entry.getKey()
+                                  + " (" + entry.getValue() + ")." );
+                }
+            }
+        }
+
+        return ret;
+    }
+    
+    protected final Map getAttrMap()
+    {
+        return _attrs;
+    }
+
+    protected final void setAttrMap( Map attrs )
+    {
+        _attrs = attrs;
+    }
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ParseUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ParseUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,380 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping.internal;
+
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.io.UnsupportedEncodingException;
+
+
+class ParseUtils
+{
+    //-------------------------------------------------------------------------------------------------
+    // helpers to parse the query string.  
+    // Since we can't access weblogic libraries from the scoping jar, we'll rip off their utility classes and clone them here.
+    
+    /**
+     * ripped off from weblogic.utils.http.HttpParsing
+     * Parses an RFC1630 query string into an existing Map.
+     *
+     * @param str              Query string
+     * @param res              Map into which insert the values.
+     * @param encoding         Encoding to be used for stored Strings
+     */
+    public static void parseQueryString(String str, Map res, String encoding) {
+        
+        // "Within the query string, the plus sign is reserved as
+        // shorthand notation for a space. Therefore, real plus signs must
+        // be encoded. This method was used to make query URIs easier to
+        // pass in systems which did not allow spaces." -- RFC 1630
+        //CR086518: IE doesn't trim off anchor in sendRedirected URL.
+        int i = str.indexOf('#');
+        if (i > 0) str = str.substring(0, i);
+        StringTokenizer st = new StringTokenizer(str.replace('+', ' '), "&");
+        
+        while (st.hasMoreTokens()){
+            String qp = st.nextToken();
+            String[] pair = qp.split("=");  // was String[] pair = StringUtils.split(qp, '=');
+            //String s = unescape(pair[1], encoding);
+            res.put(unescape(pair[0], encoding), unescape(pair[1], encoding));
+        }
+    }
+    
+    /**
+     * ripped off from weblogic.utils.http.HttpParsing
+     * URI-unescapes the specified string, except for +/<space>
+     * encoding.
+     *
+     * @param str              String to be unescaped
+     * @param encoding         The name of a character encoding
+     * @return                 Unescaped string
+     */
+    private static String unescape(String str, String encoding)  {
+        //CR073203: We cannot unescape '+' to space because '+' is allowed in the file name
+        //str = str.replace('+', ' ');
+        
+        //if the str does not contain "%", we don't need to do anything
+        if (str.indexOf('%') < 0) return str;
+        
+        if (encoding == null || encoding.length() == 0) encoding = WLS_DEFAULT_ENCODING;
+        
+        //CR075419, this is a public function. Do not assume String only contains ascii.
+        //          str.lenght() <= str.getBytes().length
+        int out = 0;
+        
+        byte[] strbytes = str.getBytes();
+        int len = strbytes.length;
+        
+        boolean foundNonAscii = false;
+        for (int in = 0; in < len; in++, out++) {
+            if (strbytes[in] == '%' && (in + 2 < len)) {
+                if (Hex.isHexChar(strbytes[in + 1]) &&
+                    Hex.isHexChar(strbytes[in + 2])) {
+                        strbytes[out] =
+                        (byte)((Hex.hexValueOf(strbytes[in + 1]) << 4) +
+                               (Hex.hexValueOf(strbytes[in + 2]) << 0));
+                        in += 2;
+                        continue;
+                    }
+            }
+            // CR109216: IE takes non-ASCII URLs. We use the default encoding
+            // if non-ASCII characters are contained in URLs.
+            if (!foundNonAscii &&
+                (strbytes[in] <= 0x1f || strbytes[in] == 0x7f)) {
+                    encoding = System.getProperty("file.encoding");
+                    foundNonAscii = true;
+                }
+            strbytes[out] = strbytes[in];
+        }
+        
+        return newString(strbytes, 0, out, encoding);  // was:  BytesToString.newString(...)
+    }
+    
+    // ripped off from weblogic.utils.http.BytesToString
+    private static String newString(byte b[], int offset, int length, String enc) {
+        if (is8BitUnicodeSubset(enc)) return getString(b, offset, length);
+        try {
+            return new String(b, offset, length, enc);
+        } catch (UnsupportedEncodingException uee) {
+            return getString(b, offset, length);
+        }
+    }
+    
+    // ripped off from weblogic.utils.http.BytesToString
+    private static boolean is8BitUnicodeSubset(String enc) {
+        return enc == null || "ISO-8859-1".equalsIgnoreCase(enc) ||
+               "ISO8859_1".equalsIgnoreCase(enc) || "ASCII".equalsIgnoreCase(enc);
+    }
+    
+    private static final String WLS_DEFAULT_ENCODING = "ISO-8859-1";
+    
+    // ripped off from weblogic.utils.StringUtils
+    private static String getString(byte b[], int offset, int length) {
+        try {
+            return new String(b, offset, length, WLS_DEFAULT_ENCODING);
+        } catch (UnsupportedEncodingException uee) {
+            // every JVM is supposed to support ISO-8859-1
+            throw new AssertionError(uee);
+        }
+    }
+    
+    // ripped off from weblogic.utils.Hex.  The class is provided in its entirety to make maintenance easier.
+    static class Hex {
+        
+        private static final char[] HEX_CHARS = 
+                {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
+        
+        // this class exists only for its static methods
+        private Hex() {}
+        
+        /**
+         * Turns array of bytes into string, representing each byte as
+         * unsigned hex number.
+         * 
+         * @param barray	Array of bytes to convert to hex-string
+         * @param len	        length to convert
+         * @return	        Generated hex string
+         */
+        public static String asHex(byte barray[], int len) {
+            return asHex(barray, len, true);
+        }
+        
+        public static String asUnicode(String s) {
+            String unicode = "";
+            for (int i=0; i<s.length(); i++) {
+                unicode += "\\u" + asHex(s.charAt(i)>>8) + asHex(s.charAt(i));
+            }
+            return unicode;
+        }
+        
+        public static String asUnicode(char c) {
+            StringBuffer sb = new StringBuffer();
+            sb.append("\\u");
+            sb.append(asHex(c>>8) + asHex(c));
+            return sb.toString();
+        }
+        
+        public static String asHex(String s, String encoding) 
+                throws UnsupportedEncodingException
+        {
+            byte[] b = s.getBytes(encoding);
+            return asHex(b);
+        }
+        
+        /** Turns an array of arbitrary bytes into an array of bytes. */
+        public static byte[] asHexBytes(byte[] barray, int len, boolean prefix) {
+            int loopLen = Math.min(len,barray.length);
+            byte[] buf;
+            int j = 0;
+            
+            if (prefix) {
+                buf = new byte[loopLen * 2 + 2];
+                buf[0] = (byte)'0';
+                buf[1] = (byte)'x';
+                j += 2;
+            } else {
+                buf = new byte[loopLen * 2];
+            }
+            
+            for (int i = 0; i < loopLen; i++) {
+                buf[j++] = (byte) HEX_CHARS[(barray[i] & 0xf0) >> 4];
+                buf[j++] = (byte) HEX_CHARS[(barray[i] & 0x0f) >> 0];
+            }
+            return buf;
+        }
+        
+        /**
+         * Turns array of bytes into string, representing each byte as
+         * unsigned hex number.
+         * 
+         * @param barray	Array of bytes to convert to hex-string
+         * @param len	        length to convert
+         * @param prefix      whether to add '0x' prefix
+         * @return	        Generated hex string
+         */
+        public static String asHex(byte barray[], int len, boolean prefix) {
+            return new String(asHexBytes(barray, len, prefix), 0);
+        }
+        
+        /**
+         * Create array of bytes from ascii array of bytes, where each byte was an
+         * unsigned hex number.
+         * 
+         * @param barray	Array of bytes to convert from hex-string
+         * @param len	        length to convert
+         * @return	        Generated ascii hex byte array
+         */
+        public static byte[] fromHexString(byte barray[], int len) {
+            
+            int i = 0;
+            // skip "0x" or "0X" prefix, if any
+            if (barray[0] == 0x30 &&  (barray[1] == 0x78 || barray[1] == 0x58)) {
+                i += 2;
+                len -= 2;
+            }
+            
+            int outlen = len / 2;
+            byte out[] = new byte[outlen];
+            
+            int j = 0;
+            while (j < outlen) {
+                out[j] = (byte) (((hexValueOf(barray[i]) << 4) | (hexValueOf(barray[i + 1])) ) & 0xff); 
+                j++;
+                i += 2;
+            }
+            return out;
+        }
+        
+        /**
+         * Represents a single character (an int) as an unsigned hex number
+         * in string format.
+         *
+         * @param b                int to convert to a hex-string
+         * @return                 Generated hex string
+         */
+        public static String asHex(int b) {
+            char[] buf = new char[2];
+            buf[0] = HEX_CHARS[(b & 0xf0) >> 4];
+            buf[1] = HEX_CHARS[(b & 0x0f) >> 0];
+            return new String(buf);
+        }
+        
+        /**
+         * Represents an array of bytes as an unsigned hex number
+         * in string format.
+         *
+         * @param barray         Byte array
+         * @return               String representation
+         */
+        public static String asHex(byte barray[]) {
+            return asHex(barray, barray.length);
+        }
+        
+        public static int hexValueOf( int c ) {
+            if ( c >= '0' && c <= '9' ) return c - '0';
+            if ( c >= 'a' && c <= 'f' ) return c - 'a' + 10;
+            if ( c >= 'A' && c <= 'F' ) return c - 'A' + 10;
+            return 0;
+        }
+        
+        
+        /**
+         * Display an array of bytes in 'hex dump' format.
+         *
+         * @param bytes        Byte array
+         * @return              String representation
+         */
+        public static String dump(byte bytes[]) {
+            if (bytes == null) return "" + bytes;
+            return dump(bytes, 0, bytes.length);
+        }
+        
+        private static final int COLS_PER_ROW = 8;
+        private static final int BYTES_PER_ROW = COLS_PER_ROW * 2;
+        
+        /**
+         * Display an array of bytes in 'hex dump' format.
+         *
+         * @param bytes           Byte array
+         * @param offset          offset into array to display
+         * @param len             length to display
+         * @return                String representation
+         */
+        
+        public static String dump(byte bytes[], int offset, int len) {
+            if (offset < 0) offset = 0;
+            
+            int end = Math.min(bytes.length, offset + len);
+            
+            // round starting point down to BYTES_PER_ROW boundary
+            int displayStart = offset & ~(BYTES_PER_ROW - 1);
+            
+            // round ending point up to BYTES_PER_ROW boundary
+            int displayEnd =  (end + (BYTES_PER_ROW - 1)) & ~(BYTES_PER_ROW - 1);
+            
+            StringBuffer out = new StringBuffer();
+            int count;
+            int rowStart = displayStart;
+            int i;
+            for (i = displayStart; i < displayEnd; i++) {
+                if ((i % BYTES_PER_ROW) == 0) {
+                    lineLabel(out, i);
+                    rowStart = i;
+                }
+                if (i < offset || i >= end) out.append("  ");
+                else out.append(asHex(bytes[i]));
+                
+                if ((i % 2) == 1) out.append(' ');
+                
+                if ((i % BYTES_PER_ROW) == (BYTES_PER_ROW - 1)) {
+                    out.append("  ");
+                    for (int j = rowStart; j < rowStart + BYTES_PER_ROW; j++) {
+                        if (j < offset || j >= end) out.append(' ');
+                        else out.append(toPrint(bytes[j]));
+                    }
+                    out.append('\n');
+                }
+            }
+            return out.toString();
+        }
+        
+        
+        /**
+         * Test a character to see whether it is a possible hex char.
+         *
+         * @param c char (int actually) to test. */
+        public static final boolean isHexChar(int c) {
+            // trade space for speed !!!!
+            switch (c) {
+                case '0': case '1': case '2': case '3': case '4': 
+                case '5': case '6': case '7': case '8': case '9': 
+                case 'a': case 'b': case 'c': case 'd': case 'e':
+                case 'f': case 'A': case 'B': case 'C': case 'D':
+                case 'E': case 'F':
+                    return true;
+                default:
+                    return false;
+            }
+        }
+        
+        private static char toPrint(byte b) {
+            int i = (int) b;
+            // nonprinting ASCII chars
+            if (i < 32 || i > 126) return '.';
+            else return (char) i;
+        }
+        
+        private static void lineLabel(StringBuffer out, int i) {
+            String istring = new Integer(i).toString();
+            
+            StringBuffer sb;
+            if (istring.length() <= 5) {
+                sb = new StringBuffer("    "); // 5 digits
+                sb.insert(5 - istring.length(), istring);
+                sb.setLength(5);
+            } else {
+                sb = new StringBuffer(istring);
+            }
+            
+            out.append(sb);
+            out.append(": ");
+        }
+        
+    }
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedAttributeContainer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedAttributeContainer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping.internal;
+
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+
+
+/**
+ * Base class for wrapper objects that keep their own scoped attributes, ignoring the attributes
+ * of the wrapped objects.
+ */
+public class ScopedAttributeContainer extends AttributeContainer
+{
+    private Object _scopeKey;
+
+    public ScopedAttributeContainer( Object scopeKey )
+    {
+        _scopeKey = scopeKey;
+    }
+
+    public final String getScopedName( String baseName )
+    {
+        return ScopedServletUtils.getScopedName( baseName, _scopeKey );
+    }
+
+    public boolean isInScope( String keyName )
+    {
+        return isInScope( keyName, _scopeKey );
+    }
+
+    public static boolean isInScope( String keyName, Object scopeKey )
+    {
+        return keyName.startsWith( scopeKey.toString() );
+    }
+
+    public String removeScope( String keyName )
+    {
+        return removeScope( keyName, _scopeKey );
+    }
+    
+    public static String removeScope( String keyName, Object scopeKey )
+    {
+        assert keyName.startsWith( scopeKey.toString() ) : keyName;
+        return keyName.substring( scopeKey.toString().length() );
+    }
+    
+    public final Object getScopeKey()
+    {
+        return _scopeKey;
+    }
+
+    public void renameScope( Object newScopeKey )
+    {
+        _scopeKey = newScopeKey;
+    }
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedRequestDispatcher.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedRequestDispatcher.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,129 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping.internal;
+
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.log4j.Logger;
+
+
+/**
+ * A request dispatcher that doesn't actually forward (but keeps track of the attempted
+ * forward), and which does some extra work to do server includes into our ScopedRequest
+ * and ScopedResponse.
+ *
+ * @see ScopedRequestImpl
+ * @see ScopedResponseImpl
+ */
+public class ScopedRequestDispatcher
+        implements RequestDispatcher
+{
+    private String _uri;
+
+    private static final String REQUEST_URI_INCLUDE = "javax.servlet.include.request_uri";
+
+    private static final Logger logger = Logger.getLogger( ScopedRequestDispatcher.class );
+    
+    
+    /**
+     * Constructor.
+     * 
+     * @param uri the URI to which we'll "forward" or include.
+     */ 
+    public ScopedRequestDispatcher( String uri )
+    {
+        _uri = uri;
+    }
+
+    /**
+     * Does not actually cause a server forward of the request, but informs the ScopedRequest
+     * object that a forward was attempted for a particular URI.
+     * 
+     * @param request the ScopedRequest, or a wrapper (ServletRequestWrapper) around it.
+     * @param response the ScopedResponse, or a wrapper (ServletResponseWrapper) around it.
+     */ 
+    public void forward( ServletRequest request, ServletResponse response )
+            throws ServletException, IOException
+    {
+        ScopedRequestImpl scopedRequest = ( ScopedRequestImpl ) ScopedServletUtils.unwrapRequest( request );
+        assert scopedRequest != null : request.getClass().getName();
+        scopedRequest.setForwardedURI( _uri );
+        scopedRequest.doForward();
+    }
+
+    /**
+     * Does a server include of the stored URI into the given ScopedRequest and ScopedResponse.
+     * 
+     * @param request the ScopedRequest, or a wrapper (ServletRequestWrapper) around it.
+     * @param response the ScopedResponse, or a wrapper (ServletResponseWrapper) around it.
+     */ 
+    public void include( ServletRequest request, ServletResponse response )
+            throws ServletException, IOException
+    {
+        assert request instanceof HttpServletRequest : request.getClass().getName();
+        HttpServletRequest httpRequest = ( HttpServletRequest ) request;
+        
+        //
+        // First, unwrap the request and response, looking for our ScopedRequest and ScopedResponse.
+        //
+        HttpServletRequest outerRequest = ScopedServletUtils.getOuterRequest( httpRequest );
+        
+        //
+        // Need to set the "javax.servlet.include.request_uri" attribute on the outer request
+        // before forwarding with a request dispatcher.  This attribute is used to keep track of
+        // the included URI.
+        //
+        outerRequest.setAttribute( REQUEST_URI_INCLUDE, httpRequest.getRequestURI());
+        
+        if ( logger.isDebugEnabled() )
+        {
+            logger.debug( "Delegating to RequestDispatcher for URI " + _uri );
+        }
+        
+        try
+        {
+            RequestDispatcher realDispatcher = outerRequest.getRequestDispatcher( _uri );
+            
+            if ( realDispatcher == null )
+            {
+                assert response instanceof HttpServletResponse : response.getClass().getName();
+                ( ( HttpServletResponse ) response ).setStatus( HttpServletResponse.SC_NOT_FOUND );                
+                logger.error( "Could not get RequestDispatcher for URI " + _uri );
+            }
+            else
+            {
+                realDispatcher.include( request, response );
+            }
+        }
+        catch ( ServletException e )
+        {
+            logger.error( "Exception during RequestDispatcher.include().", e.getRootCause() );
+            
+            throw e;
+        }
+    }
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedRequestImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedRequestImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,629 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping.internal;
+
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletContext;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.HashMap;
+
+import org.apache.log4j.Logger;
+
+
+/**
+ * A wrapper around HttpServletRequest, associated with a given scope-key.  All calls to setAttribute,
+ * getAttribute, removeAttribute, etc. are scoped to this object, while most other functionality
+ * delegates to the wrapped HttpServletRequest.
+ * Instances of this class also keep track of their own request-URIs, which are independent of the
+ * wrapped request-URIs.
+ */
+public class ScopedRequestImpl
+        extends HttpServletRequestWrapper
+        implements ScopedRequest
+{
+    private String _requestURI;
+    private ScopedSession _session;
+    private ServletContext _context;
+    private String _forwardedURI;
+    private ScopedAttributeContainer _scopedContainer;
+    private ArrayList _listenScopes;
+    private String _overridePathInfo = null;
+    private boolean _isActiveRequest = false;
+    private boolean _useScopedSession = false;
+    private HashMap _seeThroughAttrs = new HashMap();
+    private HashMap _additionalParameters;
+
+
+    private static final String OUR_SESSION_ATTR_NAME = ScopedRequest.class.getName() + ".scopedSession";
+    private static final String STORED_ATTRS_ATTR_NAME = ScopedRequest.class.getName() + ".storedAttrs";
+
+    private static final Logger logger = Logger.getLogger( ScopedRequestImpl.class );
+
+
+    public ScopedRequestImpl( HttpServletRequest request, String overrideRequestURI, Object scopeKey,
+                              ServletContext context, boolean useScopedSession )
+    {
+        super( request );
+        _scopedContainer = new ScopedAttributeContainer( scopeKey );
+
+        if ( overrideRequestURI != null )
+        {
+            _requestURI = request.getContextPath() + overrideRequestURI;
+        }
+        else
+        {
+            _requestURI = request.getContextPath();
+        }
+
+        _context = context;
+        _useScopedSession = useScopedSession;
+    }
+
+    public ScopedRequestImpl( HttpServletRequest request, String overrideRequestURI, Object scopeKey,
+                              ServletContext context )
+    {
+        this( request, overrideRequestURI, scopeKey, context, false );
+    }
+
+    public String getRequestedSessionId()
+    {
+        if ( _useScopedSession )
+        {
+            return _scopedContainer.getScopedName( getOuterRequest().getRequestedSessionId() );
+        }
+        else
+        {
+            return super.getRequestedSessionId();
+        }
+    }
+
+    public String getRequestURI()
+    {
+        return _requestURI;
+    }
+
+    public void setRequestURI( String uri )
+    {
+        _requestURI = uri;
+    }
+
+    public StringBuffer getRequestURL()
+    {
+        HttpServletRequest outerRequest = getOuterRequest();
+        StringBuffer url = new StringBuffer( outerRequest.getScheme() );
+        url.append( "://" ).append( outerRequest.getServerName() );
+        url.append( ':' ).append( outerRequest.getServerPort() );
+        url.append( getRequestURI() );
+        return url;
+    }
+
+    public String getServletPath()
+    {
+        return ScopedServletUtils.getRelativeURI( this );
+    }
+
+    /**
+     * Gets the scoped HttpSession associated with this scoped request.  Note that this
+     * scoped session is stored in the main (outer) session.
+     */
+    public HttpSession getSession( boolean createIfNotExist )
+    {
+        if ( _useScopedSession )
+        {
+            if ( _session == null )
+            {
+                HttpSession realSession = getOuterRequest().getSession( createIfNotExist );
+
+                if ( realSession != null )
+                {
+                    String attrName = _scopedContainer.getScopedName( OUR_SESSION_ATTR_NAME );
+                    _session = ( ScopedSession ) realSession.getAttribute( attrName );
+
+                    if ( _session == null && createIfNotExist )
+                    {
+                        _session = new ScopedSession( realSession, _context, getScopeKey() );
+                        realSession.setAttribute( attrName, _session );
+                    }
+                }
+            }
+
+            //
+            // Reinitialize the ScopedSession's internal HttpSession.  It can't store it in
+            // a non-transient way, because it itself is stored in the session.
+            //
+            if ( _session != null )
+            {
+                _session.setSession( getOuterRequest().getSession(), _context );
+            }
+
+            return _session;
+        }
+        else
+        {
+            return super.getSession( createIfNotExist );
+        }
+    }
+
+    public final HttpSession getSession()
+    {
+        return getSession( true );
+    }
+
+    public String getParameter( String paramName )
+    {
+        String retVal = getLocalParameter( paramName );
+        if ( retVal == null )
+        {
+            retVal = getListenScopeParameter( paramName );
+        }
+        
+        return retVal;
+    }
+
+    /**
+     * Add a parameter to the request.
+     * 
+     * @param name the parameter name.
+     * @param value the parameter value.
+     */ 
+    public void addParameter( String name, String value )
+    {
+        if ( _additionalParameters == null )
+        {
+            _additionalParameters = new HashMap();
+        }
+        
+        _additionalParameters.put( name, value );
+    }
+    
+    /**
+     * Get the parameter from the scoped request only (don't check in listen scoped requests)
+     * @param paramName
+     * @return value of the parameter
+     */
+    public String getLocalParameter( String paramName )
+    {
+        if ( _additionalParameters != null )
+        {
+            String overrideParam = ( String ) _additionalParameters.get( paramName );
+
+            if ( overrideParam != null )
+            {
+                return overrideParam;
+            }
+        }
+
+        ServletRequest request = getRequest();
+        String retVal = request.getParameter( _scopedContainer.getScopedName( paramName ) );
+
+        if ( retVal == null && _isActiveRequest && paramName.startsWith( AUTOSCOPE_PREFIX ) )
+        {
+            retVal = request.getParameter( paramName );
+        }
+        
+        return retVal;
+    }
+
+    /**
+     * Get the parameter from the listen scoped requests
+     * @param paramName
+     * @return value of the parameter
+     */
+    public String getListenScopeParameter( String paramName )
+    {
+        String retVal = null;
+
+        if ( _listenScopes != null )
+        {
+            for ( int i = 0, len = _listenScopes.size(); retVal == null && i < len; ++i )
+            {
+                String key = ScopedServletUtils.getScopedName( paramName, _listenScopes.get( i ) );
+                retVal = getRequest().getParameter( key );
+            }
+        }
+
+        return retVal;
+    }
+
+    
+    public Enumeration getParameterNames()
+    {
+        ArrayList paramNames = new ArrayList();
+
+        for ( Enumeration e = getRequest().getParameterNames(); e.hasMoreElements(); )
+        {
+            String scopedParamName = ( String ) e.nextElement();
+
+            if ( _scopedContainer.isInScope( scopedParamName ) )
+            {
+                paramNames.add( _scopedContainer.removeScope( scopedParamName ) );
+            }
+            else if ( _isActiveRequest && scopedParamName.startsWith( AUTOSCOPE_PREFIX ) )
+            {
+                paramNames.add( scopedParamName );
+            }
+            else if ( _listenScopes != null )
+            {
+                for ( int i = 0, len = _listenScopes.size(); i < len; ++i )
+                {
+                    Object scope = _listenScopes.get( i );
+
+                    if ( ScopedAttributeContainer.isInScope( scopedParamName, scope ) )
+                    {
+                        paramNames.add( ScopedAttributeContainer.removeScope( scopedParamName, scope ) );
+                    }
+                }
+            }
+        }
+
+        return Collections.enumeration( paramNames );
+    }
+
+    public String[] getParameterValues( String paramName )
+    {
+        ServletRequest request = getRequest();
+        String[] retVals = request.getParameterValues( _scopedContainer.getScopedName( paramName ) );
+
+        if ( retVals == null && _isActiveRequest && paramName.startsWith( AUTOSCOPE_PREFIX ) )
+        {
+            retVals = request.getParameterValues( paramName );
+        }
+
+        if ( retVals == null && _listenScopes != null )
+        {
+            for ( int i = 0, len = _listenScopes.size(); retVals == null && i < len; ++i )
+            {
+                String key = ScopedServletUtils.getScopedName( paramName, _listenScopes.get( i ) );
+                retVals = request.getParameterValues( key );
+            }
+        }
+
+        return retVals;
+    }
+
+    public Map getParameterMap()
+    {
+        return filterParameterMap( getRequest().getParameterMap() );
+    }
+    
+    /**
+     * @exclude
+     */ 
+    public Map filterParameterMap( Map parameterMap )
+    {
+        HashMap map = new HashMap();
+
+        for ( Iterator i = parameterMap.entrySet().iterator(); i.hasNext(); )
+        {
+            Map.Entry entry = ( Map.Entry ) i.next();
+            String scopedParamName = ( String ) entry.getKey();
+
+            if ( _scopedContainer.isInScope( scopedParamName ) )
+            {
+                map.put( _scopedContainer.removeScope( scopedParamName ), entry.getValue() );
+            }
+            else if ( _isActiveRequest && scopedParamName.startsWith( AUTOSCOPE_PREFIX ) )
+            {
+                map.put( scopedParamName, entry.getValue() );
+            }
+            else if ( _listenScopes != null )
+            {
+                for ( int j = 0, len = _listenScopes.size(); j < len; ++j )
+                {
+                    if ( ScopedAttributeContainer.isInScope( scopedParamName, _listenScopes.get( j ) ) )
+                    {
+                        map.put( ScopedAttributeContainer.removeScope( scopedParamName,
+                                                                       _listenScopes.get( j ) ),
+                                                                       entry.getValue() );
+                    }
+                }
+            }
+        }
+
+        return map;
+    }
+
+    /**
+     * Adds a scope to "listen" to.  This scope will see all request parameters from a ScopedRequest
+     * of the given scope.
+     */
+    public void addListenScope( Object scopeKey )
+    {
+        assert scopeKey != null;
+
+        if ( _listenScopes == null )
+        {
+            _listenScopes = new ArrayList();
+        }
+
+        _listenScopes.add( scopeKey );
+    }
+
+    public RequestDispatcher getRequestDispatcher( String uri )
+    {
+        return new ScopedRequestDispatcher( uri );
+    }
+
+    public void doForward()
+    {
+        String forwardURI = _forwardedURI;
+
+        if ( forwardURI != null )
+        {
+            if ( ! forwardURI.startsWith( "/" ) )
+            {
+                logger.error( "Invalid forward URI " + forwardURI );
+                _requestURI = forwardURI;
+            }
+    
+            _requestURI = getOuterRequest().getContextPath() + getForwardedURI();
+            // CR174862 -- parse the query string and add parameters to the internal map
+            parseQueryParameters();
+        }
+        else
+        {
+            _requestURI = null;
+        }
+    }
+
+    private void parseQueryParameters()
+    {
+        int queryIndex = _requestURI.indexOf("?");
+        if (queryIndex < 0)
+        {
+            return;
+        }
+
+        String queryString = _requestURI.substring(queryIndex + 1);
+
+        // hack off the query string
+        _requestURI = _requestURI.substring(0, queryIndex);
+
+        if (queryString.length() == 0)
+        {
+            return;
+        }
+
+        HashMap queryParameters = new HashMap();
+        ParseUtils.parseQueryString(queryString, queryParameters, getCharacterEncoding());  
+
+        Iterator itor = queryParameters.keySet().iterator();
+        while (itor.hasNext())
+        {
+            Object key = itor.next();
+            addParameter((String) key, (String) queryParameters.get(key));
+        }
+    }
+
+    /**
+     * Simply stores the URI that was being forwarded to.
+     *
+     * @param uri
+     */
+    public void setForwardedURI( String uri )
+    {
+        _forwardedURI = uri;
+    }
+
+    public String getForwardedURI()
+    {
+        return _forwardedURI;
+    }
+
+    /**
+     * @deprecated Use {@link ScopedResponseImpl#didRedirect} instead.
+     */ 
+    public boolean didRedirect()
+    {
+        return false;
+    }
+
+    /**
+     * Stores the current map of request attributes in the Session.
+     */
+    public void persistAttributes()
+    {
+        String attrName;
+
+        if ( _useScopedSession )
+        {
+            attrName = STORED_ATTRS_ATTR_NAME;
+        }
+        else
+        {
+            attrName = getScopedName( STORED_ATTRS_ATTR_NAME );
+        }
+
+        getSession().setAttribute( attrName, _scopedContainer.getSerializableAttrs() );
+    }
+
+    /**
+     * Restores the map of request attributes from a map saved in the Session.
+     */
+    public void restoreAttributes()
+    {
+        String attrName;
+
+        if ( _useScopedSession )
+        {
+            attrName = STORED_ATTRS_ATTR_NAME;
+        }
+        else
+        {
+            attrName = getScopedName( STORED_ATTRS_ATTR_NAME );
+        }
+
+        Map savedAttrs = ( Map ) getSession().getAttribute( attrName );
+        Map currentAttrs = _scopedContainer.getAttrMap();
+        
+        if ( savedAttrs != null )
+        {
+            if ( currentAttrs != null )
+            {
+                savedAttrs.putAll( currentAttrs );
+            }
+            
+            _scopedContainer.setAttrMap( savedAttrs );            
+        }
+    }
+
+    public final HttpServletRequest getOuterRequest()
+    {
+        return ( HttpServletRequest ) getRequest();
+    }
+
+    public final Object getAttribute( String attrName )
+    {
+        if ( _seeThroughAttrs.containsKey( attrName ) )
+        {
+            return getRequest().getAttribute( attrName );
+        }
+
+        return _scopedContainer.getAttribute( attrName );
+    }
+
+    public final void setAttribute( String attrName, Object o )
+    {
+        if ( _seeThroughAttrs.containsKey( attrName ) )
+        {
+            getRequest().setAttribute( attrName, o );
+        }
+        else
+        {
+            _scopedContainer.setAttribute( attrName, o );
+        }
+    }
+
+    public final Enumeration getAttributeNames()
+    {
+        ArrayList list = new ArrayList();
+
+        for ( Iterator i = _seeThroughAttrs.keySet().iterator(); i.hasNext(); )
+        {
+            list.add( i.next() );
+        }
+
+        for ( Enumeration e = _scopedContainer.getAttributeNames(); e.hasMoreElements(); )
+        {
+            list.add( e.nextElement() );
+        }
+
+        return Collections.enumeration( list );
+    }
+
+    public final void removeAttribute( String attrName )
+    {
+        if ( _seeThroughAttrs.containsKey( attrName ) )
+        {
+            getRequest().removeAttribute( attrName );
+        }
+
+        _scopedContainer.removeAttribute( attrName );
+    }
+
+    public void registerOuterAttribute( String attrName )
+    {
+        _seeThroughAttrs.put( attrName, null );
+    }
+
+    public final Object getScopeKey()
+    {
+        return _scopedContainer.getScopeKey();
+    }
+
+    public void renameScope( Object newScopeKey )
+    {
+        if ( _useScopedSession )
+        {
+            HttpSession realSession = getOuterRequest().getSession( false );
+
+            if ( realSession != null )
+            {
+                String realSessionAttr = _scopedContainer.getScopedName( OUR_SESSION_ATTR_NAME );
+                Object ourSession = realSession.getAttribute( realSessionAttr );
+                realSessionAttr = ScopedServletUtils.getScopedName( OUR_SESSION_ATTR_NAME, newScopeKey );
+                realSession.setAttribute( realSessionAttr, ourSession );
+            }
+
+            if ( _session != null )
+            {
+                _session.renameScope( newScopeKey );
+            }
+        }
+
+        _scopedContainer.renameScope( newScopeKey );
+    }
+
+    public static void renameSessionScope( Object oldScopeKey, Object newScopeKey, HttpServletRequest outerRequest )
+    {
+        HttpSession realSession = outerRequest.getSession( false );
+
+        if ( realSession != null )
+        {
+            String realSessionAttr = ScopedServletUtils.getScopedName( OUR_SESSION_ATTR_NAME, oldScopeKey );
+            Object ourSession = realSession.getAttribute( realSessionAttr );
+            realSessionAttr = ScopedServletUtils.getScopedName( OUR_SESSION_ATTR_NAME, newScopeKey );
+            realSession.setAttribute( realSessionAttr, ourSession );
+        }
+    }
+
+    public String getPathInfo()
+    {
+        return _overridePathInfo;
+    }
+
+    public void setPathInfo( String pathInfo )
+    {
+        _overridePathInfo = pathInfo;
+    }
+
+    /**
+     * Makes this request listen to specially-prefixed request parameters.
+     */
+    public void setActiveRequest()
+    {
+        _isActiveRequest = true;
+    }
+    
+    public final String getScopedName( String baseName )
+    {
+        return _scopedContainer.getScopedName( baseName );
+    }
+
+    /**
+     * see if this scoped request is listening to any other scoped request
+     * @return true if has listen scopes
+     */
+    public boolean hasListenScopes()
+    {
+         return (_listenScopes != null && _listenScopes.size() > 0);
+    }
+}
+

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedResponseImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedResponseImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,327 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping.internal;
+
+import org.apache.beehive.netui.pageflow.scoping.ScopedResponse;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import javax.servlet.http.Cookie;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Date;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+
+/**
+ * A wrapper around HttpServletResponse, associated with a given scope-key.  Delegates to the wrapped
+ * response object for some functionality, but prevents output or error codes or forwards from actually
+ * happening.
+ */
+public class ScopedResponseImpl
+        extends HttpServletResponseWrapper
+        implements ScopedResponse
+{
+    private boolean _isError = false;
+    private int _statusCode = -1;
+    private String _redirectURI = null;
+    private String _statusMessage = null;
+
+    /** Map of name (String) -> headers (List).  There can be more than one for each name. **/
+    private HashMap _headers = new HashMap();
+
+    private static final String SET_COOKIE = "Set-Cookie";
+    private static final Logger logger = Logger.getLogger( ScopedResponseImpl.class );
+
+
+    public ScopedResponseImpl( HttpServletResponse response )
+    {
+        super( response );
+    }
+
+    public void sendError( int i, String s ) throws IOException
+    {
+        _isError = true;
+        _statusCode = i;
+        _statusMessage = s;
+
+        if ( logger.isInfoEnabled() )
+        {
+            StringBuffer msg = new StringBuffer( "ScopedResponse error " ).append( i );
+            logger.info( msg.append( ": " ).append( s ) );
+        }
+    }
+
+    public void sendError( int i ) throws IOException
+    {
+        sendError( i, "" );
+    }
+
+    public void setStatus( int i )
+    {
+        setStatus( i, "" );
+    }
+
+    public void setStatus( int i, String s )
+    {
+        _statusCode = i;
+        _statusMessage = s;
+    }
+
+    public void setContentLength( int i )
+    {
+        // don't do anything
+    }
+
+    public void setContentType( String s )
+    {
+        // don't do anything
+    }
+
+    public void setBufferSize( int i )
+    {
+        // don't do anything
+    }
+
+    public void flushBuffer() throws IOException
+    {
+        // don't do anything
+        // @TODO should we let them flush?
+    }
+
+    public void resetBuffer()
+    {
+        // don't do anything
+    }
+
+    public void reset()
+    {
+        // don't do anything
+        // @TODO should we let them reset?
+    }
+
+     //
+    // Headers: We need some special handling for headers. Since we're
+    // *including* portlets, the response received from WLS will have
+    // no-op methods for all headers. So, this implementation collects
+    // headers explicitly, to avoid losing them.
+    //
+
+    /**
+     * Add a cookie to the response.
+     */
+    public void addCookie( Cookie cookie )
+    {
+        addObjectHeader(SET_COOKIE, cookie);
+    }
+
+    /**
+     * Gets a cookie that was added to the response.
+     */
+    public Cookie getCookie( String cookieName )
+    {
+        List cookies = getHeaders(SET_COOKIE);
+        if(cookies != null){
+            // start looking from the back (ie. the last cookie set)
+            for(int i = cookies.size(); --i > -1;) {
+                Cookie cookie = (Cookie)cookies.get(i);
+                if(cookie.getName().equals(cookieName)) {
+                    return cookie;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Gets all Cookies that were added to the response.
+     */
+    public Cookie[] getCookies()
+    {
+        List cookies = (List)_headers.get(SET_COOKIE);
+
+        return ( cookies != null ? ( Cookie[] ) cookies.toArray( new Cookie[0] ) : new Cookie[0] );
+    }
+
+    /**
+     * Returns <code>true</code> if this response containes the given header.
+     */
+    public boolean containsHeader( String name )
+    {
+        return _headers.containsKey( name );
+    }
+
+    /**
+     * Sets a response header with the given name and date-value.
+     */
+    public void setDateHeader( String name, long date )
+    {
+        setObjectHeader( name, new Date( date ) );
+    }
+
+    /**
+     * Adds a response header with the given name and date-value.
+     */
+    public void addDateHeader( String name, long date )
+    {
+        addObjectHeader( name, new Date( date ) );
+    }
+
+    /**
+     * Sets a response header with the given name and value.
+     */
+    public void setHeader( String name, String value )
+    {
+        setObjectHeader( name, value );
+    }
+
+    /**
+     * Adds a response header with the given name and value.
+     */
+    public void addHeader( String name, String value )
+    {
+        addObjectHeader( name, value );
+    }
+
+    /**
+     * Sets a response header with the given name and integer value.
+     */
+    public void setIntHeader( String name, int value )
+    {
+        setObjectHeader( name, new Integer( value ) );
+    }
+
+    /**
+     * Adds a response header with the given name and integer value.
+     */
+    public void addIntHeader( String name, int value )
+    {
+        addObjectHeader( name, new Integer( value ) );
+    }
+
+    /**
+     * Gets all headers.
+     *
+     * @return a Map of header-name (String) -> headers (List).
+     */
+    public Map getHeaders()
+    {
+        return _headers;
+    }
+
+    /**
+     * Gets all headers with the given name.
+     *
+     * @return a List of headers (String, Integer, Date, Cookie), or <code>null</code> if none are found.
+     */
+    public List getHeaders( String name )
+    {
+        return ( List ) _headers.get( name );
+    }
+
+    /**
+     * Gets the first header with the given name.
+     * @return an Object (String, Integer, Date, Cookie) that is the first header with the given name,
+     *         or <code>null</code> if none is found.
+     */
+    public Object getFirstHeader( String name )
+    {
+        List foundHeaders = ( List ) _headers.get( name );
+        return ( ! foundHeaders.isEmpty() ? foundHeaders.get( 0 ) : null );
+    }
+
+    protected void addObjectHeader( String name, Object val )
+    {
+        List vals = ( List ) _headers.get( name );
+
+        if ( vals == null )
+        {
+            vals = new ArrayList();
+            _headers.put( name, vals );
+        }
+
+        vals.add( val );
+    }
+
+    protected void setObjectHeader( String name, Object val )
+    {
+        ArrayList vals = new ArrayList();
+        vals.add( val );
+        _headers.put( name, vals );
+    }
+
+    public HttpServletResponse getOuterResponse()
+    {
+        return (HttpServletResponse) getResponse();
+    }
+
+    public boolean isError()
+    {
+        return _isError;
+    }
+
+    public int getStatusCode()
+    {
+        return _statusCode;
+    }
+
+    public String getStatusMessage()
+    {
+        return _statusMessage;
+    }
+
+    public void sendRedirect( String redirectURI )
+        throws IOException
+    {
+        _redirectURI = redirectURI;
+    }
+
+    /**
+     * Actually send the redirect that was suggested by {@link #sendRedirect}.
+     *
+     * @throws IllegalStateException if {@link #sendRedirect} was not called.
+     */
+    public void applyRedirect()
+        throws IOException
+    {
+        if ( _redirectURI != null )
+        {
+            super.sendRedirect( _redirectURI );
+        }
+        else
+        {
+            throw new IllegalStateException( "No redirect to apply." );
+        }
+    }
+
+    public boolean didRedirect()
+    {
+        return _redirectURI != null;
+    }
+
+    public String getRedirectURI()
+    {
+        return _redirectURI;
+    }
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedServletConfig.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedServletConfig.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping.internal;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import java.util.Enumeration;
+
+
+/**
+ * A wrapper around ServletConfig, associated with a given scope-key.
+ */
+public class ScopedServletConfig
+        extends AttributeContainer
+        implements ServletConfig
+{
+    private ServletContext _context;
+    private String _servletName;
+
+    public ScopedServletConfig( ServletContext context, ServletConfig baseServletConfig )
+    {
+        _context = context;
+
+        for ( Enumeration e = baseServletConfig.getInitParameterNames(); e.hasMoreElements(); )
+        {
+            String paramName = ( String ) e.nextElement();
+            setAttribute( paramName, baseServletConfig.getInitParameter( paramName ) );
+        }
+        
+        _servletName = baseServletConfig.getServletName();
+    }
+
+    public String getServletName()
+    {
+        return _servletName;
+    }
+
+    public ServletContext getServletContext()
+    {
+        return _context;
+    }
+
+    public String getInitParameter( String s )
+    {
+        return ( String ) getAttribute( s );
+    }
+
+    public Enumeration getInitParameterNames()
+    {
+        return getAttributeNames();
+    }
+}

Added: incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedSession.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/internal/ScopedSession.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,136 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.scoping.internal;
+
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionContext;
+import javax.servlet.ServletContext;
+import java.io.Serializable;
+
+
+/**
+ * A wrapper around HttpSession, associated with a given scope-key.  All calls to setAttribute,
+ * getAttribute, removeAttribute, etc. are scoped to this object, while most other functionality
+ * delegates to the wrapped HttpSession.
+ */
+public class ScopedSession
+        extends ScopedAttributeContainer
+        implements HttpSession, Serializable
+{
+    private transient HttpSession _session;
+    private transient ServletContext _servletContext;
+
+    /**
+     * This constructor exists only for deserialization.
+     */ 
+    public ScopedSession()
+    {
+        super( null );
+    }
+
+    public ScopedSession( HttpSession session, ServletContext cxt, Object scopeKey )
+    {
+        super( scopeKey );
+        _session = session;
+        _servletContext = cxt;
+    }
+
+    public long getCreationTime()
+    {
+        return _session.getCreationTime();
+    }
+
+    public String getId()
+    {
+        return getScopedName( _session.getId() );
+    }
+
+    public long getLastAccessedTime()
+    {
+        return _session.getLastAccessedTime();
+    }
+
+    public ServletContext getServletContext()
+    {
+        return _servletContext;
+    }
+
+    public void setMaxInactiveInterval( int i )
+    {
+        _session.setMaxInactiveInterval( i );
+    }
+
+    public int getMaxInactiveInterval()
+    {
+        return _session.getMaxInactiveInterval();
+    }
+
+    public HttpSessionContext getSessionContext()
+    {
+        return _session.getSessionContext();
+    }
+
+    public Object getValue( String s )
+    {
+        return getAttribute( s );
+    }
+
+    public String[] getValueNames()
+    {
+        return getAttributeNamesArray();
+    }
+
+    public void putValue( String s, Object o )
+    {
+        setAttribute( s, o );
+    }
+
+    public void removeValue( String s )
+    {
+        removeAttribute( s );
+    }
+
+    public void invalidate()
+    {
+        removeAllAttributes();
+    }
+
+    public boolean isNew()
+    {
+        return _session.isNew();
+    }
+    
+    /**
+     * Since _session is transient, this method is called by {@link ScopedRequestImpl#getSession}
+     * to reinitialize it each time.
+     */ 
+    void setSession( HttpSession session, ServletContext cxt )
+    {
+        _session = session;
+        _servletContext = cxt;
+    }
+    
+    /**
+     * Returns the real (outer) HttpSession.
+     */ 
+    public HttpSession getOuterSession()
+    {
+        return _session;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Tags-Databinding" default="compile" basedir=".">
+
+    <property name="module.classpath" value="${servlet24.jar};${jsp20.jar};${struts.jar};${util.jar};${tags.html.jar};${pageflow.jar};${scoping.jar};${log4j.jar};${commons-logging.jar};${xbean.jar}"/>
+    <property name="module.classes.dir" location="${classes.dir}/${module.name}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${module.classes.dir}"/>
+
+        <javac srcdir="."
+               destdir="${module.classes.dir}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${module.classes.dir}">
+            <fileset dir="." includes="**/*.properties"/>
+        </copy>
+
+        <echo>Generate TLD and TLDx</echo>
+        <echo>tools.xdoclet.run.classpath=${tools.xdoclet.run.classpath}</echo>
+        <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpath="${tools.xdoclet.run.classpath}"/>
+        <webdoclet
+                destdir="${build.lib.dir}"
+                excludedtags="@version,@author,@todo"
+                force="true"
+                verbose="true">
+
+            <fileset dir="${src.dir}/tags-databinding">
+                <include name="**/*.java"/> 
+            </fileset>
+            <fileset dir="${src.dir}/tags-html">
+                <include name="**/*.java"/>
+            </fileset>
+
+            <netuitldgen 
+                 xmlencoding="UTF-8"
+                 taglibversion="1.0"
+                 jspversion="1.2" 
+                 shortname="netui-data" 
+                 uri="http://beehive.apache.org/netui/tags-databinding-1.0"
+                 description="NetUI Databinding Tag Library."
+                 filename="${netui-tags-databinding.tld.name}"
+                 destdir="${build.lib.dir}"
+                 validateXml="true"
+                 packageName="org.apache.beehive.netui.tags.databinding"
+            />
+ 
+            <netuitldxgen
+                     xmlencoding="UTF-8"
+                     paletteGenerator="workshop.netui.jspdesigner.generators.NetuiDatabindingPaletteGenerator"
+                     uri="http://beehive.apache.org/netui/tags-databinding-1.0"
+                     tldxVersion="1.0"
+                     filename="${netui-tags-databinding.tldx.name}"
+                     packageName="org.apache.beehive.netui.tags.databinding"
+            />
+        </webdoclet>
+
+        <jar jarfile="${build.lib.dir}/${tags-databinding.jar.name}" basedir="${module.classes.dir}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${module.classes.dir}"/>
+        <delete dir="${build.lib.dir}/${tags-databinding.jar.name}"/>
+        <delete dir="${build.lib.dir}/${netui-tags-databinding.tldx.name}"/>
+        <delete dir="${build.lib.dir}/${netui-tags-databinding.tld.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Databinding Tags"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/el/BundleVariableResolver.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/el/BundleVariableResolver.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.databinding.script.el;
+
+// java imports
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.el.VariableResolver;
+
+// internal imports
+import org.apache.beehive.netui.script.common.ContextFactory;
+
+import org.apache.beehive.netui.script.common.BundleMap;
+
+import org.apache.beehive.netui.script.el.NetUIVariableResolver;
+import org.apache.beehive.netui.script.el.util.PageContextAttributeMap;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class BundleVariableResolver
+{
+    private Logger _logger = Logger.getInstance(BundleVariableResolver.class);
+
+    /**
+     *
+     */
+    public static class BundleContextFactory 
+        extends ContextFactory
+    {
+        public Object getInstance(VariableResolver vr)
+        {
+            assert vr instanceof NetUIVariableResolver;
+            NetUIVariableResolver nvr = (NetUIVariableResolver)vr;
+            assert nvr.resolveVariable("pageContext") != null && nvr.resolveVariable("pageContext") instanceof PageContextAttributeMap;
+            PageContext pageContext = (PageContext)((PageContextAttributeMap)nvr.resolveVariable("pageContext")).unwrap();
+
+            return pageContext.getAttribute("bundle");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/el/ContainerVariableResolver.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/el/ContainerVariableResolver.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,76 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.databinding.script.el;
+
+// java imports
+import javax.servlet.jsp.el.VariableResolver;
+import javax.servlet.jsp.tagext.Tag;
+
+// internal imports
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+
+import org.apache.beehive.netui.script.el.NetUIReadVariableResolver;
+
+import org.apache.beehive.netui.script.common.ContextFactory;
+
+import org.apache.beehive.netui.script.common.DataAccessProviderBean;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class ContainerVariableResolver
+{
+    private static final Logger _logger = Logger.getInstance(ContainerVariableResolver.class);
+
+    public static class ContainerContextFactory 
+        extends ContextFactory
+    {
+        public Object getInstance(VariableResolver vr)
+        {
+            assert vr instanceof NetUIReadVariableResolver;
+
+            Tag currentTag = ((NetUIReadVariableResolver)vr).getCurrentTag();
+            
+            if(currentTag == null)
+                throw new RuntimeException("There is no current tag; the container binding context can not be created.");
+
+            Tag parent = currentTag.getParent();
+            while(parent != null && !(parent instanceof IDataAccessProvider))
+                parent = parent.getParent();
+            
+            if(parent == null)
+            {
+                String msg = "The tag \"" + currentTag + "\" does not have a valid parent of type IDataAccessProvider.";
+                if(_logger.isErrorEnabled()) _logger.error(msg);
+                throw new RuntimeException(msg);
+            }
+
+            if(_logger.isDebugEnabled()) 
+                _logger.debug("found IDataAccessProvider of type: " + parent.getClass().getName());
+            
+            return new DataAccessProviderBean((IDataAccessProvider)parent);
+        }
+    }
+}
+
+

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/StructuredBaseTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/StructuredBaseTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,230 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.base;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * A base tag for NetUI Databinding tags that are work in a repeating
+ * context.  This tag encapsulates code that is common across may of the NetUI tags
+ * which are diretly contained in the @see org.apache.beehive.netui.tags.databinding.repeater.Repeater
+ * and @see org.apache.beehive.netui.tags.databinding.grid.Grid tags.
+ * <br/>
+ * <br/>
+ * This tag provides commonly used features such as buffering of content, a simple 
+ * mechanism for verifying a tag's parent structure, and verifying the attributes
+ * set on a tag instance.
+ * <br/>
+ * <br/>
+ * Tags that extend this base class participate in sometimes complex rendering
+ * cycles of repeating tags.  As a result, as the containing tag evalutes its
+ * body, it treats the lifecycle of this evaluation as a state machine.  The
+ * direct child tags which extend this class often need to know the state of the 
+ * parent tag.  There are two convenience methods that are invoked by this
+ * tag's @see doStartTag() and @see doEndTag methods that pass the current 
+ * state of the parent to the child tags.  The @see renderStartTag and @see renderEndTag
+ * can return any values that the @see javax.servlet.jsp.tagext.TagSupport#doStartTag(int)
+ * and the @see javax.servlet.jsp.tagext.TagSupport#doEndTag(int) calls can
+ * return.  
+ * 
+ * @exclude
+ */
+public abstract class StructuredBaseTag
+    extends AbstractBaseTag
+{
+    private static final Logger _logger = Logger.getInstance(StructuredBaseTag.class);
+
+    protected static final String EMPTY_STRING = "";
+    
+    private StringBuilder _contentBuffer = null;
+
+    /**
+     * Add content to the content that is being buffered by this tag.  All tags write their body
+     * content to this content buffer, which is rendered at the end of the tag's lifecycle if 
+     * no fatal errors have occurred during this tag's lifecycle.
+     *
+     * @param content content that this tag should render.
+     */
+    public void addContent(String content)
+    {
+        if(_contentBuffer == null)
+            _contentBuffer = new StringBuilder(512);
+
+        _contentBuffer.append(content);
+    }
+
+    /**
+     * Get the content which should be rendered by this tag.
+     *
+     * @return the content String if there is content; null otherwise
+     */
+    public String getContent()
+    {
+        if(_contentBuffer != null)
+            return _contentBuffer.toString();
+        else return null;
+    }
+
+    /**
+     * Starts a tag's lifecycle.  This method performs several operations before 
+     * invoking the @see renderStartTag(int) method.  In order, these stages are:
+     * <ol>
+     * <li>@see verifyStructure()</li>
+     * <li>@see prepare()</li>
+     * <li>@see verifyAttributes()</li>
+     * <li>@see renderStartTag(int)</li>
+     * </ol>
+     * The benefit of this lifecycle is that it provides a structure for component
+     * tags that are immediately nested inside of repeating tags.  
+     * <br/>
+     * <br/>
+     * Any errors that occur before calling @see renderStartTag(int) are reported
+     * in the page.  
+     *
+     * @return the value returned from calling @see renderStartTag(int), which can be 
+     * any value that can be returned from the @see javax.servlet.jsp.tagext.TagSupport
+     * class.  If an error occurs, the tag returns SKIP_BODY.
+     */
+    public int doStartTag()
+        throws JspException
+    {
+        int ret = SKIP_BODY;
+        try
+        {
+            verifyStructure();
+
+            if(_logger.isDebugEnabled()) _logger.debug("verifyStructure: hasErrors=" + hasErrors());
+
+            if (hasErrors())
+            {
+                reportErrors();
+                return SKIP_BODY;
+            }
+
+            prepare();
+
+            verifyAttributes();
+
+            if(_logger.isDebugEnabled()) _logger.debug("verifyAttributes: hasErrors=" + hasErrors());
+
+            if (hasErrors())
+            {
+                reportErrors();
+                return SKIP_BODY;
+            }
+
+            int state = getCurrentRenderState();
+            
+            ret = renderStartTag(state);
+        }
+        catch(Exception e)
+        {
+            String msg = Bundle.getString("Tags_StructuredBaseTag_startTagError", new Object[] {getTagName(), e});
+
+            if(_logger.isErrorEnabled()) _logger.error("An error occurred rendering the startTag of the tag \"" + getTagName() + "\".  Cause: " + e, e);
+
+            registerTagError(msg,e);
+            reportErrors();
+            return SKIP_BODY;
+        }
+        
+        return ret;
+    }
+
+    /**
+     * Ends a tag's lifecycle.  This call is a wrapper around the @see renderEndTag(int) call
+     * that allows a tag directly contained in a repeating tag to act based on the state
+     * of the parent.  
+     *
+     * @return EVAL_PAGE
+     * @throws JspException if an error that occurred that could not be reported to the page
+     */
+    public int doEndTag()
+        throws JspException
+    {
+        if(hasErrors())
+        {
+            localRelease();
+            return EVAL_PAGE;
+        }
+            
+        int ret = EVAL_PAGE;
+        try
+        {
+            int state = getCurrentRenderState();
+            ret = renderEndTag(state);
+        }
+        catch(Exception e)
+        {
+            String msg = Bundle.getString("Tags_StructuredBaseTag_endTagError", new Object[] {getTagName(), e.toString()});
+            registerTagError(msg,e);
+            reportErrors();
+            ret = EVAL_PAGE;
+        }
+
+        localRelease();
+        return ret;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _contentBuffer = null;
+    }
+
+    protected abstract int getCurrentRenderState();
+
+    protected abstract int renderStartTag(int state) throws JspException;
+    
+    protected abstract int renderEndTag(int state) throws JspException;
+
+    protected abstract Class getValidContainerType();
+    
+    protected void prepare() throws JspException {}
+    
+    protected void verifyAttributes() throws JspException {}
+
+    private final void verifyStructure() 
+        throws JspException
+    {
+        Tag parent = getParent();
+        Class validContainer = getValidContainerType();
+
+        if((validContainer != null && parent == null) ||
+            validContainer != null && !validContainer.isAssignableFrom(parent.getClass()))
+        {
+            if(_logger.isErrorEnabled())
+            {
+                String msg = "A tag of type \"" + getClass().getName() + "\" must be nested within a tag of type \"" + getValidContainerType().getName() + "\"";
+                _logger.error(msg);
+            }
+
+            String msg = Bundle.getString("Tags_StructuredBaseTag_invalidParent", new Object[] {getClass().getName(), getValidContainerType().getName()});
+            registerTagError(msg,null);
+        }
+    }    
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/style/AbstractStyleBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/base/style/AbstractStyleBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,118 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.base.style;
+
+/**
+ * An abstract JavaBean that contains basic style information about an HTML table.
+ * This bean supports table and row level style class attributes.  This JavaBean
+ * can be extended to add additional style information.
+ * <br/>
+ * <br/>
+ * Two basic methods are provided for rendering table and row styles into a 
+ * {@link StringBuilder}.
+ */
+public abstract class AbstractStyleBean
+{
+    private static final String EMPTY_STRING = "";
+
+    private String _tableClass = null;
+    private String _rowClass = null;
+
+    /**
+     * Set the table style class.
+     *
+     * @param tableClass the table style class
+     */
+    public void setTableClass(String tableClass)
+    {
+        _tableClass = tableClass;
+    }
+
+    /**
+     * Get the table style class.
+     *
+     * @return the row style class or <code>null</code> if none is set
+     */
+    public String getTableClass()
+    {
+        return _tableClass;
+    }
+    
+    /**
+     * Set the table row style class.
+     *
+     * @param rowClass the table row style class
+     */
+    public void setRowClass(String rowClass)
+    {
+        _rowClass = rowClass;
+    }
+
+    /**
+     * Get the table row style class.
+     *
+     * @return the row style class or <code>null</code> if none is set
+     */
+    public String getRowClass()
+    {
+        return _rowClass;
+    }
+
+    /**
+     * A method that will render the style class into the 
+     * {@link StringBuilder}.
+     */
+    public String renderTableStyle()
+    {
+        return renderStyle(getTableClass());
+    }
+
+    /**
+     * A method that will render the style class into the 
+     * {@link StringBuilder}.
+     */
+    public String renderRowStyle()
+    {
+        return renderStyle(getRowClass());
+    }
+
+    /**
+     * Render the style class into the {@link StringBuilder}.  If the
+     * style class <code>style</code> is not null, it is appended into the 
+     * StringBuilder with the HTML tag attribute "class".  A space is inserted
+     * at the front of the attribute but not at the end, so a <code>style</code>
+     * value of "foo" will render as:
+     * <pre>
+     *     ' class="foo"'
+     * </pre>
+     *
+     * @param style the value of the style class
+     */
+    protected String renderStyle(String style)
+    {
+        if(style == null) return EMPTY_STRING;
+
+        StringBuilder buf = new StringBuilder();
+        buf.append(" class=\"");
+        buf.append(style);
+        buf.append("\"");
+
+        return buf.toString();
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/bundle/DeclareBundle.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/bundle/DeclareBundle.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,331 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.bundle;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.script.common.BundleContext;
+import org.apache.beehive.netui.script.common.BundleMap;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TryCatchFinally;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Locale;
+
+/**
+ * <p>A tag used to declare a {@link java.util.ResourceBundle} that can be used inside of the declaring
+ * page as a source for displaying internationalized messages.  The declared resource bundle is accessible
+ * using the <code>bundle</code> databinding context.  The required <code>name</code> attribute specifies
+ * the identifier via which to refer to the ResourceBundle in an expression.  For example:</p>
+ * <pre>
+ * &lt;netui-data:declareBundle name="someMessages" bundlePath="com/foobar/resources/WebAppMessages"/>
+ * </pre>
+ * <p>This tag declares a bundle that is referenced in a data binding expression as
+ * <code>{bundle.someMessages}</code>.</p>
+ * <p>The bundle that is referenced depends on the Locale specified, see below. The resource bundle properties
+ * files that are accessed are located in the package <code>com/foobar/resources</code> with the root
+ * properties file name of <code>WebAppMessages</code>.  The naming conventions for properties can be found
+ * in {@link java.util.ResourceBundle#getBundle(String, Locale, ClassLoader)}.  These files must be located
+ * in a classpath that is available to the web application.  Often, they are stored in
+ * <code>WEB-INF/classes</code>.  If the properties file contains a key called <code>helloWorld</code>,
+ * then the expression <code>{bundle.someMessages.helloWorld}</code>
+ * would be look-up the message matching the Locale specified on the tag.  Bundle binding expressions can be 
+ * used in any expression bindable NetUI tag attribute.</p>
+ * <p>Note, the name <code>default</code> is a bundle identifier that is reserved for use by the
+ * DeclareBundle tag.  If this value is used for the <code>name</code> attribute on a DeclareBundle tag,
+ * an error will be reported in the page.  The <code>default</code> bundle is reserved for use when
+ * accessing internationalized messages from the "current" Struts module's default properties file.</p>
+ * <p>This tag provides a high level of customizability for rendering internationalized messages.
+ *  Specifically, the {@link Locale} for which to look-up messages can be specified on the DeclareBundle
+ * tag.  By default, the Locale for the current request is used, but this Locale can be overridden by
+ * setting the <code>language</code>, <code>country</code>, and <code>variant</code> tag attributes 
+ * as necessary.  See {@link Locale} for more information on the possible values for these attributes.</p>
+ * <p>The Locale can be overridden by setting these attributes in three combinations:</p>
+ * <ul>
+ * <li>country, language, variant</li>
+ * <li>country, language</li>
+ * <li>country</li>
+ * </ul>
+ * <p>Any other combinations will throw an exception.</p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2" valign="top">bundlePath</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The path to a package in classpath that contains a set of
+ * {@link java.util.ResourceBundle} properties files. This can be a slash or dot delimited classpath.
+ * Valid values might be:
+ * <ul>
+ * <li><code>com/foobar/resources/WebAppProperties </code>
+ * <li><code>com.foobar.resources.WebAppProperties </code>
+ * </ul>
+ * <p>These are treated as equivalent values.  The {@link java.util.ResourceBundle} class 
+ * will handle appending the <code>.properties</code> file type and locale information 
+ * as necessary. For details about the <code>.properties</code> file naming conventions,
+ * see {@link java.util.ResourceBundle#getBundle(String, Locale, ClassLoader)}. These files must be
+ * available in classpath for the webapp in order to be successfully located.</td></tr>
+ * <tr><th rowspan="2">country</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">The two-letter uppercase ISO-3166 country / region code for the Locale
+ * from which to look-up resource bundle messages. This value is used to further specify the name
+ * of the .properties file from which message keys will be read.</td></tr>
+ * <tr><th rowspan="2">language</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">The two-letter lowercase ISO-639 language code for the Locale from which
+ * to look-up resource bundle messages. This value is used to further specify the name of
+ * the .properties file from which message keys will be read.</td></tr>
+ * <tr><th rowspan="2">name</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The name inside of the <i>bundle</i> databinding context under which
+ * the properties in this bundle are available. The identifier <code>default</code> is an illegal value
+ * for this attribute and is reserved for use by this tag.</td></tr>
+ * <tr><th rowspan="2">variant</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">A vendor / browser specific code for further parameterizign the Locale
+ * from which to look-up resource bundle messages.</td></tr>
+ * </table>
+ * </p>
+ * 
+ * @netui:tag name="declareBundle" description="Use this tag to declare a resource bundle that is available in the bundle databinding context"
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.DeclareBundleRenderer"
+ */
+public class DeclareBundle
+    extends AbstractBaseTag
+    implements TryCatchFinally
+{
+    private String _name = null;
+    private String _bundlePath = null;
+    private String _language = null;
+    private String _country = null;
+    private String _variant = null;
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName()
+    {
+        return "DeclareBundle";
+    }
+
+    /**
+     * Set the language to use when looking-up resource bundle messages.  This value
+     * is used to further specify the name of the .properties file message
+     * keys will be read from. 
+     * 
+     * @param language the two-letter lowercase ISO-639 code for a language.
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setLanguage(String language)
+    {
+        _language = language;
+    }
+
+    /**
+     * Set the country to use when looking-up resource bundle messages.  This value
+     * is used to further specify the name of the .properties file message
+     * keys will be read from.
+     *
+     * @param country the two-letter uppercase ISO-3166 code for a country
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setCountry(String country)
+    {
+        _country = country;
+    }
+
+    /**
+     * Set the vendor / browser specific code that further parameterizes the 
+     * .properties file messages will be read from.
+     * 
+     * @param variant the variant
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setVariant(String variant)
+    {
+        _variant = variant;
+    }
+
+    /**
+     * Set the name via which this bundle can be accessed using the <code>bundle</code>
+     * databinding context.  The identifier <code>default</code> is an illegal value
+     * for this attribute and is reserved for use by this tag.
+     *
+     * @param name the name of the bundle
+     * 
+     * @netui:attribute required="true"
+     */
+    public void setName(String name)
+    {
+        _name = name;
+    }
+
+    /**
+     * Set the path to the resource bundle's properties files.  This can be a slash
+     * or dot delimited classpath.  Valid values might be:
+     * <ul>
+     * <li>com/foobar/resources/WebAppProperties</li>
+     * <li>com.foobar.resources.WebAppProperties</li>
+     * </ul>
+     * These are treated as equivalent values.  The {@link java.util.ResourceBundle} class
+     * will handle appending the <code>.properties</code> file type and locale information
+     * as necessary.  See {@link  java.util.ResourceBundle#getBundle(String, Locale, ClassLoader)} 
+     * for the <code>.properties</code> file naming conventions.  These files must be available in 
+     * classpath for the webapp in order to be successfully located.
+     *
+     * @param bundlePath the path to the bundle's properties files.
+     *
+     * @netui:attribute required="true"
+     */
+    public void setBundlePath(String bundlePath)
+    {
+        _bundlePath = bundlePath;
+    }
+
+    /**
+     * Start the JSP rendering lifecycle for this tag; it skips its body.
+     *
+     * @return {@link javax.servlet.jsp.tagext.Tag#SKIP_BODY}
+     */
+    public int doStartTag()
+    {
+        return SKIP_BODY;
+    }
+    
+    /**
+     * Register a ResourceBundle that is available for the scope of this page.  Errors raised
+     * during the execution of this tag will be reported in the page, which will continue
+     * rendering.
+     * 
+     * @throws JspException if error conditions are encountered during this method which can not
+     * be reported in the page.
+     * @return {@link javax.servlet.jsp.tagext.Tag#EVAL_PAGE}
+     */
+    public int doEndTag()
+        throws JspException
+    {
+        verifyAttributes();
+
+        Locale locale = getCurrentLocale();
+
+        if(hasErrors())
+        {
+            reportErrors();
+            return EVAL_PAGE;
+        }
+
+        Object obj = pageContext.getAttribute("bundle");
+        if(obj == null)
+        {
+            BundleContext bc = new BundleContext();
+            bc.addBundle(_name, _bundlePath, locale);
+
+            // NetUI v2 -- in JSP 2.0 EL, the BundleMap is dropped into the PageContext so that
+            // it's available to the EL runtime.
+            BundleMap bundleMap = new BundleMap((HttpServletRequest)pageContext.getRequest(), pageContext.getServletContext(), bc);
+            pageContext.setAttribute("bundle", bundleMap);
+        }
+        else if(obj != null && obj instanceof BundleMap)
+        {
+            BundleMap bundleMap = (BundleMap)obj;
+            BundleContext bc = bundleMap.getBundleContext();
+            bc.addBundle(_name, _bundlePath, locale);
+        }
+        else
+        {
+            String msg = Bundle.getErrorString("Tags_DeclareBundle_wrongContextType", new Object[] {obj.getClass().getName()});
+            registerTagError(msg,null);
+        }
+
+        if(hasErrors())
+            reportErrors();
+
+        return EVAL_PAGE;
+    }
+
+    public void doFinally()
+    {
+        localRelease();
+    }
+
+    public void doCatch(Throwable t)
+        throws Throwable
+    {
+        throw t;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _name = null;
+        _bundlePath = null;
+        _language = null;
+        _country = null;
+        _variant = null;
+    }
+
+    private Locale getCurrentLocale()
+        throws JspException
+    {
+        if(_language == null && _country == null && _variant == null)
+            return getUserLocale();
+
+        if(hasErrors()) return null;
+
+        if(_language != null && _country != null && _variant != null)
+            return new Locale(_language, _country, _variant);
+        else if(_language != null && _country != null)
+            return new Locale(_language, _country);
+        else if(_language != null)
+            return new Locale(_language);
+        else if(_country != null || _variant != null)
+        {
+            String msg = Bundle.getErrorString("Tags_DeclareBundle_invalidLocaleOverride", new Object[] {_language, _country, _variant});
+            registerTagError(msg,null);
+        }
+        
+        return getUserLocale();
+    }
+
+    private void verifyAttributes()
+        throws JspException
+    {
+        if(_name.length() == 0)
+        {
+            String msg = Bundle.getErrorString("Tags_DeclareBundle_invalidName", new Object[] {_name});
+            registerTagError(msg,null);
+        }
+        
+        if(_name.equals(BundleContext.DEFAULT_STRUTS_BUNDLE_NAME))
+        {
+            String msg = Bundle.getErrorString("Tags_DeclareBundle_defaultIsReservedWord", null);
+            registerTagError(msg,null);
+        }
+
+         if(_bundlePath.length() == 0)
+         {
+             String msg = Bundle.getErrorString("Tags_DeclareBundle_invalidResourcePath", new Object[] {_bundlePath});
+             registerTagError(msg,null);
+         }
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/CellRepeater.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/CellRepeater.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,731 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.cellrepeater;
+
+// java imports
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TryCatchFinally;
+
+// internal imports
+import org.apache.beehive.netui.tags.DataSourceTag;
+
+import org.apache.beehive.netui.tags.databinding.cellrepeater.style.CellRepeaterStyleBean;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.exception.LocalizedUnsupportedOperationException;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.iterator.IteratorFactory;
+import org.apache.beehive.netui.script.common.DataAccessProviderBean;
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+import org.apache.beehive.netui.script.common.DataAccessProviderStack;
+
+// external imports
+
+/**
+ * <p>
+ * The CellRepeater tag is a repeating, databound tag that renders 
+ * its body each cell of a table of the specified dimensions.  The tag 
+ * is bound to a dataset that is specified in the <code>dataSource</code>
+ * attribute.  For each item in the data set, the body of this tag is rendered,
+ * and NetUI tags in the body that are databound can use the <code>container.item</code>
+ * syntax to access the "current" data item in the iteration.  Properties 
+ * on this data item can be accessed using expressions.  
+ * </p><p>
+ * The tag will automatically insert the open and close table, row, and cell
+ * tags which will comprise the table that is rendered.  Style attributes may
+ * be set using attributes on this tag in order to cusotmize the tag's final 
+ * appearance.  The dimensions of the table are specified by using at least
+ * one of the attributes columns and rows.  If only one is specified, the other
+ * will be inferred by using the size of the given data set.  As a result, the 
+ * entire dataset will be rendered.  For example, 
+ * if a table should be four columns wide and the data set has twenty items, 
+ * the resulting table will have five rows.  If the data set is fewer items than 
+ * the number of cells that should be rendered, the cells are padded with HTML table
+ * cells:
+ * </p>
+ * <pre>
+ *     &lt;td&gt;&amp;nbsp;&lt;/td&gt;
+ * </pre>
+ * <p>
+ * This will prevent rendering a malformed HTML table.  If the number of cells
+ * to render is smaller than the fully specified dimensions of the table, only 
+ * this number of cells will be rendered.  For example, if the data set is size fifty
+ * but the <code>rows</code> and the <code>columns</code> attributes are both seven, 
+ * only the first forty-nine items in the dataset will be rendered and the fiftieth
+ * will not be shown.  The values of the <code>rows</code> and the <code>columns</code>
+ * can be databound with an expression; in this case, each value will be
+ * converted into an integer.  An error will be reported on the page if this conversion
+ * fails.
+ * </p><p>
+ * This tag implements the {@link IDataAccessProvider}
+ * interface which provides tags access to the "current" data item.  Properties 
+ * on the <code>IDataAccessProvider</code> interface are available through the 
+ * "container" binding context, which can be used inside of the body of the 
+ * CellRepeater.  Properties of the <code>IDataAccessProvider</code> interface
+ * that are available include:
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><td><b>Name</b></td><td><b>Description</b></td></tr>
+ * <tr><td>index</td><td>the current index in the iteration; this index is absolute to the dataset</td></tr>
+ * <tr><td>parent</td><td>any <code>IDataAccessProvider</code> parent of this tag</td></tr>
+ * <tr><td>item</td><td>the current data item</td></tr>
+ * </table>
+ * </p>
+ * <p>
+ * <b>Note:</b> the metadata property of the <code>container</code> binding context is not supported
+ * on the CellRepeater.
+ * </p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">alternatingCellClass</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The CSS style class to render on every other generated table cell; the cell class
+ * is used if this attribute is not set. The starting cell is alternated for each row, which results in
+ * a checkerboard colored table being displayed. For example, if the alteranting cell class
+ * value is <code>\"alternatingCellClass\"</code>, every other table cell tag in the rendered JSP is:
+ * <pre>
+ *    &lt;td class="alternatingCellClass">
+ * </pre>
+ * </td></tr>
+ * <tr><th rowspan="2">cellClass</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The CSS style class to render on generated table cells.</td></tr>
+ * <tr><th rowspan="2">columns</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">A data bindable attribute that specifies how many columns
+ * should appear in the generated table; the value should either be a <code>String</code>
+ * which can be converted into an expression that references an int or Integer.
+ * If the <code>columns</code> attribute was specified but the <code>rows</code> attribute
+ * was not, the <code>rows</code> attribute is inferred using the size of the dataset.</td></tr>
+ * <tr><th rowspan="2">dataSource</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">An expression that references a dataset that should be
+ * rendered by the cellRepeater. If there was no data in the dataset but the <code>rows</code>
+ * and <code>columns</code> attributes were specified, an empty table of the given dimensions
+ * is rendered.</td></tr> 
+ * <tr><th rowspan="2">rowClass</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The CSS style class to render on every generated table row.</td></tr>
+ * <tr><th rowspan="2">rows</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">A data bindable attribute that specifies how many rows should appear
+ * in the generated table; the value should either be a <code>String</code> which can be converted
+ * into an integer or an expression that references an <code>int</code> or <code>Integer</code>.
+ * If the <code>rows</code> attribute was specified but the columns attribute was not, the
+ * <code>columns</code> attribute is inferred using the size of the dataset.</td></tr>
+ * <tr><th rowspan="2">tableClass</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The CSS style class to render on the generated table.</td></tr> 
+ * <tr><th rowspan="2">verticalRepeat</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The boolean that specifies in which direction to repeat the
+ * cells, horizontally or vertically. If the rows are rendered horizontally,
+ * the items in the dataset are rendered across each row from top to bottom. Otherwise,
+ * they are rendered down each column from left to right. The default is to render
+ * the items horizontally.</td></tr> 
+ * </table>
+ * </p>
+ *
+ * @example 
+ * The following sample of the &lt;netui-data:cellRepeater> tag creates a table with a
+ * certain number of columns, as given in <code>pageFlow.numColumns</code> and as many
+ * rows as necessary to display all the items in the data set. Each cell in the table
+ * will contain Item: 'the actual item'. 
+ * <pre>
+ * &lt;netui-data:cellRepeater dataSource="{pageFlow.itemArray}" columns="{pageFlow.numColumns}" >
+ *     Item: &lt;netui:label value="{container.item}"/>
+ * &lt;/netui-data:cellRepeater> 
+ * </pre>
+ * 
+ * @netui:tag name="cellRepeater" description="A repeating, databound tag that renders its body into each cell of a table of the specified dimensions."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.CellRepeaterRenderer" netuiexpressioninfo="org.apache.beehive.netui.tags.databinding.cellrepeater.CellRepeaterInfo"
+ */
+public class CellRepeater
+    extends DataSourceTag
+    implements IDataAccessProvider, TryCatchFinally
+{
+    private static final Logger _logger = Logger.getInstance(CellRepeater.class);
+
+    private static final int DEFAULT_DIMENSION_VALUE = -1;
+
+    private boolean _valid = true;
+    private boolean _verticalRepeat = false;
+    private int _columns = DEFAULT_DIMENSION_VALUE;
+    private int _currentIndex = -1;
+    private int _currentRow = -1;
+    private int _currentColumn = -1;
+    private int _rows = DEFAULT_DIMENSION_VALUE;
+    private StringBuilder _contentBuffer = null;
+    private List _dataList = null;
+    private Object _currentItem = null;
+    private CellRepeaterStyleBean _styleContext = new CellRepeaterStyleBean();
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName()
+    {
+        return "CellRepeater";
+    }
+
+    /**
+     * Add content to the content that is being buffered by this tag.  All content 
+     * written by the body of this tag is added to this buffer.  The buffer is rendered
+     * at the end of the tag's lifecycle if no fatal errors have occurred during this 
+     * tag's lifecycle.
+     *
+     * @param content content that this tag should render.
+     */
+    public void addContent(String content)
+    {
+        if(_contentBuffer == null)
+        {
+            int size = (content != null ? (5*content.length()) : 512);
+            _contentBuffer = new StringBuilder(size);
+        }
+
+        _contentBuffer.append(content);
+    }
+
+    /**
+     * Get the content which should be rendered by this tag.
+     *
+     * @return the content String if there is content; null otherwise
+     */
+    public String getContent()
+    {
+        if(_contentBuffer == null)
+            return null;
+        else return _contentBuffer.toString();
+    }
+
+    /**
+     * Set the HTML style class that is rendered on the HTML table that 
+     * is opened by this tag.  For example, if the row class is "tableClass",
+     * each opening table tag is:
+     * <pre>
+     *     &lt;table class="tableClass"&gt;
+     * </pre>
+     * @param tableClass the name of a style class in a CSS 
+     *
+     * @netui:attribute required="false"     
+     */
+    public void setTableClass(String tableClass)
+    {
+        _styleContext.setTableClass(tableClass);
+    }
+
+    /**
+     * Set the HTML style class that is rendered on each HTML table row that 
+     * is opened by this tag.  For example, if the row class is "rowClass",
+     * each opening table row tag is:
+     * <pre>
+     *     &lt;tr class="rowClass"&gt;
+     * </pre>
+     * 
+     * @param rowClass the name of a style class in the CSS 
+     *
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setRowClass(String rowClass)
+    {
+        _styleContext.setRowClass(rowClass);
+    }
+
+    /**
+     * Set the HTML style class that is rendered on each HTML table cell that 
+     * is opened by this tag.  For example, if the cell class is "cellClass", 
+     * each opening table cell tag is:
+     * <pre>
+     *     &lt;td class="cellClass"&gt;
+     * </pre>
+     * 
+     * @param cellClass the name of a style class in a CSS 
+     *
+     * @netui:attribute required="false"
+     */
+    public void setCellClass(String cellClass)
+    {
+        _styleContext.setCellClass(cellClass);
+    }
+
+    /**
+     * Set the HTML style class that is rendered on each HTML table cell that
+     * is opened by this tag.  The starting cell is alternated for each row, which 
+     * results in a checkerboard colored table being displayed.  For example, if the 
+     * alteranting cell class is \"alternatingCellClass\", every other table cell
+     * tag is:
+     * <pre>
+     *     &lt;td cell="alternatingCellClass"&gt;
+     * </pre>
+     *
+     * @param alternatingCellClass the name of a style class in a CSS
+     *
+     * @netui:attribute required="false"
+     */
+    public void setAlternatingCellClass(String alternatingCellClass)
+    {
+        _styleContext.setAlternatingCellClass(alternatingCellClass);
+    }
+
+    /**
+     * This tag can render the items in its dataset horizontally or vertically.  If
+     * the rows are rendered horizontally, the items in the dataset are rendered
+     * across each row from top to bottom.  Otherwise, they are rendered down each 
+     * column from left to right.  The default is to render the items horizontally.
+     * 
+     * @param verticalRepeat if set to <code>true</code>, the dataset is rendered down
+     * each column; otherwise it is rendered across each row, the default.
+     *
+     * @netui:attribute required="false"
+     */
+    public void setVerticalRepeat(boolean verticalRepeat)
+    {
+        _verticalRepeat = verticalRepeat;
+    }
+
+    /**
+     * Set the number of columns that should be rendered in the table
+     * generated by the tag.  If the columns attribute is specified but 
+     * the rows attribute is not, the rows attribute will be inferred 
+     * using the size of the dataset.
+     *
+     * @param columns an integer or an expression
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setColumns(int columns)
+    {
+        _columns = columns;
+    }
+
+    /**
+     * Set the number of rows that should be rendered in the table
+     * generated by the tag.  If the rows attribute is specified but 
+     * the columns attribute is not, the columns attribute will be 
+     * inferred using the size of the dataset.
+     *
+     * @param rows an integer or an expression whose value can be
+     * converted into an integer.
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setRows(int rows)
+    {
+        _rows = rows;
+    }
+
+    /**
+     * Prepare to render the dataset that was specified in the dataSource attribute.  The
+     * dataSource expression is evaluated and the table's dimensions are computed.  If
+     * there is no data in the dataset but the rows and columns attributes were specified,
+     * an empty table of the given dimensions is rendered.
+     *
+     * @return EVAL_BODY_BUFFERED or SKIP_BODY if errors are reported, the data set 
+     * is null, or there is no data in the data set
+     * @throws JspException if errors occurred that could not be reported in the page
+     */
+    public int doStartTag()
+        throws JspException
+    {
+        Object source = null;
+        if(getDataSource() != null)
+            source = evaluateDataSource();
+        
+        if(hasErrors()) return SKIP_BODY;
+
+        if(source != null)
+        {
+            Iterator iterator = null;
+            iterator = IteratorFactory.createIterator(source);
+            if (iterator == null) {
+                // @TODO: Logging
+                System.err.println("CellRepeater: The data structure from which to create an iterator is null.");
+                iterator = IteratorFactory.EMPTY_ITERATOR;
+            }
+
+            if(hasErrors()) return SKIP_BODY;
+
+            if(iterator != null)
+            {
+                _dataList = new ArrayList();
+                while(iterator.hasNext())
+                {
+                    _dataList.add(iterator.next());
+                }
+            }
+        }
+
+        // get the rows / columns if they were databound
+        //evaluateRowColumnExpressions();
+        
+        if(hasErrors()) return SKIP_BODY;
+
+        if(_rows == DEFAULT_DIMENSION_VALUE || _columns == DEFAULT_DIMENSION_VALUE)
+        {
+            // can try to guess the dimensions
+            if(_dataList != null && _dataList.size() > 0)
+            {
+                guessDimensions(_dataList);
+
+                if(hasErrors()) return SKIP_BODY;
+            }
+            // can't guess the dimensions
+            else
+            {
+                // warn; this isn't an error -- there just isn't any data
+                _valid = false;
+                return SKIP_BODY;
+            }
+        }
+
+        // check to make sure the rows / columns are actually valid before starting to render
+        validateAttributes(_rows, _columns);
+        
+        if(hasErrors()) return SKIP_BODY;
+        
+        addContent(renderTableTag());
+
+        _currentRow = 0;
+        _currentColumn = 0;
+
+        DataAccessProviderStack.addDataAccessProvider(this, pageContext);
+
+        boolean item = ensureItem(0, _dataList);
+        if(item)
+        {
+            addContent(renderRowTag());
+            addContent(renderCellTag(_currentColumn + (_currentRow % 2 == 0 ? 0 : 1)));
+
+            return EVAL_BODY_BUFFERED;
+        }
+        else 
+        {
+            // special case -- with no items, render the entire table here
+            for(int i = 0; i < _rows; i++)
+            {
+                addContent(renderRowTag());
+                for(int j = 0; j < _columns; j++)
+                {
+                    addContent(renderCellTag(computeStyleIndex(i, j)));
+                    addContent("&nbsp;");
+                    addContent("</td>");
+                }
+                addContent("</tr>\n");
+            }
+            _currentRow = _rows;
+            _currentColumn = _columns;
+
+            return SKIP_BODY;
+        }
+    }
+
+    /**
+     * Continue rendering the body of this tag until the dimensions of the table have been reached or
+     * the entire dataset has been rendered.  The buffered body content from the previous iteration 
+     * of the body is added to the content this tag will render, @see addContent(java.lang.String).  
+     * Pad the table if the dimensions have not been met but the dataset is empty.
+     * 
+     * @return EVAL_BODY_BUFFERED if there is more data to render in the dataset or 
+     * SKIP_BODY if the end of the dataset is reached or an error occurs
+     */
+    public int doAfterBody()
+    {
+        if(bodyContent != null)
+        {
+            addContent(bodyContent.getString());
+            bodyContent.clearBody();
+        }
+
+        boolean haveNext = false;
+        while(!haveNext)
+        {
+            _currentColumn++;
+
+            // close the last cell
+            addContent("</td>");
+
+            // new row; close last row
+            if(_currentColumn == _columns)
+            {
+                _currentRow++;
+                _currentColumn = 0;
+                addContent("</tr>\n");
+            }
+
+            // end
+            if(_currentRow == _rows && _currentColumn == 0)
+            {
+                return SKIP_BODY;
+            }
+
+            if(_currentColumn == 0)
+                addContent((renderRowTag()));
+            
+            if(_verticalRepeat)
+                haveNext = ensureItem(_currentColumn*_rows + _currentRow, _dataList);
+            else  haveNext = ensureItem(_currentRow*_columns + _currentColumn, _dataList);
+
+            if(!haveNext)
+            {
+                if(_logger.isDebugEnabled()) _logger.debug("missing next at location (" + _currentRow + ", " + _currentColumn + ")");
+
+                // render empty cell
+                addContent(renderCellTag(computeStyleIndex(_currentRow, _currentColumn)));
+                addContent("&nbsp;");
+            }
+            else
+            {
+                addContent(renderCellTag(computeStyleIndex(_currentRow, _currentColumn)));
+                return EVAL_BODY_AGAIN;
+            }
+        }
+        
+        return SKIP_BODY;
+    }
+
+    /**
+     * Complete rendering the tag.  If no errors have occurred, the content that 
+     * the tag buffered is rendered.
+     *
+     * @throws JspException if an error occurs that can not be reported on the page
+     * @return EVAL_PAGE to continue evaluating the page
+     */
+    public int doEndTag()
+        throws JspException
+    {
+        if(hasErrors())
+        {
+            reportErrors();
+        }
+        else if(_valid)
+        {
+            addContent("</table>");
+            
+            write(getContent());
+        }
+
+        DataAccessProviderStack.removeDataAccessProvider(pageContext);
+        
+        pageContext.removeAttribute("container");
+        
+        return EVAL_PAGE;
+    }
+
+    public void doFinally()
+    {
+        localRelease();
+    }
+
+    public void doCatch(Throwable t)
+        throws Throwable
+    {
+        throw t;
+    }
+
+    /**
+     * Get the index of the current iteration through the body of this tag.  This 
+     * data can be accessed using the expression <code>container.index</code> 
+     * on an attribute of a databindable NetUI tag that is contained within the 
+     * repeating body of this tag.  This expression is only valid when the dataset 
+     * is being rendered.
+     * 
+     * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+     * @return the integer index of the current data item in the data set
+     */
+    public int getCurrentIndex()
+    {
+        return _currentIndex;
+    }
+
+    /**
+     * Get the item that is currently being rendered by this repeating tag.  
+     * This can be accessed using the expression <code>expression.item</code>
+     * on an attribute of a databindable netUI tag that is contained within 
+     * the repeating body of this tag.  The expression is only valid when the dataset 
+     * is being rendered.
+     * 
+     * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+     * @return the current item in the data set
+     */
+    public Object getCurrentItem()
+    {
+        return _currentItem;
+    }
+
+    /**
+     * Get the metadata for the current item.  This method is not supported by 
+     * this tag.
+     * 
+     * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+     * @throws UnsupportedOperationException this tag does not support this method from the IDataAccessProvider interface
+     */
+    public Object getCurrentMetadata()
+    {
+        LocalizedUnsupportedOperationException uoe = 
+            new LocalizedUnsupportedOperationException("The " + getTagName() + "does not export metadata for its iterated items.");
+        uoe.setLocalizedMessage(Bundle.getErrorString("Tags_DataAccessProvider_metadataUnsupported", new Object[] {getTagName()}));
+        throw uoe;
+    }
+
+    /**
+     * Get the parent IDataAccessProvider for this tag.  If this tag is contained within
+     * a IDataAccessProvider, the containing IDataAccessProvider is available through the 
+     * expression <code>container.container</code>.  Any valid properties of the
+     * parent IDataAccessProvider can be accessed through this expression.  This method 
+     * will return null if there is no parent IDataAccessProvider
+     * 
+     * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+     * @return a containing IDataAccessProvider if one exists, null otherwise.
+     */
+    public IDataAccessProvider getProviderParent()
+    {
+        return  (IDataAccessProvider)findAncestorWithClass(this, IDataAccessProvider.class);
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        if(bodyContent != null) bodyContent.clearBody();
+
+        _rows = DEFAULT_DIMENSION_VALUE;
+        _columns = DEFAULT_DIMENSION_VALUE;
+        _currentRow = -1;
+        _currentColumn = -1;
+        _currentIndex = -1;
+        _verticalRepeat = false;
+        _dataList = null;
+        _currentItem = null;
+        _styleContext = new CellRepeaterStyleBean();
+        _valid = true;
+        _contentBuffer = null;
+    }
+
+    private void reportBasicError(String message)
+        throws JspException
+    {
+        registerTagError(message,null);
+    }
+
+    private void guessDimensions(List data)
+        throws JspException
+    {
+        if(_rows == 0 || _columns == 0)
+            reportBasicError(Bundle.getString("Tags_CellRepeater_missingRowsOrColumns"));
+
+        if(data == null) return;
+
+        int dataSize = data.size();
+        if(_rows == DEFAULT_DIMENSION_VALUE && _columns == DEFAULT_DIMENSION_VALUE)
+        {
+            reportBasicError(Bundle.getString("Tags_CellRepeater_invalidRowOrColumn"));
+        }
+        else if(_rows == DEFAULT_DIMENSION_VALUE)
+        {
+            int remainder = dataSize % _columns;
+            _rows = (dataSize / _columns) + (remainder > 0 ? 1 : 0);
+            if(_logger.isDebugEnabled()) _logger.debug("guessed row size: " + _rows);
+        }
+        else if(_columns == DEFAULT_DIMENSION_VALUE)
+        {
+            int remainder = dataSize % _rows;
+            _columns = (dataSize / _rows) + (remainder > 0 ? 1 : 0);
+            if(_logger.isDebugEnabled()) _logger.debug("guessed column size: " + _columns);
+        }
+    }
+
+    private void validateAttributes(int rows, int columns)
+        throws JspException
+    {
+        if(rows <= 0)
+        {
+            String msg = Bundle.getString("Tags_CellRepeater_invalidRowValue", new Object[] {getTagName(), new Integer(rows)});
+            registerTagError(msg,null);
+        }
+
+        if(columns <= 0)
+        {
+            String msg = Bundle.getString("Tags_CellRepeater_invalidColumnValue", new Object[] {getTagName(), new Integer(columns)});
+            registerTagError(msg,null);
+        }
+    }
+
+    private final String renderTableTag()
+    {
+        if(_styleContext == null)
+            return "<table>";
+
+        StringBuilder buf = new StringBuilder("<table");
+        buf.append(_styleContext.renderTableStyle());
+        buf.append(">");
+
+        return buf.toString();
+    }
+
+    private final String renderRowTag()
+    {
+        if(_styleContext == null)
+            return "<tr>";
+        
+        StringBuilder buf = new StringBuilder("<tr");
+        buf.append(_styleContext.renderRowStyle());
+        buf.append(">");
+
+        return buf.toString();
+    }
+
+    private final String renderCellTag(int index)
+    {
+        if(_styleContext == null)
+            return "<td>";
+
+        StringBuilder buf = new StringBuilder("<td");
+        if(index % 2 == 0)
+            buf.append(_styleContext.renderCellStyle());
+        else buf.append(_styleContext.renderAlternatingCellStyle());
+        buf.append(">");
+
+        return buf.toString();
+    }
+
+    private final int computeStyleIndex(int r, int c)
+    {
+        return c + (r % 2);
+    }
+
+    private boolean ensureItem(int index, List data)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("item: " + 0 + " data: " + (data == null ? "null data" : 
+                                                           (index < data.size() ? "" + index : "index out of bounds for size " + data.size())));
+
+        if(data != null && index < data.size())
+        {
+            _currentItem = data.get(index);
+            _currentIndex = index;
+            return true;
+        }
+        else return false;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/style/CellRepeaterStyleBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/cellrepeater/style/CellRepeaterStyleBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.cellrepeater.style;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.tags.databinding.base.style.AbstractStyleBean;
+
+// external imports
+
+/**
+ *
+ */
+public class CellRepeaterStyleBean
+    extends AbstractStyleBean
+{
+    private String _cellClass = null;
+    private String _alternatingCellClass = null;
+
+    public void setCellClass(String cellClass)
+    {
+        _cellClass = cellClass;
+    }
+
+    public String getCellClass()
+    {
+        return _cellClass;
+    }
+
+    public void setAlternatingCellClass(String alternatingCellClass)
+    {
+        _alternatingCellClass = alternatingCellClass;
+    }
+
+    public String getAlternatingCellClass()
+    {
+        return _alternatingCellClass;
+    }
+
+    public String renderCellStyle()
+    {
+        return renderStyle(_cellClass);
+    }
+
+    public String renderAlternatingCellStyle()
+    {
+        if(_alternatingCellClass != null)
+            return renderStyle(_alternatingCellClass);
+        else return renderStyle(_cellClass);
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/AbstractCallMethod.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/AbstractCallMethod.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,574 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.invoke;
+
+// java imports
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.type.TypeUtils;
+
+// external imports
+
+/**
+ * <p>
+ * An abstract base class for tags that are capable of reflectively
+ * invoking methods.  Specializations of this tag provide method
+ * implementations that locate the object on which to invoke the 
+ * method and that handle any return value from the invoked 
+ * method.
+ * <p/>
+ * <p>
+ * The <code>CallMethod</code> tag can have child tags of type 
+ * {@link MethodParameter}; these tags must be in the same
+ * order as the parameter list in the method signature of the 
+ * method that will be invoked.  To invoke an overloaded method, the 
+ * {@link MethodParamter#setType()} property must be set to the String
+ * name of the type to pass to the method.  If the type attribute values
+ * on nested {@link MethodParameter} tags do not match any method signature, 
+ * an error will be reported in the page.
+ * </p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">method</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The method to invoke on an object.</td></tr>
+ * <tr><th rowspan="2">failOnError</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean that if <code>true</code> will cause the tag to report any method invocation errors in-line in the rendered page.</td></tr>
+ * <tr><th rowspan="2">resultId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The {@link javax.servlet.jsp.PageContext} attribute name where the result, if non-null, is stored.</td></tr>
+ * </table>
+ * </p>
+ */
+public abstract class AbstractCallMethod
+    extends AbstractBaseTag
+{
+    private static final Logger _logger = Logger.getInstance(AbstractCallMethod.class);
+
+    private static final Object[] EMPTY_ARGS = new Object[0];
+    private static final String EMPTY_STRING = "";
+    private static final List EMPTY_LIST = new ArrayList();
+    
+    private List _parameters = null;
+    private String _method = null;
+    private boolean _failOnError = true;
+    private String _resultId = null;
+    private boolean _verifyTypes = false;
+
+    /**
+     * Sets the identifier at which the result of invoking the method will 
+     * stored.  
+     *
+     * @param resultId a String that names an attribute in the PageContext's
+     * attribute map where any resulting object will be stored.
+     * 
+     * @netui:attribute required="false"
+     */
+    public void setResultId(String resultId)
+    {
+        _resultId = resultId;
+    }
+
+    /**
+     * Sets whether or not to report exceptions to the page when errors
+     * occur invoking a method on an object.
+     *
+     * @param failOnError a boolean that defines whether or not exceptions
+     * should be thrown when invocation fails.  
+     * 
+     * @netui:attribute required="false"
+     */
+    public void setFailOnError(boolean failOnError)
+    {
+        _failOnError = failOnError;
+    }
+
+    /**
+     * Sets the name of a method to invoke on the target object.
+     *
+     * @param method the name of the method to invoke
+     * 
+     * @netui:attribute required="true"
+     */
+    public void setMethod(String method)
+    {
+        _method = method;
+    }
+
+    /**
+     * Add a paramter that will be passed as an argument to the method that 
+     * will be invoked.  This method is implemented to allow the 
+     * the {@link MethodParameter} tags to register
+     * their parameters.  This object is passed in the position that it 
+     * appeared in the set of child {@link MethodParameter} tags.
+     *
+     * @param type a String of the type or class name of this parameter
+     * @param parameter an object that should be passed as an argument to the invoked method
+     * @see MethodParameter
+     */
+    public void addParameter(String type, Object parameter)
+    {
+        if(_parameters == null)
+            _parameters = new ArrayList();
+
+        // only check the types if necessary
+        if(type != null) _verifyTypes = true;
+
+        ParamNode pn = new ParamNode();
+        pn.typeName = type;
+        pn.paramValue = parameter;
+
+        _parameters.add(pn);
+    }
+
+    /**
+     * Causes the body of this tag to be rendered; only {@link MethodParameter}
+     * tags are allowed to be contained inside of this tag.  The body content is 
+     * never rendered.
+     *
+     * @return EVAL_BODY_BUFFERED
+     * @see MethodParameter
+     */
+    public int doStartTag()
+        throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Reflectively invokes the method specified by the <code>method</code> attribute, 
+     * {@link #getMethod()}.  The arguments passed to the method are taken from any nested
+     * {@link MethodParameter} tags.  When the parameters which are added by the 
+     * {@link MethodParameter} tags are {@link java.lang.String} types, an attempt is made
+     * to convert each of these parameters into the type expected by the method.  This
+     * conversion is done using the {@link TypeUtils#convertToObject(java.lang.String, java.lang.Class)}
+     * method.  If a String can not be converted do the type expected by the method, 
+     * an exception is thrown and the error is reported in the tag.  Any return value
+     * that results from invoking the given method is passed to the subclass implementation
+     * of the method {@link #handleReturnValue(java.lang.Object)}.
+     * 
+     * @return EVAL_PAGE to continue evaluating the page
+     * @throws JspException if there are errors.  All exceptions that may be thrown 
+     * in the process of reflectively invoking the method and performing type
+     * conversion are reported as @see javax.servlet.jsp.JspException.
+     * @see #getMethod()
+     * @see #handleReturnValue(java.lang.Object)
+     * @see MethodParameter
+     * @see ObjectNotFoundException
+     * @see TypeUtils#convertToObject(java.lang.String, java.lang.Class)
+     * @see java.lang.String
+     */
+    public int doEndTag()
+        throws JspException
+    {
+        // find the object on which to invoke the method
+        Object object = null;
+        try
+        {
+            object = resolveObject();
+        }
+        catch(ObjectNotFoundException onf)
+        {
+            Throwable cause = (onf.getCause() != null ? onf.getCause() : onf);
+            String msg = Bundle.getErrorString("Tags_AbstractCallMethod_noSuchObject", new Object[] {getObjectName(), _method, cause});
+            registerTagError(msg,null);
+        }
+
+        // if this tag can accept null invocation targets, 
+        if(object == null)
+        {
+            if(allowNullInvocationTarget())
+            {
+                // each implementation does this on their own
+                handleReturnValue(null);
+                localRelease();
+                return EVAL_PAGE;
+            }
+            else
+            {
+                String msg = Bundle.getErrorString("Tags_AbstractCallMethod_objectIsNull", new Object[] {getObjectName(), _method});
+                registerTagError(msg,null);
+            }
+        }
+        
+        if(hasErrors())
+        {
+            reportErrors();                    
+            localRelease();
+            return EVAL_PAGE;
+        }
+        
+        Method m = findMethod(object, _method, _verifyTypes);
+        
+        if(m == null)
+        {
+            String msg = null;
+            if(_verifyTypes)
+            {
+                String paramString = prettyPrintParameterTypes(_parameters);
+                msg = Bundle.getErrorString("Tags_AbstractCallMethod_noSuchMethodWithTypes", 
+                                            new Object[] {_method,
+                                                          (_parameters != null ? new Integer(_parameters.size()) : new Integer(0)),
+                                                          paramString,
+                                                          getObjectName()});
+            }
+            else msg = Bundle.getErrorString("Tags_AbstractCallMethod_noSuchMethod", 
+                                             new Object[] {_method,
+                                                           (_parameters != null ? new Integer(_parameters.size()) : new Integer(0)),
+                                                           getObjectName()});
+            
+            registerTagError(msg,null);
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+        
+        Object[] args = null;
+        try
+        {
+            args = getArguments(m.getParameterTypes());
+        }
+        catch(IllegalArgumentException iae)
+        {
+            registerTagError(iae.getMessage(), null);
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+        
+        // invoke method
+        Object result = null;
+        try
+        {
+            if(_logger.isDebugEnabled())
+            {
+                _logger.debug("method: " + m.toString());
+                for(int i = 0; i < args.length; i++)
+                    _logger.debug("arg[" + i + "]: " + (args[i] != null ? args[i].getClass().getName() : "null"));
+            }
+            
+            result = m.invoke(object, args);
+        }
+        catch(Exception e)
+        {
+            assert e instanceof IllegalAccessException || e instanceof InvocationTargetException || e instanceof IllegalArgumentException;
+
+            if(_logger.isErrorEnabled()) 
+                _logger.error("Could not invoke method \"" + _method + "\" on the object named \"" + getObjectName() + "\" because: " + e, e);
+            
+            if(_failOnError)
+            {
+                String msg = Bundle.getErrorString("Tags_AbstractCallMethod_invocationError", new Object[] {_method, getObjectName(), e});
+                registerTagError(msg,null);
+                reportErrors();
+                localRelease();
+                return EVAL_PAGE;
+            }
+        }
+        
+        if(_logger.isDebugEnabled())
+        {
+            _logger.debug((result != null ? 
+                           "return value is non-null and is of type \"" + result.getClass().getName() + "\"" :
+                           "return value is null."));
+        }
+
+        // each implementation handles this differently
+        handleReturnValue(result);
+
+        localRelease();
+
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _parameters = null;
+        _method = null;
+        _failOnError = true;
+        _resultId = null;
+        _verifyTypes = false;
+    }
+
+    /**
+     * <p>
+     * Resolve the object on which the method should be invoked.  If there are
+     * errors resolving this object, this method will throw an <code>ObjectNotFoundException</code>.
+     * <br/>
+     * <br/>
+     * If the object is not found but no exception occurred, this method should return null.
+     * </p>
+     *
+     * @throws ObjectNotFoundException if an exception occurred attempting to resolve an object
+     * @return the object on which to reflectively invoke the method.
+     */
+    protected abstract Object resolveObject() throws ObjectNotFoundException, JspException;
+
+    /**
+     * Get the name of the object that is the target of the invocation.  This is 
+     * a generic method for this tag that enables more specific error reporting.
+     *
+     * @return a name for the object on which the method will be invoked.  
+     */
+    protected abstract String getObjectName();
+
+    /**
+     * When implemented to return true, this method allows a tag invoking a method to 
+     * accept a null invocation target and simply return null.  The default 
+     * implementation returns false.
+     *
+     * @return true if the object on which to invoke the method can be null; false otherwise.
+     */
+    protected boolean allowNullInvocationTarget()
+    {
+        return false;
+    }
+
+    /**
+     * <p>
+     * A method that allows concrete classes to handle the result of the 
+     * reflective invocation in an implementation specific way.
+     * </p>
+     * <p>
+     * The default beahavior is to set the return value resulting from invoking the method
+     * in the {@link javax.servlet.jsp.PageContext} attribute map of the current JSP page.  
+     * The result is set as an attribute if the <code>result</code> is not null and the 
+     * {@link CallMethod#setResultId(java.lang.String)} String is not null.  If the value returned
+     * from calling a method is null and the {@link CallMethod#setResultId(java.lang.String)} is non-null,
+     * the {@link javax.servlet.jsp.PageContext.removeAttribute(java.lang.String)}
+     * is called to remove the attribute from the attribute map.
+     * </p>
+     *
+     * @param result the object that was returned by calling the method on the object
+     */
+    protected void handleReturnValue(Object result)
+    {
+        if(_resultId != null)
+        {
+            if(result != null)
+            {
+                if(_logger.isInfoEnabled() && pageContext.getAttribute(_resultId) != null)
+                    _logger.info("Overwriting attribute named \"" + _resultId + "\" in the PageContext with a new attribute of type \"" + 
+                                result.getClass().getName() + "\" returned from calling the method \"" + _method + "\" on an object named \"" + 
+                                getObjectName() + "\".");
+                
+                pageContext.setAttribute(_resultId, result);
+            }
+            else 
+            {
+                if(_logger.isInfoEnabled()) _logger.info("Removing attribute named \"" + _resultId + "\" from the PageContext.  " + 
+                                                       "The value returned from calling the method \"" + _method + "\" on an object named \"" + 
+                                                       getObjectName() + "\" is null.");
+
+                pageContext.removeAttribute(_resultId);
+            }
+        }
+    }
+
+    /**
+     * Internal, read-only property used by subclasses to get
+     * the list of parameters to be used when reflectively
+     * invoking a method.  If the method takes no parameters, this 
+     * list will be of size zero.
+     *
+     * @return the list of parameters
+     */
+    protected List getParameterNodes()
+    {
+        if(_parameters != null)
+            return _parameters;
+        else return EMPTY_LIST;
+    }
+
+    /**
+     * The default findMethod implementation is an uncached search of all
+     * of the methods available on the Class of the <code>target</code>
+     * 
+     * @param target the object from which to find the method
+     * @param methodName the name of the method to find
+     * @param verifyTypes a boolean that if true will match the type names in addition to the String method name
+     * @return a Method object matching the methodName and types, if <code>verifyTypes</code> is true.  
+     *         <code>null</code> otherwise.
+     */
+    protected Method findMethod(Object target, String methodName, boolean verifyTypes)
+    {
+        int paramCount = (_parameters != null ? _parameters.size() : 0);
+        Method[] methods = target.getClass().getMethods();
+
+        for(int i = 0; i < methods.length; i++)
+        {
+            if(methods[i].getName().equals(_method) && methods[i].getParameterTypes().length == paramCount)
+            {
+                if(_logger.isDebugEnabled()) 
+                {
+                    _logger.debug("found method: " + methods[i]);
+                    _logger.debug("check types: " + verifyTypes);
+                }
+
+                // page asked to check types
+                if(verifyTypes)
+                {
+                    boolean match = true;
+                    // the lengths of these match b/c of the check above
+                    Class[] parameterTypes = methods[i].getParameterTypes();
+                    for(int j = 0; j < parameterTypes.length; j++)
+                    {
+                        if(_logger.isDebugEnabled())
+                        {
+                            _logger.debug("parameterTypes[" + j + "]: " + parameterTypes[j]);
+                            _logger.debug("paramNode[" + j + "]: " + ((ParamNode)_parameters.get(j)).typeName);
+                        }
+
+                        // check the name of the class and the name of the parameter type
+                        if(!parameterTypes[j].getName().equals(((ParamNode)_parameters.get(j)).typeName))
+                        {
+                            match = false;
+                            break;
+                        }
+                        
+                    }
+                    if(match) return methods[i];
+                }
+                else return methods[i];
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Convert the arguments for a method from Strings set as attributes
+     * on JSP tags to the types represented by teh list of Class[] objects
+     * provided here.
+     *
+     * @return an Object[] that contains the parameters to pass to the method
+     * @throws IllegalArgumentException if an error occurs converting an 
+     *         argument to a specific type.
+     */
+    private final Object[] getArguments(Class[] paramTypes)
+    {
+        if(_parameters == null)
+            return EMPTY_ARGS;
+
+        Object[] args = new Object[paramTypes.length];
+
+        for(int i = 0; i < _parameters.size(); i++)
+        {
+            ParamNode pn = (ParamNode)_parameters.get(i);
+            // if the parameter should have been null, leave it null
+            if(pn.paramValue == MethodParameter.NULL_ARG)
+                continue;
+
+            Object value = pn.paramValue;
+            try
+            {
+                // if the value wasn't a String, it may have come from XScript so don't try to convert it
+                if(!(value instanceof String) || value == null)
+                    args[i] = value;
+                // here, there's a non-null String value
+                else args[i] = TypeUtils.convertToObject((String)value, paramTypes[i]);
+            }
+            // catch Exception here because almost anything can be thrown by TypeUtils.convertToObject().
+            catch(Exception e)
+            {
+                String msg = Bundle.getErrorString("Tags_AbstractCallMethod_parameterError", 
+                                                   new Object[] {paramTypes[i], new Integer(i), value, e.toString()});
+                throw new IllegalArgumentException(msg);
+            }
+
+            if(_logger.isDebugEnabled()) _logger.debug("argTypes[" + i + "]: " + paramTypes[i]);
+        }
+
+        return args;
+    }
+
+    /**
+     * Utility method that pretty-prints the types of the parameters 
+     * passed to a method; this is used in debugging.
+     *
+     * @param parameters the list of parameters 
+     * @return a String that represents the types of each of these paramters in order
+     */
+    private static final String prettyPrintParameterTypes(List parameters)
+    {
+        StringBuilder paramString = null;
+        if(parameters != null)
+        {
+            paramString = new StringBuilder(128);
+            paramString.append("(");
+            for(int i = 0; i < parameters.size(); i++)
+            {
+                if(i > 0)
+                    paramString.append(", ");
+                
+                paramString.append(((ParamNode)parameters.get(i)).typeName);
+            }
+            paramString.append(")");
+
+            return paramString.toString();
+        }
+        else return EMPTY_STRING;
+    }
+
+    /**
+     * An internal struct that represents a parameter that will be passed to a 
+     * reflective method invocation call.  Instances of <code>ParamNode</code>
+     * map 1:1 to the methodParameter tags that appear within the body of
+     * an AbstrctCallMethod tag.
+     *
+     * @exclude
+     */
+    protected class ParamNode
+    {
+        /**
+         * The fully qualified class name of the parameter type.  This value
+         * can be null if parameter type checking does not need to occur.
+         */
+        public String typeName = null;
+        
+        /**
+         * The value of the parameter.  Often, this is a String expression 
+         * which is evaluated later and converted into some Object 
+         * type such as Integer or Foobar.
+         */
+        public Object paramValue = null;
+        
+        public String toString()
+        {
+            StringBuilder buf = new StringBuilder(32);
+            buf.append("typeName: ").append(typeName);
+            return buf.toString();
+        }
+    }
+ }

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/CallMethod.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/CallMethod.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,144 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.invoke;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.cache.MethodCache;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.jsp.JspException;
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * <p>
+ * An abstract base class for tags that are capable of reflectively
+ * invoking methods.  Specializations of this tag provide method
+ * implementations that locate the object on which to invoke the 
+ * method and that handle any return value from the invoked 
+ * method.
+ * </p>
+ * <p>
+ * The <code>CallMethod</code> tag can have child tags of type 
+ * {@link MethodParameter}; these tags must be in the same
+ * order as the parameter list in the method signature of the 
+ * method that will be invoked.  To invoke an overloaded method, the 
+ * {@link MethodParamter#setType()} property must be set to the String
+ * name of the type to pass to the method.  If the type attribute values
+ * on nested {@link MethodParameter} tags do not match any method signature, 
+ * an error will be reported in the page.
+ * </p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * 
+ * <tr><th rowspan="2">failOnError</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean that if <code>true</code> will cause the tag to report any method
+ * invocation errors in-line in the rendered page.</td></tr>
+ * 
+ * <tr><th rowspan="2">method</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The method to invoke on an object.</td></tr>
+ *  
+ * <tr><th rowspan="2">object</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">References an object on which the method will be invoked.</td></tr>
+ * 
+ * <tr><th rowspan="2">resultId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The {@link javax.servlet.jsp.PageContext} attribute name where the result,
+ * if non-null, is stored.</td></tr>
+ *
+ * </table>
+ * </p>
+ * 
+ * @see MethodParameter 
+ * @see CallPageFlow 
+ * @see javax.servlet.jsp.PageContext 
+ * 
+ * @netui:tag name="callMethod" description="Use this tag to call a method on an object."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.CallMethodRenderer" requiredchild="methodParameter"
+ *                 netuiexpressioninfo="org.apache.beehive.netui.tags.databinding.invoke.CallMethodInfo"
+ */
+public class CallMethod
+    extends AbstractCallMethod
+{
+    private static final String DEFAULT_OBJECT_NAME = Bundle.getString("Tags_CallMethod_defaultObjectName");
+    private static final MethodCache _cache = new MethodCache();
+    
+    private Object _object = null;
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName()
+    {
+        return "CallMethod";
+    }
+
+    /**
+     * Set the object on which to invoke a method.
+     * 
+     * @param object the object on which to invoke a method
+     * 
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setObject(Object object)
+    {
+        _object = object;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _object = null;
+    }
+
+    protected Object resolveObject() 
+        throws ObjectNotFoundException, JspException
+    {
+            return _object;
+    }
+
+    protected final Method findMethod(Object target, String methodName, boolean verifyTypes)
+    {
+        List params = getParameterNodes();
+
+        if(verifyTypes)
+        {
+            String[] argTypes = null;
+            argTypes = new String[params.size()];
+            for(int i = 0; i < argTypes.length; i++)
+            {
+                argTypes[i] = ((ParamNode)params.get(i)).typeName;
+            }
+            return _cache.getMethod(target.getClass(), methodName, argTypes);                
+        }
+        else return _cache.getMethod(target.getClass(), methodName, params.size());
+    }
+   
+    protected String getObjectName()
+    {
+        return DEFAULT_OBJECT_NAME;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/CallPageFlow.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/CallPageFlow.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,169 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.invoke;
+
+// java imports
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+import org.apache.beehive.netui.util.Bundle;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * A tag that is used to call a method on the current {@link org.apache.beehive.netui.pageflow.PageFlowController}.
+ * The PageFlow on which to call the method is found given the location of the JSP page in the 
+ * webapp; if no PageFlow is found in the current directory, an {@link ObjectNotFoundException} is 
+ * thrown and the tag execution fails. 
+ * <p>This tag extends the {@link CallMethod} tag, which defines additional attributes.</p>
+ * <p>Once the method has been called, any return value is set in the 
+ * {@link javax.servlet.jsp.PageContext} attribute map under the <code>resultId</code>
+ * attribute that is provided on the {@link CallMethod} tag.  In the case that the return
+ * value is a primitive type, the primitive type's object wrapper is set in the 
+ * <code>PageContext</code> under the <code>resultId</code> key.</p>
+ *
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">failOnError</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean that if <code>true</code> will cause the tag to report any method
+ * invocation errors in-line in the rendered page.</td></tr>
+ *
+ * <tr><th rowspan="2">method</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Name of the method in the page flow that will be invoked.</td></tr> 
+ *
+ * <tr><th rowspan="2">resultId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The {@link javax.servlet.jsp.PageContext} attribute name where the result,
+ * if non-null, is stored.</td></tr>  
+ * </table>
+ *
+ * @example 
+ * In the following sample, the &lt;netui-data:callPageFlow> tag calls the
+ * sumCartItems method on the current page flow. In this page flow, the sumCartItems
+ * method is defined as follows:
+ * <pre>
+ *    public Double sumCartItems(List items)
+ *    {
+ *        if(items == null) return new Double(0);
+ *   
+ *        double sum = 0;
+ *        for(int i = 0; i &lt; items.size(); i++)
+ *        {
+ *            LineItem item = (LineItem)items.get(i);
+ *            sum += item.getQuantity() * item.getPrice();
+ *        }
+ *  
+ *        return new Double(sum);
+ *    }
+ * </pre>
+ * <p>You can see the full sample in the WebLogic Workshop sample application.
+ * The source files are in:</p>
+ * <p>&lt;WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/callPageFlow</p>
+ * <p>For these tags, see especially the sum.jsp page. In it, the
+ * &lt;netui-data:callPageFlow> tag calls the <code>sumCartItems</code> method
+ * on the page flow. The result, stored in the property <code>cartSum</code>, is displayed
+ * by the &lt;netui:label> tag. This property is accessible by the data binding
+ * expression <code>{pageContext.cartSum}</code>.</p>
+ <p>Here is a portion of sum.jsp:</p>
+ * <pre>
+ * &lt;netui-data:callPageFlow method="sumCartItems" resultId="cartSum"&gt;
+ *     &lt;netui-data:methodParameter value="{pageFlow.cart.lineItemList}"/&gt;
+ * &lt;/netui-data:callPageFlow&gt;
+ * 
+ * &lt;netui:label value="{pageContext.cartSum}"&gt;
+ *     &lt;netui:formatNumber pattern="$#,###,###.00"/&gt;
+ * &lt;/netui:label&gt;
+ * </pre>
+ *
+ * Using Data Binding in Page Flows</a>
+ * @see CallMethod
+ * @see ObjectNotFoundException
+ * @see org.apache.beehive.netui.pageflow.PageFlowController
+ * @see javax.servlet.jsp.PageContext
+ *
+ * @deprecated
+ *
+ * @netui:tag name="callPageFlow" description="Use this tag to call a method on the current page flow controller."
+ * @netui.tldx:tag requiredchild="methodParameter" renderer="workshop.netui.jspdesigner.tldx.compat.CallPageFlowRenderer"
+ *                 netuiexpressioninfo="org.apache.beehive.netui.tags.databinding.invoke.CallPageFlowInfo"
+ *                 deprecated="true"
+ */
+public class CallPageFlow
+    extends CallMethod
+{
+    private static final Logger _logger = Logger.getInstance(CallPageFlow.class);
+    private static final String DEFAULT_OBJECT_NAME = Bundle.getString("Tags_CallPageFlow_defaultObjectName");
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName()
+    {
+        return "CallPageFlow";
+    }
+
+    /**
+     * Get the name of the object that is the target of the invocation.  
+     *
+     * @return a name for the object on which the method will be invoked.  
+     */
+    protected String getObjectName()
+    {
+        return DEFAULT_OBJECT_NAME;
+    }
+
+    /**
+     * Get the PageFlow for the using JSP's directory.  This is an implementation of the 
+     * {@link CallMethod#resolveObject()} method that finds the current PageFlow 
+     * using the {@link InternalUtils#ensureCurrentPageFlow(HttpServletRequest, HttpServletResponse)}
+     * method.
+     *
+     * @throws ObjectNotFoundException when an exception occurs ensuring that a Page Flow is created.
+     * @return the current PageFlow.  If there is no current PageFlow, the {@link ObjectNotFoundException} will 
+     * be thrown.
+     */
+    protected Object resolveObject()
+        throws ObjectNotFoundException
+    {
+        try
+        {
+            PageFlowController jpf = InternalUtils.ensureCurrentPageFlow((HttpServletRequest)pageContext.getRequest(),
+                                                                         (HttpServletResponse)pageContext.getResponse());
+            
+            if(_logger.isDebugEnabled()) 
+                _logger.debug("Found a pageflow of type: " + (jpf != null ? jpf.getClass().getName() : "null"));
+
+            return jpf;
+        }
+        catch(Exception e)
+        {
+            throw new ObjectNotFoundException(Bundle.getErrorString("Tags_CallPageFlow_noPageFlow"), e);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/MethodParameter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/MethodParameter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,296 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.invoke;
+
+// java imports
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+// internal imports
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import org.apache.beehive.netui.util.Bundle;
+
+// external imports
+
+/**
+ * A tag that is used to add an argument to a method that will be called
+ * on some object. This tag can be nested within tags that extend the AbstractCallMethod
+ * class. Those tags are: 
+ * <ul>
+ * <li>&lt;netui-data:callControl&gt;</li>
+ * <li>&lt;netui-data:callMethod&gt;</li>
+ * <li>&lt;netui-data:callPageFlow&gt;</li>
+ * <li>&lt;netui-data:choiceMethod&gt;</li>
+ * </ul>
+ * <p>
+ * The <code>methodParameter</code> tags are used to parameterize the method
+ * that the {@link AbstractCallMethod} class will call; each <code>methodParameter</code>
+ * tag represents a single parameter. These tags are evaluated in order and the parameters
+ * they describe are passed in order.</p>
+ * <p>
+ * Overloaded methods on an object can be invoked by setting the <code>type</code>
+ * attribute on each <code>methodParameter</code> tag that is embedded in 
+ * a method invocation tag.  The type name must exactly match the primitive
+ * type name or the fully qualified class name of the argument.  The 
+ * <code>methodParameter</code> tags must also be in the order that they
+ * will be passed to this method.  The value of the type attribute must be
+ * an exact match of the type if it were printed after having been 
+ * accessed through Java reflection.</p>
+ * <p>
+ * In order to pass <code>null</code> as an argument to a method, the 
+ * null attribute must be set on this tag. Either the null attribute or the
+ * value attribute must be set on this tag.</p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * 
+ * <tr><th rowspan="2">null</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean that, if <code>true</code>, will pass null to the method call.</td></tr>
+ * 
+ * <tr><th rowspan="2">type</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The String of the type of this argument in the method signature.
+ * This name should match the primitive type name or fully qualified class
+ * name of the parameters on the signature of the method to which this
+ * parameter will be passed. For example:
+ * <table border="1" cellpadding="3" cellspacing="0" width="100%">
+ * <tr><td><b>Method Signature</b></td><td><b>Argument Name</b></td><td><b>Type value</b></td></tr>
+ * <tr><td>addToPrice(int price)</td><td>price</td><td><code>int</code></td></tr>
+ * <tr><td>addToPrice(Integer price)</td><td>price</td><td><code>java.lang.Integer</code></td></tr>
+ * </table>
+ * </td></tr>
+ * 
+ * <tr><th rowspan="2" valign="top">value</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">The value to pass to the method call.</td></tr>
+ * 
+ * </table>
+ * </p>
+ * @example 
+ * Calling the method <code>foo(int integer, String string)</code>
+ * <pre>
+ *   &lt;netui-data:methodParamter value="42"/&gt;
+ *   &lt;netui-data:methodParamter null="true"/&gt;
+ * </pre>
+ * This will correspond to the method call:<br/>
+ * <pre>
+ *     foo(42, null);
+ * </pre>
+ * Calling the method <code>foo(int integer, String string)</code>
+ * where the class has both of the methods <code>foo(int integer, String string)</code>
+ * and <code>foo(Integer integer, String string)</code>.
+ * <pre>
+ *   &lt;netui-data:methodParamter type="int" value="42"/&gt;
+ *   &lt;netui-data:methodParamter type="java.lang.String" null="true"/&gt;
+ * </pre>
+ * This will correspond to the method call:</p>
+ * <pre>
+ *     foo(42, null);
+ * </pre>
+ * <p>This next example shows a &lt;netui-data:methodParameter&gt; tag being used to specify * a "{container.item.quantityavailable}" value as an argument to the "isItemOnSale" method
+ * in a page flow. The &lt;netui-data:methodParameter&gt; tag, in this example, is embedded
+ * within a &lt;netui-data:choiceMethod&gt; tag. You can see this example in the WebLogic
+ * Workshop sample application. The relevant source files are in: </p>
+ * <p>&lt;WEBLOGIC_HOME&gt;/samples/workshop/SamplesApp/WebApp/choiceTag</p>
+ * <p>For these tags, see especially the items.jsp page and the isItemOnSale method in the
+ * choiceTagController.jpf page flow.</p>
+ * <pre>
+ * ...
+ * &lt;netui-data:repeaterItem&gt;
+ *     &lt;netui-data:choiceMethod object="{pageFlow}" method="isItemOnSale"&gt;
+ *          &lt;netui-data:methodParameter value="{container.item.quantityavailable}"/&gt;
+ *     &lt;/netui-data:choiceMethod&gt;
+ *     &lt;netui-data:choice value="true"&gt;
+ *         &lt;tr class="row" bgcolor="#FF9999"&gt;
+ *             &lt;td&gt;&lt;netui:label value="{container.item.itemnumber}"/&gt;&lt;/td&gt;
+ *             &lt;td&gt;&lt;netui:label value="{container.item.itemname}"/&gt;&lt;/td&gt;
+ *             &lt;td&gt;&lt;netui:label value="{container.item.quantityavailable}"/&gt;&lt;/td&gt;
+ *             &lt;td&gt;&lt;netui:label value="{container.item.price}"/&gt; Clearance Item&lt;/td&gt;
+ *         &lt;/tr&gt;
+ *     &lt;/netui-data:choice&gt;
+ *     &lt;netui-data:choice value="false"&gt;
+ *         &lt;tr class="row"&gt;
+ *             &lt;td&gt;&lt;netui:label value="{container.item.itemnumber}"/&gt;&lt;/td&gt;
+ *             &lt;td&gt;&lt;netui:label value="{container.item.itemname}"/&gt;&lt;/td&gt;
+ *             &lt;td&gt;&lt;netui:label value="{container.item.quantityavailable}"/&gt;&lt;/td&gt;
+ *             &lt;td&gt;&lt;netui:label value="{container.item.price}"/&gt;&lt;/td&gt;
+ *         &lt;/tr&gt;
+ *     &lt;/netui-data:choice&gt;
+ * &lt;/netui-data:repeaterItem&gt;
+ * ...		
+ * </pre>
+ * 
+ * @see CallMethod 
+ * @see CallPageFlow 
+ * 
+ * @netui:tag name="methodParameter" description="Use this tag to add an argument to a method that will be called on some object."
+ * @netui.tldx:tag requiredparent="choiceMethod callPageFlow callControl callMethod" requiredchild="#nothing" 
+ *                 renderer="workshop.netui.jspdesigner.tldx.MethodParameterRenderer"
+ *                 bodycontentpref="empty"
+ */
+public class MethodParameter
+    extends AbstractBaseTag
+{
+    /**
+     * An identifier denoting that the value of this method parameter
+     * should be treated as 'null'.
+     */
+    public static final Integer NULL_ARG = new Integer(-1);
+
+    private boolean _isNull = false;
+    private Object _value = null;
+    private String _type = null;
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _isNull = false;
+        _value = null;
+        _type = null;
+    }
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName()
+    {
+        return "MethodParamter";
+    }
+
+    /**
+     * <p>
+     * Set a String matching the type of this parameter on the method to invoke.
+     * </p>
+     * <p>
+     * This name should match the primitive type name or fully qualified class
+     * name of the parameters on the signature of the method to which this
+     * parameter will be passed.  
+     * </p>
+     * <p>
+     * For example:
+     * <table>
+     * <tr><td>Method Signature</td><td>Argument Name</td><td>Type value</td></tr>
+     * <tr><td>addToPrice(int price)</td><td>price</td><td><code>int</code></td></tr>
+     * <tr><td>addToPrice(Integer price)</td><td>price</td><td><code>java.lang.Integer</code></td></tr>
+     * </table>
+     *
+     * @param type the type name
+     *
+     * @netui:attribute required="false"
+     */
+    public void setType(String type)
+    {
+        _type = type;
+    }
+
+    /**
+     * Sets the value of the method parameter that will be passed 
+     * to the method call.  This String can be an expression.
+     * If the value is not an expression that references 
+     * an Ojbect, the {@link AbstractCallMethod#doEndTag()} will attempt to convert
+     * the String to type that matches the position of the MethodParameter
+     * tag in the list of MethodParameter tags nested inside of an {@link AbstractCallMethod}
+     * tag.
+     *
+     * @param value a String value which may be an expression
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setValue(Object value)
+    {
+        _value = value;
+    }
+
+    /**
+     * Sets a boolean that describes that the parameter that should be passed
+     * to the method is null.  
+     *
+     * @param isNull a value that describes whether or not this tag should pass null; if
+     * <code>true</code> null will be passed; otherwise the value from the value attribute
+     * will be passed.
+     *
+     * @netui:attribute required="false"
+     */
+    public void setNull(boolean isNull)
+    {
+        _isNull = isNull;
+    }
+
+    /**
+     * Start this tag's lifecycle.  Verify that this tag is nested within
+     * a {@link AbstractCallMethod} tag and that one of the "null" and "value" 
+     * attributes are set.
+     *
+     * @return SKIP_BODY 
+     * @throws JspException if an error occurs getting the parameter
+     */
+    public int doStartTag()
+        throws JspException
+    {
+        Tag parent = getParent();
+        if(parent == null || !(parent instanceof AbstractCallMethod))
+        {
+            String msg = Bundle.getErrorString("Tags_MethodParameter_invalidParent");
+            registerTagError(msg,null);
+            reportErrors();
+            return SKIP_BODY;
+        }
+
+        if(_isNull == false && _value == null)
+        {
+            String msg = Bundle.getErrorString("Tags_MethodParameter_undefinedValue");
+            registerTagError(msg,null);
+            reportErrors();
+            return SKIP_BODY;
+        }
+            
+        return SKIP_BODY;
+    }
+
+    /**
+     * Prepare the value to pass up to the {@link AbstractCallMethod} type
+     * parent.  
+     * 
+     * @return EVAL_PAGE to continue evaluating the page
+     */
+    public int doEndTag()
+        throws JspException
+    {
+        if(!hasErrors())
+        {
+            AbstractCallMethod cm = (AbstractCallMethod)getParent();
+            if(_isNull || _value == null)
+                cm.addParameter(_type, null);
+            else
+                cm.addParameter(_type, _value);
+        }
+
+        if(hasErrors())
+            reportErrors();
+        
+        localRelease();
+        return EVAL_PAGE;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/ObjectNotFoundException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/invoke/ObjectNotFoundException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.invoke;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * An exception thrown when an object on which to invoke a method can not
+ * be found.  The {@link CallMethod#resolveObject()} call throws this exception.
+ */
+public class ObjectNotFoundException
+    extends Exception
+{
+    private String _objectName = null;
+
+    /**
+     * Construct an ObjectNotFoundException.
+     */
+    public ObjectNotFoundException() {super();}
+
+    /**
+     * Construct an ObjectNotFoundException with the given message.
+     *
+     * @param message a String containing the text of the exception message
+     */
+    public ObjectNotFoundException(String message) {super(message);}
+
+    /**
+     * Construct an ObjectNotFoundException with the given cause
+     *
+     * @param cause a <code>Throwable</code> that interfered with the normal lookup of an object.
+     */
+    public ObjectNotFoundException(Throwable cause) {super(cause);}
+    
+    /**
+     * Construct an ObjectNotFoundException with the given <code>message</code> and <code>cause</code>.
+     *
+     * @param message a String containing the text of the exception message
+     * @param cause a <code>Throwable</code> that interfered with the normal lookup of an object.
+     */
+    public ObjectNotFoundException(String message, Throwable cause) {super(message, cause);}
+
+    /**
+     * Construct an ObjectNotFoundException with the given <code>message</code>, <code>cause</code>, and <code>objectName</code>.
+     *
+     * @param message a String containing the text of the exception message
+     * @param cause a <code>Throwable</code> that interfered with the normal lookup of an object.
+     * @param objectName the identifier of the object which could not be looked-up.
+     */
+    public ObjectNotFoundException(String message, Throwable cause, String objectName)
+    {
+        super(message, cause);
+        _objectName = objectName;
+    }
+    
+    /**
+     * Get the name of the object whose lookup failed.
+     *
+     * @return the String name
+     */
+    public String getObjectName()
+    {
+        return _objectName;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/message/Message.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/message/Message.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,168 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.message;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import javax.servlet.jsp.JspException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">resultId</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The Id of the resulting String.</td></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">A <code>pageContext</code> or <code>request</code> data binding expression.</td></tr>
+ * </table>
+ * </p>
+ * 
+ * @example 
+ * The &lt;netui-data:message> tag binds to the string containing the argument
+ * references ({0}, {1}, and so forth), while the &lt;netui-data:messageArg> tags
+ * provide the argument values. In the following example,the &lt;netui-data:message> tag
+ * uses the value attribute to bind to the string, which was earlier added to the
+ * <code>pageContext</code> data binding object, replaces the argument references with the
+ * values provided in the two &lt;netui-data:messageArg> tags, and makes the resulting
+ * string known as <code>message</code> in the <code>pageContext</code>, via its
+ * <code>resultID</code> attribute:
+ * <pre>
+ * &lt;%
+ *     pageContext.setAttribute("msgSkeleton", new String("To read about {0}, go to {1}."));
+ * %&gt;
+ * ...
+ * &lt;netui-data:message value="{pageContext.msgSkeleton}" resultId="message"&gt;
+ *     &lt;netui-data:messageArg value="messaging"/&gt;
+ *     &lt;netui-data:messageArg value="my web page"/&gt;
+ * &lt;/netui-data:message&gt;
+ * ...
+ * &lt;netui:label value="{pageContext.message}"/&gt;
+ * </pre>
+ *
+ * @see MessageArg 
+ * 
+ * @netui:tag name="message" 
+ *            description="Allows you to format messages according to any sequence you want, using one or more values from arguments defined in MessageArg tag(s). The results are available to the page context."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.MessageRenderer" requiredchild="messageArg"
+ *                 whitespace="indent" 
+ */
+public class Message 
+    extends AbstractBaseTag
+{
+    public static final String MESSAGE_ARG_KEY = "netui_bundleMessageArguments";
+
+    private String _resultId = null;
+    private Object _value = null;
+    private List _argList = null;
+
+    public String getTagName()
+    {
+        return "Message";
+    }
+
+    /**
+     *
+     * @netui:attribute required="true"
+     */
+    public void setResultId(String resultId)
+    {
+        _resultId = resultId;
+    }
+
+    /**
+     *
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setValue(Object value)
+    {
+        _value = value;
+    }
+
+    public int doStartTag()
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    public int doEndTag()
+        throws JspException
+    {
+        Object[] args = (_argList != null ? _argList.toArray() : null);
+
+        if(hasErrors())
+        {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+        
+        if(_value == null)
+        {
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        Object exprVal = null;
+        try
+        {
+            exprVal = java.text.MessageFormat.format(_value.toString(), args);
+        }
+        catch(Exception e)
+        {
+            String msg = "Error formatting message \"" + _value.toString() + "\".  Cause: " + e.getLocalizedMessage();
+            registerTagError(msg,null);
+        }
+            
+        if(hasErrors())
+        {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+            
+        Message msgParent = null;
+        // if nested in a <netui-data:message ... /> tag, add the result of this tag as an argument.
+        if((msgParent = (Message)findAncestorWithClass(this, Message.class)) != null)
+        {
+            msgParent.addMessageArgument(exprVal);
+        }
+        else pageContext.setAttribute(_resultId, exprVal);
+
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    public void addMessageArgument(Object messageArgument)
+    {
+        if(_argList == null)
+            _argList = new ArrayList();
+        
+        _argList.add(messageArgument);
+    }
+
+    protected void localRelease()
+    {
+        super.localRelease();
+        _argList = null;
+        _value = null;
+        _resultId = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/message/MessageArg.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/message/MessageArg.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.message;
+
+// java imports
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+
+// internal imports
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+// external imports
+/**
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A String value for the argument.</td></tr>
+ * </table>
+ * </p>
+ * @example 
+ * <p>For an example that uses the &lt;netui-data:message> tag and &lt;netui-data:messageArg&gt;
+ * tags, see the <a href="message.html">&lt;netui-data:message></a> description.
+ * 
+ * @see Message  
+ * 
+ * @netui:tag name="messageArg" 
+ *            description="Allows you to set values that are used as arguments to the Message tag. The formatted message results are available to the page context."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.MessageArgRenderer" 
+ *                 requiredparent="message" 
+ *                 requiredchild="#nothing" 
+ *                 bodycontentpref="empty"
+ *                 whitespace="indent"
+ */
+public class MessageArg
+    extends AbstractBaseTag
+{
+    private Object _value = null;
+
+    public String getTagName()
+    {
+        return "MessageArg";
+    }
+
+    /**
+     *
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setValue(Object value)
+    {
+        this._value = value;
+    }
+
+    public int doStartTag()
+        throws JspException
+    {
+        // verify parent tag
+        if(!(getParent() instanceof Message))
+        {
+            throw new JspException("Invalid Parent");
+        }
+        
+        return EVAL_BODY_BUFFERED;
+    }
+
+    public int doEndTag()
+        throws JspException
+    {
+        if(hasErrors())
+            reportErrors();
+        else ((Message)getParent()).addMessageArgument(_value);
+
+        localRelease();
+        
+        return EVAL_PAGE;
+    }
+
+    protected void localRelease()
+    {
+        super.localRelease();
+        _value = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/pageinput/DeclarePageInput.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/pageinput/DeclarePageInput.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,251 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.pageinput;
+
+// java imports
+import java.util.Map;
+
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * <p>
+ * The DeclarePageInput tag is used to declare variables that are passed to the page from
+ * the page flow.  A page input variable has a lifetime of the page in which it
+ * is declared and can be referenced using the <code>pageInput</code> data binding context.
+ * The <code>name</code> attribute here is used as the identifier for the variable inside
+ * of this binding context, and the <code>type</code> attribute is used to identify 
+ * the expected type of this variable.
+ * </p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr><tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">name</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The name of a variable that can be referenced in the page input data binding context.</td></tr>
+ * <tr><th rowspan="2">required</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A flag that declares whether this page input is required to be available in the set 
+                       of page inputs where Map.containsKey(name) must return true
+ * </td></tr>
+ * <tr><th rowspan="2">type</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The type of the variable referenced in the page input data binding context.</td></tr>
+ * </table>
+ * </p>
+ * 
+ * @example 
+ * This sample shows how a variable, <code>foo</code>, is defined in the page flow, and its value is
+ * passed into one of the page flow's JSP pages by using the &lt;netui-data:declarePageInput> tag. 
+ * <pre>
+ * ...
+ *  /**
+ *   &#x2a; &#x40;jpf:action
+ *   &#x2a; &#x40;jpf:forward name="simple" path="simple.jsp"
+ *   &#x2a;/ 
+ *   public Forward simple()
+ *   {
+ *       Forward f = new Forward("simple");
+ *       f.addPageInput("fooBean", new FooBean());
+ *       return f;
+ *   }
+ *  ...
+ *  public static class FooBean
+ *  {
+ *      private String foo = "A Foo String";
+ * 
+ *      public String getFoo()
+ *      {
+ *          return foo;
+ *      }
+ *  
+ *      public void setFoo(String foo)
+ *      {
+ *          this.foo = foo;
+ *      }
+ *  }
+ * ...
+ * </pre>
+ * <p>Then in a JSP page that is part of this page flow:</p>
+ * <pre>
+ * &lt;netui-data:declarePageInput name="fooBean" type="pageInput.PageInputController.FooBean"/>
+ * ...
+      fooBean.foo: &lt;netui:label value="{pageInput.fooBean.foo}" /> 
+ * ...
+ * </pre>
+ * <p>At design time each &lt;netui-data:declarePageInput> tag, once added to a JSP page,
+ * enables an additional WebLogic Workshop IDE feature in which the properties on the source
+ * object can be discovered. For more information, see the sample's source files:
+ * <p>&lt;WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/pageInput</p>
+ * 
+ * @netui:tag name="declarePageInput" description="Use this tag to declare a page input variable that is available in the pageInput databinding context."
+ * @netui.tldx:tag requiredchild="#nothing" 
+ *                 renderer="workshop.netui.jspdesigner.tldx.DeclarePageInputRenderer"
+ *                 bodycontentpref="empty"
+ *                 netuiexpressioninfo="org.apache.beehive.netui.tags.databinding.pageinput.DeclarePageInputInfo"
+ */
+public class DeclarePageInput
+    extends AbstractBaseTag
+{
+    private static final Logger logger = Logger.getInstance(DeclarePageInput.class);
+    private static final String EMPTY_STRING = "";
+
+    private String _type = null;
+    private String _name = null;
+    private boolean _required = false;
+
+    /**
+     * Set the name of a variable that can be referecned using the page 
+     * input data binding context.
+     *
+     * @param name the name of the variable
+     *
+     * @netui:attribute required="true"
+     */
+    public void setName(String name)
+    {
+        _name = name;
+    }
+
+    /**
+     * Get the name of the variable that can be referenced using the page
+     * input data binding context.
+     */
+    public String getName()
+    {
+        return _name;
+    }
+    
+    /**
+     * Set the required attribute.  If a Page Input is required, the tag will report an 
+     * error if the page input key does not appear in the set of page inputs
+     * for a page.
+     *
+     * @param required whether to require the page input for the page
+     *
+     * @netui:attribute required="false"
+     */
+    public void setRequired(boolean required)
+    {
+        _required = required;
+    }
+
+    /**
+     * Get the required attribute that forces a page input to be 
+     * present for a page.
+     */
+    public boolean getRequired()
+    {
+        return _required;
+    }
+
+    /**
+     * Set the type of the variable that referenced with the 
+     * {@link #setName} attribute on this tag.
+     *
+     * @param type the type of the variable that is referenced
+     *
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute extype="java-classname"
+     */
+    public void setType(String type)
+    {
+        _type = type;
+    }
+
+    /**
+     * Get the type of the variable that referenced with the 
+     * {@link #setName} attribute on this tag.
+     */
+    public String getType()
+    {
+        return _type;
+    }
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName() 
+    {
+        return "DeclarePageInput";
+    }
+
+    /**
+     * @return SKIP_BODY as this tag does not evaluate its body
+     */
+    public int doStartTag()
+    {
+        return SKIP_BODY;
+    }
+
+    /**
+     * @return EVAL_PAGE as this tag always continues to evaluate the page
+     */
+    public int doEndTag()
+        throws JspException
+    {
+        if(logger.isDebugEnabled()) logger.debug("Added a page input named \"" + _name + "\" of type \""  + _type + "\"");
+
+        if(_name.equals(EMPTY_STRING))
+        {
+            String msg = Bundle.getErrorString("Tags_DeclarePageInput_EmptyName");
+            registerTagError(msg,null);
+        }
+
+        if(_type.equals(EMPTY_STRING))
+        {
+            String msg = Bundle.getErrorString("Tags_DeclarePageInput_EmptyType");
+            registerTagError(msg,null);
+        }
+
+        Map actionOutputMap = InternalUtils.getActionOutputMap(pageContext.getRequest(), false);
+        if(_required && 
+           (actionOutputMap == null || !actionOutputMap.containsKey(_name)))
+        {
+            String msg = Bundle.getErrorString("Tags_DeclarePageInput_Required", new Object[] {_name});
+            registerTagError(msg, null);
+        }
+
+        if(hasErrors())
+            reportErrors();
+
+        localRelease();
+
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _type = null;
+        _name = null;
+        _required = false;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/Repeater.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/Repeater.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,688 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.repeater;
+
+// java imports
+import java.util.Iterator;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TryCatchFinally;
+
+// internal imports
+import org.apache.beehive.netui.script.common.DataAccessProviderBean;
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+import org.apache.beehive.netui.script.common.DataAccessProviderStack;
+
+import org.apache.beehive.netui.tags.DataSourceTag;
+
+import org.apache.beehive.netui.tags.databinding.repeater.pad.PadContext;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.exception.LocalizedUnsupportedOperationException;
+import org.apache.beehive.netui.util.iterator.IteratorFactory;
+import org.apache.beehive.netui.util.iterator.IteratorFactoryException;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * The &lt;netui-data:repeater> tag is a markup-generic tag that repeats over a data set.
+ * The repeater tag set is used to render data from a data set into a page.  The repeater
+ * itself does not render any markup. Instead, the markup from its contained tags is
+ * rendered to create the content generated by this tag.  The tags in the repeater tag
+ * set are as follows:
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><td><b>Tag</b></td><td><b>Description</b></td></tr>
+ * <tr><td>{@link RepeaterHeader}</td><td>Renders once in the {@link #HEADER} state.</td></tr>
+ * <tr><td>{@link RepeaterItem}</td><td>Renders once in the {@link #ITEM} state.</td></tr>
+ * <tr><td>{@link RepeaterFooter}</td><td>Renders once in the {@link #FOOTER} state.</td></tr>
+ * <tr><td>{@link org.apache.beehive.netui.tags.databinding.repeater.pad.Pad}</td><td>Used to convert irregular data sets into regular data sets through padding or truncating the output.</td></tr>
+ * </table>
+ * <p>The repeater can render in two modes; the first mode is a simple mode where the body of
+ * the repeater is rendered once for each item in the data set.  In this case, none of the 
+ * other tags above are present in the repeater body.  For example, the following will
+ * render an unordered HTML list of items that are list items which contain the lastName, firstName 
+ * of the current "customer" in the data set.</p>
+ * <pre>
+ * &lt;ul&gt;
+ * &lt;netui-data:repeater dataSource="{pageFlow.customers}"&gt;
+ *     &lt;li&gt;&lt;netui:label value="{container.item.lastName}, {container.item.firstName}"/&gt;&lt;/li&gt;
+ * &lt;/netui-data:repeater&gt;
+ * &lt;/ul&gt;
+ * </pre>
+ * <p>The second mode is a more structured mode
+ * of rendering where the tags above are used to delineate iteration boundaries on the body of 
+ * a &lt;netui-data:repeater> tag.  In this case, if one of the above tags is present,
+ * any content directly in the body of the repeater is not rendered; rather, the content
+ * inside the structured tags of the repeater is rendered.</p>
+ * <p>For example, the following will render the same output as the example 
+ * shown above, but it uses the structured tags for rendering the
+ * <code>{pageFlow.customers}</code> expression:</p>
+ * <pre>
+ * &lt;netui-data:repeater dataSource="{pageFlow.customers}"&gt;
+ *     &lt;netui-data:repeaterHeader&gt;
+ *         &lt;ul&gt;
+ *     &lt;/netui-data:repeaterHeader&gt;
+ *     &lt;netui-data:repeaterItem&gt;
+ *         &lt;li&gt;&lt;netui:label value="{container.item.lastName}, {container.item.firstName}"/&gt;&lt;/li&gt;
+ *     &lt;/netui-data:repeaterItem&gt;
+ *     &lt;netui-data:repeaterFooter&gt;
+ *         &lt;/ul&gt;
+ *     &lt;/netui-data:repeaterFooter&gt;
+ * &lt;/netui-data:repeater&gt;
+ * </pre>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">defaultText</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The text that is rendered if the data set is null or contains zero items.</td></tr>
+ * <tr><th rowspan="2">ignoreNulls</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean to set if rendering a sparse data set that can contain nulls which should be ignored.</td></tr>
+ * </table>
+ * </p>
+ * 
+ * @example 
+ * <p>You can find samples that use the &lt;netui-data:repeater> tag and
+ * related tags in the following WebLogic Workshop samples:</p>
+ * <p>&lt;WEBLOGIC_HOME>\samples\workshop\SamplesApp\WebApp\repeaterTag</p>
+ * <p>&lt;WEBLOGIC_HOME>\samples\workshop\SamplesApp\WebApp\choiceTag</p>
+ *
+ * @see RepeaterHeader 
+ * @see RepeaterItem 
+ * @see RepeaterFooter 
+ * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+ *
+ * @netui:tag name="repeater" description="A markup-generic tag that repeats over a data set, and renders the data onto the page."
+ * @netui.tldx:tag whitespace="indent" 
+ *                 netuiexpressioninfo="org.apache.beehive.netui.tags.databinding.repeater.RepeaterInfo" 
+ *                 renderer="workshop.netui.jspdesigner.tldx.RepeaterRenderer"
+ */
+public class Repeater
+    extends DataSourceTag
+    implements IDataAccessProvider, TryCatchFinally
+{
+    private static final Logger _logger = Logger.getInstance(Repeater.class);
+
+    /**
+     * A Repeater rendering state that signals the beginning of repeater rendering.
+     */
+    public static final int INIT = 0;
+
+    /**
+     * A Repeater rendering state that signals the rendering of the HEADER.
+     * The body renders in the HEADER state once.
+     */
+    public static final int HEADER = 1;
+
+    /**
+     * A Repeater rendering state that signals the rendering of the ITEM.
+     * The body renders in the ITEM state once for each item in the 
+     * data set.
+     */
+    public static final int ITEM = 2;
+
+    /**
+     * A Repeater rendering state that signals the rendering of the FOOTER.
+     * The body renders in the FOOTER state once.
+     */
+    public static final int FOOTER = 3;
+
+    /**
+     * A Repeater rendering state that signals the end of repeater rendering.
+     */
+    public static final int END = 4;
+    
+    private static final int HAVE_NOTHING = 0x000;
+    private static final int HAVE_HEADER = 0x001;
+    private static final int HAVE_ITEM = 0x010;
+    private static final int HAVE_FOOTER = 0x100;
+
+    private boolean _ignoreNulls = false;
+    private int _currentIndex = -1;
+    private int _have = HAVE_NOTHING;
+    private int _renderedItems = 0;
+    private int _renderState = INIT;
+    private Object _defaultText = null;
+    private Object _currentItem = null;
+    private Iterator _iterator = null;
+    private PadContext _padContext = null;
+    private StringBuilder _contentBuffer = null;
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName() 
+    {
+        return "Repeater";
+    }
+    
+    /**
+     * Set a boolean that describes whether the repeater should ignore null
+     * items encountered while iterating over a data set.
+     * 
+     * @param ignoreNulls whether or not to ignore nulls
+     *
+     * @netui:attribute required="false"
+     */
+    public void setIgnoreNulls(boolean ignoreNulls)
+    {
+        _ignoreNulls = ignoreNulls;
+    }
+
+    /**
+     *
+     * @param padContext
+     */
+    public void setPadContext(PadContext padContext)
+    {
+        if(_padContext == null)
+            _padContext = padContext;
+
+        if(_logger.isDebugEnabled()) _logger.debug("Repeater has a padContext with text: " + _padContext);
+
+        return;
+    }
+
+    /**
+     * Set the text that will be rendered if the dataSource expression
+     * references a null object and the defaultText attribute is non-null.
+     *
+     * @param defaultText the default text
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setDefaultText(Object defaultText)
+    {
+        _defaultText = defaultText;
+    }
+
+    /**
+     * Get the index of the current iteration through the body of this tag.  This 
+     * data can be accessed using the expression <code>container.index</code> 
+     * on an attribute of a databindable NetUI tag that is contained within the 
+     * repeating body of this tag.  This expression is only valid when the dataset 
+     * is being rendered.
+     * 
+     * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+     * @return the integer index of the current data item in the data set
+     */
+    public int getCurrentIndex()
+    {
+        return _currentIndex;
+    }
+
+    /**
+     * Get the item that is currently being rendered by this repeating tag.  
+     * This can be accessed using the expression <code>expression.item</code>
+     * on an attribute of a databindable NetUI tag that is contained within 
+     * the repeating body of this tag.  The expression is only valid when the dataset 
+     * is being rendered.
+     * 
+     * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+     * @return the current item in the data set
+     */
+    public Object getCurrentItem()
+    {
+        return _currentItem;
+    }
+
+    /**
+     * Get the metadata for the current item.  This method is not supported by 
+     * this tag.
+     * 
+     * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+     * @throws UnsupportedOperationException this tag does not support this method from the IDataAccessProvider interface
+     */
+    public Object getCurrentMetadata()
+    {
+        LocalizedUnsupportedOperationException uoe = 
+            new LocalizedUnsupportedOperationException("The " + getTagName() + "does not export metadata for its iterated items.");
+        uoe.setLocalizedMessage(Bundle.getErrorString("Tags_DataAccessProvider_metadataUnsupported", new Object[] {getTagName()}));
+        throw uoe;
+    }
+
+    /**
+     * Get the parent IDataAccessProvider for this tag.  If this tag is contained within
+     * a IDataAccessProvider, the containing IDataAccessProvider is available through the 
+     * expression <code>container.container</code>.  Any valid properties of the
+     * parent IDataAccessProvider can be accessed through this expression.  This method 
+     * will return null if there is no parent IDataAccessProvider
+     * 
+     * @see org.apache.beehive.netui.script.common.IDataAccessProvider
+     * @return a containing IDataAccessProvider if one exists, null otherwise.
+     */
+    public IDataAccessProvider getProviderParent()
+    {
+        return (IDataAccessProvider)findAncestorWithClass(this, IDataAccessProvider.class);
+    }
+
+    /**
+     * Get the current render state for the repeater.  This tag is used by child tags
+     * to access the current location in the repeater's rendering lifecycle.  
+     * 
+     * @return an integer that represents the current state of the grid; this is one
+     * of {@link #INIT}, {@link #HEADER}, {@link #ITEM},{@link #FOOTER}, or {@link #END}.
+     */
+    public int getRenderState()
+    {
+        return _renderState;
+    }
+
+    /**
+     * Add content to the content that is being buffered by this tag.  All content 
+     * written by the body of this tag is added to this buffer.  The buffer is rendered
+     * at the end of the tag's lifecycle if no fatal errors have occurred during this 
+     * tag's lifecycle.
+     *
+     * @param content content that this tag should render.
+     */
+    public void addContent(String content)
+    {
+        if(_contentBuffer == null)
+        {
+            int size = (content != null ? (5*content.length()) : 1024);
+            _contentBuffer = new StringBuilder(size);
+        }
+        
+        _contentBuffer.append(content);
+    }
+
+    /**
+     *
+     *
+     * @param repeaterComponent {@link RepeaterComponent} to register with the Repeater parent
+     */
+    public void registerChildTag(RepeaterComponent repeaterComponent)
+    {
+        if(_renderState < HEADER && repeaterComponent instanceof RepeaterHeader)
+            _have |= HAVE_HEADER;
+        else if(repeaterComponent instanceof RepeaterFooter)
+            _have |= HAVE_FOOTER;
+        else if(repeaterComponent instanceof RepeaterItem)
+            _have |= HAVE_ITEM;
+    }
+
+    /**
+     *
+     * 
+     * @return SKIP_BODY if an error occurs; EVAL_BODY_BUFFERED otherwise
+     * @throws JspException if an error occurs that can not be reported in the page
+     */
+    public int doStartTag()
+        throws JspException
+    {
+        Object source = null;
+
+        if(getDataSource() != null)
+            source = evaluateDataSource();
+
+        // report any errors that may have occured 
+        if (hasErrors())
+            return SKIP_BODY;
+
+        _renderState = INIT;
+
+        boolean empty = false;
+        if(source != null)
+        {
+            _iterator = IteratorFactory.createIterator(source);
+            if (_iterator == null)
+            {
+                String msg = Bundle.getString("Tags_Repeater_nullIterator");
+                if (_logger.isWarnEnabled()) _logger.warn(msg);
+                _iterator = IteratorFactory.EMPTY_ITERATOR;
+            }
+
+            // report any errors that may have occured
+            if (hasErrors())
+                return SKIP_BODY;
+            
+            if(_iterator != null && _iterator.hasNext())
+            {
+                _currentIndex = 0;
+                _currentItem = _iterator.next();
+
+                if(_ignoreNulls && _currentItem == null)
+                {
+                    // doStartTag doesn't know if the repeater is structured or unstructured
+                    // thus, if ignoreNulls is true, it's go to make an attempt to go 
+                    // through the body with a non-null item.  if there are no non-null
+                    // items in the data structure, the doAfterBody method will handle
+                    // this correctly, but a data structure with a null first item 
+                    // will render the same as a data structure with a null second item
+                    advanceToNonNullItem();
+
+                    // currentItem may be null here
+
+                    if(_currentItem == null)
+                        empty = true;
+                }
+            }
+            // there is no data set of there are zero items in the iterator
+            else if(_iterator == null || !_iterator.hasNext())
+                empty = true;
+        }
+        // the dataSource evaluated to null
+        else empty = true;
+
+        // TODO: optimize -- this doesn't need to happen when the data set is empty
+        DataAccessProviderStack.addDataAccessProvider(this, pageContext);
+
+        if(empty)
+        {
+            // if the defaultText attribute is non-null, it will be evaluated as an expression
+            // and rendered to the page
+            if(_defaultText != null)
+            {
+                addContent(_defaultText.toString());
+            }
+
+            // the data Iterator was either empty or contained zero non-null items (if _ignoreNulls=true)
+            // skip the body and go straight to doEndTag
+            return SKIP_BODY;
+        }
+        else return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * 
+     * @return SKIP_BODY if an error occurs or the data set has been rendered; EVAL_BODY_AGAIN otherwise
+     */
+    public int doAfterBody()
+    {
+        if(hasErrors())
+            return SKIP_BODY;
+
+        boolean kids = (_have > 0 ? true : false);
+        
+        if(_logger.isDebugEnabled()) _logger.debug("structured repeater: " + kids + " render state: " + renderStateToString(_renderState));
+
+        // structured rendering of the repeater; body content is ignored and real
+        // content is rendered through cooperating nested tags
+        if(kids)
+            return renderStructured();
+        // unstructured rendering of the repeater; this means that there isn't
+        // a repeater(Header|Item|Footer) inside the body of the repeater.
+        else
+        {
+            if (bodyContent != null)
+            {
+                addContent(bodyContent.getString());
+                bodyContent.clearBody();
+            }
+
+            if (_iterator.hasNext())
+            {
+                _currentIndex++;
+                _currentItem = _iterator.next();
+
+                if (_ignoreNulls && _currentItem == null)
+                {
+                    advanceToNonNullItem();
+
+                    // ignoring null items and no more non-null items, so skip to doEndTag()
+                    if (_currentItem == null) return SKIP_BODY;
+                }
+
+                // found another item; re-render the repeater's body
+                return EVAL_BODY_AGAIN;
+            }
+            // no more items; skip to doEndTag()
+            else return SKIP_BODY;
+        }
+    }
+
+    /**
+     *
+     * @return EVAL_PAGE
+     * @throws JspException if an error occurs that can not be reported in the page
+     */
+    public int doEndTag()
+        throws JspException
+    {
+        if(hasErrors())
+            reportErrors();
+        else if(_contentBuffer != null)
+            write(_contentBuffer.toString());
+
+        DataAccessProviderStack.removeDataAccessProvider(pageContext);
+
+        return EVAL_PAGE;
+    }
+
+    public void doFinally()
+    {
+        localRelease();
+    }
+
+    public void doCatch(Throwable t)
+        throws Throwable
+    {
+        throw t;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        if(bodyContent != null) 
+            bodyContent.clearBody();
+        
+        _currentItem = null;
+        _currentIndex = -1;
+        _iterator = null;
+        _defaultText = null;
+        _renderState = INIT;
+        _have = HAVE_NOTHING;
+        _contentBuffer = null;
+        _padContext = null;
+        _ignoreNulls = false;
+        _renderedItems = 0;
+    }
+
+    /**
+     * Render a the repeater using the full repeater lifecycle.  This 
+     * method is executed after each pass through the body if there
+     * are tags from the repeater tag set in the body of this repeater.  
+     * This method ensures that the repeater tag runs as a full state
+     * machine for these tags.
+     *
+     * @return EVAL_BODY_AGAIN unless the lifecycle has completed; then return SKIP_BODY
+     */
+    // TODO: optimize the number of trips through the body by ignoring the header / footer when necessary
+    private int renderStructured()
+    {
+        if(_logger.isDebugEnabled() && _padContext != null)
+            _logger.debug("\ncurrentIndex: " + _currentIndex + "\n" + 
+                         "checkMaxRepeat: " + _padContext.checkMaxRepeat(_currentIndex) + "\n" + 
+                         "checkMinRepeat: " + _padContext.checkMinRepeat(_currentIndex) + "\n");
+        
+        if(_renderState == INIT)
+        {
+            _renderState = HEADER;
+            return EVAL_BODY_AGAIN;
+        }
+        
+        if(_renderState == HEADER)
+        {
+            assert _currentIndex == 0;
+            assert _renderedItems == 0;
+
+            // this would only happen if Pad.maxRepeat == 0
+            if(_padContext != null && _padContext.checkMaxRepeat(_renderedItems))
+            {
+                _renderState = FOOTER;
+                return EVAL_BODY_AGAIN;
+            }
+
+            if(_currentItem == null && _ignoreNulls)
+            {
+                advanceToNonNullItem();
+                
+                // no non-null item was found; render the footer
+                if(_currentItem == null)
+                {
+                    doPadding();
+                    // render the header
+                    _renderState = FOOTER;
+                }
+                // non-null item found; it's not the 0th item; render it
+                else _renderState = ITEM;
+            }
+            // 0th item is non-null; render it
+            else _renderState = ITEM;
+
+            return EVAL_BODY_AGAIN;
+        }
+
+        if(_renderState == ITEM)
+        {
+            _renderedItems++;
+
+            if(_logger.isDebugEnabled() && _padContext != null)
+                _logger.debug("\ncurrentIndex: " + _currentIndex + "\n" + 
+                              "checkMaxRepeat: " + _padContext.checkMaxRepeat(_currentIndex) + "\n" + 
+                              "checkMinRepeat: " + _padContext.checkMinRepeat(_currentIndex) + "\n");
+   
+            // check that the maximum number of items to render has _not_ been reached
+            if(_iterator.hasNext() && (_padContext == null || (_padContext != null && !_padContext.checkMaxRepeat(_renderedItems))))
+            {
+                _currentIndex++;
+                _currentItem = _iterator.next();
+
+                if(_ignoreNulls && _currentItem == null)
+                {
+                    advanceToNonNullItem();
+                    
+                    // last item
+                    if(_currentItem == null)
+                    {
+                        doPadding();
+
+                        // render the header
+                        _renderState = FOOTER;
+                        return EVAL_BODY_AGAIN;
+                    }
+                }
+
+                // if _ignoreNulls == false, the _currentItem may be null here
+                return EVAL_BODY_AGAIN;
+            }
+            // have finished rendering items for some reason:
+            // 1) there isn't a next item
+            // 2) reached the maximum number of items to render
+            // So:
+            // 1) pad if necessary
+            // 2) render the footer
+            else
+            {
+                doPadding();
+                
+                _renderState = FOOTER;
+                return EVAL_BODY_AGAIN;            
+            }
+        }
+
+        if(_renderState == FOOTER)
+        {
+            _renderState = END;
+            return SKIP_BODY;
+        }
+
+        return SKIP_BODY;
+    }
+
+    /**
+     * <p>
+     * Internal utility method.
+     * </p>
+     * </p>
+     * This is called in places where the repeater needs to move to the next
+     * non-null item in the data set to render.  This occurs when the 
+     * current data item is null and the <code>ignoreNulls</code>
+     * flag has been set to skip rendering null items in the data set.
+     * </p>
+     * <p>
+     * This method side-effects to advance the iterator to the next
+     * non-null item or the end if there are zero remaining non-null
+     * items.
+     * </p>
+     * <p>
+     * At the end, the <code>currentItem</code> may be null, and the
+     * <code>currentIndex</code> will reference either the integer 
+     * location in the data structure of the non-null data item, or
+     * it will reference the end of the data structure.
+     * </p>
+     */
+    private final void advanceToNonNullItem()
+    {
+        assert _iterator != null;
+        assert _currentItem == null;
+
+        while(_iterator.hasNext() && _currentItem == null)
+        {
+            _currentItem = _iterator.next();
+            _currentIndex++;
+        }
+    }
+
+    /**
+     * When using the repeater's pad tag, it is possible to require a minimum number of 
+     * items render in the repeater.  This method pads out the number of items until it
+     * reaches the {@link org.apache.beehive.netui.tags.databinding.repeater.pad.PadContext}'s 
+     * <code>minRepeat</code> property.
+     */
+    private final void doPadding()
+    {
+        if(_padContext != null && !_padContext.checkMinRepeat(_renderedItems))
+        {
+            // since padding is now running, un-set the current item so that the last
+            // item isn't accessible during any later data binding
+            _currentItem = null;
+            
+            for(int i = _renderedItems; !_padContext.checkMinRepeat(i); i++)
+            {
+                _currentIndex++;
+                addContent(_padContext.getPadText());
+            }
+        }
+    }
+
+    /**
+     * An internal method that turns the current render state into a string for debugging.
+     */
+    private static final String renderStateToString(int state)
+    {
+        switch(state)
+        {
+            case INIT: return "INIT";
+            case HEADER: return "HEADER";
+            case ITEM: return "ITEM";
+            case FOOTER: return "FOOTER";
+            case END: return "END";
+            default: return "INVALID STATE";
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterComponent.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterComponent.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.repeater;
+
+// java imports
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.tags.databinding.base.StructuredBaseTag;
+
+import org.apache.beehive.netui.util.Bundle;
+
+// external imports
+
+/**
+ * The base class for tags that are part of the {@link Repeater} tag set
+ * and participate in the structured nature of {@link Repeater} rendering.
+ * This class provides typed access to the {@link Repeater} tag and 
+ * enforces the basic JSP tag parenting requirements of tags that can
+ * only be nested within the {@link Repeater} tag.
+ * @see StructuredBaseTag
+ */
+public abstract class RepeaterComponent
+    extends StructuredBaseTag
+{
+    private Repeater _repeater = null;
+
+    /**
+     * Default implementation of this JSP lifecycle method.
+     * 
+     * @return SKIP_BODY
+     */
+    public int doAfterBody()
+        throws JspException
+    {
+        return SKIP_BODY;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _repeater = null;
+    }
+
+    /**
+     * Default implementation of {@link StructuredBaseTag#renderEndTag(int)}.
+     * This returns EVAL_PAGE.
+     * 
+     * @param state the current render state of the Repeater
+     * @return EVAL_PAGE
+     * @throws JspException if an error occurs that can not be reported in the page
+     */
+    protected int renderEndTag(int state)
+        throws JspException
+    {
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Get the {@link Repeater} parent of this tag.
+     * 
+     * @return the {@link Repeater} parent of this tag
+     */
+    protected final Repeater getRepeater()
+    {
+        return _repeater;
+    }
+
+    /**
+     * Prepare data that is provided to subclasses of this tag.
+     */
+    protected void prepare()
+    {
+        _repeater = (Repeater)getParent();
+
+        _repeater.registerChildTag(this);
+    }
+
+    /**
+     * Default implementation of {@link StructuredBaseTag#getValidContainerType} that 
+     * enforces that the parent of this tag is the {@link Repeater} tag.  Subclasses
+     * may override this method to further specialize the required container type.
+     * 
+     * @return the valid container type of a RepeaterComponent; the Repeater.class
+     */
+    protected Class getValidContainerType()
+    {
+        return Repeater.class;
+    }
+
+    /**
+     * Get the render state of the nearest structured tag.  For subclasses of this
+     * tag, the nearest structured tag is the {@link Repeater} tag.
+     * 
+     * @return the current render state of the Repeater
+     */
+    protected int getCurrentRenderState()
+    {
+        return _repeater.getRenderState();
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterFooter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterFooter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,94 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.repeater;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * This tag is used to render the footer of a {@link Repeater}.  This 
+ * header may contain any markup or tags that can be rendered to a page.  In 
+ * the case of closing a table, ordered list, or unordered list, the elements
+ * &lt;table&gt;, &lt;ol&gt;, and &lt;ul&gt; could respectively be rendered inside
+ * the body of this tag.  Ther is no data item present at the time that the 
+ * RepeaterFooter renders, so tags in the body can not reference the 
+ * <code>container</code> databinding context to access a current item 
+ * or index, though other databinding contexts are available.  
+ * <p>The RepeaterFooter renders exactly once in a table during the {@link Repeater}
+ * tag's {@link Repeater#FOOTER} rendering state.</p>
+ *
+ * @example 
+ * <p>For samples that include the &lt;netui-data:repeaterFooter> tag,
+ * see the <a href="repeater.html">&lt;netui-data:repeater&gt; Tag</a> topic.
+ * Also see the Related Topics below.</p>
+ *  
+ * @see Repeater 
+ * @see RepeaterHeader 
+ * @see RepeaterItem 
+ * 
+ * @netui:tag name="repeaterFooter" description="Use this tag to render the footer of a Repeater."
+ * @netui.tldx:tag  renderer="workshop.netui.jspdesigner.tldx.RepeaterFooterRenderer" whitespace="indent" requiredparent="repeater"
+ */
+public class RepeaterFooter
+    extends RepeaterComponent
+{
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName()
+    {
+        return "RepeaterFooter";
+    }
+
+    /**
+     * Render the start of this tag.  If the repeater render state is {@link Repeater#FOOTER},
+     * the body is evaluated.  Otherwise, the body is skipped.
+     *
+     * @return SKIP_BODY unless the repeater render state is {@link Repeater#FOOTER}, then EVAL_BODY_BUFFERED
+     */
+    public int renderStartTag(int state)
+    {
+        if(state == Repeater.FOOTER)
+            return EVAL_BODY_BUFFERED;
+        else return SKIP_BODY;
+    }
+
+    /**
+     * Render the content of the body to the Repeater tag.
+     *
+     * @return SKIP_BODY
+     */
+    public int doAfterBody()
+    {
+        getRepeater().addContent(bodyContent.getString());
+        return SKIP_BODY;
+    }
+
+    protected void localRelease()
+    {
+        super.localRelease();
+        if(bodyContent != null) bodyContent.clearBody();
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterHeader.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterHeader.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.repeater;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * This tag is used to render the header of a {@link Repeater}.  This header may contain
+ * any markup or tags that can be rendered to a page.  In the case of starting a 
+ * table, ordered list, or unordered list, the HTML elements &lt;table&gt;, &lt;ol&gt;,
+ * and &lt;ul&gt; could respectively be rendered inside the body of this tag.
+ * There is no data item present at the time that the RepeaterHeader renders, so tags in the 
+ * body can not reference the <code>container</code> databinding context to access
+ * a current item or index, though other databinding contexts are available.
+ * <p>The RepeaterHeader renders exactly once in a table during the {@link Repeater}
+ * tag's {@link Repeater#HEADER} rendering state.</p>
+ *
+ * @example 
+ * <p>For samples that include the &lt;netui-data:repeaterHeader> tag,
+ * see the <a href="repeater.html">&lt;netui-data:repeater&gt; Tag</a> topic.
+ * Also see the Related Topics below.</p>
+ * 
+ * @see Repeater 
+ * @see RepeaterItem 
+ * @see RepeaterFooter 
+ * 
+ * @netui:tag name="repeaterHeader" description="Use this tag to render the header of a Repeater."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.RepeaterHeaderRenderer" whitespace="indent" requiredparent="repeater"
+ */
+public class RepeaterHeader
+    extends RepeaterComponent
+{
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName() 
+    {
+        return "RepeaterHeader";
+    }
+
+    /**
+     * Render the start of this tag.  If the repeater render state is {@link Repeater#HEADER},
+     * the body is evaluated.  Otherwise, the body is skipped.
+     *
+     * @return SKIP_BODY unless the repeater render state is {@link Repeater#HEADER}, then EVAL_BODY_BUFFERED
+     */
+    public int renderStartTag(int state)
+    {
+        if(state == Repeater.HEADER)
+            return EVAL_BODY_BUFFERED;
+        else return SKIP_BODY;
+    }
+
+    /**
+     * Render the content of the body to the Repeater tag.
+     *
+     * @return SKIP_BODY
+     */
+    public int doAfterBody()
+    {
+        getRepeater().addContent(bodyContent.getString());
+        
+        return SKIP_BODY;
+    }
+
+    protected void localRelease()
+    {
+        super.localRelease();
+        if(bodyContent != null) bodyContent.clearBody();
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterItem.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/RepeaterItem.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,101 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.repeater;
+
+// java imports
+import javax.servlet.jsp.JspException;
+
+// internal imports
+
+// external imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+
+/**
+ * This tag is used to render each item in the data set.  The items in the data set are 
+ * provided by this tag's Repeater parent and are available for databinding using the
+ * <code>container</code> databinding context.  The current item is referenced
+ * using the <code>container.item</code> expression.
+ * <p>The RepeaterItem tag can only be uesd when directly contained by a Repeater tag, and 
+ * a RepeaterItem is rendered during the Repeater's {@link Repeater#ITEM} rendering state.</p>
+ * <p>By default, the RepeaterItem simply renders its body once for each of the items in the 
+ * Repeater tag's data set.</p>
+ *
+ * @example 
+ * <p>For samples that include the &lt;netui-data:repeaterItem> tag,
+ * see the <a href="repeater.html">&lt;netui-data:repeater&gt; Tag</a> topic.
+ * Also see the Related Topics below.</p>
+ * 
+ * @see Repeater
+ * @see RepeaterHeader
+ * @see RepeaterFooter
+ *  
+ * @netui:tag name="repeaterItem" description="Use this tag to render each item in the data set."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.RepeaterItemRenderer" whitespace="indent" requiredparent="repeater"
+ */
+public class RepeaterItem
+    extends RepeaterComponent
+{
+    private static final Logger _logger = Logger.getInstance(RepeaterItem.class);
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName() 
+    {
+        return "RepeaterItem";
+    }
+
+    /**
+     * Render the start of this tag.  If the repeater render state is {@link Repeater#ITEM},
+     * the body is evaluated.  Otherwise, the body is skipped.
+     *
+     * @return SKIP_BODY unless the repeater render state is {@link Repeater#ITEM}, then EVAL_BODY_BUFFERED
+     */
+    public int renderStartTag(int state)
+    {
+        if(state == Repeater.ITEM)
+            return EVAL_BODY_BUFFERED;
+        else return SKIP_BODY;
+    }
+
+    /**
+     * @return SKIP_BODY if the item has completed rendering; EVAL_BODY_BUFFERED if the body should render again.
+     */
+    public int doAfterBody()
+        throws JspException
+    {
+        if(bodyContent != null)
+            getRepeater().addContent(bodyContent.getString());
+
+        return SKIP_BODY;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        if(bodyContent != null) bodyContent.clearBody();
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/pad/Pad.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/pad/Pad.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,239 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.repeater.pad;
+
+// java imports
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.tags.databinding.repeater.RepeaterComponent;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * <p>
+ * A tag that affects the number of items that are rendered in a
+ * {@link org.apache.beehive.netui.tags.databinding.repeater.Repeater}.
+ * The Pad tag has the ability to turn an irregular data set in the
+ * {@link org.apache.beehive.netui.tags.databinding.repeater.Repeater}
+ * into a regular dataset through the use of the three attributes on the Pad tag.  The Pad tag can 
+ * truncate the rendering of a data set if enough items have been rendered or can 
+ * pad a default item text onto the end of a data set that is not big enough.  If the padText attribute
+ * is unset, the body of the Pad tag is used as the padText.
+ * </p>
+ * <p>
+ * Note, the <code>container</code> data binding context should not be used inside
+ * of the Pad's <code>padText</code> attribute as binding to both the <code>item</code> 
+ * and <code>index</code> could product unexpected results.
+ * </p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">maxRepeat</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">The maximum number of times a {@link org.apache.beehive.netui.tags.databinding.repeater.RepeaterItem} will render.</td></tr>
+ * <tr><th rowspan="2">minRepeat</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">The minimum number of times a {@link org.apache.beehive.netui.tags.databinding.repeater.RepeaterItem} will render.</td></tr>
+ * <tr><th rowspan="2">padText</th><td>No</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">The text to use when padding a Repeater that has rendered too few items.</td></tr>
+ * </table>
+ * </p>
+ * 
+ * @example 
+ * For example, if in an array of {@link java.util.List} objects, each {@link java.util.List}
+ * object has a different size, the items that are rendered from each list can be padded 
+ * or truncated so exactly five items are rendered in each row.  
+ *
+ * @see org.apache.beehive.netui.tags.databinding.repeater.Repeater
+ *  
+ * @netui:tag name="pad" description="Affects the number of items that are rendered in a Repeater."
+ * @netui.tldx:tag requiredparent="repeater" output="|$children|" whitespace="indent"
+ */
+public class Pad
+    extends RepeaterComponent
+{
+    private static final Logger _logger = Logger.getInstance(Pad.class);
+
+    private static final String EMPTY_STRING = "";
+
+    private String _padText = null;
+    private Integer _maxRepeat = null;
+    private Integer _minRepeat = null;
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName()
+    {
+        return "Pad";
+    }
+
+    /**
+     * Set the text that will be used when padding a Repeater that 
+     * renders its body too few times.
+     * 
+     * @param padText the text that is used to pad a repeater's content
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setPadText(String padText)
+    {
+        _padText = padText;
+    }
+
+    /**
+     * Set the maximum number of items that will be rendered by a Repeater.
+     * If the size of the data set is greater than this, only this many
+     * items will be rendered.  This value can be a String of an integer
+     * or can be an expression that references an integer.
+     * 
+     * @param maxRepeat an integer or an expression that references an integer
+     * for the maximum number of items to render
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setMaxRepeat(int maxRepeat)
+    {
+        _maxRepeat = new Integer(maxRepeat);
+    }
+
+    /**
+     * Set the minimum number of items that will be rendered by a Repeater.
+     * If the size of the data set is smaller than this, the data set will
+     * be padded with value of the pad text attribute.
+     *
+     * @param minRepeatString an integer or an expression that references
+     * an integer for the minimum number of items to render
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setMinRepeat(int minRepeat)
+    {
+        _minRepeat = new Integer(minRepeat);
+    }
+
+    /**
+     * Render the body of this tag and buffer the output.  If 
+     * the padText attribute is unset, the body content is used instead.
+     */
+    public int renderStartTag(int state)
+        throws JspException
+    {
+        if(_padText == null)
+            return EVAL_BODY_BUFFERED;
+        else return SKIP_BODY;
+    }
+
+    /**
+     * Complete rendering the body of this tag.  If the padText property was unset, 
+     * the body of the tag is used as the pad text.
+     *
+     * @param state the current render state of the Repeater
+     * @return EVAL_PAGE
+     * @throws JspException if an error occurs that can not be reported on the page
+     */
+    public int renderEndTag(int state) 
+        throws JspException
+    {
+        if(_padText == null)
+        {
+            _padText = bodyContent.getString();
+        }
+        else
+        {
+            _padText = _padText != null ? _padText : EMPTY_STRING;
+        }
+
+        if(hasErrors())
+        {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        PadContext pc = new PadContext(_padText,
+                                       (_minRepeat != null ? _minRepeat.intValue() : PadContext.DEFAULT_VALUE),
+                                       (_maxRepeat != null ? _maxRepeat.intValue() : PadContext.DEFAULT_VALUE));
+        
+        getRepeater().setPadContext(pc);
+        
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        if(bodyContent != null) bodyContent.clearBody();
+        _padText = null;
+        _maxRepeat = null;
+        _minRepeat = null;
+    }
+
+    /**
+     * Verify that the attributes set on the tag are correct.  Check:
+     * <ul>
+     * <li>The minRepeat value can be converted into an integer</li>
+     * <li>The maxRepeat value can be converted into an integer</li>
+     * <li>The minRepeat value is less than or equal to the maxRepeat value</li>
+     * </ul>
+     *
+     * @throws JspException if an error occurs that can not be reported on the page
+     */
+    protected void verifyAttributes()
+        throws JspException
+    {
+        if(_maxRepeat != null && _maxRepeat.intValue() <= 0)
+        {
+            String msg = Bundle.getErrorString("Tags_Pad_intTooSmall", new Object[] {_maxRepeat, "maxRepeat"});
+            getRepeater().registerTagError(msg, null);
+        }
+
+        if(_minRepeat != null && _minRepeat.intValue() <= 0)
+        {
+            String msg = Bundle.getErrorString("Tags_Pad_minRepeatIntTooSmall", new Object[] {_minRepeat, "minRepeat"});
+            getRepeater().registerTagError(msg, null);
+        }
+
+        // check composite properties
+        if(_maxRepeat != null &&
+           _minRepeat != null &&
+           _minRepeat.intValue() > _maxRepeat.intValue())
+        {
+            if(_logger.isWarnEnabled())
+            {
+                String msg = "The value of maxRepeat (" + _maxRepeat + ") must be greater than the value of minRepeat (" + 
+                    _minRepeat + ") on the Repeater Pad tag.";
+                _logger.warn(msg);
+            }
+
+            String msg = Bundle.getErrorString("Tags_Pad_minGreaterThanMax", new Object[] {_maxRepeat, _minRepeat});
+            getRepeater().registerTagError(msg,null);
+        }
+    }
+}
+

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/pad/PadContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/repeater/pad/PadContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,133 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.repeater.pad;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * A JavaBean that encapsulates the data needed to pad a Repeater with
+ * text.  The PadContext is needed if the given consttraints, the 
+ * minRepeat and maxRepeat attributes, require that the data rendered
+ * in the repeater be padded.
+ */
+public class PadContext
+{
+    private static final String EMPTY_STRING = "";
+
+    /**
+     * @exclude
+     */
+    static final int DEFAULT_VALUE = -1;
+
+    private int _maxRepeat = DEFAULT_VALUE;
+    private int _minRepeat = DEFAULT_VALUE;
+    private String _padText = EMPTY_STRING;
+
+    /**
+     * 
+     * 
+     * @param padText the text that will be used to pad the Repeater content, if necessary
+     * @param minRepeat the minimum number of items that must be rendered in the repeater's body
+     * @param maxRepeat the maximum number of items to render in the repeater's body
+     */
+    public PadContext(String padText, int minRepeat, int maxRepeat)
+    {
+        _padText = (padText != null ? padText : EMPTY_STRING);
+        _minRepeat = minRepeat;
+        _maxRepeat = maxRepeat;
+    }
+
+    /**
+     * Get the text to use when padding the {@link org.apache.beehive.netui.tags.databinding.repeater.Repeater}
+     *
+     * @return the pad text
+     */
+    public String getPadText()
+    {
+        return _padText;
+    }
+
+    /**
+     * Get the minimum number of times to render an item in the repeater's body.
+     *
+     * @return the minimum number of items that must be rendered in the repeater's body
+     */
+    public int getMinRepeat()
+    {
+        return _minRepeat;
+    }
+
+    /**
+     * Get the maximum number of times to render items in the repeater's body.
+     *
+     * @return the maximum number of items to render items in the repeater's body
+     */
+    public int getMaxRepeat()
+    {
+        return _maxRepeat;
+    }
+
+    /**
+     * 
+     * @param currCount the count of the number of items rendered.
+     * @return <code>true</code> if the minimum number of items have been rendered; <code>false</code> otherwise
+     */
+    public boolean checkMinRepeat(int currCount)
+    {
+        if(_minRepeat == DEFAULT_VALUE)
+            return true;
+        else if(currCount >= _minRepeat)
+            return true;
+        else return false;
+    }
+
+    /**
+     *
+     * @param currCount the count of the number of items rendered so far
+     * @return <code>true</code> if the maximum number of items have been rendered; <code>false</code> otherwise
+     */
+    public boolean checkMaxRepeat(int currCount)
+    {
+        if(_maxRepeat == DEFAULT_VALUE)
+            return false;
+        else if(currCount < _maxRepeat)
+            return false;
+        else return true;
+    }
+
+    /**
+     * Get a debugging String that represents a PadContext.
+     * 
+     * @return a String representation of the PadContext
+     */
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder(32);
+        buf.append("\nPadContext: ");
+        buf.append("padText: " + _padText + "\n");
+        buf.append("minRepeat: " + _minRepeat + "\n");
+        buf.append("maxRepeat: " + _maxRepeat + "\n");
+
+        return buf.toString();
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/script/GetData.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/script/GetData.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,194 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.script;
+
+// java imports
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * <p>
+ * This tag evaluates an expression and places the result of expression evaluation
+ * in a JSP's <code>PageContext</code>.  This can be used to extract objects from forms, 
+ * page flows, and other objects that can be databound; once in the JSP, 
+ * scriptlet can be written using these objects by accessing them through the 
+ * {@link javax.servlet.jsp.PageContext#getAttribute} method.
+ * </p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">resultId</th><td>Yes</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">The String identifier under which the Object resulting from expression
+ * evaluation will be stored.</td></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Yes</td></tr>
+ * <tr><td colspan="3">The expression that references the data to store in the <code>PageContext</code>
+ * attribute map.</td></tr>
+ * </table>
+ * </p>
+ *
+ * @example 
+ * In this first sample, the &lt;netui-data:getData> tag is used to add an attribute to the
+ * <code>pageContext</code> object. The name of the attribute is defined in the tag's
+ * <code>resultID</code> attribute and its value is defined in its value attribute.
+ * You can subsequently access the attribute through the pageContext's <code>getAttribute</code> method.  
+ * <pre>
+ * &lt;netui:form action="lastNameAction" focus="lastname"&gt;
+ *     ...
+ *     &lt;netui-data:getData resultId="first" value="{actionForm.firstname}"/&gt;
+ *     ...
+ *     &lt;% 
+ *         String firstName = (String) pageContext.getAttribute("first");
+ *         System.out.println("First Name = " + firstName);
+ *         ...
+ *     %&gt;
+ *     ...
+ * &lt;/netui:form&gt; 
+ * </pre>
+ * <p>This next sample shows how to use &lt;netui-data:getData&gt; and <code>pageContext</code>
+ * with containers:</p>
+ * <pre>
+ * &lt;netui-data:repeater dataSource="{pageFlow.strArr}"&gt;
+ *     ...
+ *     &lt;netui-data:repeaterItem&gt;
+ *         &lt;netui:label value="{container.item}" /&gt;
+ *         &lt;netui-data:getData resultId="item" value="{container.item}"/&gt;
+ *         &lt;% 
+ *             String currentItem = (String) pageContext.getAttribute("item");
+ *             System.out.println(currentItem);
+ *             ...
+ *         %&gt;
+ *     &lt;/netui-data:repeaterItem&gt;
+ *     ...
+ * &lt;/netui-data:repeater&gt;
+ * </pre>
+ * 
+ * @netui:tag name="getData" description="Evaluates an expression and places the result in the JSP's PageContext. Can be used to extract objects from forms, page flows, and other objects that can be databound.  You can then write a scriplet to access the data by using the getAttribute method of javax.servlet.jsp.PageContext."
+ * @netui.tldx:tag requiredchild="#nothing" 
+ *                 renderer="workshop.netui.jspdesigner.tldx.GetDataRenderer"
+ *                 bodycontentpref="empty" 
+ *                 netuiexpressioninfo="org.apache.beehive.netui.tags.databinding.script.GetDataInfo"
+ */
+public class GetData
+    extends AbstractBaseTag
+{
+    private static final Logger _logger = Logger.getInstance(GetData.class);
+
+    private Object _value = null;
+    private String _resultId = null;
+
+    /**
+     * Get the name of this tag.  This is used to identify the type of this tag
+     * for reporting tag errors.
+     *
+     * @return a constant String representing the name of this tag.
+     */
+    public String getTagName()
+    {
+        return "GetData";
+    }
+
+    /**
+     * Set the expression to evaluate.
+     *
+     * @param value the expression to evaluate
+     *
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setValue(Object value)
+    {
+        _value = value;
+    }
+
+    /**
+     * Set the String key under which the result of evaluating an expression
+     * will be stored in the PageContext.
+     *
+     * @param resultId the String key
+     *
+     * @netui:attribute required="true"
+     */
+    public void setResultId(String resultId)
+    {
+        _resultId = resultId;
+    }
+
+    /**
+     * Start the tag evaluation.  This tag ignores its body content.
+     * 
+     * @return SKIP_BODY
+     */
+    public int doStartTag()
+    {
+        return SKIP_BODY;
+    }
+
+    /**
+     * Evaluate the expression at the <code>value</code> attribute and
+     * store the result in the PageContext under the attribute key
+     * <code>resultId</code>.  If an existing key in the PageContext's
+     * attribute map exists, a warning will be written to the log file.
+     * If errors occur during expression evaluation, they will be reported 
+     * in the JSP page.  If the value returned by the expression is null,
+     * an attribute named <code>resultId</code> will be removed from 
+     * the PageContext's attribute map.
+     * 
+     * @return EVAL_PAGE
+     */
+    public int doEndTag()
+        throws JspException
+    {
+        if(_value != null)
+        {
+            if(_logger.isInfoEnabled() && pageContext.getAttribute(_resultId) != null)
+                _logger.info("Overwriting a value in PageContext attribute map with key \"" + _resultId + 
+                            "\" and object of type \"" + _value.getClass().getName());
+            
+            pageContext.setAttribute(_resultId, _value);
+        }
+        else 
+        {
+            if(_logger.isInfoEnabled())
+                _logger.info("Removing a value from the PageContext attribute map with key \"" + _resultId + 
+                            "\".  The object returned by the expression is null.");
+            
+            pageContext.removeAttribute(_resultId);
+        }
+
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Reset all of the fields of this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _resultId = null;
+        _value = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/xml/SerializeXML.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/xml/SerializeXML.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,103 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.databinding.xml;
+
+// java imports
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import org.apache.xmlbeans.XmlObject;
+
+/**
+ *
+ * @netui:tag name="serializeXML" description="A tag that serializes an XMLBean into the output of a JSP page in order to move data to the browser for data binding."
+ * @netui.tldx:tag whitespace="indent" 
+ */
+public class SerializeXML 
+    extends AbstractBaseTag
+{ 
+    private static final Logger _logger = Logger.getInstance(SerializeXML.class);
+
+    private Object _source;
+    private String _divName;
+
+    public String getTagName()
+    {
+        return "SerializeXML";
+    }
+
+    /**
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setSource(Object source) {_source = source;}
+
+    /**
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setDivName(String divName) {_divName = divName;}
+
+    public int doStartTag()
+    {
+        return SKIP_BODY;   
+    }
+    
+    public int doEndTag()
+        throws JspException
+    {
+        assert _source != null;
+
+        if(_source instanceof XmlObject && _source != null)
+        {
+            XmlObject xmlObject = (XmlObject)_source;
+            String xml = xmlObject.xmlText();
+            
+            StringBuilder buf = new StringBuilder();
+            buf.append("<div");
+            buf.append(" id=\"");
+            buf.append(_divName);
+            buf.append("\">\n<!--\n");
+            buf.append(xml);
+            buf.append("\n-->\n</div>");
+            
+            write(buf.toString());
+        }
+        else
+        {
+            // @todo: write anything to the page?
+            if(_logger.isInfoEnabled()) _logger.info("The expression \"" + _source + "\" resulted in an object that was not an XMLBean");
+        }
+        
+        localRelease();
+        
+        return EVAL_PAGE;   
+    }
+
+    public void localRelease()
+    {
+        super.localRelease();
+
+        _source = null;
+        _divName = null;
+    }
+} 

Added: incubator/beehive/netui/src/tags-datagrid/README.txt
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/README.txt	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+
+The NetUI Data Grid
+===================
+
+July 10, 2004
+
+This version of the NetUI data grid is a prototype of a way to
+build a data grid that renders into an (X)HTML table, supports 
+flexible sorting / filtering, and provides sufficient plug-in
+points to build interesting UI.
+
+This version is currently in prototype mode and is expected to 
+change dramatically in the near term.  It will also compost 
+into the beehive-netui-databinding tag library, which means 
+that the beehive-netui-datagrid tag library will be deleted.
+
+A spec is also forthcoming.
+
+-- ekoneil@bea.com
\ No newline at end of file

Added: incubator/beehive/netui/src/tags-datagrid/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Tags-DataGrid" default="compile" basedir=".">
+
+    <property name="module.classpath" value="${servlet24.jar};${jsp20.jar};${struts.jar};${commons-beanutils.jar};${util.jar};${pageflow.jar};${scoping.jar};${log4j.jar};${commons-logging.jar};${tags.html.jar}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>        
+        <mkdir dir="${build.lib.dir}/${module.name}"/>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+        </copy>
+
+        <echo>Generate TLD and TLDx</echo>
+        <echo>tools.xdoclet.run.classpath: ${tools.xdoclet.run.classpath}</echo>
+        <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpath="${tools.xdoclet.run.classpath}"/>
+        <webdoclet
+                destdir="${build.lib.dir}/"
+                excludedtags="@version,@author,@todo"
+                force="true"
+                verbose="true">
+
+            <fileset dir="${src.dir}/${module.name}">
+                <include name="**/*.java"/>
+            </fileset>
+
+            <netuitldgen 
+                 xmlencoding="UTF-8"
+                 taglibversion="1.0"
+                 jspversion="1.2" 
+                 shortname="netui-datagrid" 
+                 uri="http://beehive.apache.org/netui/tags-datagrid-1.0"
+                 description="NetUI Data Grid taglibrary."
+                 filename="${netui-tags-datagrid.tld.name}"
+                 destdir="${build.lib.dir}"
+                 validateXml="true"
+                 packageName="org.apache.beehive.netui.tags.datagrid"
+            />
+            <netuitldxgen
+                     xmlencoding="UTF-8"
+                     paletteGenerator="workshop.netui.ui.common.NetuiPaletteGenerator"
+                     uri="http://beehive.apache.org/netui/tags-datagrid-1.0"
+                     tldxVersion="1.0"
+                     filename="${netui-tags-datagrid.tldx.name}"
+                     packageName="org.apache.beehive.netui.tags.datagrid"
+            />
+        </webdoclet>
+
+        <jar jarfile="${build.lib.dir}/${tags-datagrid.jar.name}" basedir="${classes.dir}/${module.name}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete file="${build.lib.dir}/${tags-datagrid.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Data Grid Tags"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/ColumnModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/ColumnModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,415 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model;
+
+// java imports
+import java.util.ArrayList;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+
+// internal imports
+import org.apache.beehive.netui.tags.html.FormatTag;
+
+import org.apache.beehive.netui.datagrid.util.AttributeHelper;
+import org.apache.beehive.netui.datagrid.services.FilterService;
+import org.apache.beehive.netui.datagrid.services.SortService;
+
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+
+// external imports
+
+/**
+ *
+ */
+public class ColumnModel
+{
+    private static final Logger _logger = Logger.getInstance(ColumnModel.class);
+
+    // @todo: externalize these -- they need to be overridable from a JSP
+    private static final String EMPTY_CELL = "&nbsp;";
+    private static final String UNSORTED_IMAGE = "/resources/datagrid/arrow_off.png";
+    private static final String SORTED_ASCENDING_IMAGE = "/resources/datagrid/arrow_down.png";
+    private static final String SORTED_DESCENDING_IMAGE = "/resources/datagrid/arrow_up.png";
+    private static final String FILTERED_IMAGE = "/resources/datagrid/filter.gif";
+    private static final String UNFILTERED_IMAGE = "/resources/datagrid/noFilter.gif";
+    private static final String FILTER_JSP = "/resources/datagrid/filter.jsp";
+
+    public static final int ATTR_GENERAL = 0;
+    public static final int ATTR_GENERAL_EXPRESSION = 1;
+   
+    private IDataAccessProvider _dap;
+    private DataGridModel _dataGridModel;
+    private StylePolicy _stylePolicy;
+
+    private ArrayList _formatters = null;
+
+    private String _filterAction;
+    private String _sortAction;
+    private String _sortUri;
+    private String _filterUri;
+    private String _sortExpression;
+    private String _filterExpression;
+
+    private String _value;
+    private String _headerText;
+    private String _footerText;
+
+    private Boolean _filterable = null;
+    private Boolean _sortable = null;
+
+    private Object _renderData = null;
+
+    private boolean _canGroup = false;
+    private boolean _shouldGroup = false;
+
+    public void setDataGridModel(DataGridModel tableModel) {_dataGridModel = tableModel;}
+    public DataGridModel getDataGridModel() {return _dataGridModel;}
+
+    public String getValue() {return _value;}
+    public void setValue(String value) {_value = value;}
+
+    public String getSortExpression() {return _sortExpression;}
+    public void setSortExpression(String sortExpression) {_sortExpression = sortExpression;}
+
+    public String getFilterExpression() {return _filterExpression;}
+    public void setFilterExpression(String filterExpression) {_filterExpression = filterExpression;}
+
+    public String getHeaderText() {return _headerText;}
+    public void setHeaderText(String headerText) {_headerText = headerText;}
+
+    public String getFooterText() {return _footerText;}
+    public void setFooterText(String footerText) {_footerText = footerText;}
+
+    public Boolean isFilterable() {return _filterable;}
+    public void setFilterable(Boolean filterable) {_filterable = filterable;}
+
+    public Boolean isSortable() {return _sortable;}
+    public void setSortable(Boolean sortable) {_sortable = sortable;}
+
+    public void setSortUri(String sortUri) {_sortUri = sortUri;}
+    public String getSortUri() {return _sortUri;}
+
+    public void setFilterUri(String filterUri) {_filterUri = filterUri;}
+    public String getFilterUri() {return _filterUri;}
+
+    public void setRenderData(Object renderData) {_renderData = renderData;}
+    public Object getRenderData() {return _renderData;}
+
+    public void setCanGroup(boolean canGroup) {_canGroup = canGroup;}
+    public boolean getCanGroup() {return _canGroup;}
+
+    public void setShouldGroup(boolean shouldGroup) {_shouldGroup = shouldGroup;}
+    public boolean getShouldGroup() {return _shouldGroup;}
+
+    public void setCssPolicy(StylePolicy stylePolicy) {_stylePolicy = stylePolicy;}
+    public StylePolicy getCssPolicy() {return _dataGridModel.getCssPolicy();}
+
+    public SortService getSortService() {return _dataGridModel.getSortService();}
+    public FilterService getFilterService() {return _dataGridModel.getFilterService();}
+
+    public void addFormatter(FormatTag.Formatter formatter)
+    {
+        if(_formatters == null)
+            _formatters = new ArrayList();
+        
+        _formatters.add(formatter);
+    }
+
+    public void onBeginRow()
+    {
+    }
+
+    public void onEndRow()
+    {
+        // reset these values
+        setCanGroup(false);
+        setShouldGroup(false);
+    }
+
+    public void openHeaderCell(StringBuffer buf)
+    {
+        buf.append("<th");
+        if(getSortService().isPrimarySort(getSortExpression()))
+            getCssPolicy().writeStyleClass(buf, new int[] {StylePolicy.HEADER_CELL_CLASS, StylePolicy.HEADER_CELL_SORTED_CLASS});
+        else getCssPolicy().writeStyleClass(buf, StylePolicy.HEADER_CELL_CLASS);
+        buf.append(">");
+    }
+
+    public void renderHeader(StringBuffer buffer)
+    {
+        assert _dataGridModel != null;
+        if(_headerText == null)
+            renderEmptyCell(buffer);
+        else
+        {
+            Object value = _dataGridModel.evaluateExpression(_headerText, "headerText");
+            
+            SortService sortService = _dataGridModel.getSortService();
+            PageContext pageContext = _dataGridModel.getPageContext();
+
+            buffer.append(value);
+            
+            // @todo: there is an NPE in PageflowTagUtils.createActionURL a la
+            // 	at org.apache.beehive.netui.pageflow.util.PageflowTagUtils.createActionURL(PageflowTagUtils.java:139)
+            // @todo: handle filter URIs, not just actions here?
+            // disable sorting
+//             String sort = _sortUri;
+//             if(sort != null)
+//                 sort = PageflowTagUtils.createActionURL(pageContext, sort);
+
+//             if(isSortable().booleanValue())
+//                 renderSortLink(buffer, _dataGridModel, sortService, sort, _sortExpression, value);
+//             else buffer.append(value);
+
+            // disable filtering
+//             String filter = _filterUri;
+//             if(filter != null)
+//                 filter = PageflowTagUtils.createActionURL(pageContext, filter);
+
+//             if(isFilterable().booleanValue())
+//                 renderFilterLink(buffer, _dataGridModel, _filterExpression, _headerText, filter, value);
+        }
+    }
+
+    public void closeHeaderCell(StringBuffer buf)
+    {
+        buf.append("</th>\n");
+    }
+
+    public void onDataCellPreRender()
+    {
+        assert _dataGridModel != null;
+
+        // for grouping, evaluate the data source expression here.  
+        // that way the grouped columns can compare data to render in their renderData methods
+        Object value = _dataGridModel.evaluateExpression(_value, "value");
+        
+        if(value != null && value.equals(getRenderData()))
+            setCanGroup(true);
+        else setCanGroup(false);
+
+        setRenderData(value);
+    }
+
+    public void openDataCell(StringBuffer buf)
+    {
+        buf.append("<td");
+        getCssPolicy().writeStyleClass(buf, StylePolicy.DATA_CELL_CLASS);
+        buf.append(">");
+    }
+
+    public void renderDataCell(StringBuffer buffer)
+    {
+        if(getShouldGroup())
+            renderGroupedData(buffer);
+        else 
+        {
+            String formatted = formatText(getRenderData());
+            buffer.append(formatted);
+        }
+    }
+
+    public void closeDataCell(StringBuffer buf)
+    {
+        buf.append("</td>");
+    }
+
+    public void onDataCellPostRender()
+    {
+    }
+    
+    public void openFooterCell(StringBuffer buf)
+    {
+        buf.append("<td");
+        getCssPolicy().writeStyleClass(buf, StylePolicy.FOOTER_CELL_CLASS);
+        buf.append(">");
+    }
+
+    public void renderFooterCell(StringBuffer buffer)
+    {
+        assert _dataGridModel != null;
+
+        if(_footerText != null)
+            buffer.append(_dataGridModel.evaluateExpression(_footerText, "footerText"));
+        else renderEmptyCell(buffer);
+    }
+
+    public void closeFooterCell(StringBuffer buf)
+    {
+        buf.append("</td>");
+    }
+
+    public void renderGroupedData(StringBuffer buffer)
+    {
+        buffer.append(EMPTY_CELL);
+    }
+
+    protected void renderEmptyCell(StringBuffer buffer)
+    {
+        buffer.append(EMPTY_CELL);
+    }
+
+    protected void renderAttribute(StringBuffer buffer, Object value, String name)
+    {
+        AttributeHelper.renderAttribute(buffer, value, name);
+    }
+
+    protected String createResourceUri(String resourceName)
+    {
+        return createResourceUri(_dataGridModel, resourceName);
+    }
+
+    protected String formatText(Object text)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("format text: \"" + text + "\"");
+
+        if (text == null)
+            return null;
+        if (_formatters == null)
+            return text.toString();
+
+        for (int i = 0;i<_formatters.size();i++) 
+        {
+            FormatTag.Formatter currentFormatter = (FormatTag.Formatter)_formatters.get(i);
+            assert currentFormatter != null;
+            try 
+            {
+                if(_logger.isDebugEnabled()) _logger.debug("run formatter of type \"" + currentFormatter.getClass().getName() + "\"");
+
+                text = currentFormatter.format(text);
+
+                if(_logger.isDebugEnabled()) _logger.debug("formatted text: \"" + text + "\"");
+            }
+            catch (JspException e) 
+            {
+                // @todo: need a way to register errors
+                if(_logger.isErrorEnabled()) _logger.error("A formatter of type \"" + currentFormatter.getClass().getName() + "\" threw an exception " + e, e);
+            }
+        }
+
+        if(_logger.isDebugEnabled()) _logger.debug("final formatted text: \"" + text + "\"");
+
+        return text.toString();
+    }
+
+    // @todo: this should be done with cell decorators
+    private static final void renderSortLink(StringBuffer buffer, DataGridModel dataGridModel,
+                                             SortService sortService, String sortUri, 
+                                             String sortExpression, Object value)
+    {
+        assert sortService != null;
+        assert sortExpression != null;
+        assert sortUri != null;
+
+        // @todo: externalize configuration
+        buffer.append("<a href=\"");
+        buffer.append(sortUri);
+        buffer.append("?");
+        buffer.append(sortService.getSortParamsString(sortExpression));
+        buffer.append("\"");
+        buffer.append(" class=\"sortable\">");
+        buffer.append(value);
+        buffer.append("</a>");
+        buffer.append("&nbsp;&nbsp;");
+        switch(sortService.getSortDirection(sortExpression))
+        {
+        case ISort.NONE:
+            buffer.append("<img src=\"" + createResourceUri(dataGridModel, UNSORTED_IMAGE) + "\"/>"); break;
+        case ISort.ASCENDING:
+            buffer.append("<img src=\"" + createResourceUri(dataGridModel, SORTED_ASCENDING_IMAGE) + "\"/>"); break;
+        case ISort.DESCENDING:
+            buffer.append("<img src=\"" + createResourceUri(dataGridModel, SORTED_DESCENDING_IMAGE) + "\"/>"); break;
+        default: throw new RuntimeException("Sort direction out of range");
+        }
+        buffer.append("&nbsp;&nbsp;");
+    }
+    
+    // @todo: this should be done with cell decorators
+    private static final void renderFilterLink(StringBuffer buffer, DataGridModel dataGridModel,
+                                               String filterExpression, String headerText, 
+                                               String filterUri, Object value)
+    {
+        assert dataGridModel != null;
+        assert dataGridModel.getPageContext() != null;
+        assert dataGridModel.getPageContext().getRequest() instanceof HttpServletRequest;
+
+        String gridName = dataGridModel.getName();
+        PageContext pageContext = dataGridModel.getPageContext();
+        HttpServletRequest request = (HttpServletRequest)dataGridModel.getPageContext().getRequest();
+        String filterJsp = createResourceUri(dataGridModel, FILTER_JSP);
+
+        // split the destination URL into its URI and query parameters.  These are passed separately to the filter service.
+        String currentURL = request.getQueryString();
+
+        // in Portal, the parameters for the URL need to be scoped to a particular portlet.  This
+        // is accomplished using the ScopedRequest infrastructure in the JPF framework.  The prefix
+        // here is put in front of any filter that is added to the URL by the filter window.
+        String prefix = "";
+        ScopedRequest sr = ScopedServletUtils.unwrapRequest(pageContext.getRequest());
+        if(sr != null)
+            prefix = sr.getScopeKey().toString();
+
+        // @todo: format needs to be read from a config file
+        buffer.append("\n<a href=\"filter: ");
+        buffer.append(headerText);
+        buffer.append("\" onClick=\"return ShowFilterWindow('");
+        buffer.append(filterExpression);
+        buffer.append("', this, '");
+        buffer.append(currentURL != null ? currentURL : "?");
+        buffer.append("', '");
+        buffer.append(gridName);
+        buffer.append("', '");
+        // filterWindowURL
+        buffer.append(filterJsp);
+        buffer.append("', '");
+        // jdbcTypeString
+        buffer.append(0);
+        buffer.append("', '");
+        // dest
+        buffer.append(filterUri);
+        buffer.append("', '");
+        // prefix
+        buffer.append(prefix);
+        buffer.append("', '");
+        buffer.append("');\">");
+        buffer.append("\n\t<img border=\"0\" title=\"Filter\" height=\"17\" width=\"17\" src=\"");
+        buffer.append(createResourceUri(dataGridModel, UNFILTERED_IMAGE));
+        buffer.append("\"></img>");
+        buffer.append("</a>\n");
+
+        if(_logger.isDebugEnabled()) _logger.debug("filter anchor: " + buffer.toString());
+    }
+
+    private static final String createResourceUri(DataGridModel dataGridModel, String resourceName)
+    {
+        assert dataGridModel != null;
+        assert dataGridModel.getPageContext() != null;
+
+        HttpServletRequest request = (HttpServletRequest)dataGridModel.getPageContext().getRequest();
+        String uri = request.getContextPath() + resourceName;
+        return uri;
+    } 
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/DataGridModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/DataGridModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,568 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model;
+
+// java imports
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.JspTag;
+import javax.servlet.jsp.tagext.Tag;
+
+// internal imports
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+import org.apache.beehive.netui.script.common.ImplicitObjectBean;
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+
+import org.apache.beehive.netui.tags.datagrid.DataGrid;
+
+import org.apache.beehive.netui.util.iterator.IteratorFactory;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import org.apache.beehive.netui.datagrid.services.FilterService;
+import org.apache.beehive.netui.datagrid.services.PagerService;
+import org.apache.beehive.netui.datagrid.services.SortService;
+
+// external imports
+
+/**
+ *
+ */
+public class DataGridModel
+    implements IDataAccessProvider
+{
+    private static final Logger _logger = Logger.getInstance(DataGridModel.class);
+
+    private static final int NO_GROUPING = -1;
+    private ArrayList EMPTY_LIST = new ArrayList();
+
+    private List _columns = null;
+    
+    private PagerModel _pagerModel = null;
+
+    // state assiociated with the IDataAccessProvider implementation
+    private String _dataSource;
+    private int _index = 0;
+
+    // JSP references used for expression evaluation and getting into the JSP tag
+    // hierarchy of IDataAccessProvider classes
+    private DataGrid _grid;
+    private PageContext _pageContext;
+
+    // state associated with iterating over a data set
+    private Object _dataSet = null;
+    private Iterator _dataSetIterator = null;
+    private Object _dataItem = null;
+    private int _dataSetSize;
+
+    private SortService _sortService = null;
+    private FilterService _filterService = null;
+    
+    private String _name = null;
+
+    private int _groupDepth = NO_GROUPING;
+
+    private StylePolicy _cssPolicy = null;
+
+    private int _startRenderWindow = 0;
+    private int _endRenderWindow = 0;
+
+    private PagerService _pagerService = null;
+    
+    public DataGridModel(DataGrid grid)
+    {
+        _grid = grid;
+    }
+
+    public void setSortService(SortService sortService) {_sortService = sortService;}
+    public SortService getSortService() 
+    {
+        if(_sortService == null)
+            _sortService = SortService.getInstance(_pageContext.getRequest(), _name);
+        
+        return _sortService;
+    }
+
+    public void setFilterService(FilterService filterService) {_filterService = filterService;}
+    public FilterService getFilterService() 
+    {
+        if(_filterService == null)
+            _filterService = FilterService.getInstance(_pageContext.getRequest(), _name);
+        
+        return _filterService;
+    }
+
+    public void setPagerService(PagerService pagerService) {_pagerService = pagerService;}
+    public PagerService getPagerService()
+    {
+        if(_pagerService == null)
+            _pagerService = PagerService.getInstance(_pageContext.getRequest(), _name);
+        
+        return _pagerService;
+    }
+    
+    public void setName(String name) {_name = name;}
+    public String getName() {return _name;}
+
+    public void setPageContext(PageContext pageContext) {_pageContext = pageContext;}
+    public PageContext getPageContext() {return _pageContext;}
+
+    public List getColumns() 
+    {
+        if(_columns != null)
+            return Collections.unmodifiableList(_columns);
+        else return EMPTY_LIST;
+    }
+
+    public ColumnModel getColumn(int index)
+    {
+        assert _columns != null;
+        assert index < _columns.size();
+
+        ColumnModel cm = (ColumnModel)_columns.get(index);
+        
+        return cm;
+    }
+
+    /*
+     *
+     * CSS / Style properties
+     *
+     */
+    public void setCssPolicy(StylePolicy cssPolicy) {_cssPolicy = cssPolicy;}
+    public StylePolicy getCssPolicy() {return _cssPolicy;}
+
+    public void setGroupDepth(int groupDepth) {_groupDepth = groupDepth;}
+    public int getGroupDepth() {return _groupDepth;}
+
+    public int getDataSetSize() {return _dataSetSize;}
+
+    /**
+     *
+     */
+    public void addColumn(ColumnModel column)
+    {
+        column.setDataGridModel(this);
+
+        if(_columns == null)
+            _columns = new ArrayList();
+        
+        _columns.add(column);
+    }
+
+    public void initialize()
+    {
+        // @todo: this needs to be initialized in the DataGrid tag
+        _sortService = SortService.getInstance(_pageContext.getRequest(), _name);
+
+        if(_logger.isDebugEnabled()) _logger.debug("evaluate data source: " + _dataSource);
+
+        _dataSet = evaluateExpression(_dataSource, "dataSource");
+
+        if(_logger.isDebugEnabled()) _logger.debug("data set type: " + 
+                                                   (_dataSet != null ? _dataSet.getClass().toString() : "null"));
+
+        try{_dataSetIterator = IteratorFactory.makeIterator(_dataSet);} 
+        catch(Exception e) 
+        {
+            if(_logger.isErrorEnabled()) 
+                _logger.error("Error evaluating dataSource attribute: " + e, e);
+        }
+
+        if(_dataSetIterator == null)
+            _dataSetIterator = EMPTY_LIST.iterator();
+
+        if(_logger.isDebugEnabled()) _logger.debug("iterator type: " + _dataSetIterator.getClass().getName());
+
+        List list = new ArrayList();
+        int size = 0; 
+        while(_dataSetIterator.hasNext())
+        {
+            list.add(_dataSetIterator.next());
+            size++;
+            _logger.debug("size: " + size);
+        }
+        _dataSetIterator = list.iterator();
+        _dataSetSize = size;
+
+        PagerService ps = getPagerService();
+        int lastPage = (int)Math.ceil((float)_dataSetSize/(float)ps.getPageSize());
+        _startRenderWindow = (ps.getCurrentPage()-1)*10;
+        _endRenderWindow = (ps.getCurrentPage() != lastPage ? _startRenderWindow+ps.getPageSize() : _dataSetSize);
+        
+        if(_logger.isDebugEnabled()) 
+            _logger.debug("start: " + _startRenderWindow + " end: " + _endRenderWindow + 
+                          " lastPage: " + lastPage + " pageSize: " + ps.getPageSize() + 
+                          " dataSetSize: " + _dataSetSize);
+
+        assert _startRenderWindow <= _endRenderWindow;
+
+        if(_logger.isDebugEnabled()) 
+        {
+            _logger.debug("start render window: " + _startRenderWindow);
+            _logger.debug("end render window: " + _endRenderWindow);
+            _logger.debug("last page: " + lastPage);
+        }
+    }
+
+    // @todo: this is a terrible name
+    public void moveCursorToStart()
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("_index: " + _index + " _startRenderWindow: " + _startRenderWindow);
+
+        assert _index == 0;
+
+        while(_dataSetIterator.hasNext() && _index != _startRenderWindow)
+        {
+            _dataSetIterator.next();
+            _index++;
+        }
+        
+        if(_logger.isDebugEnabled()) _logger.debug("cursor moved to: " + _index);
+    }
+
+    // @todo: as is this
+    public boolean endDataSet()
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("index: " + _index + " _endRenderWindiw: " + 
+                                                   _endRenderWindow + " end data set: " + (_index >= _endRenderWindow));
+        return _index >= _endRenderWindow;
+    }
+
+    /**
+     *
+     */
+    public void render(Writer writer)
+    {
+        assert _pageContext != null;
+        assert _grid != null;
+
+        if(_logger.isDebugEnabled()) 
+            _logger.debug("render a data grid.  column count: " + (_columns != null ? "" + _columns.size() : "null"));
+
+        if(_columns == null) return;
+
+        initialize();
+
+        StringBuffer buf = new StringBuffer();
+
+        renderPager(buf);
+        openTable(buf);
+
+        // header <tr>
+        renderHeader(buf, _columns, _cssPolicy, _sortService);
+
+        if(_dataSetIterator != null)
+        {
+            assert _index == 0;
+
+            moveCursorToStart();
+
+            assert _index == _startRenderWindow;
+
+            // data <tr>
+            while(_dataSetIterator.hasNext() && !endDataSet())
+            {
+                _dataItem = _dataSetIterator.next();
+                renderBody(buf, _index, _columns, _cssPolicy, _sortService, _groupDepth);
+                _index++;
+            }
+            
+            _index = -1;
+        }
+
+        // footer <tr>
+        if(shouldRenderFooter())
+            renderFooter(buf, _columns, _cssPolicy);
+
+        closeTable(buf);
+
+        write(writer, buf);
+    }
+
+    public void renderPager(StringBuffer buf)
+    {
+        if(_pagerModel == null)
+            _pagerModel = new PagerModel(this, getPagerService());
+        
+        _pagerModel.render(buf);
+    }
+
+    public void openTable(StringBuffer buf)
+    {
+        // <table>
+        buf.append("\n<table");
+        _cssPolicy.writeStyleClass(buf, StylePolicy.TABLE_CLASS);
+        buf.append(">");
+    }
+
+    public void closeTable(StringBuffer buf)
+    {
+        // </table>
+        buf.append("\n</table>\n");
+    }
+
+    /**
+     *
+     */
+    public final Object evaluateExpression(String expression, String attrName)
+    {
+        assert _pageContext != null && _grid != null;
+
+        if(_logger.isDebugEnabled()) _logger.debug("evaluate expression: '" + expression + "'");
+        
+        if(expression == null)
+            return null;
+
+        Tag fakeTag = new FakeTag();
+        fakeTag.setParent(_grid);
+        ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(_pageContext, fakeTag);
+        try
+        {
+            Object result = ExpressionEvaluatorFactory.getInstance().evaluateStrict(expression, bean);
+            return result;
+        }
+        catch(ExpressionEvaluationException e)
+        {
+            if(_logger.isErrorEnabled())
+                _logger.error("Exception evaluating expression \"" + expression + "\": " + e, e);
+            
+            return null;
+        }
+    }
+
+    private static class FakeTag
+        implements javax.servlet.jsp.tagext.Tag
+    {
+        private Tag _parent = null;
+        public int doEndTag() {return EVAL_PAGE;}
+        public int doStartTag() {return SKIP_BODY;}
+        public Tag getParent() {return _parent;}
+        public void release() {}
+        public void setPageContext(PageContext pageContext) {}
+        public void setParent(Tag parent) {_parent = parent;}
+    }
+
+    public boolean shouldRenderFooter()
+    {
+        assert _columns != null;
+
+        for(int i = 0; i < _columns.size(); i++)
+        {
+            if(((ColumnModel)_columns.get(i)).getFooterText() != null) return true;
+        }
+        
+        return false;
+    }
+    
+    public final void openHeaderRow(StringBuffer buf)
+    {
+        buf.append("\n<thead>");
+        buf.append("\n<tr");
+        _cssPolicy.writeStyleClass(buf, StylePolicy.HEADER_ROW_CLASS);
+        buf.append(">");
+    }
+
+    public void closeHeaderRow(StringBuffer buf)
+    {
+        buf.append("</tr>\n");
+        buf.append("</thead>\n");
+    }
+    
+    private final void renderHeader(StringBuffer buf, List columns, StylePolicy cssPolicy, SortService sortService)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("render header");
+
+        openHeaderRow(buf);
+        for(int i = 0; i < columns.size(); i++)
+        {       
+            ColumnModel cm = (ColumnModel)columns.get(i);
+
+            cm.openHeaderCell(buf);
+            cm.renderHeader(buf);
+            cm.closeHeaderCell(buf);
+        }
+        closeHeaderRow(buf);
+    }
+
+    public void openDataRow(StringBuffer buf)
+    {
+        // render the row against the current data item
+        buf.append("\n<tr");
+        if(getCurrentIndex() % 2 == 0)
+            _cssPolicy.writeStyleClass(buf, StylePolicy.ROW_CLASS);
+        else _cssPolicy.writeStyleClass(buf, StylePolicy.ALT_ROW_CLASS);
+        buf.append(">");
+    }
+
+    public void closeDataRow(StringBuffer buf)
+    {
+        buf.append("</tr>");
+    }
+
+    private void renderBody(StringBuffer buf, int index, List columns, StylePolicy cssPolicy, SortService sortService, int groupDepth)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("render body");
+
+        for(int i = 0; i < columns.size(); i++)
+            ((ColumnModel)columns.get(i)).onBeginRow();
+
+        openDataRow(buf);
+
+        for(int i = 0; i < columns.size(); i++)
+        {
+            ColumnModel column = (ColumnModel)columns.get(i);
+
+            column.onDataCellPreRender();
+
+            // handle grouping
+            boolean disableGroup = false;
+            if(groupDepth > NO_GROUPING && i < groupDepth)
+            {
+                if(i == 0)
+                {
+                    if(column.getCanGroup())
+                        column.setShouldGroup(true);
+                }
+                else 
+                {
+                    ColumnModel prevColumn = (ColumnModel)columns.get(i-1);
+                    if(prevColumn.getShouldGroup() && column.getCanGroup())
+                        column.setShouldGroup(true);
+                }
+            }
+
+            // render the data for the column
+            column.openDataCell(buf);
+            column.renderDataCell(buf);
+            column.closeDataCell(buf);
+
+            column.onDataCellPostRender();
+        }
+
+        // loop over all columns to end the row
+        for(int i = 0; i < columns.size(); i++)
+            ((ColumnModel)columns.get(i)).onEndRow();
+
+        closeDataRow(buf);
+    }
+
+    public static void openFooterRow(StringBuffer buf)
+    {
+        buf.append("\n<tr>");
+    }
+
+    public static void closeFooterRow(StringBuffer buf)
+    {
+        buf.append("</tr>");
+    }
+
+    private static void renderFooter(StringBuffer buf, List columns, StylePolicy cssPolicy)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("render footer");
+
+        openFooterRow(buf);
+        for(int i = 0; i < columns.size(); i++)
+        {
+            ColumnModel column = (ColumnModel)columns.get(i);
+            column.openFooterCell(buf);
+            column.renderFooterCell(buf);
+            column.closeFooterCell(buf);
+        }
+        closeFooterRow(buf);
+    }
+    
+    /* ===========================================================
+     *
+     * IDataAccessProvider implementation
+     *
+     * ===========================================================
+     */
+    public int getCurrentIndex()
+    {
+        return _index;
+    }
+    
+    public Object getCurrentItem()
+    {
+        return _dataItem;
+    }
+
+    public Object getCurrentMetadata()
+    {
+        throw new UnsupportedOperationException("Metadata is not available on the current data item.");
+    }
+
+    public void setDataSource(String dataSource)
+    {
+        _dataSource = dataSource;
+    }
+
+    public String getDataSource()
+    {
+        return _dataSource;
+    }
+    
+    public IDataAccessProvider getProviderParent()
+    {
+        return _grid.getProviderParent();
+    }
+
+    public boolean isBindingOnClient()
+    {
+        return false;
+    }
+
+    public Object nextDataItem()
+    {
+        _dataItem = _dataSetIterator.next();
+        _index++;
+
+        if(_logger.isDebugEnabled()) _logger.debug("next index: " + _index);
+        
+        return _dataItem;
+    }
+
+    public boolean hasNextDataItem()
+    {
+        boolean hasNext = _dataSetIterator.hasNext();
+        if(_logger.isDebugEnabled()) _logger.debug("data set hasNext: " + hasNext);
+        return hasNext;
+    }
+
+    private static final void write(Writer writer, StringBuffer buf)
+    {
+        try
+        {
+            writer.write(buf.toString());
+        }
+        catch(IOException io)
+        {
+            if(_logger.isErrorEnabled())
+                _logger.error("Exception writing JSP output: " + io, io);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/IFilter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/IFilter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public interface IFilter
+{
+    String FILTER_PARAM_KEY = "netui_filter";
+    
+    int EQUALS = 1;
+    int NOT_EQUAL = 2;
+
+    String getFilterExpression();
+
+    void setFilterExpression(String filterExpression);
+
+    int getOperation();
+    
+    void setOperation(int operation);
+    
+    Object getValue();
+    
+    void setValue(Object value);
+
+    String write(String namespace);
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/ISort.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/ISort.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public interface ISort
+{
+    String SORT_PARAM_KEY = "netui_sort";
+
+    int NONE = 0;
+    int ASCENDING = 1;
+    int DESCENDING = 2;
+
+    String getSortExpression();
+
+    void setSortExpression(String sortExpression);
+
+    int getDirection();
+    
+    void setDirection(int direction);
+
+    String write(String namespace);
+
+    String write(String namespace, boolean flipDirection);
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/PagerModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/PagerModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.datagrid.services.PagerService;
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class PagerModel
+{
+    private static final Logger _logger = Logger.getInstance(PagerModel.class);
+    
+    private static final int DEFAULT_PAGE_SIZE = 10;
+
+    private String _action = null;
+    private int _pageSize = DEFAULT_PAGE_SIZE;
+    private String _format = null;
+    private DataGridModel _model = null;
+    private String pageUri = null;
+
+    private PagerService _pagerService = null;
+
+    public PagerModel(DataGridModel model, PagerService pagerService)
+    {
+        _pagerService = model.getPagerService();
+        _model = model;
+    }
+    
+    public String getAction() {return _action;}
+    public void setAction(String action) {_action = action;}
+    
+    public int getPageSize() {return _pageSize;}
+    public void setPageSize(int pageSize) {_pageSize = pageSize;}
+
+    public String getFormat() {return _format;}
+    public void setFormat(String format) {_format = format;}
+
+    public void render(StringBuffer buf)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("RENDER THE PAGER");
+        if(_logger.isDebugEnabled()) _logger.debug("data set size: " + _model.getDataSetSize());
+
+        assert _pagerService != null;
+
+        int dataSetSize = _model.getDataSetSize();
+        int pageSize = _pagerService.getPageSize();
+        // @todo: this calcluation should move elsewhere
+        int lastPage = (int)Math.ceil((float)dataSetSize / (float)pageSize);
+
+        int currentPage = _pagerService.getCurrentPage();
+
+        if(currentPage > lastPage)
+            currentPage = lastPage;
+        
+        int prevPage = currentPage-1;
+        int nextPage = currentPage+1;
+        
+        buf.append("Page ");
+        buf.append(currentPage);
+        buf.append(" of ");
+        buf.append(lastPage);
+        buf.append("&nbsp;&nbsp;");
+
+        if(_logger.isDebugEnabled()) 
+        {
+            _logger.debug("data grid \"" + _model.getName() + "\"");
+            _logger.debug("current page: " + currentPage);
+            _logger.debug("last page: " + lastPage);
+            _logger.debug("prev page: " + prevPage);
+            _logger.debug("next page: " + nextPage);
+        }
+
+        String pageUri = "begin.do";
+        if(pageUri != null)
+            pageUri = PageflowTagUtils.createActionURL(_model.getPageContext(), pageUri);
+
+        if(prevPage > 0)
+        {
+            buf.append("<a href=\"");
+            buf.append(pageUri);
+            buf.append("?");
+            buf.append(_pagerService.getPrevPageQueryParam());
+            buf.append("\">Previous</a>");
+        }
+
+        if(nextPage <= lastPage)
+        {
+            buf.append("&nbsp;");
+            buf.append("<a href=\"");
+            buf.append(pageUri);
+            buf.append("?");
+            buf.append(_pagerService.getNextPageQueryParam());
+            buf.append("\">Next</a>");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/StylePolicy.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/StylePolicy.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public abstract class StylePolicy
+{
+    private static final Logger _logger = Logger.getInstance(StylePolicy.class);
+
+    // @todo: is this the correct delimiter relative to the CSS spec?
+    private static final String DELIM = ".";
+
+    public static final int TABLE_CLASS = 1;
+    public static final int HEADER_ROW_CLASS = 2;
+    public static final int FOOTER_ROW_CLASS = 3;
+    public static final int ROW_CLASS = 4;
+    public static final int ALT_ROW_CLASS = 5;
+    public static final int HEADER_CELL_CLASS = 6;
+    public static final int DATA_CELL_CLASS = 7;
+    public static final int FOOTER_CELL_CLASS = 8;
+    public static final int HEADER_CELL_SORTED_CLASS = 9;
+
+    private String _prefix = null;
+    
+    public StylePolicy(String prefix)
+    {
+        super();
+        
+        _prefix = prefix;
+    }
+    
+    public abstract String getTableClass();
+    public abstract String getHeaderRowClass();
+    public abstract String getFooterRowClass();
+    public abstract String getRowClass();
+    public abstract String getAltRowClass();
+    public abstract String getDataCellClass();
+    public abstract String getHeaderCellClass();
+    public abstract String getFooterCellClass();
+    public abstract String getHeaderCellSortedClass();
+
+    public void writeStyleClass(StringBuffer buf, int[] cssClassTypes)
+    {
+        assert cssClassTypes != null;
+
+        buf.append(" class=\"");
+        for(int i = 0; i < cssClassTypes.length; i++)
+        {
+            if(i > 0) buf.append(" ");
+
+            String className = getClassForType(cssClassTypes[i]);
+            if(_prefix != null)
+            {
+                buf.append(_prefix);
+                buf.append(DELIM);
+            }
+            buf.append(className);
+        }
+        buf.append("\"");
+    }
+    
+    public void writeStyleClass(StringBuffer buf, int cssClassType)
+    {
+        writeStyleClass(buf, getClassForType(cssClassType));
+    }
+
+    protected String getClassForType(int cssClassType)
+    {
+        switch(cssClassType) 
+        {
+        case TABLE_CLASS: return getTableClass();
+        case HEADER_ROW_CLASS: return getHeaderRowClass();
+        case FOOTER_ROW_CLASS: return getFooterRowClass();
+        case ROW_CLASS: return getRowClass();
+        case ALT_ROW_CLASS: return getAltRowClass();
+        case HEADER_CELL_CLASS: return getHeaderCellClass();
+        case DATA_CELL_CLASS: return getDataCellClass();
+        case FOOTER_CELL_CLASS: return getFooterCellClass();
+        case HEADER_CELL_SORTED_CLASS: return getHeaderCellSortedClass();
+            //case DATA_CELL_SORTED_CLASS: return getDataCellSortedClass();
+        default: 
+            {
+                if(_logger.isDebugEnabled()) _logger.debug("Unable to file style class for class type \"" + cssClassType + "\"."); 
+                return "";
+            }
+        }
+    }
+
+    // @todo: should the styleClass be an int that selects which
+    // style to use from a switch or something?
+    private void writeStyleClass(StringBuffer buf, String cssClass)
+    {
+        if(cssClass.equals(""))
+            return;
+            
+        buf.append(" class=\"");
+        if(_prefix != null)
+        {
+            buf.append(_prefix);
+            buf.append(DELIM);
+        }
+        buf.append(cssClass);
+        buf.append("\"");
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/AnchorColumnModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/AnchorColumnModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,172 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model.impl;
+
+// java imports
+import java.net.MalformedURLException;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.servlet.ServletResponse;
+import javax.servlet.jsp.PageContext;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.datagrid.model.DataGridModel;
+
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.util.URLRewriter;
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+
+import org.apache.beehive.netui.util.ParamHelper;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * @todo: significant JavaScript support
+ */
+public class AnchorColumnModel
+    extends ColumnModel
+{
+    private static final Logger _logger = Logger.getInstance(AnchorColumnModel.class);
+
+    private HashMap _params = null;
+    private String _href = null;
+    private String _scopeId = null;
+    private String _action = null;
+
+    public void setAction(String action) {_action = action;}
+    public void setScopeId(String scopeId) {_scopeId = scopeId;}
+    public void setHref(String href) {_href = href;}
+
+    public AnchorColumnModel()
+    {
+        super();
+    }
+
+    public void removeAllParameters()
+    {
+        if(_params != null)
+            _params.clear();
+    }
+
+    public void addParameter(String name, Object value)
+    {
+        if(_params == null)
+            _params = new HashMap();
+
+        if(_logger.isDebugEnabled()) 
+            _logger.debug("add parameter named \"" + name + "\"");
+
+        ParamHelper.addParam(_params,name,value);
+        
+//         _logger.debug("map identityHashCode: " + System.identityHashCode(_params));
+//         Iterator iter = _params.keySet().iterator();
+//         while(iter.hasNext()) 
+//         {
+//             Object key = iter.next();
+//             Object val = _params.get(key);
+//             _logger.debug("map has key: " + key + " with value: " + val);
+//         }
+    }
+
+    public void renderDataCell(StringBuffer buffer)
+    {
+        DataGridModel tm = getDataGridModel();
+        assert tm != null;
+        
+        PageContext pc = tm.getPageContext();
+        assert pc != null;
+
+        if(_scopeId != null) 
+            addParameter(ScopedServletUtils.SCOPE_ID_PARAM, _scopeId);
+
+        String sHref = null;
+        Object href = null;
+        if(_action != null)
+        {
+            if(_logger.isDebugEnabled()) _logger.debug("rewrite action name \"" + _action + "\"");
+            href = PageflowTagUtils.createActionURL(pc, _action);
+            if(_logger.isDebugEnabled()) _logger.debug("action URL \"" + href + "\"");
+        }
+        else href = tm.evaluateExpression(_href, "href");
+        
+        assert href != null;
+        sHref = href.toString();
+
+        if(_logger.isDebugEnabled()) 
+            _logger.debug("handle param set of size: " + (_params != null ? _params.size() : 0));
+
+        HashMap nowParams = null;
+        if ((_params != null) && (_params.size()>0)) 
+        {
+            nowParams = new HashMap();
+            Iterator keys = _params.keySet().iterator();
+            while(keys.hasNext())
+            {
+                Object key = keys.next();
+                Object value = _params.get(key);
+                if(value instanceof String)
+                {
+                    value = tm.evaluateExpression((String)value, "paramValue");
+                }
+                nowParams.put(key, value);
+            }
+        }
+
+        String url = calculateURL(pc, sHref, nowParams);
+
+        if(_logger.isDebugEnabled()) _logger.debug("calculated URL: " + url);
+        
+        buffer.append("<a");
+        renderAttribute(buffer, url, "href");
+        buffer.append(">");
+        buffer.append("<span");
+        buffer.append(">");
+        Object value = tm.evaluateExpression(getValue(), "value");
+        buffer.append(value);
+        buffer.append("</span>");
+        buffer.append("</a>");
+    }
+
+    protected static final String calculateURL(PageContext pageContext, String destination, HashMap queryParams)
+    {
+        String url = null;
+        try
+        {
+            // encode all parameters
+            url = PageflowTagUtils.computeURL(pageContext, null, destination, null, null, queryParams, null, true);
+
+            String type = URLRewriter.ACTION_UNSECURE;
+            if (URLRewriterService.needsSecure(pageContext.getRequest(), pageContext.getServletContext(), url, true))
+                type = URLRewriter.ACTION_SECURE;
+
+            // rewrite the URL
+            url = URLRewriterService.rewriteURL(pageContext.getServletContext(), pageContext.getRequest(), pageContext.getResponse(), url, type);
+        }
+        catch (MalformedURLException e)
+        {
+            if(_logger.isErrorEnabled()) _logger.error("Caught exception formatting URL: " + e, e);
+        }
+        return url;
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultFilter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultFilter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,138 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model.impl;
+
+// java imports
+import java.util.HashMap;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.IFilter;
+import org.apache.beehive.netui.datagrid.services.IllegalFilterException;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class DefaultFilter
+    implements IFilter
+{
+    private static final Logger _logger = Logger.getInstance(DefaultFilter.class);
+    private static final HashMap _stringToInt;
+    private static final HashMap _intToString;
+
+    private static final String FILTER_DELIM = "~";
+
+    static
+    {
+        _stringToInt = new HashMap();
+        _stringToInt.put("eq", new Integer(IFilter.EQUALS));
+        _stringToInt.put("ne", new Integer(IFilter.NOT_EQUAL));
+
+        _intToString = new HashMap();
+        _intToString.put(new Integer(IFilter.EQUALS), "eq");
+        _intToString.put(new Integer(IFilter.NOT_EQUAL), "ne");
+    }
+
+    private String _filterExpr;
+    private int _op;
+    private Object _value;
+
+    public DefaultFilter() {}
+
+    public DefaultFilter(String filterExpression, String operation, Object value)
+    {
+        this(filterExpression, mapStringToInt(operation), value);
+    }
+
+    public DefaultFilter(String filterExpression, int operation, Object value)
+    {
+        _filterExpr = filterExpression;
+        _op = operation;
+        _value = value;
+    }
+
+    public void setFilterExpression(String filterExpression) {_filterExpr = filterExpression;}
+    public String getFilterExpression() {return _filterExpr;}
+    
+    public void setOperation(int operation) {_op = operation;}
+    public int getOperation() {return _op;}
+    
+    public void setValue(Object value) {_value = value;}
+    public Object getValue() {return _value;}
+
+    public String getOperationText() {return mapIntToString(_op);}
+
+    public static final IFilter parse(String namespace, String filter)
+    {
+        // @todo: need to figure out how to handle this case...
+        if(!filter.startsWith(namespace))
+            return null;
+
+        // crack filter terms here
+        String[] terms = filter.split(FILTER_DELIM);
+        
+        // @todo: what did this mean?
+        if(terms.length == 3 && terms[2].equals("*"))
+            return null;
+        else if(terms.length == 4)
+        {
+            try
+            {
+                // the namespace is ignored here since all filter terms are scoped into a namespace already
+                DefaultFilter f = new DefaultFilter(terms[1], terms[2], terms[3]);
+                return f;
+            }
+            catch(NumberFormatException nfe)
+            {
+                if(_logger.isErrorEnabled())  
+                    _logger.error("An error occurred parsing a URL filter with syntax \"" + filter + "\".");
+                throw new IllegalFilterException("An exception occurred parsing the filter \"" + filter + "\".  Cause: " + nfe, nfe);
+            }
+        }
+        else throw new IllegalFilterException("The syntax of the filter \"" + filter + "\" is illegal.");
+    }
+
+    public String write(String namespace)
+    {
+        assert namespace != null;
+        StringBuffer buf = new StringBuffer();
+        buf.append(namespace);
+        buf.append(FILTER_DELIM);
+        buf.append(getFilterExpression());
+        buf.append(FILTER_DELIM);
+        buf.append(mapIntToString(getOperation()));
+        buf.append(FILTER_DELIM);
+        buf.append(getValue());
+        return buf.toString();
+    }
+
+    private static final int mapStringToInt(String operation)
+    {
+        Integer i = (Integer)_stringToInt.get(operation);
+        return i.intValue();
+    }
+
+    private static final String mapIntToString(int operation)
+    {
+        return (String)_intToString.get(new Integer(operation));
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultSort.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultSort.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model.impl;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ISort;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class DefaultSort
+    implements ISort
+{
+    private static final Logger _logger = Logger.getInstance(DefaultSort.class);
+    
+    private String _expr;
+    private int _dir;
+
+    public DefaultSort(String expression, int direction)
+    {
+        _expr = expression;
+        _dir = direction;
+    }
+
+    public String getSortExpression() {return _expr;}
+    public void setSortExpression(String expression) {_expr = expression;}
+
+    public int getDirection() {return _dir;}
+    public void setDirection(int direction) {_dir = direction;}
+
+    public String write(String namespace)
+    {
+        return write(namespace, false);
+    }
+
+    public String write(String namespace, boolean flipDirection)
+    {
+        int direction = _dir;
+        if(flipDirection)
+            direction = flipSortDirection(direction);
+
+        StringBuffer buf = new StringBuffer();
+        buf.append(namespace);
+        buf.append("~");
+        if(direction == ISort.DESCENDING)
+            buf.append("-");
+        buf.append(_expr);
+        return buf.toString();
+    }
+    
+    public String toString()
+    {
+        StringBuffer buf = new StringBuffer();
+        buf.append("\nexpr: " + _expr + "\n");
+        buf.append("dir: " + _dir + "\n");
+        return buf.toString();
+    }
+
+    private static final int flipSortDirection(int direction)
+    {
+        switch(direction)
+        {
+        case ISort.ASCENDING: return ISort.DESCENDING;
+        case ISort.DESCENDING: return ISort.ASCENDING;
+        default: return ISort.ASCENDING;
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultStylePolicy.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/DefaultStylePolicy.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model.impl;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.StylePolicy;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class DefaultStylePolicy
+    extends StylePolicy
+{
+    private static final Logger _logger = Logger.getInstance(DefaultStylePolicy.class);
+
+    public DefaultStylePolicy()
+    {
+        this(null);
+    }
+
+    public DefaultStylePolicy(String prefix)
+    {
+        super(prefix);
+    }
+    
+    public String getTableClass() {return "datagrid";}
+    public String getHeaderRowClass() {return "datagrid-header";}
+    public String getFooterRowClass() {return "datagrid-footer";}
+    public String getRowClass() {return "datagrid-even";}
+    public String getAltRowClass() {return "datagrid-odd";}
+    public String getDataCellClass() {return "datagrid-data-cell";}
+    public String getHeaderCellClass() {return "datagrid-header-cell";}
+    public String getFooterCellClass() {return "datagrid-footer-cell";}
+    public String getHeaderCellSortedClass() {return "datagrid-header-sorted";}
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/EmptyStylePolicy.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/EmptyStylePolicy.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model.impl;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.StylePolicy;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class EmptyStylePolicy
+    extends StylePolicy
+{
+    private static final Logger _logger = Logger.getInstance(EmptyStylePolicy.class);
+
+    public EmptyStylePolicy()
+    {
+        this(null);
+    }
+
+    public EmptyStylePolicy(String prefix)
+    {
+        super(prefix);
+    }
+    
+    public String getTableClass() {return null;}
+    public String getHeaderRowClass() {return null;}
+    public String getFooterRowClass() {return null;}
+    public String getRowClass() {return null;}
+    public String getAltRowClass() {return null;}
+    public String getDataCellClass() {return null;}
+    public String getHeaderCellClass() {return null;}
+    public String getFooterCellClass() {return null;}
+    public String getHeaderCellSortedClass() {return null;}
+
+    public void writeStyleClass(StringBuffer buf, int[] cssClassTypes)
+    {
+        return;
+    }
+
+    public void writeStyleClass(StringBuffer buf, int cssClassType)
+    {
+        return;
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/ImageColumnModel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/ImageColumnModel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,108 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model.impl;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * @todo: significant JavaScript support
+ */
+public class ImageColumnModel
+    extends ColumnModel
+{
+    private static final Logger _logger = Logger.getInstance(ImageColumnModel.class);
+
+    private String _imageStyle;
+    private String _valueStyle;
+
+    private String _src;
+    private String _align;
+    private String _hspace;
+    private String _vspace;
+    private String _border;
+    private String _height;
+    private String _width;
+
+    public String getAlign() {return _align;}
+    public void setAlign(String align) {_align = align;}
+
+    public String getHspace() {return _hspace;}
+    public void setHspace(String hspace) {_hspace = hspace;}
+
+    public String getVspace() {return _vspace;}
+    public void setVspace(String vspace) {_vspace = vspace;}
+
+    public String getBorder() {return _border;}
+    public void setBorder(String border) {_border = border;}
+
+    public String getHeight() {return _height;}
+    public void setHeight(String height) {_height = height;}
+
+    public String getWidth() {return _width;}
+    public void setWidth(String width) {_width = width;}
+
+    public String getSrc() {return _src;}
+    public void setSrc(String src) {_src = src;}
+
+    public String getImageStyle() {return _imageStyle;}
+    public void setImageStyle(String imageStyle) {_imageStyle = imageStyle;}
+
+    public String getValueStyle() {return _valueStyle;}
+    public void setValueStyle(String valueStyle) {_valueStyle = valueStyle;}
+
+    public void renderDataCell(StringBuffer buffer)
+    {
+        // render the value data from the super
+        // @todo: right now, this goes on the left-side of the rendered image; need to make this configurable
+        if(getValue() != null)
+            super.renderDataCell(buffer);
+
+        // @todo: need to render the image as the HTML tags render the image
+        buffer.append("<img src=\"");
+
+        Object src = getDataGridModel().evaluateExpression(_src, "src");
+        
+        buffer.append(src);
+        buffer.append("\"");
+
+        if(_imageStyle != null)
+            renderAttribute(buffer, _imageStyle, "style");
+        if(_align != null)
+            renderAttribute(buffer, _align, "align");
+        if(_hspace != null)
+            renderAttribute(buffer, _hspace, "hspace");
+        if(_vspace != null)
+            renderAttribute(buffer, _vspace, "vspace");
+        if(_border != null)
+            renderAttribute(buffer, _border, "border");
+        if(_height != null)
+            renderAttribute(buffer, _height, "height");
+        if(_width != null)
+            renderAttribute(buffer, _width, "width");
+
+        buffer.append("</img>");
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/LegacyStylePolicy.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/model/impl/LegacyStylePolicy.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.model.impl;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.StylePolicy;
+
+// external imports
+
+/**
+ *
+ */
+public class LegacyStylePolicy
+    extends StylePolicy
+{
+    private static final String TABLE_SUFFIX = "-table";
+    private static final String HEADER_ROW_SUFFIX = "-tr-header";
+    private static final String DATA_ROW_SUFFIX = "-tr-data";
+    private static final String ALT_DATA_ROW_SUFFIX = "-tr-alt-data";
+    private static final String FOOTER_ROW_SUFFIX = "-tr-footer";
+    private static final String HEADER_CELL_SUFFIX = "-td-header";
+    private static final String DATA_CELL_SUFFIX = "-td-data";
+    private static final String FOOTER_CELL_SUFFIX = "-td-footer";
+
+    private String _prefix = null;
+
+    public LegacyStylePolicy()
+    {
+        this(null);
+    }
+
+    public LegacyStylePolicy(String prefix)
+    {
+        super(null);
+        _prefix = prefix;
+    }
+    
+    public String getTableClass() {return _prefix + TABLE_SUFFIX;}
+    public String getHeaderRowClass() {return _prefix + HEADER_ROW_SUFFIX;}
+    public String getFooterRowClass() {return _prefix + FOOTER_ROW_SUFFIX;}
+    public String getRowClass() {return _prefix + DATA_ROW_SUFFIX;}
+    public String getAltRowClass() {return _prefix + ALT_DATA_ROW_SUFFIX;}
+    public String getDataCellClass() {return _prefix + DATA_CELL_SUFFIX;}
+    public String getHeaderCellClass() {return _prefix + HEADER_CELL_SUFFIX;}
+    public String getFooterCellClass() {return _prefix + FOOTER_CELL_SUFFIX;}
+    public String getHeaderCellSortedClass() {return "";}
+
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/FilterService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/FilterService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,506 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.services;
+
+// java imports
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletRequest;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.IFilter;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * 8.1: _sort=<namespace>~<columnName>~<op>~<value>
+ * 9.0: netui_sort=<namespace>~<filterExpr>~<op>~<value>
+ */
+public class FilterService
+{
+    private static final Logger _logger = Logger.getInstance(FilterService.class);
+
+    public static FilterService getInstance(ServletRequest request, String namespace)
+    {
+        return new FilterService(request, namespace);
+    }
+
+    public static FilterService getInstance(ServletRequest request, String namespace, String queryString)
+    {
+        return new FilterService(request, namespace, queryString);
+    }
+
+    private ServletRequest _request = null;
+    private String _namespace = null;
+    private Map _filters = null;
+    private String _queryString = null;
+    private Map _altParams = null;
+
+    private FilterService(ServletRequest request, String namespace)
+    {
+        super();
+        _request = request;
+        _namespace = namespace;
+    }
+
+    private FilterService(ServletRequest request, String namespace, String queryString)
+    {
+        this(request, namespace);
+        _queryString = queryString;
+    }
+
+    public boolean isFiltered(String filterExpression)
+    {
+        ensureFilterList();
+        
+        if(_filters == null) return false;
+        
+        if(_filters.containsKey(filterExpression))
+        {
+            assert ((ArrayList)_filters.get(filterExpression)).size() > 0;
+            return true;
+        }
+        else return false;
+    }
+
+    // @todo: need to return all filters here
+    public IFilter[] getFilters()
+    {
+        ensureFilterList();
+
+        if(_filters == null) return null;
+        
+        ArrayList allFilters = new ArrayList();
+        Iterator iterator = _filters.keySet().iterator();
+        while(iterator.hasNext())
+        {
+            String filterExpr = (String)iterator.next();
+            ArrayList list = (ArrayList)_filters.get(filterExpr);
+            for(int i = 0; i < list.size(); i++)
+            {
+                allFilters.add(list.get(i));
+            }
+        }
+
+        IFilter[] filterAry = new IFilter[allFilters.size()];
+        for(int i = 0; i < filterAry.length; i++)
+        {
+            filterAry[i] = (IFilter)allFilters.get(i);
+        }
+
+        return filterAry;
+    }
+    
+    public IFilter[] getFilters(String filterExpression)
+    {
+        ensureFilterList();
+        
+        if(_filters == null) return null;
+
+        return findFilters(filterExpression);
+    }
+    
+    public String getFilterQueryString()
+    {
+        return getFilterQueryStringInternal(null);
+    }
+    
+    public String getFilterQueryStringOmitFilter(String filterExpression)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("get query string omit filter: " + filterExpression);
+        return getFilterQueryStringInternal(filterExpression);
+    }
+
+    public String getFilterQueryStringOmitAllFilters()
+    {
+        return null;
+    }
+
+    public Map getFilterParamsMap()
+    {
+        return getFilterParamsMapInternal(null);
+    }
+
+    public Map getFilterParamsMapOmitFilter(String filterExpression)
+    {
+        return getFilterParamsMapInternal(null);
+    }
+
+    public Map getFilterParamsMapOmitAllFilters()
+    {
+        return null;
+    }
+
+    public void removeFilters(String filterExpression)
+    {
+        ensureFilterList();
+        
+        if(_filters == null) return;
+        
+        _filters.remove(filterExpression);
+    }
+
+    public void removeAllFilters()
+    {
+        _filters.clear();
+    }
+    
+    // @todo
+    public void addFilters(IFilter[] filters)
+    {
+        return;
+    }
+
+    // @todo
+    public void removeFilters(IFilter[] filters)
+    {
+        return;
+    }
+    
+    public String toString()
+    {
+        StringBuffer buf = new StringBuffer(256);
+        
+        return buf.toString();
+    }
+
+    // @todo: should this map be immutable?
+    private Map getFilterParamsMapInternal(String filterFilter)
+    {
+        ensureFilterList();
+
+        if(_filters == null) return null;
+
+        HashMap map = new HashMap();
+        ArrayList params = new ArrayList();
+        Iterator iterator = _filters.keySet().iterator();
+        while(iterator.hasNext())
+        {
+            String filterExpr = (String)iterator.next();
+            assert filterExpr != null;
+
+            if(filterFilter != null && filterExpr.equals(filterExpr))
+                continue;
+
+            assert _filters.get(filterExpr) instanceof ArrayList;
+            ArrayList list = (ArrayList)_filters.get(filterExpr);
+            assert list != null;
+            for(int i = 0; i < list.size(); i++)
+            {
+                params.add(((IFilter)list.get(i)).write(_namespace));
+            }
+        }
+        
+        // @todo: fix -- shouldn't have to convert List -> String[] here
+        String[] paramAry = new String[params.size()];
+        for(int i = 0; i < paramAry.length; i++)
+        {
+            paramAry[i] = (String)params.get(i);
+        }
+
+        map.put(IFilter.FILTER_PARAM_KEY, paramAry);
+
+        if(_altParams != null)
+        {
+            iterator = _altParams.keySet().iterator();
+            while(iterator.hasNext())
+            {
+                String key = (String)iterator.next();
+                assert key != null;
+
+                String[] values = (String[])_altParams.get(key);
+                assert values != null;
+
+                map.put(key, values);
+            }
+        }
+                
+        return map;
+    }
+
+    /**
+     * @param filterFilter the filter expression to omit from the returned filter String
+     */
+    private String getFilterQueryStringInternal(String filterFilter)
+    {
+        // @todo: caching of the alt query string
+        ensureFilterList();
+        
+        StringBuffer buf = new StringBuffer();
+        if(_filters != null) 
+        {
+            
+            Iterator iterator = _filters.keySet().iterator();
+            while(iterator.hasNext())
+            {
+                String filterExpr = (String)iterator.next();
+                assert filterExpr != null;
+                
+                // filter expression to omit
+                if(filterFilter != null && filterExpr.equals(filterFilter))
+                    continue;
+                
+                // @todo: encoding!
+                assert _filters.get(filterExpr) instanceof ArrayList;
+                ArrayList list = (ArrayList)_filters.get(filterExpr);
+                assert list != null;            
+                for(int i = 0; i < list.size(); i++)
+                {
+                    IFilter f = (IFilter)list.get(i);
+                    buf.append(IFilter.FILTER_PARAM_KEY);
+                    buf.append("=");
+                    buf.append(((IFilter)list.get(i)).write(_namespace));
+                }
+                
+                if(iterator.hasNext()) 
+                    buf.append("&");
+            }
+        }
+
+        if(_logger.isDebugEnabled()) _logger.debug("filter query string: " + buf.toString());
+        if(_logger.isDebugEnabled()) _logger.debug("alt params size: " + _altParams != null ? "" + _altParams.size() : "null");
+
+        if(_altParams != null && _altParams.size() > 0)
+        {
+            Iterator i2 = _altParams.keySet().iterator();
+            while(i2.hasNext())
+            {
+                String key = (String)i2.next();
+                assert key != null;
+
+                String[] values = (String[])_altParams.get(key);
+                assert values != null;
+
+                // @todo: encoding!
+                for(int i = 0; i < values.length; i++)
+                {
+                    buf.append("&");
+                    buf.append(key);
+                    buf.append("=");
+                    buf.append(values[i]);
+                }
+            }
+        }
+        else System.out.println("_altParams has no additional parameters");
+
+        if(_logger.isDebugEnabled()) _logger.debug("filter query string with alt params: " + buf.toString());
+
+        return buf.toString();
+    }
+
+    private IFilter[] findFilters(String filterExpression)
+    {
+        if(_filters == null) return null;
+        
+        ArrayList list = (ArrayList)_filters.get(filterExpression);
+        
+        if(list == null) return null;
+
+        // @todo: need a fast data structure for this
+        // convert List -> IFilter[]
+        IFilter[] filterAry = new IFilter[list.size()];
+        for(int i = 0; i < filterAry.length; i++)
+        {
+            filterAry[i] = (IFilter)list.get(i);
+        }
+        
+        return filterAry;
+    }
+
+    // @todo: performance
+    private final void ensureFilterList()
+    {
+        if(_filters == null)
+        {
+            if(_queryString == null)
+            {
+                Map params = _request.getParameterMap();
+                String[] filters = _request.getParameterValues(IFilter.FILTER_PARAM_KEY);
+                _filters = createFilters(filters, _namespace);
+                _altParams = findAltParams(params, _namespace);
+            }
+            else
+            {
+                Map params = splitQueryString(_queryString);
+                String[] filters = (String[])params.get(IFilter.FILTER_PARAM_KEY);
+                _filters = createFilters(filters, _namespace);
+                _altParams = findAltParams(params, _namespace);
+            }
+        }
+
+        if(_logger.isDebugEnabled()) _logger.debug("alt params map: " + mapToString(_altParams));
+    }
+
+    private static final Map createFilters(String[] queryParams, String namespace)
+    {
+        if(queryParams == null) return null;
+        
+        HashMap map = new HashMap();
+        for(int i = 0; i < queryParams.length; i++)
+        {
+            // @todo: need to make this pluggable...
+            if(!queryParams[i].startsWith(namespace + "~"))
+                continue;
+
+            IFilter f = org.apache.beehive.netui.datagrid.model.impl.DefaultFilter.parse(namespace, queryParams[i]);
+
+            assert f != null;
+
+            ArrayList list = (ArrayList)map.get(f.getFilterExpression());
+            if(list == null) 
+            {
+                list = new ArrayList();
+                map.put(f.getFilterExpression(), list);
+            }
+            
+            list.add(f);
+        }
+
+        return map;
+    }
+
+    private static Map findAltParams(Map params, String gridName)
+    {
+        HashMap map = new HashMap();
+
+        if(params == null) return null;
+
+        Iterator keys = params.keySet().iterator();
+        while(keys.hasNext())
+        {
+            String key = (String)keys.next();
+            String[] values = (String[])params.get(key);
+            if(key.equals(IFilter.FILTER_PARAM_KEY))
+            {
+                ArrayList list = new ArrayList();
+                for(int i = 0; i < values.length; i++)
+                {
+                    if(values[i].startsWith(gridName + "~"))
+                        continue;
+                    else list.add(values[i]);
+                }
+                
+                values = new String[list.size()];
+                for(int i = 0; i < list.size(); i++)
+                    values[i] = (String)list.get(i);
+            }
+
+            map.put(key, values);
+        }
+        
+        return map;
+    }
+
+    private static Map splitQueryString(String search)
+    {
+        if(search == null) return null;
+
+        if(search.startsWith("?"))
+            search = search.substring(1);
+
+        String[] query = search.split("&");
+        HashMap params = new HashMap();
+        if(query != null)
+        {
+            for(int i = 0; i < query.length; i++)
+            {
+                if(query[i].equals(""))
+                    continue;
+                
+                if(_logger.isDebugEnabled()) _logger.debug("split query param: '" + query[i] + "'");
+
+                assert query[i].indexOf("=") > -1;
+
+                String key = query[i].substring(0, query[i].indexOf("="));
+
+                String value = query[i].substring(query[i].indexOf("=")+1);
+                ArrayList list = (ArrayList)params.get(key);
+                if(list == null)
+                {
+                    list = new ArrayList();
+                    params.put(key, list);
+                }
+                
+                list.add(value);
+            }
+
+            Iterator iterator = params.keySet().iterator();
+            while(iterator.hasNext())
+            {
+                String key = (String)iterator.next();
+                ArrayList list = (ArrayList)params.get(key);
+                
+                String[] ary = new String[list.size()];
+                for(int i = 0; i < list.size(); i++)
+                {
+                    ary[i] = (String)list.get(i);
+                }
+                
+                params.put(key, ary);
+            }
+        }
+    
+        return params;
+    }
+
+    private static final String mapToString(Map map)
+    {
+        if(map == null)
+            return "Map is null";
+        if(map.size() == 0)
+            return "Map is empty";
+
+        StringBuffer buf = new StringBuffer();
+        buf.append("Map:::::\n");
+
+        Iterator iterator = map.keySet().iterator();
+        while(iterator.hasNext())
+        {
+            String key = (String)iterator.next();
+            buf.append("key: " + key + "\n");
+            Object value = map.get(key);
+            if(value instanceof List)
+            {
+                List l = (List)value;
+                for(int i = 0; i < l.size(); i++)
+                {
+                    buf.append("  value[" + i + "]: " + l.get(i) + "\n");
+                }
+            }
+            else if(value instanceof String[])
+            {
+                String[] ary = (String[])value;
+                for(int i = 0; i < ary.length; i++)
+                {
+                    buf.append("  value[" + i + "]: " + ary[i] + "\n");
+                }
+            }
+        }
+
+        buf.append(":::::\n");
+
+        return buf.toString();
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/IllegalFilterException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/IllegalFilterException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,69 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.services;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class IllegalFilterException
+    extends RuntimeException
+{
+
+    /** 
+     *  
+     */ 
+    public IllegalFilterException()
+    {
+        super();
+    }
+
+    /** 
+     *  
+     * @param message 
+     */ 
+    public IllegalFilterException(String message)
+    {
+        super(message);
+    }
+
+    /** 
+     *  
+     * @param cause 
+     */ 
+    public IllegalFilterException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    /** 
+     *  
+     * @param message 
+     * @param cause 
+     */ 
+    public IllegalFilterException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/PagerService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/PagerService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,182 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.services;
+
+// java imports
+import javax.servlet.ServletRequest;
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class PagerService
+{
+    private static final Logger _logger = Logger.getInstance(PagerService.class);
+    
+    public static final PagerService getInstance(ServletRequest request, String namespace)
+    {
+        PagerService svc = new PagerService(request, namespace);
+        return svc;
+    }
+
+    private static final int DEFAULT_PAGE = 1;
+    private static final int DEFAULT_PAGE_SIZE = 10;
+    private static final String DELIM = "~";
+
+    private String _namespace = null;
+    private ServletRequest _request = null;
+    private Integer _currentPage = null;
+    private Integer _pageSize = null;
+    private Integer _dataSetSize = null;
+
+    public PagerService(ServletRequest request, String namespace)
+    {
+        _namespace = namespace;
+        _request = request;
+    }
+
+    public int getCurrentPage()
+    {
+        if(_currentPage == null)
+        {
+            String[] params = _request.getParameterValues("netui_page");
+            
+
+            if(_logger.isDebugEnabled()) _logger.debug("found " + (params != null ? ""+params.length : "null") + " page parameters");
+
+            if(params != null)
+            {
+                String prefix = _namespace + DELIM;
+
+                if(_logger.isDebugEnabled()) _logger.debug("search for prefix: " + prefix);
+
+                for(int i = 0; i < params.length; i++)
+                {
+                    if(params[i].startsWith(prefix))
+                    {
+                        if(_logger.isDebugEnabled()) _logger.debug("found current page query param: " + params[i]);
+
+                        // @todo: should probably catch IOBE here.
+                        String page = params[i].substring(prefix.length());
+                        try
+                        {
+                            _currentPage = new Integer(page);
+                        }
+                        catch(NumberFormatException nfe)
+                        {
+                            if(_logger.isErrorEnabled()) 
+                                _logger.error("Invalid current page value \"" + page + "\".  Cause: " + nfe, nfe);
+                        }
+                    }
+                }
+            }
+        }
+        
+        int page = _currentPage != null ? _currentPage.intValue() : DEFAULT_PAGE;
+        
+        if(_logger.isDebugEnabled()) 
+            _logger.debug("current page: " + page);
+
+        assert page >= 1;
+        
+        return page;
+    }
+
+    public int getPageSize()
+    {
+        if(_pageSize == null)
+        {
+            String[] params = _request.getParameterValues("netui_pagesize");
+            if(params != null)
+            {
+                String prefix = _namespace + DELIM;
+                for(int i = 0; i < params.length; i++)
+                {
+                    if(params[i].startsWith(prefix))
+                    {
+                        String size = params[i].substring(prefix.length());
+                        try
+                        {
+                            _pageSize = new Integer(size);
+                        }
+                        catch(NumberFormatException nfe)
+                        {
+                            if(_logger.isErrorEnabled()) 
+                                _logger.error("Invalid page size value \"" + size + "\".  Cause: " + nfe, nfe);
+
+                            _pageSize = null;
+                        }
+                    }
+                }
+            }
+        }
+        
+        int size = (_pageSize != null ? _pageSize.intValue() : DEFAULT_PAGE_SIZE);
+        
+        if(_logger.isDebugEnabled()) 
+            _logger.debug("page size: " + size);
+        
+        assert size >= 1;
+
+        return size;
+    }
+
+    public void setPageSize(int size)
+    {
+        _pageSize = new Integer(size);
+    }
+
+    public void setCurrentPage(int currentPage)
+    {
+        _currentPage = new Integer(currentPage);
+    }
+        
+    public String getCurrentPageParamString()
+    {
+        return buildPageParamString((_currentPage != null ? _currentPage.intValue() : 1));
+    }
+    
+    public String getNextPageQueryParam()
+    {
+        return buildPageParamString((_currentPage != null ? _currentPage.intValue() + 1 : 2));
+    }
+
+    public String getPrevPageQueryParam()
+    {
+        return buildPageParamString((_currentPage != null ? _currentPage.intValue() - 1 : 1));
+    }
+
+    private String buildPageParamString(int page)
+    {
+        StringBuffer buf = new StringBuffer();
+        if(page > -1)
+        {
+            buf.append("netui_page=");
+            buf.append(_namespace);
+            buf.append(DELIM);
+            buf.append(page);
+        }
+
+        return buf.toString();
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/SortService.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/services/SortService.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,441 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.services;
+
+// java imports
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import javax.servlet.ServletRequest;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ISort;
+import org.apache.beehive.netui.datagrid.model.impl.DefaultSort;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * 8.1: _sort=<namespace>~[+|-]<expr>
+ * 9.0: netui_sort=<namespace>~[+|-]<expr>
+ *
+ * @todo: would be great to move the namespace name into the key for faster lookups
+ * @todo: figure out the back-compat story (a sad, long, and sordid one to be sure)
+ */
+public class SortService
+{
+    private static final Logger _logger = Logger.getInstance(SortService.class);
+
+    private static final String EMPTY = "";
+    private static final String SORT_DELIM = "~";
+    private static final String SORT_TERM_DELIM = ",";
+    private static final int DEFAULT_SORT_DIRECTION = ISort.ASCENDING;
+
+    public static final SortService getInstance(ServletRequest request, String namespace)
+    {
+        SortService svc = new SortService(request, namespace);
+        return svc;
+    }
+
+    private ServletRequest _request = null;
+    private String _namespace = null;
+    private ISort[] _sorts = null;
+    private Map _altParams = null;
+
+    private SortService(ServletRequest request, String namespace)
+    {
+        super();
+        _request = request;
+        _namespace = namespace;
+    }
+    
+    public ISort[] getSorts()
+    {
+        ensureSortList();
+
+        return _sorts;
+    }
+
+    public boolean isPrimarySort(String sortExpression)
+    {
+        ensureSortList();
+        
+        ISort term = findTerm(sortExpression);
+        if(term == null || term != _sorts[0])
+            return false;
+        else return true;
+    }
+
+    public boolean isSorted(String sortExpression)
+    {
+        ensureSortList();
+
+        ISort term = findTerm(sortExpression);
+        if(term == null || term.getDirection() == ISort.NONE)
+            return false;
+        else return true;
+    }
+
+    public int getSortDirection(String sortExpression)
+    {
+        ensureSortList();
+        
+        ISort term = findTerm(sortExpression);
+        if(term == null)
+            return ISort.NONE;
+        else return term.getDirection();
+    }
+
+    public String getSortParamsString()
+    {
+        ensureSortList();
+        
+        StringBuffer buf = new StringBuffer();
+        if(_sorts != null)
+        {
+            for(int i = 0; i < _sorts.length; i++)
+            {
+                if(i > 0)
+                    buf.append("&");
+                
+                ISort s = _sorts[i];
+                buf.append("netui_sort=");
+                buf.append(s.write(_namespace));
+            }
+        }
+
+        if(_altParams != null && _altParams.size() > 0)
+        {
+            Iterator iterator = _altParams.keySet().iterator();
+            while(iterator.hasNext())
+            {
+                String key = (String)iterator.next();
+                String[] values = (String[])_altParams.get(key);
+
+                _logger.debug("values.length: " + values.length);
+                for(int i = 0; i < values.length; i++)
+                {
+                    _logger.debug("query: " + buf.toString());
+
+                    buf.append("&");
+                    buf.append(key);
+                    buf.append("=");
+                    buf.append(values[i]);
+                }
+            }
+        }
+
+        return buf.toString();
+    }
+    
+    public Map getSortParamsMap()
+    {
+        ensureSortList();
+        
+        if(_sorts == null) return null;
+        
+        String[] sortParams = new String[_sorts.length];
+        Map map = new LinkedHashMap();
+        for(int i = 0; i < _sorts.length; i++)
+        {
+            sortParams[i] = _sorts[i].write(_namespace);
+        }
+        map.put("netui_sort", sortParams);
+        
+        if(_altParams != null)
+        {
+            Iterator iterator = _altParams.keySet().iterator();
+            while(iterator.hasNext())
+            {
+                String key = (String)iterator.next();
+                assert key != null;
+
+                String[] values = (String[])_altParams.get(key);
+                assert values != null;
+
+                map.put(key, values);
+            }
+        }
+
+        return map;
+    }
+    
+    public String getSortParamsString(String sortExpression)
+    {
+        ensureSortList();
+
+        assert sortExpression != null;
+
+        int direction = DEFAULT_SORT_DIRECTION;
+        StringBuffer buf = new StringBuffer();
+        ISort had = findTerm(sortExpression);
+        if(had == null)
+        {
+            if(_logger.isDebugEnabled()) _logger.debug("didn't find sort with expression: " + sortExpression);
+
+            buf.append("netui_sort=");
+            buf.append(writeSortParam(_namespace, sortExpression, direction));                
+
+            if(_sorts != null)
+            {
+                for(int i = 0; i < _sorts.length; i++)
+                {
+                    buf.append("&");
+                    
+                    ISort s = _sorts[i];
+                    buf.append("netui_sort=");
+                    buf.append(s.write(_namespace));
+                }
+            }
+        }
+        else
+        {
+            // if resorting the first sorted column, filp its direction and remove other sorts
+            if(indexOf(had) == 0)
+            {            
+                if(_logger.isDebugEnabled()) _logger.debug("found sort at index 0 with expression: " + sortExpression);
+                buf.append("netui_sort=");
+                buf.append(had.write(_namespace, true)); 
+            }
+            else
+            {
+                if(_logger.isDebugEnabled()) _logger.debug("found sort not at 0 with expression: " + sortExpression);
+
+                // most recent click goes first, others bump down
+                buf.append("netui_sort=");
+                had.setDirection(direction);
+                buf.append(had.write(_namespace));
+
+                for(int i = 0; i < _sorts.length; i++)
+                {
+                    ISort s = _sorts[i];
+                    
+                    // skip 
+                    if(had == s)
+                        continue;
+                    else 
+                    {
+                        buf.append("&");
+                        buf.append("netui_sort=");
+                        buf.append(s.write(_namespace)); 
+                    }
+                }
+            }
+        }
+
+        if(_altParams != null && _altParams.size() > 0)
+        {
+            Iterator iterator = _altParams.keySet().iterator();
+            while(iterator.hasNext())
+            {
+                String key = (String)iterator.next();
+                String[] values = (String[])_altParams.get(key);
+                
+                for(int i = 0; i < values.length; i++)
+                {
+                    buf.append("&");
+                    buf.append(key);
+                    buf.append("=");
+                    buf.append(values[i]);
+                }
+            }
+        }
+
+        return buf.toString();
+    }
+
+    private int indexOf(ISort sort)
+    {
+        for(int i = 0; i < _sorts.length; i++)
+        {
+            if(_sorts[i] == sort) return i;
+        }
+        
+        return -1;
+    }
+    
+    public boolean removeSort(String sortExpression)
+    {
+        return false;
+    }
+
+    public boolean addSort(String sortExpression, int direction)
+    {
+        assert direction == ISort.NONE || direction == ISort.ASCENDING || direction == ISort.DESCENDING;
+
+        return false;
+    }
+    
+    public boolean replaceSort(String sortExpression, int direction)
+    {
+        assert direction == ISort.NONE || direction == ISort.ASCENDING || direction == ISort.DESCENDING;
+
+        return false;
+    }
+
+    public String toString()
+    {
+        StringBuffer buf = new StringBuffer(256);
+        return buf.toString();
+    }
+
+    private ISort findTerm(String sortExpression)
+    {
+        if(_sorts == null) return null;
+        
+        for(int i = 0; i < _sorts.length; i++)
+        {
+            ISort s = _sorts[i];
+            if(s.getSortExpression().equals(sortExpression))
+                return s;
+        }
+        
+        return null;
+    }
+
+    private void ensureSortList()
+    {
+        if(_sorts != null)
+            return;
+
+        _sorts = parseTerms(_request, _namespace);
+    }
+     
+    private static final String writeSortParam(String namespace, String sortExpression, int direction)
+    {
+        // @todo: delegate to factory to fetch default implementation
+        ISort sort = new DefaultSort(sortExpression, direction);
+        return sort.write(namespace);
+    }
+
+    private final ISort[] parseTerms(ServletRequest request, String namespace)
+    {
+        String[] params = request.getParameterValues(ISort.SORT_PARAM_KEY);
+
+        if(params == null) return null;
+        String namespacePrefix = namespace + SORT_DELIM;
+        
+        List sorts = new ArrayList();
+        for(int i = 0; i < params.length; i++)
+        {
+            if(params[i].startsWith(namespacePrefix))
+            {
+                // crack sort terms here
+                String[] terms = params[i].split(SORT_DELIM);
+                String[] cols = terms[1].split(SORT_TERM_DELIM);
+                for(int j = 0; j < cols.length; j++)
+                {
+                    String t = cols[j];
+                    int dir = (cols[j].startsWith("-") == true ? ISort.DESCENDING : ISort.ASCENDING);
+                    String expr = (dir == ISort.DESCENDING ? cols[j].substring(1) : cols[j]);
+                    ISort sort = new DefaultSort(expr, dir);
+                    sorts.add(sort);
+                }
+            }
+        }
+
+        _altParams = findAltParams(_request, namespace);
+
+        if(_logger.isDebugEnabled()) _logger.debug("alt params map: " + mapToString(_altParams));
+        
+        ISort[] ret = new ISort[sorts.size()];
+        for(int i = 0; i < ret.length; i++) 
+        {
+            ret[i] = (ISort)sorts.get(i);
+            if(_logger.isDebugEnabled()) _logger.debug("sort: " + ret[i].toString());
+        }
+
+        return ret;
+    }
+
+    private static Map findAltParams(ServletRequest _request, String namespace)
+    {
+        HashMap map = new HashMap();
+
+        Map paramMap = _request.getParameterMap();
+        if(paramMap == null) return null;
+
+        Iterator keys = paramMap.keySet().iterator();
+        while(keys.hasNext())
+        {
+            String key = (String)keys.next();
+            String[] values = _request.getParameterValues(key);
+            if(key.equals(ISort.SORT_PARAM_KEY))
+            {
+                ArrayList list = new ArrayList();
+                for(int i = 0; i < values.length; i++)
+                {
+                    if(values[i].startsWith(namespace + "~"))
+                        continue;
+                    else list.add(values[i]);
+                }
+                
+                values = new String[list.size()];
+                for(int i = 0; i < list.size(); i++)
+                    values[i] = (String)list.get(i);
+            }
+
+            map.put(key, values);
+        }
+        
+        return map;
+    }
+
+    private static final String mapToString(Map map)
+    {
+        if(map == null)
+            return "Map is null";
+        if(map.size() == 0)
+            return "Map is empty";
+
+        StringBuffer buf = new StringBuffer();
+        buf.append("Map:::::\n");
+
+        Iterator iterator = map.keySet().iterator();
+        while(iterator.hasNext())
+        {
+            String key = (String)iterator.next();
+            buf.append("key: " + key + "\n");
+            Object value = map.get(key);
+            if(value instanceof List)
+            {
+                List l = (List)value;
+                for(int i = 0; i < l.size(); i++)
+                {
+                    buf.append("  value[" + i + "]: " + l.get(i) + "\n");
+                }
+            }
+            else if(value instanceof String[])
+            {
+                String[] ary = (String[])value;
+                for(int i = 0; i < ary.length; i++)
+                {
+                    buf.append("  value[" + i + "]: " + ary[i] + "\n");
+                }
+            }
+        }
+
+        buf.append(":::::\n");
+
+        return buf.toString();
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/util/AttributeHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/datagrid/util/AttributeHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.datagrid.util;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class AttributeHelper
+{
+    public static final char SINGLE_QUOTE = '\'';
+    public static final char DOUBLE_QUOTE = '"';
+
+    private AttributeHelper() {}
+
+    public final static void renderAttribute(StringBuffer buffer, Object value, String name)
+    {
+        renderAttribute(buffer, value, name, DOUBLE_QUOTE);
+    }
+
+    public final static void renderAttribute(StringBuffer buffer, Object value, String name, char quoteChar)
+    {
+        buffer.append(" ");
+        buffer.append(name);
+        buffer.append("=");
+        buffer.append(quoteChar);
+        buffer.append(value);
+        buffer.append(quoteChar);
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/AbstractColumn.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/AbstractColumn.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,249 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.datagrid;
+
+// java imports
+import javax.servlet.jsp.tagext.Tag;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.datagrid.model.DataGridModel;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.html.Formattable;
+import org.apache.beehive.netui.tags.html.FormatTag;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public abstract class AbstractColumn
+    extends AbstractBaseTag
+    implements Formattable
+{
+    private static final Logger _logger = Logger.getInstance(AbstractColumn.class);
+
+    private Columns _parent = null;
+    private DataGrid _dataGrid = null;
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setFilterable(boolean filterable) {getColumnModel().setFilterable(new Boolean(filterable));}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setSortable(boolean sortable) {getColumnModel().setSortable(new Boolean(sortable));}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setSortExpression(String sortExpression) {getColumnModel().setSortExpression(sortExpression);}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setFilterExpression(String filterExpression) {getColumnModel().setFilterExpression(filterExpression);}
+
+    /**
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setHeaderText(String headerText) {getColumnModel().setHeaderText(headerText);}
+
+    /**
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setFooterText(String footerText) {getColumnModel().setFooterText(footerText);}
+
+    /**
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setValue(String value) {getColumnModel().setValue(value);}
+
+    public void addFormatter(FormatTag.Formatter formatter)
+    {
+        getColumnModel().addFormatter(formatter);
+    }
+
+    public int doStartTag()
+    {
+        int gridRenderState = getDataGrid().getRenderState();
+        int columnsRenderState = getColumnsTag().getRenderState();
+
+        assert getParent() instanceof Columns;
+        assert getColumnModel() != null;
+        
+        if(_logger.isDebugEnabled()) _logger.debug("start tag.  grid render state: " + gridRenderState + " columns render state: " + columnsRenderState);
+        
+        // when starting to render, the ColumnModel associated with this tag
+        // needs to be created
+        if(gridRenderState == DataGrid.START_RENDER_STATE)
+        {
+            ColumnModel cm = getColumnModel();
+            getColumnsTag().addColumn(cm);
+        }
+        // otherwise, the ColumnModel associated with this tag
+        // needs to be fetched from the <columns> tag for the current
+        // iteration
+        else 
+        {
+            ColumnModel cm = getDataGrid().getNextColumnModel();
+            setColumnModel(cm);
+        }
+
+        if(columnsRenderState == Columns.DATA_RENDER_STATE)
+            return EVAL_BODY_BUFFERED;
+        else return SKIP_BODY;
+    }
+
+    public int doEndTag()
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("end tag");
+
+        int retVal = EVAL_PAGE;
+        int renderType = getDataGrid().getRenderType();
+        int gridRenderState = getDataGrid().getRenderState();
+
+        if(renderType == DataGrid.JSP_TAG_RENDERING)
+        {
+            if(gridRenderState == DataGrid.START_RENDER_STATE)
+            {
+                retVal = EVAL_PAGE;
+            }
+            else if(gridRenderState == DataGrid.GRID_RENDER_STATE)
+            {
+                StringBuffer buf = new StringBuffer();
+                int renderState = getColumnsTag().getRenderState();
+                ColumnModel cm = getColumnModel();
+                // @todo: need to assert that the identityHashCode of 'cm' is well-known
+                DataGridModel dgm = getDataGrid().getDataGridModel();
+                
+                if(_logger.isDebugEnabled()) _logger.debug("current column render state: " + renderState);
+                if(_logger.isDebugEnabled()) _logger.debug("current column model: " + cm);
+                
+                assert dgm != null;
+                assert cm != null;
+                
+                if(renderState == Columns.HEADER_RENDER_STATE)
+                {
+                    if(_logger.isDebugEnabled()) _logger.debug("render a column's header cell");
+                    
+                    cm.openHeaderCell(buf);
+                    cm.renderHeader(buf);
+                    cm.closeHeaderCell(buf);
+                }
+                else if(renderState == Columns.DATA_RENDER_STATE)
+                {
+                    if(_logger.isDebugEnabled()) _logger.debug("render a column's data cell");
+
+                    cm.onDataCellPreRender();
+                    
+                    int index = getDataGrid().getCurrentIndex();
+                    int groupDepth = dgm.getGroupDepth();
+
+                    if(_logger.isDebugEnabled()) _logger.debug("column index: " + index);
+
+                    // handle grouping
+                    boolean disableGroup = false;
+                    if(groupDepth > Columns.NO_GROUPING && index < groupDepth)
+                    {
+                        if(index == 0)
+                        {
+                            if(cm.getCanGroup())
+                                cm.setShouldGroup(true);
+                        }
+                        else 
+                        {
+                            ColumnModel prevColumn = dgm.getColumn(index-1);
+                            if(cm.getShouldGroup() && cm.getCanGroup())
+                                cm.setShouldGroup(true);
+                        }
+                    }
+
+                    cm.openDataCell(buf);
+                    cm.renderDataCell(buf);
+                    cm.closeDataCell(buf);
+                    cm.onDataCellPostRender();
+                }
+                else if(renderState == Columns.FOOTER_RENDER_STATE)
+                {
+                    if(_logger.isDebugEnabled()) _logger.debug("render a column's footer cell");
+                    
+                    cm.openFooterCell(buf);
+                    cm.renderFooterCell(buf);
+                    cm.closeFooterCell(buf);
+                }
+                
+                if(buf != null && buf.length() > 0)
+                    getDataGrid().appendContent(buf.toString());
+            }
+        }
+
+        localRelease();
+
+        return retVal;
+    }
+
+    public void localRelease()
+    {
+        super.localRelease();
+        _parent = null;
+        _dataGrid = null;
+    }
+
+    protected abstract ColumnModel getColumnModel();
+
+    protected abstract void setColumnModel(ColumnModel model);
+
+    // @todo: cache this
+    protected Columns getColumnsTag()
+    {
+        assert getParent() instanceof Columns;
+        
+        if(_parent != null)
+            return _parent;
+        
+        _parent = (Columns)getParent();
+
+        return _parent;
+    }
+
+    protected DataGrid getDataGrid()
+    {
+        Tag dataGrid = findAncestorWithClass(this, DataGrid.class);
+        
+        assert dataGrid != null;
+        _dataGrid = (DataGrid)dataGrid;
+
+        // @todo: error reporting
+        
+        return _dataGrid;
+    }
+
+    protected int getRenderState()
+    {
+        return getDataGrid().getRenderState();
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/AnchorColumn.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/AnchorColumn.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.datagrid;
+
+// java imports
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.datagrid.model.impl.AnchorColumnModel;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.html.URLParams;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ * @netui:tag name="anchorColumn" description="Renders a column of anchors in a NetUI data grid"
+ * @netui.tldx:tag whitespace="indent" 
+ *                 netuiexpressioninfo=""
+ *                 renderer="workshop.netui.jspdesigner.tldx.AnchorColumnRenderer"
+ */
+public class AnchorColumn
+    extends AbstractColumn
+    implements URLParams
+{
+    private static final Logger _logger = Logger.getInstance(AnchorColumn.class);
+
+    private AnchorColumnModel _column;
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setHref(String href) {((AnchorColumnModel)getColumnModel()).setHref(href);}
+
+    /**
+     * @netui:attribute required="false"
+     */ 
+    public void setScope(String scope) {((AnchorColumnModel)getColumnModel()).setScopeId(scope);}
+
+    /**
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="general" reftype="netui-action-url"
+     */ 
+    public void setAction(String action) {((AnchorColumnModel)getColumnModel()).setAction(action);}
+
+    public void addParameter(String name, Object value)
+        throws JspException
+    {
+        ((AnchorColumnModel)getColumnModel()).addParameter(name, value);
+    }
+
+    public String getTagName()
+    {
+        return "AnchorColumn";
+    }
+
+    public void localRelease()
+    {
+        super.localRelease();
+        _column.removeAllParameters();
+        _column = null;
+    }
+
+    protected void setColumnModel(ColumnModel column)
+    {
+        _column = (AnchorColumnModel)column;
+    }
+
+    protected ColumnModel getColumnModel()
+    {
+        if(_column == null)
+            return (_column = new AnchorColumnModel());
+        else return _column;
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/Columns.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/Columns.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,246 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.datagrid;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.datagrid.model.DataGridModel;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ * <p>
+ * <b>Sort Syntax</b>
+ * <br/>
+ *
+ * </p>
+ * @netui:tag name="columns" description="Container tag for columsn that will render in the grid"
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.ColumnsRenderer" 
+ *                 whitespace="indent" 
+ *                 netuiexpressioninfo=""
+ */
+public class Columns
+    extends AbstractBaseTag
+{
+    private static final Logger _logger = Logger.getInstance(DataGrid.class);
+
+    public static final int NO_GROUPING = -1;
+    public static final int HEADER_RENDER_STATE = 2;
+    public static final int DATA_RENDER_STATE = 3;
+    public static final int FOOTER_RENDER_STATE = 4;
+
+    private DataGrid _grid = null;
+
+    private Boolean _sortable = null;
+    private Boolean _filterable = null;
+    private String _sortAction = null;
+    private String _filterAction = null;
+    private int _groupDepth = NO_GROUPING;
+    private DataGridModel _gridModel = null;
+    private int _renderState = -1;
+
+    public Columns()
+    {
+        super();
+    }
+
+    public String getTagName() {return "Columns";}
+    
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setFilterAction(String filterAction) {_filterAction = filterAction;}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setSortAction(String sortAction) {_sortAction = sortAction;}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setDefaultSortable(boolean sortable) {_sortable = new Boolean(sortable);}
+    public Boolean getDefaultSortable(boolean sortable) {return _sortable;}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setDefaultFilterable(boolean filterable) {_filterable = new Boolean(filterable);}
+    public Boolean getDefaultFilterable(boolean filterable) {return _filterable;}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setGroupDepth(int groupDepth) {_groupDepth = groupDepth;}
+
+    public int doStartTag()
+    {
+        assert getParent() instanceof DataGrid;
+        _grid = (DataGrid)findAncestorWithClass(this, DataGrid.class);
+        assert _grid != null;
+        _gridModel = _grid.getDataGridModel();
+
+        int gridRenderType = _grid.getRenderType();
+        if(gridRenderType == DataGrid.JSP_TAG_RENDERING)
+        {
+            int gridRenderState = _grid.getRenderState();
+            if(gridRenderState == DataGrid.START_RENDER_STATE)
+            {
+            }
+            else if(gridRenderState == DataGrid.GRID_RENDER_STATE)
+            {
+                StringBuffer content = new StringBuffer();
+                _renderState = HEADER_RENDER_STATE;
+                _gridModel.openHeaderRow(content);
+                _grid.appendContent(content.toString());
+            }
+        }
+        
+        return EVAL_BODY_BUFFERED;
+    }
+
+    public int doAfterBody()
+    {
+        int retVal = EVAL_BODY_BUFFERED;
+
+        int gridRenderType = _grid.getRenderType();
+        if(gridRenderType == DataGrid.JSP_TAG_RENDERING)
+        {
+            int gridRenderState = _grid.getRenderState();
+            if(gridRenderState == DataGrid.START_RENDER_STATE)
+            {
+                retVal = SKIP_BODY;
+            }
+            else if(gridRenderState == DataGrid.GRID_RENDER_STATE)
+            {
+                _grid.resetColumnModelIndex();
+                StringBuffer content = new StringBuffer();
+                if(_renderState == HEADER_RENDER_STATE)
+                {
+                    _gridModel.closeHeaderRow(content);
+                    _gridModel.openDataRow(content);
+                    
+                    _gridModel.moveCursorToStart();
+                    // prime the pump with the next item of data to render
+                    if(_gridModel.hasNextDataItem() && !_gridModel.endDataSet())
+                    {
+                        _gridModel.nextDataItem();
+                        _renderState = DATA_RENDER_STATE;
+                    }
+                    else
+                    {
+                        // @todo: need to handle the "no-data" case here
+                        _renderState = FOOTER_RENDER_STATE;
+                    }
+                }
+                else if(_renderState == DATA_RENDER_STATE)
+                {
+                    _gridModel.closeDataRow(content);
+                    if(_gridModel.hasNextDataItem() && !_gridModel.endDataSet())
+                    {
+                        _gridModel.openDataRow(content);
+                        _gridModel.nextDataItem();
+                    }
+                    else 
+                    {
+                        if(_gridModel.shouldRenderFooter())
+                        {
+                            _renderState = FOOTER_RENDER_STATE;
+                            _gridModel.openFooterRow(content);
+                        }
+                        else 
+                        {
+                            _renderState = -1;
+                            retVal = SKIP_BODY;
+                        }
+                    }
+                }
+                else if(_renderState == FOOTER_RENDER_STATE)
+                {
+                     _gridModel.closeFooterRow(content);
+                    _renderState = -1;
+                    retVal = SKIP_BODY;
+                }
+                
+                _grid.appendContent(content.toString());                
+            }
+        }
+        else retVal = SKIP_BODY;
+
+        if(_logger.isDebugEnabled()) _logger.debug("render columns body with state: " + _renderState);
+        return retVal;
+    }
+
+    public int doEndTag()
+    {
+        localRelease();
+
+        return EVAL_PAGE;
+    }
+    
+    public void localRelease()
+    {
+        super.localRelease();
+        _sortable = null;
+        _filterable = null;
+        _sortAction = null;
+        _filterAction = null;
+        _grid = null;
+        _groupDepth = NO_GROUPING;
+        _renderState = -1;
+        _gridModel = null;
+    }
+
+    public int getRenderState()
+    {
+        return _renderState;
+    }
+
+    public void addColumn(ColumnModel cm)
+    {
+        if(_logger.isDebugEnabled())
+            _logger.debug("adding column of type " + (cm != null ? cm.getClass().getName() : null) + " with identity " + System.identityHashCode(cm));
+
+        if(_sortAction != null)
+        {
+            cm.setSortUri(_sortAction);
+        }
+
+        if(_filterAction != null)
+        {
+            cm.setFilterUri(_filterAction);
+        }
+
+        if(cm.isSortable() == null && _sortable != null)
+            cm.setSortable(_sortable);
+        
+        if(cm.isFilterable() == null && _filterable != null)
+            cm.setFilterable(_filterable);
+
+        _grid.addColumn(cm);
+
+        if(_groupDepth != NO_GROUPING)
+            _grid.setGroupDepth(_groupDepth);
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/DataGrid.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/DataGrid.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,282 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.datagrid;
+
+// java imports
+import java.util.List;
+
+import javax.servlet.jsp.JspWriter;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.datagrid.model.DataGridModel;
+import org.apache.beehive.netui.datagrid.model.impl.DefaultStylePolicy;
+import org.apache.beehive.netui.datagrid.model.impl.EmptyStylePolicy;
+import org.apache.beehive.netui.datagrid.model.impl.LegacyStylePolicy;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * @todo: need to expose a ColumnIterator so that the "current" column can be 
+ *        fetched by the child tags
+ *
+ * @netui:tag name="dataGrid" description="Renders an HTML table containing a data set"
+ * @netui.tldx:tag whitespace="indent" 
+ *                 renderer="workshop.netui.jspdesigner.tldx.GridRenderer" 
+ *                 netuiexpressioninfo=""
+ */
+public class DataGrid
+    extends AbstractBaseTag
+    implements IDataAccessProvider
+{
+    private static final Logger _logger = Logger.getInstance(DataGrid.class);
+    
+    public static final int DATAGRID_MODEL_RENDERING = 0;
+    public static final int JSP_TAG_RENDERING = 1;
+
+    public static final int START_RENDER_STATE = 10;
+    public static final int GRID_RENDER_STATE = 20;
+    public static final int END_RENDER_STATE = 30;
+    
+    private DataGridModel _gridModel = null;
+    private JspWriter _out = null;
+    private String _name = null;
+    private String _cssClassPolicy = "default"; 
+    
+    private int _renderType = JSP_TAG_RENDERING; 
+    private int _renderState = START_RENDER_STATE;
+    
+    private ColumnModel _currentColumn = null;
+    private StringBuffer _content = null;
+    private int _columnModelIndex = 0;
+
+    public DataGrid()
+    {
+        super();
+        _gridModel = new DataGridModel(this);
+    }
+
+    public String getTagName()
+    {
+        return "DataGrid";
+    }
+    
+    /**
+     * @netui:attribute required="true"
+     */
+    public void setName(String name) {_name = name;}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setCssClassPolicy(String cssClassPolicy)
+    {
+        _cssClassPolicy = cssClassPolicy;
+    }
+
+    public void setGroupDepth(int groupDepth) {_gridModel.setGroupDepth(groupDepth);}
+
+    public int doStartTag()
+    {
+        _out = pageContext.getOut();
+        _gridModel.setPageContext(pageContext);
+        _gridModel.setName(_name);
+
+        if(_cssClassPolicy.equals("default"))
+            // @todo: allocate and reuse for all grids
+            _gridModel.setCssPolicy(new DefaultStylePolicy());
+        else if(_cssClassPolicy.equals("none"))
+            _gridModel.setCssPolicy(new EmptyStylePolicy());
+        else if(_cssClassPolicy.equals("legacy"))
+            _gridModel.setCssPolicy(new LegacyStylePolicy());
+
+        if(_renderType == JSP_TAG_RENDERING)
+        {
+            // @todo: implement state machine rendering here...
+            _renderState = START_RENDER_STATE;
+            _content = new StringBuffer();
+        }
+        
+        return EVAL_BODY_BUFFERED;
+    }
+
+    public int doAfterBody()
+    {
+        if(_renderType == DATAGRID_MODEL_RENDERING)
+            return SKIP_BODY;
+        else
+        {
+            int retVal = EVAL_BODY_BUFFERED;
+            if(_renderState == START_RENDER_STATE)
+            {
+                // print the column information
+                if(_logger.isDebugEnabled())
+                {
+                    _logger.debug("registered columns:");
+                    List columns = _gridModel.getColumns();
+                    for(int i = 0; i < columns.size(); i++)
+                    {
+                        _logger.debug("column[" + i + "]: " + columns.get(i).getClass().getName());
+                    }
+                }
+                _gridModel.initialize();
+                _gridModel.renderPager(_content);
+                _gridModel.openTable(_content);
+                
+                _renderState = GRID_RENDER_STATE;
+            }
+            else if(_renderState == GRID_RENDER_STATE)
+            {
+                _gridModel.closeTable(_content);
+                // @todo: need something like this to un-init the data set / set the index to -1 / etc
+                //_gridModel.destroy();
+
+                _renderState = END_RENDER_STATE;
+                retVal = SKIP_BODY;
+            }
+            else throw new RuntimeException("The DataGrid's render state '" + _renderState + "' is invalid");
+            
+            return retVal;
+        }
+    }
+
+    public int doEndTag()
+    {
+        if(_renderType == DATAGRID_MODEL_RENDERING)
+            _gridModel.render(_out);
+        else
+            write(_content.toString());
+
+        localRelease();
+        
+        return EVAL_PAGE;
+    }
+
+    public void localRelease()
+    {
+        super.localRelease();
+        _gridModel = new DataGridModel(this);
+        _out = null;
+        _cssClassPolicy = "default";
+        _currentColumn = null;
+        _renderState = START_RENDER_STATE;
+        _renderType = JSP_TAG_RENDERING;
+        _columnModelIndex = 0;
+        _content = null;
+        _name = null;
+    }
+
+    /* ===========================================================
+     *
+     * Cooperative tag set methods
+     *
+     * ===========================================================
+     */
+    public void addColumn(ColumnModel cm)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("add a column: " + cm + " total columns: " + 
+                                                   (_gridModel.getColumns() != null ? _gridModel.getColumns().size() : 0));
+
+        _gridModel.addColumn(cm);
+    }
+
+    public ColumnModel getNextColumnModel()
+    {
+        ColumnModel cm = _gridModel.getColumn(_columnModelIndex);
+        _columnModelIndex++;
+        return cm;
+    }
+
+    public void resetColumnModelIndex()
+    {
+        _columnModelIndex = 0;
+    }
+    
+    public DataGridModel getDataGridModel()
+    {
+        return _gridModel;
+    }
+
+    public int getRenderState()
+    {
+        return _renderState;
+    }
+
+    public int getRenderType()
+    {
+        return _renderType;
+    }
+    
+    public void appendContent(String content)
+    {
+        if(_content == null)
+            _content = new StringBuffer();
+
+        if(_logger.isDebugEnabled()) _logger.debug("adding content:::::\n" + content.toString() + "\n:::::\n");
+        
+        _content.append(content);
+    }
+
+    /* ===========================================================
+     *
+     * IDataAccessProvider implementation
+     *
+     * ===========================================================
+     */
+    public int getCurrentIndex()
+    {
+        return _gridModel.getCurrentIndex();
+    }
+    
+    public Object getCurrentItem()
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("current item: " + _gridModel.getCurrentItem());
+
+        return _gridModel.getCurrentItem();
+    }
+
+    public Object getCurrentMetadata()
+    {
+        return _gridModel.getCurrentMetadata();
+    }
+
+    /**
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDataSource(String dataSource)
+    {
+        _gridModel.setDataSource(dataSource);
+    }
+
+    public String getDataSource()
+    {
+        return _gridModel.getDataSource();
+    }
+    
+    public IDataAccessProvider getProviderParent()
+    {
+        IDataAccessProvider dap = (IDataAccessProvider)findAncestorWithClass(this, IDataAccessProvider.class);
+        return dap;
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/ImageColumn.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/ImageColumn.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,102 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.datagrid;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.impl.ImageColumnModel;
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ * @netui:tag name="imageColumn" description="Renders a column of images in a NetUI data grid"
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.ImageColumnRenderer" whitespace="indent" netuiexpressioninfo=""
+ * @netui:attribute name="value" required="false"
+ */
+public class ImageColumn
+    extends AbstractColumn
+{
+    private static final Logger logger = Logger.getInstance(ImageColumn.class);
+
+    private ImageColumnModel _column;
+
+    /**
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setSrc(String src) {((ImageColumnModel)getColumnModel()).setSrc(src);}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setAlign(String align) {((ImageColumnModel)getColumnModel()).setAlign(align);}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setHspace(String hspace) {((ImageColumnModel)getColumnModel()).setHspace(hspace);}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setVspace(String vspace) {((ImageColumnModel)getColumnModel()).setVspace(vspace);}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setBorder(String border) {((ImageColumnModel)getColumnModel()).setBorder(border);}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setHeight(String height) {((ImageColumnModel)getColumnModel()).setHeight(height);}
+
+    /**
+     * @netui:attribute required="false"
+     */
+    public void setWidth(String width) {((ImageColumnModel)getColumnModel()).setWidth(width);}
+
+    public String getTagName()
+    {
+        return "ImageColumn";
+    }
+
+    public void localRelease()
+    {
+        super.localRelease();
+        _column = null;
+    }
+
+    protected void setColumnModel(ColumnModel column)
+    {
+        _column = (ImageColumnModel)column;
+    }
+
+    protected ColumnModel getColumnModel()
+    {
+        if(_column == null)
+            return (_column = new ImageColumnModel());
+        else return _column;
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/LiteralColumn.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/LiteralColumn.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.datagrid;
+
+// java imports
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ * @netui:tag name="literalColumn" description="Renders a column of data in a NetUI grid"
+ * @netui.tldx:tag whitespace="indent" 
+ *                 renderer="workshop.netui.jspdesigner.tldx.LiteralColumnRenderer" 
+ *                 netuiexpressioninfo=""
+ */
+public class LiteralColumn
+    extends AbstractColumn
+{
+    private static final Logger logger = Logger.getInstance(LiteralColumn.class);
+
+    private ColumnModel _column = null;
+
+    public String getTagName()
+    {
+        return "LiteralColumn";
+    }
+
+    public void localRelease()
+    {
+        super.localRelease();
+        _column = null;
+    }
+
+    protected void setColumnModel(ColumnModel column)
+    {
+        _column = column;
+    }
+
+    protected ColumnModel getColumnModel()
+    {
+        if(_column == null)
+            return (_column = new ColumnModel());
+        else return _column;
+    }
+}

Added: incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/Parameter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-datagrid/org/apache/beehive/netui/tags/datagrid/Parameter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.datagrid;
+
+// java imports
+import javax.servlet.jsp.JspException;
+
+// internal imports
+import org.apache.beehive.netui.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.datagrid.model.impl.AnchorColumnModel;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ * @netui:tag name="parameter" description="Register a URL parameter with an AnchorColumn"
+ * @netui.tldx:tag whitespace="indent" 
+ *                 netuiexpressioninfo=""
+ *                 renderer=""
+ */
+public class Parameter
+    extends AbstractBaseTag
+{
+    private static final Logger _logger = Logger.getInstance(Parameter.class);
+
+    private String _name = null;
+    private String _value = null;
+
+    /**
+     * @netui:attribute required="true"
+     */
+    public void setName(String name) {_name = name;}
+
+    /**
+     * @netui:attribute required="true"
+     */ 
+    public void setValue(String value) {_value = value;}
+
+    public String getTagName()
+    {
+        return "Parameter";
+    }
+
+    public int doStartTag()
+    {
+        assert getParent() instanceof AnchorColumn;
+
+        return EVAL_BODY_BUFFERED;
+    }
+
+    public int doEndTag()
+        throws JspException
+    {
+        AnchorColumn column = (AnchorColumn)getParent();
+        column.addParameter(_name, _value);
+
+        localRelease();
+        
+        return EVAL_PAGE;
+    }    
+
+    public void localRelease()
+    {
+        super.localRelease();
+        _name = null;
+        _value = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Tags-HTML" default="compile" basedir=".">
+
+    <property name="module.classpath"
+              value="${servlet24.jar};${jsp20.jar};${struts.jar};${commons-beanutils.jar};${util.jar};${pageflow.jar};${scoping.jar};${log4j.jar};${commons-logging.jar};${xbean.jar}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source.1.5}"
+	       >
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+            <fileset dir="." includes="**/*.gif"/>
+        </copy>
+
+        <echo>Generate TLD and TLDx</echo>
+        <echo>tools.xdoclet.run.classpath=${tools.xdoclet.run.classpath}</echo>
+        <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpath="${tools.xdoclet.run.classpath}"/>
+        <webdoclet
+                destdir="${build.lib.dir}"
+                excludedtags="@version,@author,@todo"
+                force="true"
+                verbose="true">
+
+            <fileset dir="${src.dir}/tags-html">
+                <include name="**/*.java"/>
+            </fileset>
+
+            <netuitldgen 
+                 xmlencoding="UTF-8"
+                 taglibversion="1.0"
+                 jspversion="1.2" 
+                 shortname="netui" 
+                 uri="http://beehive.apache.org/netui/tags-html-1.0"
+                 description="NetUI HTML controls taglibrary."
+                 filename="${netui-tags-html.tld.name}"
+                 destdir="${build.lib.dir}"
+                 validateXml="true"
+                 packageName="org.apache.beehive.netui.tags"
+            />
+ 
+            <netuitldxgen
+                     xmlencoding="UTF-8"
+                     paletteGenerator="workshop.netui.jspdesigner.generators.NetuiPaletteGenerator"
+                     uri="http://beehive.apache.org/netui/tags-html-1.0"
+                     tldxVersion="1.0"
+                     filename="${netui-tags-html.tldx.name}"
+                     packageName="org.apache.beehive.netui.tags"
+            />
+        </webdoclet>
+
+        <jar jarfile="${build.lib.dir}/${tags-html.jar.name}" basedir="${classes.dir}/${module.name}" excludes="**/TagAppearances.properties"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete dir="${build.lib.dir}/${tags-html.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI HTML Tags"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractBaseTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractBaseTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,896 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+import org.apache.beehive.netui.script.ExpressionUpdateException;
+import org.apache.beehive.netui.script.common.ImplicitObjectBean;
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+import org.apache.beehive.netui.tags.naming.FormDataNameInterceptor;
+import org.apache.beehive.netui.tags.naming.IndexedNameInterceptor;
+import org.apache.beehive.netui.tags.naming.NameInterceptor;
+import org.apache.beehive.netui.tags.rendering.AbstractAttributeState;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.struts.Globals;
+import org.apache.struts.util.ResponseUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.BodyTagSupport;
+import javax.servlet.jsp.tagext.Tag;
+import java.util.*;
+
+/**
+ * AbstractBaseTag is the base tag for most of the NetUI tags.  This tag provides default behavior
+ * and services for NetUI tags.  There following categories of services are provided by this tag:
+ * <ul>
+ * <li><b>Generic Services</b> -- These are general services such as access to local, writting
+ * to the response, and writting attributes.</li>
+ * <li><b>Expression Management</b> -- This set of method provide evaluation and information about
+ * expressions.  These methods allow tags to fully support expressions for attributes.</li>
+ * <li><b>Naming and NamingInterceptor Services</b> -- This set of methods will apply
+ * <code>NameInterceptor</code>s to a name to produce the name written out.  In addition, it allows
+ * the URL Rewritter service to modify names.</li>
+ * <li><b>Attribute Rendering Support</b> -- This set of routine allow tags to keep simple attributes
+ * in a map that can be written into the generated markup.  There are two types of attributes, attributes
+ * that contain expression and attributes that do not contain expression supported.</li>
+ * <li><b>Error Reporting</b> -- This set of routines will report errors within the tags. In development
+ * mode errors are reported in-page.</li>
+ * <li><b>JavaScript Services</b> -- This set of routines provide simple access for JavaScript generation.</li>
+ * </ul>
+ * @netui:tag
+ */
+public abstract class AbstractBaseTag
+        extends BodyTagSupport
+{
+    //@todo: how should we handle errors messages from third party tags?
+    //@todo: need to implement the flag to turn errors into JSP exceptions
+
+    private static final Logger logger = Logger.getInstance(AbstractBaseTag.class);
+
+    /**
+     * This List represents the default naming chain for handling <code>dataSource</code> attributes.  The list
+     * is a read-only list which may be used by any <code>dataSource</code> implementation.
+     */
+    public static final List DefaultNamingChain;
+
+    /**
+     * This is the name of a request scoped attribute which creates a unique id for processing
+     * a request.
+     */
+    public static final String NETUI_UNIQUE_CNT = "netui.unique.id";
+
+    /**
+     * This is a private formRewriter which is used by <code>qualifyName</code> to provide
+     * struts naming behavior.
+     */
+    private static final NameInterceptor formRewriter = new FormDataNameInterceptor();
+
+    /**
+     * static flag indicating if we are reporting errors in-page or throwing JspExceptions.
+     */
+    private static boolean reportErrorInPage = true;
+
+    /**
+     * String constant for the empty string.
+     */
+    protected static final String EMPTY_STRING = "";
+
+    // create the default naming chain.
+    static
+    {
+        List l = new ArrayList(2);
+        l.add(new FormDataNameInterceptor());
+        l.add(new IndexedNameInterceptor());
+        DefaultNamingChain = Collections.unmodifiableList(l);
+    }
+
+    private List _errors = null;                // the errors registered for the tag
+    private Map generalMap = null;              // the map of general attributes
+    private Map generalExpressionMap = null;    // the map of expression attributes
+    private ExpressionEvaluator ee = null;      // cache the expression evaluator
+
+    /////////////////////////// Generic Services support ////////////////////////////
+
+    /**
+     * Return the name of the tag.  Used by error reporting to get the name of the tag.
+     * @return the name of the tag.
+     */
+    public abstract String getTagName();
+
+    /**
+     * This is a method that will reinitialize all temporary state on a
+     * tag and should be called in the doEndTag method.
+     */
+    protected void localRelease()
+    {
+        ee = null;
+        if (generalMap != null)
+            generalMap.clear();
+        if (generalExpressionMap != null)
+            generalExpressionMap.clear();
+        _errors = null;
+
+        // null the current tag
+        ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(pageContext, this);
+        bean.setCurrentTag(null);
+    }
+
+    /**
+     * This method will return the user local of the request.
+     * @return the Locale object to use when rendering this tag
+     */
+    protected Locale getUserLocale()
+    {
+        Locale userLocale = (Locale) pageContext.getAttribute(Globals.LOCALE_KEY, PageContext.SESSION_SCOPE);
+        if (userLocale == null)
+            return pageContext.getRequest().getLocale();
+        else
+            return userLocale;
+    }
+
+    /**
+     * This mehod will write the passed string to the response.
+     * @param string to be written to the response.
+     */
+    protected final void write(String string)
+    {
+        try {
+            ResponseUtils.write(pageContext, string);
+        }
+        catch (JspException e) {
+            logger.error(Bundle.getString("Tags_WriteException"), e);
+        }
+    }
+
+    /**
+     * This method will write append an attribute value to a StringBuilder.
+     * The method assumes that the attr is not <code>null</code>.  If the
+     * value is <code>null</code> the attribute will not be appended to the
+     * <code>StringBuilder</code>.
+     */
+    protected final void renderAttribute(StringBuilder buf, String name,
+                                         String value)
+    {
+        assert (name != null);
+        if (value == null)
+            return;
+
+        buf.append(" ");
+        buf.append(name);
+        buf.append("=\"");
+        buf.append(value);
+        buf.append("\"");
+    }
+
+    // @TODO: should this be combined above.  It would require a virtual call on the base tag.
+    protected final void renderAttributeSingleQuotes(StringBuilder buf, String name,
+                                                     String value)
+    {
+        assert (name != null);
+        if (value == null)
+            return;
+
+        buf.append(" ");
+        buf.append(name);
+        buf.append("='");
+        buf.append(value);
+        buf.append("'");
+    }
+
+    protected final String escapeEscapes(String val)
+    {
+        assert(val != null);
+        StringBuilder sb = new StringBuilder(val.length());
+        for (int i = 0; i < val.length(); i++) {
+            char c = val.charAt(i);
+            if (c == '"') {
+                sb.append("\\\"");
+                continue;
+            }
+            if (c == '\\') {
+                sb.append("\\\\");
+                continue;
+            }
+            sb.append(c);
+        }
+        return sb.toString();
+    }
+    ///////////////////////////  Expression Evaluation support ////////////////////////////
+
+    /**
+     * Return a cached instance of an <code>ExpressionEvaluator</code>.  This will be cached by the
+     * tag and release during <code>localRelease</code>.
+     * @return the <code>ExpressionEvalutor</code> for tis tag.
+     */
+    protected final ExpressionEvaluator getExpressionEvaluator()
+    {
+        if (ee == null)
+            ee = ExpressionEvaluatorFactory.getInstance();
+
+        assert(ee != null);
+        return ee;
+    }
+
+    /**
+     * An internal method that is used for evaluating the <code>dataSource</code>
+     * attribute.  The <code>dataSource</code> attribute is handled specially
+     * becuase it must be of a particular format in order to be usable by
+     * NetUI tags.  This requirement exists in order to facilitate
+     * round-tripping the <code>dataSource</code> attribute as the
+     * <code>name</code> attribute of HTML tags.  Upon a POST, the <code>name</code>
+     * attribute is used as an l-value for an update expression in order
+     * to push any POST-ed data back into the bean from whence it came.
+     */
+    /**
+     * Ensure that the passed in data source is a valid expression.
+     * @param dataSource
+     * @param attrName
+     * @param errorId
+     * @return
+     * @throws JspException
+     */
+    protected String ensureValidExpression(String dataSource, String attrName, String errorId)
+            throws JspException
+    {
+        try {
+            boolean isExpr = isExpression(dataSource);
+
+            // @perf: if the isExpr call fails, this is an error condition, and the containsExpression
+            // call cost is irrelevant
+            if (!isExpr && containsExpression(dataSource)) {
+                String s = Bundle.getString(errorId, new Object[]{dataSource});
+                registerTagError(s, null);
+                return null;
+            }
+
+            // known: either a valid expression or doesn't contain an expression
+
+            // assume: this is a Struts expression, not a NetUI one.  Attempt to convert
+            // it into a NetUI expression and then check to make sure it actually became
+            // a valid expression.
+            if (!isExpr) {
+                // attempt to convert to an expression
+                dataSource = qualifyAttribute(dataSource);
+
+                // if the conversion resulted in an invalid expression
+                if (!isExpression(dataSource)) {
+                    String s = Bundle.getString(errorId, new Object[]{dataSource});
+                    registerTagError(s, null);
+                    return null;
+                }
+            }
+        }
+        catch (Exception e) {
+            // pass throw JspExceptions
+            if (e instanceof JspException)
+                throw (JspException) e;
+
+            String s = Bundle.getString(errorId, new Object[]{dataSource});
+            registerTagError(s, e);
+            return null;
+        }
+        return dataSource;
+    }
+
+    /**
+     * Evaluate an automic expression or literal returning the value.  <code>expr</code> will
+     * either be an expression or will be returned as the results.  If <code>expr</code> is an automic
+     * expression it will be evaluated and the results returned to the caller.
+     * @param expr     the value, which is either an automic expression or a literal value
+     * @param attrName the name of the attribute so errors can be reported
+     * @param errorId  the <code>String</code> value indentifying the bundle message
+     * @return <code>expr</code> if it is a literal, the evaluated value if <code>expr</code> is an
+     *         automic expression, or null
+     * @throws JspException
+     */
+    protected Object evaluateAutomicExpressionOrLiteral(String expr, String attrName, String errorId)
+            throws JspException
+    {
+        Object result = null;
+        try {
+            if (isExpression(expr)) {
+                result = evaluateExpression(expr, attrName);
+            }
+            else {
+                result = expr;
+            }
+        }
+        catch (Exception e) {
+            String s = Bundle.getString(errorId, new Object[]{expr, e});
+            registerTagError(s, e);
+            return null;
+        }
+
+        return result;
+    }
+
+    /**
+     * Method which will evaluate an expression and return the value.  The expression will be qualified before
+     * it is evaluated.  Two errors may be reported.  The first error is reported if the <code>expr</code> is
+     * not an expression.  The second error is reported if there is a general failure evaluating the expresion.
+     * @param expr        the expression to be evaluated.
+     * @param attrName    the name of the attribute containing the expression.
+     * @param errorId     the name of the expression error the error bundle.
+     * @param evalErrorId the name of the evaluation error from the error bundle.
+     * @return an object representing the evaluation of the expression
+     * @throws JspException
+     */
+    protected Object evaluateQualifiedExpression(String expr, String attrName, String errorId, String evalErrorId)
+            throws JspException
+    {
+        try {
+            expr = qualifyAttribute(expr);
+
+            if (!isExpression(expr)) {
+                String s = Bundle.getString(errorId, new Object[]{expr});
+                registerTagError(s, null);
+                return null;
+            }
+
+            return evaluateExpression(expr, attrName);
+        }
+        catch (Exception e) {
+            if (e instanceof JspException)
+                throw (JspException) e;
+
+            String s = Bundle.getString(evalErrorId, new Object[]{expr, e});
+            registerTagError(s, e);
+            return null;
+        }
+    }
+
+    /**
+     * @param expression
+     * @param attrName
+     * @return
+     * @throws JspException
+     */
+    protected Object evaluateExpression(String expression, String attrName)
+            throws JspException
+    {
+        return evaluateExpressionInternal(expression, attrName);
+    }
+
+     /**
+     */
+    protected boolean isExpression(String expression)
+    {
+        // @TODO: eko -- push this into the ExpressionEvaluator
+        if (expression == null)
+            return false;
+        return getExpressionEvaluator().isExpression(expression);
+    }
+
+    /**
+     * Return a boolean indicating if the string contains an expression or not.
+     * @param expression a <code>String</code> that may or may not contain an expresion.
+     * @return <code>true</code> if the string contains an expression.
+     */
+    protected boolean containsExpression(String expression)
+    {
+        // @todo: this is an assert that needs to be verified
+        if (expression == null) {
+            System.err.println("Contains found an expresion that is null");
+        }
+        assert (expression != null) : "The parameter expression must not be null.";
+        return getExpressionEvaluator().containsExpression(expression);
+    }
+
+    /**
+     * This method will update the object identified by the <code>expr</code> parameter with
+     * the value.  If the
+     * @param expr
+     * @param value
+     * @throws ExpressionUpdateException
+     */
+    protected void updateExpression(String expr, Object value)
+            throws ExpressionUpdateException, JspException
+    {
+
+        // @todo: eddie needs to review this, it doesn't seem quite right.  This is called by tree.
+        if (isExpression(expr)) {
+            ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(pageContext, this);
+            ExpressionEvaluatorFactory.getInstance().update(expr, value, bean, false);
+        }
+        else {
+            String s = Bundle.getString("Tags_BindingUpdateExpressionError", new Object[]{expr});
+            registerTagError(s, null);
+        }
+    }
+
+    /**
+     * This is the real implementation of evaluateExpression.
+     * @param expression
+     * @param attrName
+     * @return
+     * @throws JspException
+     */
+    private Object evaluateExpressionInternal(String expression, String attrName)
+            throws JspException
+    {
+        if (logger.isDebugEnabled()) logger.debug("evaluate expression=\"" + expression + "\"");
+
+        Object result = null;
+
+        try {
+            // @perf: todo -- this is silly...
+            ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(pageContext, this);
+            result = getExpressionEvaluator().evaluateStrict(expression, bean);
+        }
+        catch (ExpressionEvaluationException ee) {
+            // if there is an expression evaluation error set the error and
+            // return null;
+
+            if (logger.isWarnEnabled())
+                logger.warn(Bundle.getString("Tags_ExpressionEvaluationFailure", expression));
+
+            // create the expression info an add it to the error tracking
+            EvalErrorInfo info = new EvalErrorInfo();
+            info.evalExcp = ee;
+            info.expression = expression;
+            info.attr = attrName;
+            info.tagType = getTagName();
+
+            // report the error
+            registerError(info);
+            assert (_errors != null);
+            return null;
+        }
+        catch (Exception e) {
+            String s = Bundle.getString("Tags_ExpressionEvaluationException", new Object[]{expression, e.toString()});
+            registerTagError(s, e);
+            return null;
+        }
+
+        if (logger.isDebugEnabled()) logger.debug("resulting object: " + result);
+        return result;
+    }
+
+    ///////////////////////////  Naming and NamingInterceptor support ////////////////////////////
+
+    /**
+     * Return an <code>ArrayList</code> which represents a chain of <code>NameInterceptor</code>
+     * objects.  This method by default returns <code>null</code> and should be overridden
+     * by objects that support naming.
+     * @return an <code>ArrayList</code> that will contain <code>NameInterceptor</code> objects.
+     */
+    protected List getNamingChain()
+    {
+        return null;
+    }
+
+    /**
+     * This method walks all of the naming chains and allows them to rewrite the <code>name</code> parameter.
+     * After the naming chain processes the name, it will be passed to <code>rewriteName</code> for final processing.
+     * If the naming chaing returned from <code>getNamingChain</code> returns null, the name will be passed to
+     * <code>rewriteName</code> and returned.  If there is an <code>ExpressionEvaluationException</code> thrown
+     * by a <code>NameInterceptor</code>, the error will be registered with the tag and <code>null</code> will
+     * be returned.
+     * @param name the name to rewrite
+     * @return the name after it was passed to all <code>NameInterceptor</code>s in the naming chain.
+     * @see #rewriteName
+     * @see org.apache.beehive.netui.tags.naming.NameInterceptor
+     */
+    protected String applyNamingChain(String name)
+    {
+        assert (name != null) : "The name parameter may not be null";
+
+        List namingChain = getNamingChain();
+        if (namingChain == null)
+            return rewriteName(name);
+
+        if (logger.isDebugEnabled())
+            logger.debug("rewrite name \"" + name + "\" on tag of type \"" + getClass().getName() + " with namingChain " +
+                    (namingChain != null ? "size " + namingChain.size() : "null"));
+
+        try {
+            String newName = name;
+            for (int i = 0; i < namingChain.size(); i++) {
+                if (logger.isDebugEnabled())
+                    logger.debug("rewriteName: \"" + newName + "\" with NameInterceptor: " + namingChain.get(i).getClass().getName());
+
+                newName = ((NameInterceptor) namingChain.get(i)).rewriteName(newName, this);
+
+                if (logger.isDebugEnabled())
+                    logger.debug("rewrite result: " + newName);
+            }
+
+            return rewriteName(newName);
+        }
+        catch (ExpressionEvaluationException ee) {
+            // if there is an expression evaluation error set the error and return null;
+            logger.error(Bundle.getString("Tags_ExpressionQualifyingFailure", name));
+
+            // create the expression info an add it to the error tracking
+            EvalErrorInfo info = new EvalErrorInfo();
+            info.evalExcp = ee;
+            info.expression = name;
+            info.attr = "dataSource";
+            info.tagType = getTagName();
+
+            // report the error
+            registerError(info);
+            return null;
+        }
+    }
+
+    /**
+     * An internal method that allows a tag to qualify the <code>name</code> paramater by converting
+     * it from a struts style naming convention to an explicit databinding expression.  The qualified
+     * name will be returned. This method may report an error if there is an error in the expression.
+     * @param name the name to be qualified
+     * @return the name which has been qualified
+     * @throws JspException throws a JspException if in-page error reporting is turned off.
+     * @see org.apache.beehive.netui.tags.naming.FormDataNameInterceptor
+     */
+    protected String qualifyAttribute(String name)
+            throws JspException
+    {
+        if (name == null)
+            return null;
+
+        // if this is a Struts style name, convert it to an expression
+        try {
+            name = formRewriter.rewriteName(name, this);
+        }
+        catch (ExpressionEvaluationException e) {
+            String s = Bundle.getString("Tags_DataSourceExpressionError", new Object[]{name, e.toString()});
+            registerTagError(s, null);
+        }
+        return name;
+    }
+
+    /**
+     * This method will rewrite the name (id) by passing it to the
+     * URL Rewritter and getting back a value.
+     * @param name the name that will be rewritten
+     * @return a name that has been rewritten by the URLRewriterService.
+     */
+    final protected String rewriteName(String name)
+    {
+        return URLRewriterService.rewriteName(pageContext.getServletContext(), pageContext.getRequest(), name);
+    }
+
+
+    ///////////////////////////  Generic Attribute Rendering Support ////////////////////////////
+    ///////////////////////////  Generic Error Reporting Support  ////////////////////////////
+
+    /**
+     * This will report an error from a tag.  The error will
+     * contain a message.  If error reporting is turned off,
+     * the message will be returned and the caller should throw
+     * a JspException to report the error.
+     * @param message - the message to register with the error
+     * @throws JspException - if in-page error reporting is turned off this method will always
+     *                      throw a JspException.
+     */
+    public void registerTagError(String message, Throwable e)
+            throws JspException
+    {
+        assert (message != null) : "parameter 'message' must not be null.";
+
+        // add the error to the list of errors
+        if (_errors == null)
+            _errors = new ArrayList();
+
+        TagErrorInfo tei = new TagErrorInfo();
+
+        tei.tagType = getTagName();
+        tei.message = message;
+        _errors.add(tei);
+
+        ErrorReporter er = getErrorReporter();
+        if (er == null) {
+            tei.errorNo = -1;
+            if (!reportErrorInPage) {
+                String s = Bundle.getString("Tags_NoInPageErrorReporting", new Object[]{message});
+                if (e == null)
+                    logger.error(s);
+                else
+                    logger.error(s, e);
+                localRelease();
+                throw new JspException(message);
+            }
+            return;
+        }
+
+        // add the error to the ErrorReporter tag
+        er.addError(tei);
+        assert (tei.errorNo > 0);
+        if (!reportErrorInPage) {
+            String s = Bundle.getString("Tags_NoInPageErrorReporting", new Object[]{message});
+            if (e == null)
+                logger.error(s);
+            else
+                logger.error(s, e);
+            localRelease();
+            throw new JspException(s);
+        }
+        return;
+    }
+
+    /**
+     * This method will add an error to the errors begin tracked by the tag. After the first time this method
+     * is called, <code>hasErrors</code> will return true.
+     * @param error The <code>EvalErrorInfo</code> describing the error.
+     */
+    public void registerError(EvalErrorInfo error)
+    {
+        assert (error != null);
+
+        // add the error to the list of errors
+        if (_errors == null)
+            _errors = new ArrayList();
+
+        _errors.add(error);
+
+        ErrorReporter er = getErrorReporter();
+        if (er == null) {
+            error.errorNo = -1;
+            return;
+        }
+
+        // add the error to the ErrorReporter tag
+        er.addError(error);
+        assert (error.errorNo > 0);
+    }
+
+    /**
+     * This method will return <code>true</code> if there have been any errors registered on this
+     * tag.  Otherwise it returns <code>false</code>
+     * @return <code>true</code> if errors have been reported on this tag.
+     * @see #registerError
+     */
+    protected boolean hasErrors()
+    {
+        return (_errors != null);
+    }
+
+    /**
+     * This method will write out the <code>String</code> returned by <code>getErrorsReport</code> to the
+     * response output stream.
+     * @throws JspException if <code>write</code> throws an exception.
+     * @see #getErrorsReport
+     * @see #write
+     */
+    protected void reportErrors()
+            throws JspException
+    {
+        write(getErrorsReport());
+    }
+
+    /**
+     * This method will return a <code>String<code> that represents all of the errors that were
+     * registered for the tag.  This method assumes that there are errors in the tag and asserts
+     * this is true.  Code will typically call <code>hasErrors</code> before calling this method.
+     * @return A <code>String</code> that contains all of the errors registered on this tag.
+     * @see #registerError
+     */
+    protected String getErrorsReport()
+    {
+        assert _errors != null;
+        assert _errors.size() > 0;
+
+        int cnt = _errors.size();
+
+        StringBuilder sb = new StringBuilder(128);
+
+        // check the first error to see if we are reporting errors at the end
+        AbstractPageError info = (AbstractPageError) _errors.get(0);
+        if (info.errorNo > 0) {
+            String s;
+            if (info instanceof EvalErrorInfo) {
+                s = Bundle.getString("Expression_Error");
+                s = Bundle.getString("Inline_error",
+                        new Object[]{
+                            s,
+                            Integer.toString(info.errorNo),
+                            getTagName(),
+                        });
+            }
+            else if (info instanceof TagErrorInfo) {
+                s = Bundle.getString("Tag_Error");
+                s = Bundle.getString("Inline_error",
+                        new Object[]{
+                            s,
+                            Integer.toString(info.errorNo),
+                            getTagName(),
+                        });
+            }
+            else {
+                s = null;
+                assert true : "Unhandled type";
+            }
+            sb.append(s);
+            return s.toString();
+        }
+
+        // create the errors
+        String s;
+        s = Bundle.getString("Tag_Header",
+                new Object[]{getTagName(), Integer.toString(cnt)});
+        sb.append(s);
+
+        Object[] args = new Object[4];
+        for (int i = 0; i < cnt; i++) {
+            Object o = _errors.get(i);
+            if (o instanceof EvalErrorInfo) {
+                EvalErrorInfo e = (EvalErrorInfo) o;
+                assert info != null;
+
+                args[0] = Bundle.getString("Expression_Error");
+                args[1] = e.attr;
+                args[2] = e.expression;
+                args[3] = e.evalExcp.getMessage();
+                s = Bundle.getString("Expression_Error_Line", args);
+            }
+            else if (o instanceof TagErrorInfo) {
+                TagErrorInfo e = (TagErrorInfo) o;
+                assert info != null;
+
+                args[0] = Bundle.getString("Tag_Error");
+                args[1] = e.message;
+                s = Bundle.getString("Tag_Error_Line", args);
+            }
+            sb.append(s);
+        }
+
+        s = Bundle.getString("Tag_Footer");
+        sb.append(s);
+        return sb.toString();
+    }
+
+    /**
+     * This method get the current errors and write the formated output
+     * @param sb
+     */
+    protected final void reportCollectedErrors(StringBuilder sb)
+    {
+
+        ErrorReporter er = getErrorReporter();
+        if (er == null)
+            return;
+
+        assert (sb != null);
+        ArrayList errors = er.returnErrors();
+        if (errors == null || errors.size() == 0)
+            return;
+
+        assert(errors.size() > 0);
+
+        String s;
+        // write the error header
+        s = Bundle.getString("Footer_Error_Header");
+        sb.append(s);
+
+        int cnt = errors.size();
+        Object[] args = new Object[5];
+        for (int i = 0; i < cnt; i++) {
+            Object o = errors.get(i);
+            assert (o != null);
+            if (o instanceof EvalErrorInfo) {
+                EvalErrorInfo err = (EvalErrorInfo) o;
+                args[0] = Integer.toString(err.errorNo);
+                args[1] = err.tagType;
+                args[2] = err.attr;
+                args[3] = err.expression;
+                args[4] = err.evalExcp.getMessage();
+                s = Bundle.getString("Footer_Error_Expr_Body", args);
+                sb.append(s);
+            }
+            else if (o instanceof TagErrorInfo) {
+                TagErrorInfo tei = (TagErrorInfo) o;
+                args[0] = Integer.toString(tei.errorNo);
+                args[1] = tei.tagType;
+                args[2] = tei.message;
+                s = Bundle.getString("Footer_Error_Tag_Body", args);
+                sb.append(s);
+            }
+        }
+
+        // write the error footer
+        s = Bundle.getString("Footer_Error_Footer");
+        sb.append(s);
+    }
+
+    /**
+     * This method will return the first <code>ErrorReporter</code> in the parental chain of the
+     * tag.  Searching starts with this tag.
+     * @return an <code>ErrorReporter</code> if one is found in the parental chain, otherwise null.
+     */
+    private ErrorReporter getErrorReporter()
+    {
+        // check to see if this tag has is an ErrorReporter or has an ErrorReporter as a parent
+        Tag par = this;
+        while (par != null) {
+            if (par instanceof ErrorReporter) {
+                ErrorReporter er = (ErrorReporter) par;
+                if (er.isReporting())
+                    return er;
+            }
+            par = par.getParent();
+        }
+        return null;
+    }
+    ///////////////////////////  JavaScript Support Support  ////////////////////////////
+
+    /**
+     * Return the closest <code>ScriptReporter</code> in the parental chain.  Searching starts
+     * at this node an moves upward through the parental chain.
+     * @return a <code>ScriptReporter</code> or null if there is not one found.
+     */
+    protected ScriptReporter getScriptReporter()
+    {
+        Tag parentTag = getParent();
+        while (parentTag != null) {
+            if (parentTag instanceof ScriptReporter) {
+                return (ScriptReporter) parentTag;
+            }
+            parentTag = parentTag.getParent();
+        }
+        return null;
+    }
+
+    /**
+     * This method will add a tagId and value to the ScriptRepoter TagId map.
+     * The a ScriptContainer tag will create a JavaScript table that allows
+     * the container, such as a portal, to rewrite the id so it's unique.
+     * The real name may be looked up based  upon the tagId.
+     *
+     * If the no ScriptReporter is found, a script string will be returned
+     * to the caller so they can output the script block.
+     * @param tagId
+     * @param value
+     * @return
+     */
+    protected String addTagIdMapping(String tagId, String value)
+    {
+        ScriptReporter scriptReporter = getScriptReporter();
+        if (scriptReporter != null) {
+            scriptReporter.addTagId(tagId, value);
+            return null;
+        }
+        return tagId;
+    }
+
+    ///////////////////////////  Misc Features Support  ////////////////////////////
+
+    /**
+     * This method will generate the next unique int within the HTML tag.
+     * @param req the Request
+     * @return the next unique integer for this request.
+     */
+    protected int getNextId(HttpServletRequest req)
+    {
+        Integer i = (Integer) req.getAttribute(NETUI_UNIQUE_CNT);
+        if (i == null) {
+            i = new Integer(0);
+        }
+
+        int ret = i.intValue();
+        req.setAttribute(NETUI_UNIQUE_CNT, new Integer(ret + 1));
+        return ret;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractPageError.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractPageError.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+/**
+ * This is a "struct" class that contains the base information for
+ * an error occuring in a tag on a page.
+ */
+abstract public class AbstractPageError
+{
+    /**
+     * The number of the error on the page.
+     */
+    public int errorNo;
+
+    /**
+     * The number of the error on the page.
+     */
+    public String tagType;
+}
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/DataSourceTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/DataSourceTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,128 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+import javax.servlet.jsp.JspException;
+import java.util.List;
+
+// external imports
+
+/**
+ * Abstract tag class that adds support for a dataSource on the tag.  The dataSource is
+ * where this tag gets its data from and writes its data to.  Tags that implement the
+ * <code>dataSource</code> attribute are read-write tags.
+ * <p>
+ * For example, <i>&lt;netui:textBox dataSource="{actionForm.foo}" /></i> would pull from the form
+ * bean's foo property to populate the textbox.  It would also set the value of the textbox
+ * on a post back into the foo property of the form bean.
+ * </p>
+ * <p>
+ * The dataSource can either be an expression or the name of a form bean property.  In the
+ * above example, <i><netui:textBox dataSource="foo" /></i> would have the exact same
+ * behavior.
+ * </p>
+ * <p>
+ * There are several methods on the {@link AbstractBaseTag} that supports the implementation of this class.
+ * This JavaDoc provides the default implementation necessary to implement this attribute.  The overall
+ * hiearchy contains mutliple implementations of this attribute and the supporting methods.
+ * <p>
+ * The class defines a private backing variable:
+ * <pre>
+ * private String _dataSource = null;
+ * </pre>
+ * @netui:tag
+ */
+public abstract class DataSourceTag
+        extends AbstractBaseTag
+{
+    private String _dataSource = null;          // backing variable.
+
+
+    /**
+     * Default constructor for this class.
+     */
+    public DataSourceTag()
+    {
+        super();
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _dataSource = null;
+    }
+
+    /**
+     * Return an <code>ArrayList</code> which represents a chain of <code>NameInterceptor</code>
+     * objects.  This method by default returns <code>null</code> and should be overridden
+     * by objects that support naming.
+     * @return an <code>ArrayList</code> that will contain <code>NameInterceptor</code> objects.
+     */
+    protected List getNamingChain()
+    {
+        return AbstractBaseTag.DefaultNamingChain;
+    }
+
+    /**
+     * Sets the tag's data source (can be an expression).
+     * @param dataSource - the data source
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDataSource(String dataSource)
+    {
+        _dataSource = "{" + dataSource + "}";
+    }
+
+    /**
+     * Gets the tag's data source (can be an expression).
+     * @return the data source
+     */
+    public String getDataSource()
+    {
+        return _dataSource;
+    }
+
+    /**
+     * Return the Object that is represented by the specified data source.
+     * @return
+     * @throws JspException
+     */
+    protected Object evaluateDataSource()
+            throws JspException
+    {
+        String dataSource = getDataSource();
+        String ds = ensureValidExpression(dataSource, "dataSource", "DataSourceError");
+        if (ds == null)
+            return null;
+
+        // have a valid expression
+        Object o = evaluateExpression(dataSource, "dataSource");
+        return o;
+    }
+
+    protected String doNaming()
+            throws JspException
+    {
+        return applyNamingChain(getDataSource());
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/DefaultableDataSourceTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/DefaultableDataSourceTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * Abstract tag class that adds support for a default value on the tag.  The default value is used
+ * if the dataSource or value of the tag is null.
+ * <p>
+ * For example, <i><netui:label value={actionForm.foo} defaultValue="bar" /></i> would display "bar"
+ * for the label if the expression {actionForm.foo} resolved to null.
+ */
+public abstract class DefaultableDataSourceTag
+        extends DataSourceTag
+{
+    private String _defaultValue;        // A String that contains or references the data to render for the default
+    private Object _results;             // An Object that contains the default value.
+
+    /**
+     * Gets the default value (can be an expression).
+     * @return the default value
+     */
+    public String getDefaultValue()
+    {
+        return _defaultValue;
+    }
+
+    /**
+     * Sets the default value (can be an expression).
+     * @param defaultValue - the default value
+     * @netui:attribute required="false"
+     */
+    public void setDefaultValue(String defaultValue)
+            throws JspException
+    {
+        _defaultValue = defaultValue;
+
+        // this will evaluate the default value here.  We are doing
+        // this so that errors can be reported instead of doing it lazy.
+        _results = evaluateAutomicExpressionOrLiteral(_defaultValue, "defaultValue", "DefaultValueError");
+    }
+
+    /**
+     * Return the evaluated value of the <code>defaultValue</code> attribute.
+     * @return the evaluated value
+     */
+    protected Object evaluateDefaultValue()
+    {
+        return _results;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _defaultValue = null;
+        _results = null;
+    }
+
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/ErrorReporter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/ErrorReporter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,61 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+import java.util.ArrayList;
+
+/**
+ * An <code>ErrorReporter</code> acts as a container allowing a tag to gather up all errors reported by it's children
+ * and report them as a single group.  Typically, there should be a single active <code>ErrorReporter</code>
+ * so all the errors on the page are reported in a single place.  All error reporters must look at any parent
+ * tags and also the CONTAINER_ERRORS request variable for an instance of <code>ErrorReporter</code> before
+ * becoming the primary <code>ErrorReporter</code>.  If another <code>ErrorReporter</code> is defined,
+ * the tag should return <code>false</code> from the <code>isReporting()</code> method.  Otherwise, the tag
+ * may become the primary <code>ErrorReporter</code>.  If a tag sets the CONTAINER_ERRORS request attribute,
+ * it must clear this when processing it's <code>doEndTag()</code> method because it will not be
+ * able to report errors after this point.
+ */
+public interface ErrorReporter
+{
+    /**
+     * This is a request scoped attribute name which may contain an ErrorReporter instance.  If this
+     * is defined, then this is the top most error reporter and should be used to report errors.
+     */
+    final String CONTAINER_ERRORS = "_netui.ErrorReporter";
+
+    /**
+     * Add an error to this <code>ErrorReporter</code>.
+     * @param ape the page error to add to the container.
+     */
+    public void addError(AbstractPageError ape);
+
+    /**
+     * This boolean indicates if an ErrorReporter is reporting errors
+     * or not.  The caller should check this before calling addError
+     * because the ErrorReporter may be off.
+     * @return a boolean indicating if the tag is reporting errors or not.
+     */
+    public boolean isReporting();
+
+    /**
+     * Return an ArrayList of the errors
+     * @return an <code>ArrayList</code> of all errors.
+     */
+    public ArrayList returnErrors();
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/EvalErrorInfo.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/EvalErrorInfo.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+
+
+/**
+ * This is a "struct" class that contains the information for
+ * an expression evaluation error.
+ */
+public class EvalErrorInfo extends AbstractPageError
+{
+    /**
+     * The attribute of the tag that contained the expression
+     */
+    public String attr;
+
+    /**
+     * The expression that was being evaluated.
+     */
+    public String expression;
+
+    /**
+     * The exception which occured
+     */
+    public ExpressionEvaluationException evalExcp;
+}
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/HtmlUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/HtmlUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,266 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument;
+
+import javax.servlet.jsp.JspException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * This class provides a set of static methods that provide HTML utility code.
+ */
+public class HtmlUtils
+{
+    /**
+     * Return the legacy mode of the the tag library.
+     * @param sr
+     * @return
+     */
+    public static boolean isLegacy(ScriptReporter sr)
+    {
+        if (sr != null && sr.isRunAtClient())
+            return false;
+
+        NetuiConfigDocument.NetuiConfig config = ConfigUtil.getConfig();
+        if (config == null)
+            return false;
+
+        return config.getLegacyTagSupport();
+    }
+
+
+    /**
+     * Filter the specified value for characters that are sensitive to
+     * HTML interpreters.  It will return a string with these characters replaced
+     * with HTML entities.  This method calls the overloaded method with <code>markupHTMLSpaceReturn</code>
+     * set to <code>false</code>.
+     * @param value The <code>String</code> value to be filtered and returned.
+     * @return a new <code>String</code> value containing HTML entities
+     */
+    public static String filter(String value)
+    {
+        return filter(value, false);
+    }
+
+    /**
+     * Filter the specified string for characters that are sensitive to
+     * HTML interpreters, returning the string with these characters replaced
+     * by the corresponding character entities.
+     * @param value                 The <code>String</code> value to be filtered and returned.
+     * @param markupHTMLSpaceReturn convert space characters and return characters
+     *                              to &amp;nbsp; and &lt;br /&gt; marketup for html.
+     * @return a new <code>String</code> value containing HTML entities
+     */
+    public static String filter(String value, boolean markupHTMLSpaceReturn)
+    {
+
+        if (value == null)
+            return null;
+
+        boolean needsToChange = false;
+        int numChars = value.length();
+        char c;
+        char prev = 0;
+
+        StringBuilder result = new
+                StringBuilder(numChars + (numChars / 5));
+
+        for (int i = 0; i < numChars; i++) {
+            c = value.charAt(i);
+            switch (c) {
+            case '<':
+                needsToChange = true;
+                result.append("&lt;");
+                break;
+            case '>':
+                needsToChange = true;
+                result.append("&gt;");
+                break;
+            case '&':
+                needsToChange = true;
+                result.append("&amp;");
+                break;
+            case '"':
+                needsToChange = true;
+                result.append("&quot;");
+                break;
+            case '\'':
+                needsToChange = true;
+                result.append("&#39;");
+                break;
+            case ' ':
+                if (markupHTMLSpaceReturn) {
+                    if (prev == ' ') {
+                        needsToChange = true;
+                        result.append("&nbsp;");
+                    }
+                    else
+                        result.append(c);
+                }
+                else
+                    result.append(c);
+                break;
+            case '\n':
+                if (markupHTMLSpaceReturn) {
+                    needsToChange = true;
+                    result.append("<br />");
+                }
+                else
+                    result.append(c);
+                break;
+            default:
+                result.append(c);
+            }
+            prev = c;
+        }
+        return (needsToChange ? result.toString() : value);
+    }
+
+    /**
+     * @param url
+     * @param params
+     * @param encoding
+     * @return
+     * @throws JspException
+     */
+    public static String addParams(String url, Map params, String encoding)
+            throws JspException
+    {
+        StringBuilder urlBuffer = new StringBuilder(url);
+
+        try {
+            // Add dynamic parameters if requested
+            if ((params != null) && (params.size() > 0)) {
+
+                // Add the required request parameters
+                boolean question = url.indexOf('?') >= 0;
+                Iterator keys = params.keySet().iterator();
+                while (keys.hasNext()) {
+                    String key = (String) keys.next();
+                    Object value = params.get(key);
+                    if (value == null) {
+                        if (!question) {
+                            urlBuffer.append('?');
+                            question = true;
+                        }
+                        else {
+                            urlBuffer.append("&");
+                        }
+                        urlBuffer.append(URLEncoder.encode(key, encoding));
+                        urlBuffer.append('='); // Interpret null as "no value"
+                    }
+                    else if (value instanceof String) {
+                        if (!question) {
+                            urlBuffer.append('?');
+                            question = true;
+                        }
+                        else {
+                            urlBuffer.append("&");
+                        }
+                        urlBuffer.append(URLEncoder.encode(key, encoding));
+                        urlBuffer.append('=');
+                        urlBuffer.append(URLEncoder.encode((String) value, encoding));
+                    }
+                    else if (value instanceof String[]) {
+                        String values[] = (String[]) value;
+                        for (int i = 0; i < values.length; i++) {
+                            if (!question) {
+                                urlBuffer.append('?');
+                                question = true;
+                            }
+                            else {
+                                urlBuffer.append("&");
+                            }
+                            urlBuffer.append(URLEncoder.encode(key, encoding));
+                            urlBuffer.append('=');
+                            urlBuffer.append(URLEncoder.encode(values[i], encoding));
+                        }
+                    }
+                    else /* Convert other objects to a string */ {
+                        if (!question) {
+                            urlBuffer.append('?');
+                            question = true;
+                        }
+                        else {
+                            urlBuffer.append("&");
+                        }
+                        urlBuffer.append(URLEncoder.encode(key, encoding));
+                        urlBuffer.append('=');
+                        urlBuffer.append(URLEncoder.encode(value.toString(),
+                                encoding));
+                    }
+                }
+            }
+        }
+        catch (UnsupportedEncodingException uee) {
+            uee.printStackTrace();
+            throw new JspException("Unsupported Encoding" + encoding, uee);
+        }
+
+        return urlBuffer.toString();
+    }
+
+    /**
+     * This method will determine if the value passed in contains an entity.
+     * @return
+     */
+    public static boolean containsEntity(String value)
+    {
+        assert (value != null) : "Parameter 'value' must not be null";
+
+        int pos = value.indexOf('&');
+        if (pos == -1)
+            return false;
+
+        int end = value.indexOf(';');
+        if (end != -1 && pos < end) {
+            // extract the entity and then verify it is
+            // a valid unicode identifier.
+            String entity = value.substring(pos + 1, end);
+            if (entity.length() == 0)
+                return false;
+            char[] chars = entity.toCharArray();
+
+            // verify the start is an indentifier start
+            // and the rest is a part.
+            if (!Character.isUnicodeIdentifierStart(chars[0])) {
+                if (chars[0] == '#' && chars.length > 1) {
+                    for (int i = 1; i < chars.length; i++) {
+                        if (!Character.isDigit(chars[i]))
+                            return false;
+                    }
+                    return true;
+                }
+                return false;
+            }
+            for (int i = 1; i < chars.length; i++) {
+                if (!Character.isUnicodeIdentifierPart(chars[i]))
+                    return false;
+            }
+            // good indentifier
+            return true;
+        }
+        return false;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IAttributeConsumer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IAttributeConsumer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * This interfaces is implemented by tags that allow attributes to be set
+ * externally to the tag.  The HTML tags for example, allow certain attributes to
+ * be set by children tags through the use of the <code>attribute</code> tag.
+ */
+public interface IAttributeConsumer
+{
+    /**
+     * Set an attribute value on the implementing class.  The <code>name</code> represents
+     * the name of the attribute.  The <code>value</code> represents the value and may contains
+     * an expression.  The <code>facet</code> is optional and may be used by complex types to
+     * target the attribute to a sub part of the generated markup. This method may result in errors
+     * being generated.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    void setAttribute(String name, String value, String facet) throws JspException;
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlAccessable.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlAccessable.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+/**
+ * This is an interface that defines the accessability properties defined by HTML accessability. All tags
+ * producing HTML elements that require accessability properties should implement this interface.
+ * The interface defines two primary properties that will be output with the HTML.  The AccessKey
+ * usually results in an <code>accesskey</code> attribute.  This allows for keyboard navigation to an element
+ * on an HTML page.  The Alt property usually results in an <code>alt</code. attribute.  This is a text description
+ * of the HTML element.
+ */
+public interface IHtmlAccessable extends IHtmlCore
+{
+    /**
+     * Gets the accessKey attribute value.
+     * @return the accessKey value.
+     */
+    //String getAccessKey();
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     */
+    void setAccessKey(char accessKey);
+
+    /**
+     * Gets the alt attribute on the generate &lt;input tag.
+     * @return the alt value.
+     */
+    //String getAlt();
+
+    /**
+     * Sets the alt attribute value.
+     * @param alt - the alt value.
+     */
+    void setAlt(String alt);
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlAttrs.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlAttrs.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+
+
+public interface IHtmlAttrs extends IHtmlCore, IHtmlI18n, IHtmlEvents
+{
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlCore.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlCore.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+
+/**
+ * This interface defines the HTML 4.0 core attributes.  The following properties represent the core attributes:
+ * id = tagId, class = styleClass, style = style, title = title.  This is a marker interface on the tags
+ * ensuring that tags representing core HTML elements have the defined property set.
+ */
+public interface IHtmlCore
+{
+
+    /**
+     * Return the ID of the tag.  The id may be rewritten by the container (such
+     * as a portal) to make sure it is unique.  JavaScript my lookup the actual id
+     * of the element by looking it up in the <code>netui_names</code> table written
+     * into the HTML.
+     * @return the tagId.
+     */
+    //String getTagId();
+
+    /**
+     * Set the ID of the tag.
+     * @param tagId - the tagId.
+     */
+    void setTagId(String tagId);
+
+    /**
+     * Returns the Nodes title.
+     * @return
+     */
+    //String getTitle();
+
+    /**
+     * Sets the Nodes title.
+     * @param title
+     */
+    void setTitle(String title);
+
+    /**
+     * Sets the style of the rendered html tag.
+     * @param style - the html style.
+     */
+    void setStyle(String style);
+
+    /**
+     * Gets the style of the rendered html tag.
+     * @return the style.
+     */
+    //String getStyle();
+
+    /**
+     * Sets the style class of the rendered html tag.
+     * @param styleClass - the html style class.
+     */
+    void setStyleClass(String styleClass);
+
+    /**
+     * Gets the style class of the rendered html tag.
+     * @return the style class.
+     */
+    //String getStyleClass();
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlEvents.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlEvents.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,144 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+public interface IHtmlEvents
+{
+
+    /**
+     * Gets the onClick javascript event.
+     * @return the onClick event.
+     */
+    //String getOnClick();
+
+
+    /**
+     * Sets the onClick javascript event.
+     * @param onclick - the onClick event.
+     */
+    void setOnClick(String onclick);
+
+    /**
+     * Gets the onDblClick javascript event.
+     * @return the onDblClick event.
+     */
+    //String getOnDblClick();
+
+    /**
+     * Sets the onDblClick javascript event.
+     * @param ondblclick - the onDblClick event.
+     */
+    void setOnDblClick(String ondblclick);
+
+    /**
+     * Gets the onKeyDown javascript event.
+     * @return the onKeyDown event.
+     */
+    //String getOnKeyDown();
+
+    /**
+     * Sets the onKeyDown javascript event.
+     * @param onkeydown - the onKeyDown event.
+     */
+    void setOnKeyDown(String onkeydown);
+
+    /**
+     * Gets the onKeyPress javascript event.
+     * @return the onKeyPress event.
+     */
+    //String getOnKeyPress();
+
+    /**
+     * Sets the onKeyPress javascript event.
+     * @param onkeypress - the onKeyPress event.
+     */
+    void setOnKeyPress(String onkeypress);
+
+    /**
+     * Gets the onKeyUp javascript event.
+     * @return the onKeyUp event.
+     */
+    //String getOnKeyUp();
+
+    /**
+     * Sets the onKeyUp javascript event.
+     * @param onkeyup - the onKeyUp event.
+     */
+    void setOnKeyUp(String onkeyup);
+
+    /**
+     * Gets the onMouseDown javascript event.
+     * @return the onMouseDown event.
+     */
+    //String getOnMouseDown();
+
+    /**
+     * Sets the onMouseDown javascript event.
+     * @param onmousedown - the onMouseDown event.
+     */
+    void setOnMouseDown(String onmousedown);
+
+    /**
+     * Gets the onMouseMove javascript event.
+     * @return the onMouseMove event.
+     */
+    //String getOnMouseMove();
+
+    /**
+     * Sets the onMouseMove javascript event.
+     * @param onmousemove - the onMouseMove event.
+     */
+    void setOnMouseMove(String onmousemove);
+
+    /**
+     * Gets the onMouseOut javascript event.
+     * @return the onMouseOut event.
+     */
+    //String getOnMouseOut();
+
+    /**
+     * Sets the onMouseOut javascript event.
+     * @param onmouseout - the onMouseOut event.
+     */
+    void setOnMouseOut(String onmouseout);
+
+    /**
+     * Gets the onMouseOver javascript event.
+     * @return the onMouseOver event.
+     */
+    //String getOnMouseOver();
+
+    /**
+     * Sets the onMouseOver javascript event.
+     * @param onmouseover - the onMouseOver event.
+     */
+    void setOnMouseOver(String onmouseover);
+
+    /**
+     * Gets the onMouseUp javascript event.
+     * @return the onMouseUp event.
+     */
+    //String getOnMouseUp();
+
+    /**
+     * Sets the onMouseUp javascript event.
+     * @param onmouseup - the onMouseUp event.
+     */
+    void setOnMouseUp(String onmouseup);
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlI18n.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlI18n.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+/**
+ * Interface which inforces that the HTML i18n attributes are found on an HTML element as defined by
+ * the HTML 4.0 specification.
+ */
+public interface IHtmlI18n
+{
+    /**
+     * Gets the dir value of the html.
+     * @return "LTR" or "RTL"
+     */
+    //public String getDir();
+
+    /**
+     * Sets the dir value of the html.
+     * @param dir - "LTR" or "RTL"
+     * @netui:attribute required="false"
+     */
+    public void setDir(String dir);
+
+    /**
+     * Return the language Code of the HTML element.
+     * @return a language code.
+     */
+    //public String getLang();
+
+    /**
+     * Set the language code of an HTML element.
+     * @param lang
+     */
+    public void setLang(String lang);
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlIdWriter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlIdWriter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+public interface IHtmlIdWriter
+{
+
+    public final String ID_PARAMETER_NAME = "netuiIdMap";
+    public final String ID_PREFIX = "netui";
+    public final String ID_REQUEST_ATTRIBUTE = "netuiIdGenerator";
+
+    /**
+     * This method will add a id and expression to the map maintained by the implementor.  This map should be
+     * written to the form as a set of hidden fields that will contain the id.
+     * @param id
+     * @param expression
+     */
+    void writeId(String id, String expression);
+
+    /**
+     * Return the next id
+     */
+    String getNextId();
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/OptionsDataSourceTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/OptionsDataSourceTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,84 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * Abstract tag class that adds support for an OptionsDataSource.  OptionsDataSource is used to populate
+ * a set of option tag children for the containing tag.
+ * <p>
+ * For example, a set of CheckBoxOptions for a CheckBoxGroup.
+ */
+public abstract class OptionsDataSourceTag
+        extends DefaultableDataSourceTag
+{
+    /**
+     * The value of the options data source.
+     */
+    private String _optionsDataSource;
+    private Object _results;
+
+    /**
+     * Gets the options datasource value (an expression).
+     * @return the options datasource
+     */
+    public String getOptionsDataSource()
+    {
+        return _optionsDataSource;
+    }
+
+    /**
+     * Sets the options datasource value (an expression).
+     * @param optionsDataSource - the options datasource
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setOptionsDataSource(String optionsDataSource)
+            throws JspException
+    {
+        _optionsDataSource = optionsDataSource;
+
+        // lets evalute the expression early to generate any errors.
+        // We don't do this lazy because we want to report errors.
+        _results = evaluateQualifiedExpression(_optionsDataSource, "optionsDataSource",
+                "OptionsDataSourceError", "OptionsDataSourceEvalError");
+    }
+
+    /**
+     * Return the real value of the <code>optionDataSource</code> attribute.  This value reflects the
+     * result of expression evaluation on the options data source.
+     * @return the object that represents the options data source.
+     */
+    protected Object evaluateOptionsDataSource()
+    {
+        return _results;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _optionsDataSource = null;
+        _results = null;
+    }
+
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/ScriptReporter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/ScriptReporter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+/**
+ * A <code>ScriptReporter</code> acts as a container for JavaScript generated by children of
+ * the tag.  Usually a <code>ScriptReporter</code> will gather up all of the JavaScript
+ * generated by children into a single &lt;script> element output into the HTML.  A script container
+ * will implement a map beteween the TagId and the real <code>name</code> or <code>id</code> attribute
+ * written into the HTML.
+ */
+public interface ScriptReporter
+{
+    /**
+     * This method will add Script as top level code that runs when
+     * the page is loaded.
+     * @param script the text of the script.  This value must not be null.
+     */
+    void addScriptCode(String script);
+
+    /**
+     * This method will add Script as a function.
+     * @param script the text of the function. This value must not be null.
+     */
+    void addScriptFunction(String script);
+
+    /**
+     * This method will add a new method to the initialization code.
+     * @param varClass the name of the variable containing the javascript feature
+     */
+    void addInitMethod(String varClass);
+
+    /**
+     * This method will add a method to be called which will handle state changes
+     * associated with an anchor post.
+     * @param rewriter the name of a method which will rewrite the anchor.
+     */
+    void addAnchorPostRewriter(String rewriter);
+
+    /**
+     * Adds a tagID and tagName to the id to name map.  A script container
+     * can maintain a mapping of user ids to actual ids generated by
+     * the tagId.  This method will track these.
+     * @param tagId   - the id of a child tag.
+     * @param tagName - the name of a child tag.
+     */
+    void addTagId(String tagId, String tagName);
+
+    /**
+     * This method will indicate that the ScriptReporter is supporting runAtClient features
+     */
+    boolean isRunAtClient();
+
+    /**
+     * This method will output all of the Script associated with the script reporter.
+     * @param sb The script is written into the provided StringBuffer. This value must not be null.
+     */
+    void writeScript(StringBuilder sb);
+
+    /**
+     * This method will output all of the Script that appears inside the <head> tag.
+     * @param sb The script is written into the provided StringBuffer. This value must not be null.
+     */
+    void writeInitScript(StringBuilder sb);
+
+    /**
+     * This method indicates that the <code>writeScript</code> method has been called.
+     */
+    boolean isScriptWritten();
+
+    /**
+     * Returns true if the <code>writeInitScript</code> method has been called.
+     * @return <code>true</code> if the <code>writeInitScript</code> method has been called.
+     */
+    boolean isInitScriptWritten();
+
+    /**
+     * Return <code>true</code> the tag set is in legacy mode.
+     * @return
+     */
+    boolean isLegacy();
+
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/TagErrorInfo.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/TagErrorInfo.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags;
+
+/**
+ * This is a "struct" class that contains the information for
+ * an expression evaluation error.
+ */
+public class TagErrorInfo extends AbstractPageError
+{
+    /**
+     * The attribute of the tag that contained the expression
+     */
+    public String message;
+}
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,799 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.pageflow.util.URLRewriter;
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.tags.ScriptReporter;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.AnchorTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.FileUtils;
+import org.apache.beehive.netui.util.ParamHelper;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.struts.util.ResponseUtils;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import java.net.MalformedURLException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * Generates a URL-encoded hyperlink to a specified URI.
+ * Also adds support for URL re-writing and JavaScript-based form submission.
+ * An anchor must have one of five attributes to correctly create the hyperlink:
+ * <ul>
+ * <li>action - an action invoked by clicking the hyperlink.</li>
+ * <li>forward - a forward to redirect to.</li>
+ * <li>href - a URL to go to</li>
+ * <li>linkName - an internal place in the page to move to</li>
+ * <li>page - The module-relative page URL to which this hyperlink will be rendered.</li>
+ * </ul>
+ * </p>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">action</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An action invoked by clicking the link.</td></tr>
+ * <tr><th rowspan="2">formSubmit</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">True if clicking this link should submit its enclosing <code>form</code>.</td></tr>
+ * <tr><th rowspan="2">forward</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The logical forward name from which to retrieve the hyperlink URI.</td></tr>
+ * <tr><th rowspan="2">href</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A URL destination to go to.</td></tr>
+ * <tr><th rowspan="2">id</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3"><b>id is deprecated, use tagId</b>.  The id attribute of the generated Anchor. You should use the tagId which will encode the id correctly for containers such as the Portal which needs to rewrite id's to make them unique.</td></tr>
+ * <tr><th rowspan="2">linkName</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">An internal place in the page to move to.</td></tr>
+ * <tr><th rowspan="2">location</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Location within the URI to visit</td></tr>
+ * <tr><th rowspan="2">page</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3"><b>page is deprecated</b> The module-relative page URL to which this hyperlink will be rendered.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The id of this anchor.  The real id written to the HTML stream may be changed by the container (Portal), but may be looked up with the 'tagId' value through the JavaScript method <code>getNetuiTagName</code> method written by the &lt;netui:html> tag.</td></tr>
+ * <tr><th rowspan="2">target</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The window target</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, clicking on this anchor would submit the form and invoke the action
+ * <code>ViewResults</code>.
+ * <pre>&lt;netui:anchor action="ViewResults" formSubmit="true"&gt;View Results&lt;/netui:anchor&gt;</pre>
+ * <p>
+ * <b>JavaScript</b>
+ * </p>
+ * <p>If an Anchor sets the <code>formSubmit</code> attribute to <code>true</code> and no
+ * <code>onClick</code> attribute is set, the following JavaScript will be written into the page,
+ * referenced by the <code>onclick</code> attribute of the generated anchor, and will cause the
+ * form to submit:</p>
+ * <pre>
+ * function submit[formname][formAction]Form() {
+ *   for(var i=0; i&lt;document.forms.length; i++) {
+ *     if (document.forms[i].action == "[formAction]") {
+ *       document.forms[i].method="POST";
+ *       document.forms[i].action="[formAction]";
+ *       document.forms[i].submit();
+ *     }
+ *   }
+ * }
+ * </pre>
+ * It is possible to write a custom <code>onClick</code> JavaScript event handler that would
+ * do additional work, for example form validation, and still POST the form correctly.  To
+ * accomplish this, implement a JavaScript method like that set in the <code>onClick</code>
+ * attribute of the anchor tag as follows:
+ * <pre>
+ * &lt;netui:anchor formSubmit="true" onClick="SubmitFromAnchor(); return false;"&gt;View Results&lt;/netui:anchor&gt;
+ * </pre>
+ * <p>And then add JavaScript to the page. For example:</p>
+ * <pre>
+ * function SubmitFromAnchor()
+ * {
+ *   // implement custom logic here
+ *
+ *   for(var i=0; i&lt;document.forms.length; i++)
+ *   {
+ *     // submit to the action /aWebapp/formPost.do
+ *     if (document.forms[i].action == "/aWebapp/formPost.do")
+ *     {
+ *       document.forms[i].method="POST";
+ *       document.forms[i].action="/aWebapp/formPost.do";
+ *       document.forms[i].submit();
+ *     }
+ *   }
+ * }
+ * </pre>
+ * <p>This will execute JavaScript code to execute before posting the form.</p>
+ *
+ * @netui:tag name="anchor" description="Generates a URL-encoded hyperlink to a specified URI."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.AnchorRenderer" whitespace="indent"
+ */
+public class Anchor extends HtmlBaseTag
+        implements URLParams
+{
+    /**
+     * NOTES: It looks like the location can only be used with href.  We need to make sure that there
+     * is an error if this is not true.  Location cannot be used at the moment with a target of an
+     * action.
+     */
+    private static final Logger logger = Logger.getInstance(Anchor.class);
+
+    // rendering state
+    protected AnchorTag.State _state = new AnchorTag.State();
+
+    private String _text;         // The body content of this tag (if any).
+
+    private String _action;       // name of the action
+    private String _href;         // hyperlink URI.
+    private String _linkName;     // name of the link
+    private String _location;     // anchor to be added to the end of the hyperlink.
+    private String _scope;        // target scope; see comments on setScope()
+    private String _clientAction; // The client action (javascript)
+
+    private Map _params;                 // Parameters
+    private boolean _formSubmit = false; // should the anchor submit an enclosing form?
+
+    /**
+     * Returns the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Anchor";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    public AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>href</code>
+     * attribute.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null && name.equals(HREF)) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Set the name of the action for the Anchor.
+     * @param action - the name of the action to set for the Anchor.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute reftype="netui-action-url" category="general"
+     */
+    public void setAction(String action)
+    {
+        _action = action;
+    }
+
+    /**
+     * Set the name of the action for the Anchor.
+     * @param scope - the name of the action to set for the Anchor.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setScope(String scope)
+    {
+        _scope = scope;
+    }
+
+    /**
+     * Sets the formSubmit indicator.
+     * @param formSubmit - whether or not the enclosing Form should be submitted.
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute
+     */
+    public void setFormSubmit(boolean formSubmit)
+    {
+        _formSubmit = formSubmit;
+    }
+
+    /**
+     * Sets the onClick javascript event.
+     * @param onclick - the onClick event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnClick(String onclick)
+    {
+        _state.onClick = onclick;
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false"  rtexprvalue="true" type="int"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(int tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, Integer.toString(tabindex));
+    }
+
+    /**
+     * Sets the href of the Anchor.
+     * @param href - the hyperlink URI for the Anchor.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"
+     */
+    public void setHref(String href)
+            throws JspException
+    {
+        _href = href;
+    }
+
+    /**
+     * Set a client action to run on the client.  When set on an anchor, a NetUI JavaScript action
+     * will be run.  This attribute may not be set if <code>href</code> or <code>action</code> is set.
+     * @param action an action to run on the client.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setClientAction(String action)
+    {
+        _clientAction = action;
+    }
+
+    /**
+     * Sets the link name of the Anchor.
+     * @param linkName - the link name for the Anchor.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setLinkName(String linkName)
+    {
+        _linkName = linkName.trim();
+    }
+
+    /**
+     * Sets the anchor to be added to the end of the generated hyperlink.
+     * @param location - the name of the location anchor.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setLocation(String location)
+    {
+        _location = location;
+    }
+
+    /**
+     * Sets <code>charset</code> attribute for the anchor.
+     * @param charSet - the window target.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setCharSet(String charSet)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, CHARSET, charSet);
+    }
+
+    /**
+     * Sets <code>type</code> attribute for the anchor.
+     * @param type - the window target.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setType(String type)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TYPE, type);
+    }
+
+    /**
+     * Sets <code>hreflang</code> attribute for the anchor.
+     * @param hreflang - the window target.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setHrefLang(String hreflang)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HREFLANG, hreflang);
+    }
+
+    /**
+     * Sets <code>rel</code> attribute for the anchor.
+     * @param rel - the window target.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setRel(String rel)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, REL, rel);
+    }
+
+    /**
+     * Sets <code>rev</code> attribute for the anchor.
+     * @param rev - the window target.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setRev(String rev)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, REV, rev);
+    }
+
+    /**
+     * Sets <code>shape</code> attribute for the anchor.
+     * @param shape - the window target.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setShape(String shape)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, SHAPE, shape);
+    }
+
+    /**
+     * Sets <code>coords</code> attribute for the anchor.
+     * @param coords - the window target.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setCoords(String coords)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, COORDS, coords);
+    }
+
+    /**
+     * Sets the window target.
+     * @param target - the window target.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTarget(String target)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TARGET, target);
+    }
+
+
+    //**************************** Helper Routines  *********************************************
+
+    /**
+     * Adds a URL parameter to the generated hyperlink.
+     * @param name  - the name of the parameter to be added.
+     * @param value - the value of the parameter to be added (a String or String[]).
+     */
+    public void addParameter(String name, Object value) throws JspException
+    {
+        if (_params == null) {
+            _params = new HashMap();
+        }
+        ParamHelper.addParam(_params, name, value);
+    }
+
+    /**
+     * Prepare the hyperlink for rendering
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content of the Anchor.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+
+        if (bodyContent != null) {
+            String value = bodyContent.getString().trim();
+            bodyContent.clearBody();
+            if (value.length() > 0)
+                _text = value;
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the hyperlink.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        // build the anchor into the results
+        StringBuilder results = new StringBuilder(128);
+        StringBuilder script = new StringBuilder(128);
+
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        TagRenderingBase trb = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, request);
+
+        if (!createAnchorBeginTag(results, script, trb)) {
+            reportErrors();
+            if (script.length() > 0)
+                ResponseUtils.write(pageContext, script.toString());
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        if (_text != null)
+            results.append(_text);
+
+        assert(trb != null) : "trb is null";
+        trb.doEndTag(results);
+
+        if (script.length() > 0)
+            results.append(script.toString());
+
+        // Render the remainder to the output stream
+        ResponseUtils.write(pageContext, results.toString());
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * This method will create the &lt;a> portion of an anchor.  It is called by subclasses, for example, the
+     * <code>ImageAnchor</code> relies on this code to generate the  &lt;a>.
+     * @param results a <code>StringBuffer</coce> to write the anchor into
+     * @param script  a <code>StringBuffer</code> that will contain any JavaScript that may need to be added
+     *                to the generated HTML response.
+     * @return a boolean value indicating if an error occur creating the anchor.
+     * @throws JspException
+     */
+    protected final boolean createAnchorBeginTag(StringBuilder results, StringBuilder script,
+                                                 TagRenderingBase trb)
+            throws JspException
+    {
+        int have = 0;
+        String formAction = null;
+        String idScript = null;
+
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+        ServletContext ctxt = pageContext.getServletContext();
+        JavaScriptUtils jsu = getJavaScriptUtils(request);
+
+        // check the parameters that the user provided
+        if (_href != null) have++;
+        if (_action != null) have++;
+        if (_clientAction != null) have++;
+        if (_linkName != null) have++;
+
+        String tagId = getTagId();
+
+        // if only the _linkName or _tagId is set then we are creating the name attribute only.
+        if (have == 0 && tagId != null) {
+            return createNameAnchor(results, request, tagId, trb);
+        }
+
+        // if the anchor is submitting a consider this a submit level problem
+        // set the action to the form action.
+        if (_formSubmit == true) {
+            formAction = getFormAction();
+            if ((formAction != null) && (have == 0)) {
+                have++;
+            }
+            if (_action == null)
+                _action = formAction;
+        }
+
+        // if we have not specified a destination or we've specified too many
+        // then we need to report an error.
+        if (have == 0 || have > 1) {
+            String s = Bundle.getString("Tags_Anchor_InvalidAnchorURI",
+                    new Object[]{"href, action, linkName, clientAction"});
+            registerTagError(s, null);
+        }
+
+        if (_linkName != null) {
+            return createPageAnchor(results, request, trb);
+        }
+
+        // report that action is not an action
+        if ((_action != null) && (!PageflowTagUtils.isAction(request, response, ctxt, _action))) {
+            String s = null;
+            if (_action.equals("")) {
+                 s = Bundle.getString("Tags_NullBadAction", null);
+            }
+            else {
+                s = Bundle.getString("Tags_BadAction", _action);
+            }
+            registerTagError(s, null);
+        }
+
+        String internalHref = _state.href;
+        boolean absoluteUrl = false;
+
+        // we assume that tagId will over have override id if both
+        // are defined.
+        if (getTagId() != null) {
+            idScript = renderTagId(_state, null, true, false);
+        }
+        else {
+            _state.id = id;
+        }
+
+        // Special case for name anchors
+        if (_clientAction != null) {
+            _state.href = "";
+        }
+        else {
+            // Generate the opening anchor element
+            String type = URLRewriter.ACTION_UNSECURE;
+
+            if (_action != null) {
+
+                // simply set this to the result of mangling the action
+                String actionUrl = PageflowTagUtils.getActionPath(pageContext, _action);
+                if (URLRewriterService.needsSecure(request, ctxt,
+                        actionUrl, false))
+                    type = URLRewriter.ACTION_SECURE;
+
+                internalHref = PageflowTagUtils.createActionURL(pageContext, _action);
+            }
+            else if (_href != null) {
+                internalHref = _href;
+                if (FileUtils.isAbsoluteURI(internalHref)) {
+
+                    absoluteUrl = true;
+                }
+                else if (!internalHref.startsWith("/")) {
+
+                    String reqUri = request.getRequestURI();
+                    String path = reqUri.substring(0, reqUri.lastIndexOf("/") + 1);
+                    internalHref = path + internalHref;
+                }
+
+                // is this a secure operation?
+                if ((!absoluteUrl) && (URLRewriterService.needsSecure(request,
+                        ctxt, internalHref, true)))
+                    type = URLRewriter.ACTION_SECURE;
+            }
+
+            // Add the jpfScopeID parameter, if the scope attribute is present.
+            if (_scope != null) {
+                if (_params == null) {
+                    _params = new HashMap();
+                }
+                _params.put(ScopedServletUtils.SCOPE_ID_PARAM, _scope);
+            }
+
+            if (!absoluteUrl) {
+                internalHref = calculateURL(internalHref, _location);
+            }
+            else {
+                if ((_params != null) && (_params.size() > 0)) {
+                    StringBuffer sb = new StringBuffer(internalHref);
+                    String encoding = response.getCharacterEncoding();
+                    PageflowTagUtils.addParameters(sb, encoding, false, _params);
+                    internalHref = sb.toString();
+                }
+            }
+
+            if (internalHref == null) {
+                if (hasErrors()) {
+                    return false;
+                }
+            }
+
+            if (!absoluteUrl) {
+                internalHref = URLRewriterService.rewriteURL(ctxt, request, response, internalHref, type);
+                internalHref = qualifyUrlToContext(internalHref);
+            }
+            _state.href = internalHref;
+        }
+
+        // We need to combine the onclick features
+        ScriptReporter sr = getScriptReporter();
+        if (sr != null && sr.isRunAtClient()) {
+            if (_clientAction == null) {
+                if (_state.onClick == null) {
+                    _state.onClick = "NetUIAnchorRewriter(this);";
+                }
+                else {
+                    String click = escapeEscapes(_state.onClick);
+                    String entry = JavaScriptUtils.getString("createAnchorRewriterOnClickExists",
+                            new Object[]{click});
+                    _state.onClick = entry;
+                }
+            }
+            else {
+                //@todo: we need to support onclick chaining here also...
+                String action = escapeEscapes(_clientAction);
+                String entry = JavaScriptUtils.getString("netuiAction",
+                        new Object[]{action});
+                _state.onClick = entry;
+            }
+        }
+
+        // if the user override the onclick we will ignor this
+        if (_state.onClick == null && _formSubmit && formAction != null) {
+            String realFormName = getRealFormName();
+            _state.onClick = jsu.writeAnchorFormSubmitAction(realFormName, internalHref);
+
+            Form f = getNearestForm();
+            f.generateRealName();
+        }
+
+         trb.doStartTag(results, _state);
+
+        //Emit javascript if this anchor needs to sumbit the form
+        if (_formSubmit && formAction != null) {
+            String s = jsu.writeAnchorFormSubmit(getScriptReporter());
+            if (s != null)
+                script.append(s);
+        }
+        if (idScript != null)
+            script.append(idScript);
+
+        // create the javaScript
+        return !hasErrors();
+    }
+
+    /**
+     * @param results
+     * @param tagId
+     * @return
+     */
+    private boolean createNameAnchor(StringBuilder results, ServletRequest req, String tagId, TagRenderingBase trb)
+    {
+        _state.name = tagId;
+        trb = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, req);
+        trb.doStartTag(results, _state);
+        return !hasErrors();
+    }
+
+    private boolean createPageAnchor(StringBuilder results, ServletRequest req, TagRenderingBase trb)
+    {
+        _linkName = _linkName.trim();
+        if (_linkName.charAt(0) != '#') {
+            _state.href = "#" + _linkName;
+        }
+        else
+            _state.href = _linkName;
+
+        trb = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, req);
+        trb.doStartTag(results, _state);
+        return !hasErrors();
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+
+        _text = null;
+        _action = null;
+        _href = null;
+        _linkName = null;
+        _location = null;
+        _scope = null;
+        _clientAction = null;
+        _params = null;
+        _formSubmit = false;
+    }
+
+    /**
+     * Return the complete URL to which this hyperlink will direct the user.
+     * @param href
+     * @param location
+     * @return
+     * @throws JspException
+     */
+    private String calculateURL(String href, String location) throws JspException
+    {
+        String url = null;
+        try {
+            url = PageflowTagUtils.computeURL(pageContext, null, href,
+                    null, null, _params, location, true);
+        }
+        catch (MalformedURLException e) {
+            logger.error(Bundle.getString("Tags_MalformedURLException"));
+            String s = null;
+            s = Bundle.getString("Tags_Anchor_URLException",
+                    new Object[]{e.getMessage()});
+
+            // report the error.  If this returns a value then we throw an
+            // exception
+            registerTagError(s, e);
+        }
+        return url;
+    }
+
+    /**
+     * Return the action attribute for the nearest form.
+     * @return The action attribute of the enclosing form
+     */
+    private String getFormAction()
+    {
+        Form f = getNearestForm();
+        if (f != null)
+            return f.getAction();
+        return null;
+    }
+
+    /**
+     * This will get the real name of the form.  This is set in the
+     * id attribute.
+     * @return The String real name of the containing form.
+     */
+    private String getRealFormName()
+    {
+        Form f = getNearestForm();
+        if (f != null) {
+            return f.getRealName();
+        }
+        return null;
+    }
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true"  type="char"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAccessKey(char accessKey)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the onBlur javascript event.
+     * @param onblur - the onBlur event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnBlur(String onblur)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONBLUR, onblur);
+    }
+
+    /**
+     * Sets the onFocus javascript event.
+     * @param onfocus - the onFocus event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnFocus(String onfocus)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONFOCUS, onfocus);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Attribute.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Attribute.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,106 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.IAttributeConsumer;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * @netui:tag name="attribute" description="Add an attribute to the parent tag which be rendered."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.AttributeRenderer"
+ * bodycontentpref="empty" whitespace="indent"
+ */
+public class Attribute extends AbstractBaseTag
+{
+    private String _name = null;
+    private String _value = null;
+    private String _facet = null;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Attribute";
+    }
+
+    /**
+     * Sets the <code>name</code> attribute.
+     * @param name - the value of the <code>name</code> attribute.
+     * @netui:attribute required="true"  rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setName(String name)
+    {
+        _name = name;
+    }
+
+    /**
+     * Sets the <code>value</code> attribute.
+     * @param value - the value of the <code>name</code> attribute.
+     * @netui:attribute required="true"  rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setValue(String value)
+    {
+        _value = value;
+    }
+
+    /**
+     * Sets the <code>facet</code> attribute.
+     * @param facet - the value of the <code>facet</code> attribute.
+     * @netui:attribute rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setFacet(String facet)
+    {
+        _facet = facet;
+    }
+
+    /**
+     * Add the URL parameter to the Parameter's parent.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        Tag tag = getParent();
+        if (!(tag instanceof IAttributeConsumer)) {
+            String s = Bundle.getString("Tags_AttributeInvalidParent");
+            registerTagError(s, null);
+            reportErrors();
+            return SKIP_BODY;
+        }
+
+        IAttributeConsumer ac = (IAttributeConsumer) tag;
+        ac.setAttribute(_name, _value, _facet);
+        return SKIP_BODY;
+    }
+
+    protected void localRelease()
+    {
+        super.localRelease();
+        _name = null;
+        _value = null;
+        _facet = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Base.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Base.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,204 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+//java imports
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.IAttributeConsumer;
+import org.apache.beehive.netui.tags.rendering.AbstractAttributeState;
+import org.apache.beehive.netui.tags.rendering.BaseTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+
+/**
+ * Provides the base for every URL on this page.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">target</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The default target window.</td></tr>
+ *
+ * </table>
+ * @example In this sample, the Base tag is simply dropped in and then automatically determines
+ * the base for each URL on this page.
+ * <pre>
+ * &lt;head>
+ *      &lt;netui:base />
+ * &lt;/head>
+ * </pre>
+ *
+ * @netui:tag name="base" description="Provides the base for every URL on this page."
+ * @netui.tldx:tag requiredchild="attribute" renderer="workshop.netui.jspdesigner.tldx.BaseRenderer" bodycontentpref="empty" whitespace="indent"
+ */
+public class Base extends AbstractBaseTag
+        implements IAttributeConsumer, HtmlConstants
+{
+    private BaseTag.State _state = new BaseTag.State();
+
+    /**
+     * Returns the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Base";
+    }
+
+    /**
+     * Set the default window target.
+     * @param target - the window target.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setTarget(String target)
+    {
+        _state.target = target;
+    }
+
+    /**
+     * Base support for the attribute tag.  The <code>href</code> may not bet set.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        boolean error = false;
+
+        // validate the name attribute, in the case of an error simply return.
+        if (name == null || name.length() <= 0) {
+            String s = Bundle.getString("Tags_AttributeNameNotSet");
+            registerTagError(s, null);
+            error = true;
+        }
+        if (facet != null) {
+            String s = Bundle.getString("Tags_AttributeFacetNotSupported", new Object[]{facet});
+            registerTagError(s, null);
+            error = true;
+        }
+
+        // it's not legal to set the href attributes this way
+        if (name != null && name.equals(HREF)) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+        }
+        if (error)
+            return;
+
+        // set the state variables that will override the tag settings...
+        if (name.equals(TARGET)) {
+            _state.target = value;
+            return;
+        }
+        else if (name.equals(HREF)) {
+            _state.href = value;
+            return;
+        }
+
+        _state.registerAttribute(AbstractAttributeState.ATTR_GENERAL, name, value);
+    }
+
+    /**
+     * Render the base tag
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content of the Anchor.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+
+        if (bodyContent != null) {
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the hyperlink.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.BASE_TAG, request);
+
+        StringBuilder buf = new StringBuilder(64);
+
+        // calculate the href
+        buf.append(request.getScheme());
+        buf.append("://");
+        buf.append(request.getServerName());
+        if ("http".equals(request.getScheme()) && (80 == request.getServerPort())) {
+            //Do nothing
+        }
+        else if ("https".equals(request.getScheme()) && (443 == request.getServerPort())) {
+            //Do nothing
+        }
+        else {
+            buf.append(":");
+            buf.append(request.getServerPort());
+        }
+        buf.append(request.getRequestURI());
+        _state.href = buf.toString();
+
+        // we've set the HREF so reuse the string buffer
+        buf.setLength(0);
+
+        // render the tag.
+        br.doStartTag(buf, _state);
+        br.doEndTag(buf);
+        write(buf.toString());
+
+        // This will produce invalid HTML/XHTML if there are errors
+        // because we are going to put markup out into the head.
+        if (hasErrors()) {
+            reportErrors();
+        }
+
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    // this doesn currently extend our AbstractBaseTag so this is the end.
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+    }
+
+}
+
+
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/BindingUpdateErrors.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/BindingUpdateErrors.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,164 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.ServerAdapter;
+import org.apache.beehive.netui.pageflow.internal.BindingUpdateError;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+/**
+ * Renders the set of error messages found during processPopulate when the
+ * values to be updated cannot be resolved.  These errors are treated as
+ * warnings.  By default, this tag is only on in Iterative Dev mode and
+ * the warning are not displayed in production mode.  The tag is intended
+ * for development use.
+ * <p>
+ *
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">alwaysReport</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">This attribute will override the default behavior of only showing errors in iterative development mode, so they are also shown in production mode.</td></tr>
+ * <tr><th rowspan="2">expression</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">This attribute will display errors only for the specified expression.</td></tr>
+ *
+ * </table>
+ *
+ * </p>
+ * @example In this first sample, because the &lt;netui:bindingUpdateErrors/> tag is unqualified,
+ * messages will be displayed if <b>any</b> data binding errors occurred when a form was
+ * posted. The messages are displayed on the page and the command window.
+ * <pre>&lt;netui:bindingUpdateErrors /></pre>
+ * <p>In this next sample, only binding errors for the expression <code>{actionForm.firstName}</code>
+ * will be displayed on the page and the command window. </p>
+ * <pre>&lt;netui:bindingUpdateErrors expression="{actionForm.firstName}"/></pre>
+ *
+ * @netui:tag name="bindingUpdateErrors" description="Will display a message for all binding update errors that occurred when a form was posted."
+ * @netui.tldx:tag requiredchild="#nothing" renderer="workshop.netui.jspdesigner.tldx.BindingUpdateErrorsRenderer" bodycontentpref="empty" whitespace="indent"
+ */
+public class BindingUpdateErrors extends AbstractBaseTag
+{
+    private String _expression = null;
+    private boolean _alwaysReport = false;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "BindingUpdateErrors";
+    }
+
+    /**
+     * Sets the expression to match for binding errors.  If an expression
+     * is set, only binding errors for that expression will be displayed.
+     * Otherwise, all errors will be displayed.
+     * @param expression The expression to match against.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setExpression(String expression)
+    {
+        _expression = expression;
+    }
+
+    /**
+     * Set the value which will override the default behavior of not showing
+     * errors in production mode.
+     * @param alwaysReport a boolean that if <code>true</code> will cause
+     *                     the errors to always be displayed.  The default is <code>false</code>
+     * @netui:attribute required="false"  rtexprvalue="true"  type="boolean"
+     */
+    public void setAlwaysReport(boolean alwaysReport)
+    {
+        _alwaysReport = alwaysReport;
+    }
+
+    /**
+     * Render the specified error messages if there are any.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        ServerAdapter sa = InternalUtils.getServerAdapter();
+        assert(sa != null);
+
+        ServletRequest request = pageContext.getRequest();
+
+        try {
+            // check to see if we are supposed to report the error
+            boolean prodMode = sa.isInProductionMode();
+            if (prodMode && !_alwaysReport)
+                return SKIP_BODY;
+
+            LinkedHashMap map = (LinkedHashMap)
+                    InternalUtils.getBindingUpdateErrors(request);
+
+            if (map == null)
+                return SKIP_BODY;
+
+            if (_expression != null) {
+                String expr = "{" + _expression + "}";
+                BindingUpdateError err = (BindingUpdateError) map.get(expr);
+                if (err != null) {
+                    Throwable cause = err.getCause();
+                    String msg = (cause != null) ? cause.getMessage() :
+                            err.getMessage();
+                    String s = Bundle.getString("Tags_BindingUpdateError",
+                            new Object[]{_expression, msg});
+                    registerTagError(s, null);
+                    reportErrors();
+                }
+                return SKIP_BODY;
+            }
+
+            Iterator it = map.values().iterator();
+            while (it.hasNext()) {
+                BindingUpdateError err = (BindingUpdateError) it.next();
+                Throwable cause = err.getCause();
+                String msg = (cause != null) ? cause.getMessage() :
+                        err.getMessage();
+                String s = Bundle.getString("Tags_BindingUpdateError",
+                        new Object[]{err.getExpression(), msg});
+                registerTagError(s, null);
+            }
+            reportErrors();
+            return SKIP_BODY;
+        }
+        finally {
+            localRelease();
+        }
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _expression = null;
+        _alwaysReport = false;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Body.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Body.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,131 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.ScriptReporter;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.BodyTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * @netui:tag name="body" description="Output the &lt;body> container.  This tag allows the NetUI framework to output script and errors before the page is finished rendering."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.BodyRenderer" whitespace="indent"
+ */
+public class Body extends HtmlBaseTag
+{
+    // @todo: need to support all of the attributes.
+    BodyTag.State _state = new BodyTag.State();
+    String _text;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Body";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Process the start of the Button.
+     * @throws javax.servlet.jsp.JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content of the Anchor.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (bodyContent != null) {
+            _text = bodyContent.getString();
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the button.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        StringBuilder results = new StringBuilder(16);
+
+        // render the header...
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.BODY_TAG,
+                pageContext.getRequest());
+        br.doStartTag(results, _state);
+
+        // if there were errors lets report them.
+        if (hasErrors()) {
+            reportErrors();
+        }
+
+        results.append(_text);
+
+        ScriptReporter sr = getScriptReporter();
+        if (sr != null) {
+            if (!sr.isInitScriptWritten()) {
+                String s = Bundle.getString("Tags_ClientReqScriptHeader", null);
+                registerTagError(s, null);
+            }
+
+            // write out any errors
+            reportCollectedErrors(results);
+
+            // write out the script before the end tag.
+            // @todo: need to think about legacy support.  This is a new tag so we can break legacy support.
+            if (!sr.isLegacy() && sr.isInitScriptWritten()) {
+                sr.writeScript(results);
+            }
+        }
+
+        br.doEndTag(results);
+        write(results.toString());
+
+        // Evaluate the remainder of this page
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    public void localRelease()
+    {
+        super.localRelease();
+        _state.clear();
+        _text = null;
+    }
+
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Button.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Button.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,319 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.IHtmlAccessable;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.InputSubmitTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.ParamHelper;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Generates a button on the page with the specified attributes.  The
+ * &lt;netui:button> tag must be enclosed in &lt;netui:form...> ...
+ * &lt;/netui:form> tags. You can specify the action that the form will
+ * raise on the &lt;netui:form> tag.
+ *
+ *
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">action</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The overriding action caused by pressing this button.</td></tr>
+ * <tr><th rowspan="2">alt</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Define the alt attribute of the &lt;Input> element.</td></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A boolean value which if true will cause the Button to be disabled.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this button used by the enclosing html tag to get the tag's real ID attribute for javascript and focus purposes. The real ID attribute id is generated based upon this name.</td></tr>
+ * <tr><th rowspan="2">type</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The type of button this is (defaults to 'submit').</td></tr>
+ * <tr><th rowspan="2">value</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The label of this button.</td></tr>
+ *
+ * </table>
+ * @example In this sample, a button that has the value "Home" will submit when the user
+ * clicks it, raising the "done" action on the form. In the page flow controller class,
+ * the done action will be invoked.
+ * <pre>
+ * &lt;p>&lt;b>Return to Home Page&lt;/b>&nbsp;&nbsp;
+ *     &lt;netui:form action="done">
+ *        &lt;netui:button value="Home" type="submit"/>
+ *     &lt;/netui:form>
+ * &lt;/p>
+ * </pre>
+ *
+ * @see Form
+ *
+ * @netui:tag name="button" description="Create a button on your JSP page."
+ * @netui.tldx:tag requiredchild="parameter parameterMap, attribute" renderer="workshop.netui.jspdesigner.tldx.ButtonRenderer" bodycontentpref="empty" whitespace="indent"
+ */
+public class Button
+        extends HtmlFocusBaseTag
+        implements URLParams, IHtmlAccessable
+{
+    public static final String ACTION_OVERRIDE = "actionOverride:";
+
+    private InputSubmitTag.State _state = new InputSubmitTag.State();
+
+    private String _action;                // The action which will override the action on the form
+    private String _value;                 // The text of the button (this will override any body text).
+    private Map _params;                   // Any parameters to the submit
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Button";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>type</code>
+     * and <code>value</code> attributes.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null && (name.equals(TYPE) || name.equals(VALUE))) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Set the name of the action for the Button.
+     * @param action - the name of the action to set for the Button.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute reftype="netui-action-url"
+     */
+    public void setAction(String action)
+    {
+        _action = action;
+    }
+
+    /**
+     * Set the type of the Button (submit, button, or reset).
+     * @param type - the type of the Button.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setType(String type)
+    {
+        // @todo: we need to validate that the type is legal
+        _state.type = type;
+    }
+
+    /**
+     * Set the value of the Button's text.
+     * @param value - the value of the Button's text.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setValue(String value)
+            throws JspException
+    {
+        _value = value;
+    }
+
+    /**
+     * Adds a URL parameter to the generated hyperlink.
+     * @param name  - the name of the parameter to be added.
+     * @param value - the value of the parameter to be added (a String or String[]).
+     */
+    public void addParameter(String name, Object value)
+            throws JspException
+    {
+        if (_params == null) {
+            _params = new HashMap();
+        }
+        ParamHelper.addParam(_params, name, value);
+    }
+
+    /**
+     * Process the start of the Button.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the associated button label from the body content (if any).
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody()
+            throws JspException
+    {
+        if (bodyContent != null) {
+            String text = bodyContent.getString().trim();
+            bodyContent.clearBody();
+            if (text.length() <= 0)
+                text = null;
+            if (_value == null)
+                _value = text;
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the button.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        String idScript = null;
+
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+
+        // Acquire the label value we will be generating
+        if ((_value == null) || (_value.trim().length() < 1))
+            _value = Bundle.getString("Tags_ButtonText", null);
+        if ((_state.value == null) || (_state.value.trim().length() < 1))
+            _state.value = _value;
+
+        // Generate an HTML element
+        StringBuilder results = new StringBuilder(128);
+        _state.disabled = isDisabled();
+
+        if (_action != null) {
+            boolean isAction = PageflowTagUtils.isAction(request, response, pageContext.getServletContext(), _action);
+            if (isAction) {
+                String overrideAction = ACTION_OVERRIDE + _action;
+                overrideAction = HtmlUtils.addParams(overrideAction, _params, response.getCharacterEncoding());
+                String buttonOutput = URLRewriterService.rewriteName(pageContext.getServletContext(),
+                        pageContext.getRequest(), overrideAction);
+                if (buttonOutput.indexOf(";") > -1) {
+                    buttonOutput = buttonOutput.substring(0, buttonOutput.indexOf(";"));
+                }
+                _state.name = buttonOutput;
+
+                // don't write the id attribute
+                idScript = renderTagId(_state, buttonOutput, false, true);
+            }
+            else {
+                // set the error because the action is invalid
+                registerTagError(Bundle.getString("Tags_BadAction", _action), null);
+            }
+        }
+        else {
+            idScript = renderTagId(_state, null, true, true);
+        }
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_SUBMIT_TAG, request);
+        br.doStartTag(results, _state);
+
+        if (idScript != null)
+            results.append(idScript);
+
+        write(results.toString());
+
+        // Evaluate the remainder of this page
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _action = null;
+        _value = null;
+        _params = null;
+    }
+
+    /* ==================================================================
+     *
+     * This tag's publically exposed HTML, CSS, and JavaScript attributes
+     *
+     * ==================================================================
+     */
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false"  rtexprvalue="true" type="char"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAccessKey(char accessKey)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the alt attribute value.
+     * @param alt - the alt value.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAlt(String alt)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false" rtexprvalue="true" type="int"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(int tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, Integer.toString(tabindex));
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBox.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBox.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,417 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.ProcessPopulate;
+import org.apache.beehive.netui.pageflow.RequestParameterHandler;
+import org.apache.beehive.netui.tags.IHtmlAccessable;
+import org.apache.beehive.netui.tags.naming.FormDataNameInterceptor;
+import org.apache.beehive.netui.tags.naming.IndexedNameInterceptor;
+import org.apache.beehive.netui.tags.naming.PrefixNameInterceptor;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.InputBooleanTag;
+import org.apache.beehive.netui.tags.rendering.InputHiddenTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Generates a checkbox which binds to a form bean property or databound expression.
+ * CheckBox should be used on its own and not within a CheckBoxGroup.  CheckBox ignores its
+ * body content.
+ *
+ * CheckBoxes can bind to boolean, Boolean, and Strings.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">alt</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Define the alt attribute of the &lt;Input> element.</td></tr>
+ * <tr><th rowspan="2">dataSource</th><td>Yes</td><td>No</td><td>Read / Write</td></tr>
+ * <tr><td colspan="3">The name of a form bean property or an expression that resolves
+ * to a bean property.</td></tr>
+ * <tr><th rowspan="2">defaultValue</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal value or an expression that resolves to a bean property.</td></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A boolean value which if true will cause the CheckBox to be disabled.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this button used by the enclosing html tag to get the tag's
+ * real ID attribute for javascript and focus purposes. The real ID attribute id is generated
+ * based upon this name.</td></tr>
+ * </table>
+ * @example In this sample, a standalone CheckBox reads from, and writes to, the form bean's
+ * <code>showBorder</code> property, and uses the page flow's <code>defaultShowBorder</code>
+ * if this is the first time the CheckBox is being viewed.
+ * <pre>
+ * &lt;netui:checkBox dataSource="{actionForm.showBorder}" defaultValue="{pageFlow.defaultShowBorder}" />
+ * </pre>
+ *
+ * @see CheckBoxGroup
+ * @see CheckBoxOption
+ *
+ * @netui:tag name="checkBox" description="Generates a checkbox that binds to a form bean property or databound expression."
+ * @netui.tldx:tag requiredchild="attribute" renderer="workshop.netui.jspdesigner.tldx.CheckboxRenderer"
+ * bodycontentpref="empty" whitespace="indent"
+ * illegalancestor="checkBoxGroup"
+ */
+public class CheckBox
+        extends HtmlDefaultableDataSourceTag
+        implements IHtmlAccessable
+{
+    private static final Logger logger = Logger.getInstance(CheckBox.class);
+
+    private InputBooleanTag.State _state = new InputBooleanTag.State();
+    private InputHiddenTag.State _hiddenState = new InputHiddenTag.State();
+
+    private static final String CHECKBOX_KEY = "checkbox_key";
+    private static final String OLDVALUE_SUFFIX = "OldValue";
+
+    private static final List _internalNamingChain;
+
+    static
+    {
+        List l = new ArrayList(3);
+        l.add(new FormDataNameInterceptor());
+        l.add(new IndexedNameInterceptor());
+        l.add(new PrefixNameInterceptor(CHECKBOX_KEY));
+        _internalNamingChain = Collections.unmodifiableList(l);
+    }
+
+    static
+    {
+        org.apache.beehive.netui.pageflow.ProcessPopulate.registerPrefixHandler(CHECKBOX_KEY, new CheckBoxPrefixHandler());
+    }
+
+    /**
+     * The handler for naming and indexing the CheckBox.
+     */
+    private static class CheckBoxPrefixHandler
+            implements RequestParameterHandler
+    {
+        /**
+         * Determines the current state of the CheckBox (true or false) based on the Request.
+         */
+        public void process(HttpServletRequest request, String key, ProcessPopulate.ExpressionUpdateNode node)
+        {
+            String returnVal = null;
+            if (!key.endsWith(OLDVALUE_SUFFIX)) {
+                //This checkbox is true and should stay that way
+                returnVal = "true";
+            }
+            else {
+                //Check the request to see if checkBox also exists
+                String newKey = key.substring(0, key.indexOf(OLDVALUE_SUFFIX));
+                String checkBox = request.getParameter(newKey);
+                if (checkBox != null) {
+                    returnVal = "true";
+                }
+                else {
+                    returnVal = "false";
+                }
+            }
+
+            if (node.expression.endsWith(OLDVALUE_SUFFIX)) {
+                node.expression = node.expression.substring(0, node.expression.indexOf(OLDVALUE_SUFFIX));
+
+            }
+            node.values = new String[]{returnVal};
+
+            if (logger.isDebugEnabled()) {
+                logger.debug("*********************************************\n" +
+                        "process with key \"" + key + "\" and expression \"" + node.expression + "\"" + "and result: " + returnVal + "\n" +
+                        "*********************************************\n");
+            }
+        }
+    }
+
+    public CheckBox()
+    {
+        super();
+    }
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "CheckBox";
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>type</code>,
+     * <code>checked</code> and <code>value</code> attributes.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null) {
+            if (name.equals(TYPE) || name.equals(VALUE) || name.equals(CHECKED)) {
+                String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+                registerTagError(s, null);
+            }
+            else {
+                if (name.equals(DISABLED)) {
+                    _state.disabled = true;
+                    return;
+                }
+            }
+        }
+
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Return an <code>ArrayList</code> which represents a chain of <code>NameInterceptor</code>
+     * objects.  This method by default returns <code>null</code> and should be overridden
+     * by objects that support naming.
+     * @return an <code>ArrayList</code> that will contain <code>NameInterceptor</code> objects.
+     */
+    protected List getNamingChain()
+    {
+        return _internalNamingChain;
+    }
+
+    /**
+     * @return
+     */
+    public boolean evaluateDefaultValue()
+            throws JspException
+    {
+        if (_defaultValue instanceof String)
+            return Boolean.valueOf((String) _defaultValue).booleanValue();
+        if (_defaultValue instanceof Boolean)
+            return ((Boolean) _defaultValue).booleanValue();
+        return false;
+    }
+
+    /**
+     * Render the checkbox.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content of the checkbox.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+
+        if (bodyContent != null) {
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the checkbox.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        String idScript = null;
+
+        Tag parent = getParent();
+        // @todo: see if we can move this to below....
+        if (parent instanceof CheckBoxGroup) {
+            registerTagError(Bundle.getString("Tags_CheckBoxGroupChildError"), null);
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        Object val = evaluateDataSource();
+        // if there were expression errors report them
+        // @todo: see if we can move this to below
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        String realName = doNaming();
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        String hiddenParamName = realName + OLDVALUE_SUFFIX;
+
+        // @todo: should we not support the "on" version of this?
+        if (val instanceof String) {
+            if (val != null && (val.equals("on") || val.equals("true")))
+                _state.checked = true;
+            else
+                _state.checked = false;
+        }
+        else if (val instanceof Boolean) {
+            _state.checked = ((Boolean) val).booleanValue();
+        }
+        else {
+            String oldCheckBoxValue = pageContext.getRequest().getParameter(hiddenParamName);
+            if (oldCheckBoxValue != null) {
+                _state.checked = new Boolean(oldCheckBoxValue).booleanValue();
+            }
+            else {
+                _state.checked = evaluateDefaultValue();
+            }
+        }
+        _state.disabled = isDisabled();
+
+        ServletRequest req = pageContext.getRequest();
+        StringBuilder results = new StringBuilder(128);
+        idScript = renderTagId(_state, realName, false, true);
+
+        //Create a hidden field to store the CheckBox oldValue
+        String oldValue = pageContext.getRequest().getParameter(realName);
+
+        // if the checkbox is disabled we need to not right out the hidden
+        // field because it can cause the default state to change from
+        // true to false.  Disabled check boxes do not postback.
+        if (!_state.disabled) {
+            _hiddenState.name = hiddenParamName;
+            if (oldValue == null) {
+                _hiddenState.value = "false";
+            }
+            else {
+                _hiddenState.value = oldValue;
+            }
+            TagRenderingBase hiddenTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_HIDDEN_TAG, req);
+            hiddenTag.doStartTag(results, _hiddenState);
+            hiddenTag.doEndTag(results);
+        }
+
+        /*
+        if (_state.checked) {
+            String oldCheckBoxValue = pageContext.getRequest().getParameter(hiddenParamName);
+            if (oldCheckBoxValue != null) {
+                _state.checked = new Boolean(oldCheckBoxValue).booleanValue();
+            }
+            else {
+                _state.checked = evaluateDefaultValue();
+            }
+        }
+        */
+
+        _state.type = INPUT_CHECKBOX;
+
+        if (_dataSource != null)
+            _state.name = realName;
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_BOOLEAN_TAG, req);
+        br.doStartTag(results, _state);
+
+        if (idScript != null)
+            results.append(idScript);
+
+        write(results.toString());
+
+        // Continue processing this page
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _hiddenState.clear();
+    }
+
+    /* ==================================================================
+     *
+     * This tag's publically exposed HTML, CSS, and JavaScript attributes
+     *
+     * ==================================================================
+     */
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true"  type="char"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAccessKey(char accessKey)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the alt attribute value.
+     * @param alt - the alt value.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAlt(String alt)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false"  rtexprvalue="true"  type="int"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(int tabindex)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, Integer.toString(tabindex));
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBoxGroup.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBoxGroup.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,582 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.ProcessPopulate;
+import org.apache.beehive.netui.tags.naming.FormDataNameInterceptor;
+import org.apache.beehive.netui.tags.naming.IndexedNameInterceptor;
+import org.apache.beehive.netui.tags.naming.PrefixNameInterceptor;
+import org.apache.beehive.netui.tags.rendering.ConstantRendering;
+import org.apache.beehive.netui.tags.rendering.InputHiddenTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.iterator.IteratorFactory;
+import org.apache.beehive.netui.util.iterator.IteratorFactoryException;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.tags.GroupOption;
+import org.apache.beehive.netui.script.common.DataAccessProviderBean;
+import org.apache.beehive.netui.script.common.DataAccessProviderStack;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.*;
+
+/**
+ * Groups a collection of CheckBoxOptions, and handles databinding of their values.
+ *
+ * CheckBoxGroup binds to an Iterator of Strings.
+ *
+ * If CheckBoxGroup uses any Format tags, it must have those tags come before any nested
+ * CheckBoxOption tags.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">dataSource</th><td>Yes</td><td>No</td><td>Read / Write</td></tr>
+ * <tr><td colspan="3">The name of a form bean property or an expression that contains the CheckBoxGroup state.</td></tr>
+ * <tr><th rowspan="2">defaultValue</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal value or an expression that is used to set the CheckBoxGroup's
+ * initial state.</td></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A boolean value which if true will cause the CheckBoxGroup to be disabled.</td></tr>
+ * <tr><th rowspan="2">labelStyle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The style of the label for each contained CheckBoxOption.</td></tr>
+ * <tr><th rowspan="2">labelStyleClass</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The style class of the label for each contained CheckBoxOption.</td></tr>
+ * <tr><th rowspan="2">optionsDataSource</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An expression that is used to generate a set of dynamic CheckBoxOptions.  If the underlying type is a <code>org.apache.beehive.netui.tags.GroupOption</code> the name, value, alt and accesskey may be individually set.  If the underlying type is a <code>Map</code> the name and value may be set individually.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this button used by the enclosing html tag to get the tag's real ID attribute for Javascript and focus purposes. The real ID attribute id is generated based upon this name.</td></tr>
+ * </table>
+ * @example In this first sample, a CheckBoxGroup has a set of CheckBoxOptions drawn from the page flow's
+ * colors property, uses the page flow's <code>defaultPreferredColors</code> as a set of
+ * defaults if no preferredColors have been selected, and writes the selected preferred
+ * colors to the form bean's <code>preferredColors</code> property.
+ * <pre>
+ * &lt;netui:checkBoxGroup dataSource="{actionForm.preferredColors}"
+ *           defaultValue="{pageFlow.defaultPreferredColors}"
+ *           optionsDataSource="{pageFlow.colors} />
+ * </pre>
+ * <p>In the next sample, the <code>{actionForm.states}</code> expression references the list
+ * of currently selected states.  If there are none, the default value,
+ * <code>{actionForm.defaultState}</code>, is used. The <code>{pageFlow.availableStates}</code>
+ * expression references the list of choices to render in the checkboxes. In this example,
+ * the display text and POST value are the same.</p>
+ * <pre>
+ * &lt;netui:checkBoxGroup dataSource="{actionForm.states}"
+ *        optionsDataSource="{pageFlow.availableStates}"
+ *        defaultValue="{actionForm.defaultState}"/>
+ * </pre>
+ *
+ * @see CheckBox
+ * @see CheckBoxOption
+ *
+ * @netui:tag name="checkBoxGroup" description="Groups a collection of CheckBoxOptions, and handles databinding of their values."
+ * @netui.tldx:tag whitespace="indent"
+ * renderer="workshop.netui.jspdesigner.tldx.CheckboxGroupRenderer"
+ */
+public class CheckBoxGroup
+        extends HtmlGroupBaseTag
+{
+    // @todo: seems like we should write out the hidden field even if the option is disabled.
+    private static final Logger logger = Logger.getInstance(CheckBoxGroup.class);
+
+    /**
+     * This is the name of the prefixHandler for the checkbox grup.
+     */
+    public static final String CHECKBOXGROUP_KEY = "checkbox_group_key";
+
+    private static final String OLDVALUE_SUFFIX = "OldValue";
+
+    private InputHiddenTag.State _state = new InputHiddenTag.State();
+    private InputHiddenTag.State _hiddenState = new InputHiddenTag.State();
+
+    private List _defaultSelections;
+    private String[] _match;                 // The actual values we will match against, calculated in doStartTag().
+    private Object _dynamicAttrs;            // the Object
+    private StringBuilder _saveBody;
+
+    private static final List _internalNamingChain;
+
+    static
+    {
+        List l = new ArrayList(3);
+        l.add(new FormDataNameInterceptor());
+        l.add(new IndexedNameInterceptor());
+        l.add(new PrefixNameInterceptor(CHECKBOXGROUP_KEY));
+        _internalNamingChain = Collections.unmodifiableList(l);
+    }
+
+    static
+    {
+        org.apache.beehive.netui.pageflow.ProcessPopulate.registerPrefixHandler(CHECKBOXGROUP_KEY, new CheckboxGroupPrefixHandler());
+    }
+
+    /**
+     * The handler for naming and indexing the CheckBoxGroup.
+     */
+    private static class CheckboxGroupPrefixHandler
+            implements org.apache.beehive.netui.pageflow.RequestParameterHandler
+    {
+        /**
+         * Determines the current state of the CheckBoxGroup based on the Request.
+         */
+        public void process(HttpServletRequest request, String key, ProcessPopulate.ExpressionUpdateNode node)
+        {
+            String[] returnArray = null;
+
+            if (!key.endsWith(OLDVALUE_SUFFIX)) {
+                //This select has values and should stay that way
+                returnArray = request.getParameterValues(key);
+            }
+            else {
+                //Check the request to see if select also exists
+                String newKey = key.substring(0, key.indexOf(OLDVALUE_SUFFIX));
+                String[] select = request.getParameterValues(newKey);
+                if (select != null) {
+                    returnArray = select;
+                }
+                else {
+                    returnArray = new String[0]; //null;
+                }
+            }
+
+            if (node.expression.endsWith(OLDVALUE_SUFFIX)) {
+                node.expression = node.expression.substring(0, node.expression.indexOf(OLDVALUE_SUFFIX));
+            }
+            node.values = returnArray;
+
+            if (logger.isDebugEnabled()) {
+                logger.debug("\n*********************************************\n" +
+                        "process with key \"" + key + "\" and expression \"" + node.expression + "\"" + "and result size: "
+                        + (returnArray != null ? "" + returnArray.length : null) + "\n" +
+                        "*********************************************\n");
+            }
+        }
+    }
+
+    public CheckBoxGroup()
+    {
+        super();
+    }
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "CheckBoxGroup";
+    }
+
+    /**
+     * Return an <code>ArrayList</code> which represents a chain of <code>NameInterceptor</code>
+     * objects.  This method by default returns <code>null</code> and should be overridden
+     * by objects that support naming.
+     * @return an <code>ArrayList</code> that will contain <code>NameInterceptor</code> objects.
+     */
+    protected List getNamingChain()
+    {
+        return _internalNamingChain;
+    }
+
+    /**
+     * Overrided method to return a list of the possible default values.  The method always return either
+     * a <code>List</code> or null.
+     * @return a <code>List</code> that represents the default value.
+     */
+    protected Object evaluateDefaultValue()
+            throws JspException
+    {
+        Object val = _defaultValue;
+
+        List defaults = null;
+        if (val instanceof String) {
+            defaults = new ArrayList();
+            defaults.add(val);
+            return defaults;
+        }
+
+        Iterator optionsIterator = null;
+        try {
+            optionsIterator = IteratorFactory.makeIterator(val);
+
+            // log an error, default value is optional so only warn
+            if (optionsIterator == null && _defaultValue != null) {
+                logger.warn(Bundle.getString("Tags_IteratorError",
+                        new Object[]{getTagName(), "defaultValue", _defaultValue}));
+            }
+            if (optionsIterator == null)
+                optionsIterator = IteratorFactory.EMPTY_ITERATOR;
+        }
+        catch (IteratorFactoryException ife) {
+            String s = Bundle.getString("Tags_Iteration_Error",
+                    new Object[]{ife.getTypeName()});
+            registerTagError(s, null);
+            return null;
+        }
+
+        defaults = new ArrayList();
+        while (optionsIterator.hasNext()) {
+            defaults.add(optionsIterator.next());
+        }
+
+        return defaults;
+    }
+
+    /**
+     * Checks whether the given value matches one of the CheckBoxGroup's selected
+     * CheckBoxOptions.
+     * @param value Value to be compared
+     */
+    public boolean isMatched(String value)
+    {
+        if (value == null)
+            return false;
+
+        if (_match != null) {
+            for (int i = 0; i < _match.length; i++) {
+                if (value.equals(_match[i]))
+                    return true;
+            }
+        }
+        else {
+            if (_defaultSelections != null)
+                return _defaultSelections.contains(value);
+        }
+
+        return false;
+    }
+
+
+    /**
+     * Determine the set of matches for the CheckBoxGroup
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        ServletRequest req = pageContext.getRequest();
+        ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+
+        // get the evaluated dataSource and default values
+        Object val = evaluateDataSource();
+        _defaultSelections = (List) evaluateDefaultValue();
+        if (hasErrors()) {
+            reportErrors();
+            return SKIP_BODY;
+        }
+
+        // process the default values and create the matching array...
+        if (val != null) {
+            buildMatch(val);
+            if (hasErrors()) {
+                reportErrors();
+                return SKIP_BODY;
+            }
+        }
+
+        // if the checkbox group is disabled do not write out the
+        // hidden field.
+        StringBuilder results = new StringBuilder(64);
+        if (!_repeater &&  !_disabled) {
+
+            //Create hidden field for state tracking
+            _state.clear();
+            String hiddenParamName = null;
+            hiddenParamName = getQualifiedDataSourceName() + OLDVALUE_SUFFIX;
+            _state.name = hiddenParamName;
+            _state.value = "true";
+
+            TagRenderingBase hiddenTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_HIDDEN_TAG, req);
+            hiddenTag.doStartTag(results, _state);
+            hiddenTag.doEndTag(results);
+        }
+
+        if (isVertical())
+            cr.TABLE(results);
+
+        // if this is a repeater then we shouid prime the pump...
+        _dynamicAttrs = evaluateOptionsDataSource();
+        assert (_dynamicAttrs != null);
+        assert (_dynamicAttrs instanceof Map ||
+                _dynamicAttrs instanceof Iterator);
+
+        if (_repeater) {
+            if (!(_dynamicAttrs instanceof Iterator)) {
+                String s = Bundle.getString("Tags_OptionsDSIteratorError");
+                registerTagError(s, null);
+                return SKIP_BODY;
+            }
+            while (((Iterator) _dynamicAttrs).hasNext()) {
+                _repCurItem = ((Iterator) _dynamicAttrs).next();
+                if (_repCurItem != null)
+                    break;
+            }
+            if (isVertical())
+                cr.TR_TD(results);
+
+            DataAccessProviderStack.addDataAccessProvider(this, pageContext);
+        }
+        _saveBody = new StringBuilder(128);
+
+        // Continue processing this page
+        write(results.toString());
+        return EVAL_BODY_BUFFERED;
+
+    }
+
+    /**
+     * Save any body content of this tag, which will generally be the
+     * option(s) representing the values displayed to the user.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (hasErrors()) {
+            return SKIP_BODY;
+        }
+
+        ServletRequest req = pageContext.getRequest();
+        ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+
+        if (bodyContent != null) {
+            String value = bodyContent.getString();
+            bodyContent.clearBody();
+            if (value == null)
+                value = "";
+            _saveBody.append(value);
+        }
+
+        if (_repeater) {
+            if (isVertical())
+                cr.end_TD_TR(_saveBody);
+
+            while (((Iterator) _dynamicAttrs).hasNext()) {
+                _repCurItem = ((Iterator) _dynamicAttrs).next();
+                if (_repCurItem != null) {
+                    _repIdx++;
+                    if (isVertical())
+                        cr.TR_TD(_saveBody);
+
+                    return EVAL_BODY_AGAIN;
+                }
+            }
+        }
+
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the set of CheckBoxOptions.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        ServletRequest req = pageContext.getRequest();
+        ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+        StringBuilder results = new StringBuilder(128);
+
+        // report an error that occurred processing the body.
+        if (hasErrors()) {
+            reportErrors();
+            //if (isVertical())
+            //    cr.TR_TD(results);
+            //reportErrors();
+            //results.append(_saveBody);
+            //if (isVertical()) {
+            //    cr.end_TD_TR(results);
+            //    cr.end_TABLE(results);
+            //}
+            //write(results.toString());
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        String idScript = null;
+        String altText = null;
+        String accessKey = null;
+
+
+        // Render a tag representing the end of our current form
+        if (_saveBody != null)
+            results.append(_saveBody);
+
+        if (_repeater) {
+            // Render a tag representing the end of our current form
+            if (isVertical())
+                cr.end_TABLE(results);
+
+            if (idScript != null)
+                results.append(idScript);
+
+            write(results.toString());
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        assert(_dynamicAttrs != null);
+        if (_dynamicAttrs instanceof Map) {
+            Map dynamicCheckboxesMap = (Map) _dynamicAttrs;
+            Iterator keyIterator = dynamicCheckboxesMap.keySet().iterator();
+            int idx = 0;
+            while (keyIterator.hasNext()) {
+                Object optionValue = keyIterator.next();
+                String optionDisplay = "";
+                if (dynamicCheckboxesMap.get(optionValue) != null)
+                    optionDisplay = dynamicCheckboxesMap.get(optionValue).toString();
+                addOption(results, INPUT_CHECKBOX, optionValue.toString(), optionDisplay, idx++, altText, accessKey, _disabled);
+
+                if (hasErrors()) {
+                    reportErrors();
+                    if (isVertical()) {
+                        cr.end_TABLE(results);
+                        write(results.toString());
+                    }
+                    localRelease();
+                    return EVAL_PAGE;
+                }
+                results.append("\n");
+            }
+        }
+        else {
+            assert(_dynamicAttrs instanceof Iterator);
+            Iterator it = (Iterator) _dynamicAttrs;
+            int idx = 0;
+            while (it.hasNext()) {
+                Object o = it.next();
+                if (o == null)
+                    continue;
+
+                if (o instanceof GroupOption) {
+                    GroupOption go = (GroupOption) o;
+                    addOption(results, INPUT_CHECKBOX, go.getValue(), go.getName(), idx++, go.getAlt(), go.getAccessKey(), _disabled);
+                }
+                else {
+                    String checkboxValue = o.toString();
+                    addOption(results, INPUT_CHECKBOX, checkboxValue, checkboxValue, idx++, altText, accessKey, _disabled);
+                }
+
+                if (hasErrors()) {
+                    reportErrors();
+                    if (isVertical()) {
+                        cr.end_TABLE(results);
+                        write(results.toString());
+                    }
+                    localRelease();
+                    return EVAL_PAGE;
+                }
+                results.append("\n");
+            }
+        }
+
+        if (isVertical())
+            cr.end_TABLE(results);
+
+        if (idScript != null)
+            results.append(idScript);
+
+        write(results.toString());
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    public void createHiddenField(StringBuilder results)
+            throws JspException
+    {
+        if (_repIdx == 0 && !_disabled) {
+
+            ServletRequest req = pageContext.getRequest();
+
+            //Create hidden field for state tracking
+            String hiddenParamName = null;
+            hiddenParamName = getQualifiedDataSourceName() + OLDVALUE_SUFFIX;
+            _hiddenState.name = hiddenParamName;
+            _hiddenState.value = "true";
+
+            TagRenderingBase hiddenTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_HIDDEN_TAG, req);
+            hiddenTag.doStartTag(results, _hiddenState);
+            hiddenTag.doEndTag(results);
+        }
+
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        if(_repeater)
+            DataAccessProviderStack.removeDataAccessProvider(pageContext);
+
+        super.localRelease();
+
+        _defaultSelections = null;
+        _match = null;
+        _dynamicAttrs = null;
+        _saveBody = null;
+    }
+
+    // This method will build the match list, should this be a hashmap?
+    private void buildMatch(Object val)
+            throws JspException
+    {
+        if (val instanceof String[]) {
+            _match = (String[]) val;
+        }
+        else {
+            Iterator matchIterator = null;
+            try {
+                // this should return null, but we should handle it it does
+                matchIterator = IteratorFactory.makeIterator(val);
+                if (matchIterator == null)
+                    matchIterator = IteratorFactory.EMPTY_ITERATOR;
+            }
+            catch (IteratorFactoryException ife) {
+                String s = Bundle.getString("Tags_Iteration_Error",
+                        new Object[]{ife.getTypeName()});
+                registerTagError(s, null);
+            }
+
+            List matchList = new ArrayList();
+            while (matchIterator.hasNext()) {
+                Object o = matchIterator.next();
+                if (o != null)
+                    matchList.add(o.toString());
+            }
+            int size = matchList.size();
+
+            _match = new String[size];
+            for (int i = 0; i < size; i++) {
+                _match[i] = matchList.get(i).toString();
+            }
+        }
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("****** CheckboxGroup Matches ******");
+            if (_match != null) {
+                for (int i = 0; i < _match.length; i++) {
+                    logger.debug(i + ": " + _match[i]);
+                }
+            }
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBoxOption.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/CheckBoxOption.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,330 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+// java imports
+
+import org.apache.beehive.netui.tags.IHtmlAccessable;
+import org.apache.beehive.netui.tags.rendering.*;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+// external imports
+
+/**
+ * A checkbox whose state is determined by its enclosing CheckBoxGroup.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">action</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The overriding action caused by pressing this button.</td></tr>
+ * <tr><th rowspan="2">labelStyle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The style of the label for each contained CheckBoxOption</td></tr>
+ * <tr><th rowspan="2">labelStyleClass</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The style class of the label for each contained CheckBoxOption</td></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An expression to a bean property, or a literal, which is the value of this option</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, a CheckBoxOption (within a CheckBoxGroup) displays a label
+ * and has a value of "Red".
+ * <pre>&lt;netui:checkBoxOption value="Red" /></pre>
+ *
+ * @see CheckBox
+ * @see CheckBoxGroup
+ *
+ * @netui:tag name="checkBoxOption" description="A checkbox whose state is determined by its enclosing CheckBoxGroup."
+ * @netui.tldx:tag requiredparent="checkBoxGroup"
+ * whitespace="indent"
+ * renderer="workshop.netui.jspdesigner.tldx.CheckboxOptionRenderer"
+ * @netui:attribute name="tagId" hide="true"
+ * @netui.tldx:tag
+ */
+public class CheckBoxOption extends HtmlFocusBaseTag
+        implements IHtmlAccessable
+{
+    private InputBooleanTag.State _state = new InputBooleanTag.State();
+    private SpanTag.State _spanState = new SpanTag.State();
+    private String _text;        // The message text to be displayed to the user for this tag (if any)
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "CheckBoxOption";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>type</code>
+     * and <code>value</code> attribute.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null) {
+            if (name.equals(TYPE) || name.equals(VALUE) || name.equals(CHECKED)) {
+                String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+                registerTagError(s, null);
+            }
+            else {
+                _state.disabled = new Boolean(value).booleanValue();
+                return;
+            }
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Set the label style for each contained CheckBoxOption.
+     * The label style here will override a labelStyle at the CheckBoxGroup level.
+     * @param labelStyle - the label style
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="format" propertyclass="workshop.jspdesigner.properties.JspStyleProperty"
+     */
+    public void setLabelStyle(String labelStyle)
+    {
+        _spanState.style = labelStyle;
+    }
+
+    /**
+     * Set the label style class for each contained CheckBoxOption.
+     * The label style class here will override a labelStyleClass at the CheckBoxGroup level.
+     * @param labelStyleClass - the label style
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="format"
+     */
+    public void setLabelStyleClass(String labelStyleClass)
+    {
+        _spanState.styleClass = labelStyleClass;
+    }
+
+    /**
+     * Set the value of this CheckBoxOption.
+     * @param value - the CheckBoxOption value
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setValue(Object value)
+            throws JspException
+    {
+        if (value != null)
+            _state.value = value.toString();
+        else
+            _state.value = null;
+    }
+
+    /**
+     * Process the start of this tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+
+        // verify that the parent is a CheckBoxGroup
+        Tag parentTag = getParent();
+        if (!(parentTag instanceof CheckBoxGroup)) {
+            String s = Bundle.getString("Tags_CheckBoxOptionNoCheckBoxGroup");
+            registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        CheckBoxGroup parent = (CheckBoxGroup) parentTag;
+        if ((parent.getOptionsDataSource() != null && !parent.isRepeater())) {
+            String s = Bundle.getString("Tags_CheckBoxOptionParentHasOptionsDataSource");
+            parent.registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        // Do nothing until doEndTag() is called
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Process the body text of this tag (if any).
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+
+        String text = bodyContent.getString();
+        if (text != null) {
+            bodyContent.clearBody();
+            text = text.trim();
+            if (text.length() > 0)
+                _text = text;
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Process the end of this tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // we verified that the parent was a CheckboxGroup in the doBeginTag()
+        ServletRequest req = pageContext.getRequest();
+        CheckBoxGroup parent = (CheckBoxGroup) getParent();
+        ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+        boolean repeat = parent.isRepeater();
+
+        // StringBuffer for the results
+        StringBuilder results = new StringBuilder(128);
+        if (!repeat && parent.isVertical()) {
+            cr.TR_TD(results);
+        }
+
+        _state.type = INPUT_CHECKBOX;
+        _state.name = parent.getQualifiedDataSourceName();
+
+        // Disabled on the option itself will override the parent setting this.
+        // We check to see if the option actuall had disabled set on it, if not then look
+        // at the parent.
+
+        if (parent.isMatched(_state.value))
+            _state.checked = true;
+        _state.disabled = isDisabled();
+        if (!_state.disabled)
+            _state.disabled = parent.isDisabled();
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_BOOLEAN_TAG, req);
+        br.doStartTag(results, _state);
+        br.doEndTag(results);
+
+        if (repeat &&! parent.isDisabled()) {
+            parent.createHiddenField(results);
+        }
+
+        // if this is in a repeater, then we only output the <input tag>
+        if (repeat) {
+            write(results.toString());
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        if (_spanState.style == null) {
+            _spanState.style = parent.getLabelStyle();
+        }
+        if (_spanState.styleClass == null) {
+            _spanState.styleClass = parent.getLabelStyleClass();
+        }
+
+        TagRenderingBase spanTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, req);
+        spanTag.doStartTag(results, _spanState);
+        if (_text == null)
+            results.append(_state.value);
+        else
+            results.append(_text);
+        spanTag.doEndTag(results);
+
+        if (parent.isVertical()) {
+            cr.end_TD_TR(results);
+        }
+        write(results.toString());
+
+        // Continue evaluating this page
+        localRelease();
+        return EVAL_PAGE;
+
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _spanState.clear();
+        _text = null;
+    }
+
+    /* ==================================================================
+     *
+     * This tag's publically exposed HTML, CSS, and JavaScript attributes
+     *
+     * ==================================================================
+     */
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true" type="char"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAccessKey(char accessKey)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the alt attribute value.
+     * @param alt - the alt value.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAlt(String alt)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false" rtexprvalue="true" type="int"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(int tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, Integer.toString(tabindex));
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Content.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Content.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,122 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * The Content tag is used to display text, or the result of an expression, to the page.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The expression or value to be used to output the content.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, the Content tag displays the form bean's <code>lastName</code> property.
+ * <pre>
+ * &lt;netui:content value="{actionForm.lastName}" />
+ * </pre>
+ *
+ * @netui:tag name="content" description="Used to display text or the result of an expression to the page."
+ * @netui.tldx:tag requiredchild="#nothing" renderer="workshop.netui.jspdesigner.tldx.ContentRenderer" bodycontentpref="empty"
+ */
+public class Content extends AbstractBaseTag
+{
+    // @TODO: DO, I propose that we kill this for EL expressions and c:out in JSTL
+    private static final Logger logger = Logger.getInstance(Content.class);
+
+    private static final String DEFAULT_NULL_TEXT = "";
+    private String _defaultValue = null;
+    private Object _value = null;  // The value for this content.
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Content";
+    }
+
+    /**
+     * Set the default value of this Content.
+     * @param defaultValue - the default value
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setDefaultValue(String defaultValue)
+            throws JspException
+    {
+        _defaultValue = defaultValue;
+    }
+
+    /**
+     * Set the value of this Content.
+     * @param value - the Content value
+     * @netui:attribute required="true" rtexprvalue="true" type="java.lang.Object"
+     * @netui.tldx:attribute
+     */
+    public void setValue(Object value)
+    {
+        _value = value;
+    }
+
+    /**
+     * Render the content.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        String text;
+        if (_value != null) {
+            text = _value.toString();
+        }
+        else {
+            if (_defaultValue != null) {
+                text = _defaultValue;
+            }
+            else {
+                logger.warn(Bundle.getString("Tags_ContentExpressionNull", _value));
+                text = DEFAULT_NULL_TEXT;
+            }
+        }
+
+        write(text);
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _defaultValue = null;
+        _value = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Error.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Error.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,190 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.struts.Globals;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.util.RequestUtils;
+
+import javax.servlet.jsp.JspException;
+import java.util.Iterator;
+
+/**
+ * Renders an error message with a given error key value if that key can be found in the
+ * ActionErrors registered in the <code>pageContext</code> at
+ * <code>org.apache.struts.action.Action.ERROR_KEY</code>. Error ignores its body content.
+ * <p>
+ * The following optional message keys will be utilized if corresponding
+ * messages exist for them in the application resources:
+ * <ul>
+ * <li><b>error.prefix</b> - If present, the corresponding message will be
+ * rendered before each individual error message.</li>
+ * <li><b>error.suffix</b> - If present, the corresponding message will be
+ * rendered after each individual error message.</li>
+ * </ul>
+ *
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">bundle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The message bundle where the error message can be found</td></tr>
+ * <tr><th rowspan="2">locale</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The session attribute key for the locale</td></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The value for getting the error key</td></tr>
+ *
+ * </table>
+ * @example In this sample, the "InvalidName" message from the errorMessages bundle will be used to output the error.
+ * <pre>
+ * &lt;netui:error bundle="com.project.errorMessages" value="InvalidName"/>
+ * </pre>
+ *
+ * @see Errors
+ *
+ * @netui:tag name="error" description="Renders an error message with a given error key value."
+ * @netui.tldx:tag requiredchild="#nothing" renderer="workshop.netui.jspdesigner.tldx.ErrorRenderer" bodycontentpref="empty" whitespace="indent"
+ */
+public class Error extends ErrorBaseTag
+{
+    private String _value = null; // error key name, may be an expression
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Error";
+    }
+
+    /**
+     * Set the value of the error key.
+     * @param value - the error key value
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setValue(String value)
+            throws JspException
+    {
+        _value = value;
+    }
+
+    /**
+     * Render the specified error message if it can be found.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        // Error will try an always work even if there are expression
+        // errors.  The error will be reported at the end.
+
+        // Were any error messages specified?
+        ActionErrors errors = null;
+        try {
+            errors = RequestUtils.getActionErrors(pageContext, Globals.ERROR_KEY);
+        }
+        catch (JspException e) {
+            RequestUtils.saveException(pageContext, e);
+            throw e;
+        }
+
+        if ((errors == null) || errors.isEmpty()) {
+            // report any expression errors
+            if (hasErrors())
+                reportErrors();
+
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        String qualifiedBundle = getQualifiedBundleName(_bundle);
+
+        boolean prefixPresent = false;
+        boolean suffixPresent = false;
+        String locale = _locale;
+        
+        if (!isMissingDefaultMessages(pageContext))
+        {
+            try {
+                // Check for presence of error prefix and suffix message keys
+                prefixPresent =
+                        RequestUtils.present(pageContext, qualifiedBundle, locale,
+                                "error.prefix");
+                suffixPresent =
+                        RequestUtils.present(pageContext, qualifiedBundle, locale,
+                                "error.suffix");
+            }
+            catch (JspException e) {
+                String s = Bundle.getString("Tags_ErrorsException",
+                        new Object[]{e.getMessage()});
+                registerTagError(s, null);
+                reportErrors();
+                localRelease();
+                return SKIP_BODY;
+            }
+        }
+
+        // Render the error message appropriately
+        StringBuilder results = new StringBuilder(128);
+
+        String message = null;
+        Iterator reports = null;
+        reports = errors.get(_value);
+
+        while (reports.hasNext()) {
+            ActionError report = (ActionError) reports.next();
+            if (prefixPresent) {
+                message = RequestUtils.message(pageContext, qualifiedBundle, locale, "error.prefix");
+                results.append(message);
+            }
+
+            message = getErrorMessage(report, qualifiedBundle);
+
+            if (message != null) {
+                results.append(message);
+                results.append("\r\n");
+            }
+            if (suffixPresent) {
+
+                message = RequestUtils.message(pageContext, qualifiedBundle, locale, "error.suffix");
+                results.append(message);
+            }
+        }
+
+        write(results.toString());
+
+        // report any expression errors
+        if (hasErrors())
+            reportErrors();
+
+        // Continue processing this page
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _value = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ErrorBaseTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ErrorBaseTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,217 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
+import org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig;
+import org.apache.beehive.netui.pageflow.internal.InternalConstants;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.struts.Globals;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.config.ControllerConfig;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.util.RequestUtils;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+import java.util.Locale;
+
+abstract public class ErrorBaseTag extends AbstractBaseTag
+{
+    /**
+     * The default locale on our server.
+     */
+    protected static Locale defaultLocale = Locale.getDefault();
+
+    /**
+     * The message bundle where the error messages can be found.
+     * This defaults to org.apache.struts.action.Action.MESSAGES_KEY.
+     */
+    protected String _bundle = null;
+
+    /**
+     * The session attribute key for the locale.
+     * This defaults to org.apache.struts.action.Action.LOCALE_KEY.
+     */
+    protected String _locale = Globals.LOCALE_KEY;
+
+    /**
+     * Set the name of the message bundle.
+     * @param bundle - the bundle name
+     * @netui:attribute required="false"  rtexprvalue="true"
+     */
+    public final void setBundle(String bundle)
+    {
+        _bundle = bundle;
+    }
+
+    /**
+     * Set the name of the locale attribute.
+     * @param locale - the locale attribute name
+     * @netui:attribute required="false"  rtexprvalue="true"
+     */
+    public final void setLocale(String locale)
+    {
+        _locale = locale;
+    }
+
+    /**
+     * Qualify the given bundle name with the current module path to return a full bundle name.
+     * @return the qualified Bundle name
+     */
+    protected String getQualifiedBundleName(String bundleName)
+    {
+        if (bundleName != null) {
+            if (bundleName.indexOf("/") == -1) {
+                ModuleConfig mc = (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY);
+
+                // Note that we don't append the module path for the root module.
+                if (mc != null && mc.getPrefix() != null && mc.getPrefix().length() > 1) {
+                    bundleName += mc.getPrefix();
+                }
+            }
+            else if (bundleName.endsWith("/")) {
+                // Special handling for bundles referring to the root module -- they should not have
+                // the module path ("/") at the end.
+                bundleName = bundleName.substring(0, bundleName.length() - 1);
+            }
+        }
+
+        return bundleName;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _locale = Globals.LOCALE_KEY;
+        _bundle = null;
+    }
+
+    /**
+     * @param report 
+     * @param bundle 
+     * @return 
+     * @throws JspException 
+     */
+    protected String getErrorMessage(ActionError report, String bundle)
+            throws JspException
+    {
+        String message = null;
+        String key = report.getKey();
+        Object[] messageArgs = report.getValues();
+        
+        //
+        // First, replace expressions in all the message arguments.
+        //
+        if ( messageArgs != null )
+        {
+            for ( int i = 0; i < messageArgs.length; ++i )
+            {
+                Object arg = messageArgs[i];
+                
+                if ( arg instanceof String )
+                {
+                    String strArg = ( ( String ) arg );
+                    
+                    if ( strArg.startsWith( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX ) )
+                    {
+                        String argExpr= strArg.substring( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX_LENGTH );
+                        messageArgs[i] = evaluateExpression( argExpr, argExpr );
+                    }
+                }
+            }
+        }
+        
+        //
+        // The page flow compiler generates InternalConstants.MESSAGE_IS_EXPRESSION_KEY as the message key
+        // when the message is actually an expression for us to evaluate at runtime.
+        //
+        if (key.length() == 0) {
+            return "";
+        }
+        else if (key.startsWith(InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX)) {
+            // @todo misuse of this api
+            String expression = key.substring(InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX_LENGTH);
+            message = (String) evaluateExpression(expression, expression);
+        }
+        else {
+            boolean requestedSpecificBundle = (bundle != null);
+            
+            //
+            // First look in the default message bundle for the page flow.
+            //
+            if (requestedSpecificBundle || ! isMissingDefaultMessages(pageContext))
+            {
+                message = RequestUtils.message(pageContext, bundle, _locale, key, messageArgs);
+            }
+            
+            //
+            // If we didn't find it there, look for it in the validation messages associated with the form bean.
+            //
+            if (message == null && ! requestedSpecificBundle)
+            {
+                ActionMapping actionMapping = (ActionMapping) pageContext.getRequest().getAttribute(Globals.MAPPING_KEY);
+                
+                if (actionMapping instanceof PageFlowActionMapping)
+                {
+                    String formBeanResources = ((PageFlowActionMapping) actionMapping).getFormBeanMessageResourcesKey();
+                    
+                    if (formBeanResources != null) {
+                        String qualified = getQualifiedBundleName(formBeanResources);
+                        message = RequestUtils.message(pageContext, qualified, _locale, key, messageArgs);
+                        if (message != null) return message;
+                    }
+                }
+            }
+            
+            //
+            // If we still didn't find it, try the default validation message bundle (in beehive-netui-pageflow.jar).
+            //
+            if (message == null && ! requestedSpecificBundle)
+            {
+                String qualified = getQualifiedBundleName("_defaultValidationMessages");
+                message = RequestUtils.message(pageContext, qualified, _locale, key, messageArgs);
+            }
+        }
+
+        return message;
+    }
+    
+    protected boolean isMissingDefaultMessages(PageContext pageContext)
+    {
+        ModuleConfig mc = RequestUtils.getModuleConfig(pageContext);
+
+        if (mc != null)
+        {
+            ControllerConfig cc = mc.getControllerConfig();
+
+            if (cc instanceof PageFlowControllerConfig)
+            {
+                return ((PageFlowControllerConfig) cc).isMissingDefaultMessages();
+            }
+        }
+        
+        return false;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Errors.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Errors.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,175 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.struts.Globals;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.util.RequestUtils;
+import org.apache.struts.util.ResponseUtils;
+
+import javax.servlet.jsp.JspException;
+import java.util.Iterator;
+
+/**
+ * Renders the set of error messages found in the ActionErrors
+ * registered in the pageContext at org.apache.struts.action.Action.ERROR_KEY.
+ * Errors ignores its body content.
+ * <p>
+ * The following optional message keys will be utilized if corresponding
+ * messages exist for them in the application resources:
+ * <ul>
+ * <li><b>errors.header</b> - If present, the corresponding message will be
+ * rendered prior to the individual list of error messages.</li>
+ * <li><b>errors.footer</b> - If present, the corresponding message will be
+ * rendered following the individual list of error messages.</li>
+ * <li><b>errors.prefix</b> - If present, the corresponding message will be
+ * rendered before each individual error message.</li>
+ * <li><b>errors.suffix</b> - If present, the corresponding message will be
+ * rendered after each individual error message.</li>
+ * </ul>
+ *
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">bundle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The message bundle where the error messages can be found</td></tr>
+ * <tr><th rowspan="2">locale</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The session attribute key for the locale</td></tr>
+ *
+ * </table>
+ * @example In this sample, the messages from the <code>errorMessages</code> bundle will be used to
+ * output the errors.
+ * <pre>
+ * &lt;netui:errors bundle="com.project.errorMessages" />
+ * </pre>
+ * @see Error
+ * @netui:tag name="errors" description="Used to report multiple validation errors."
+ * @netui.tldx:tag requiredchild="#nothing" renderer="workshop.netui.jspdesigner.tldx.ErrorsRenderer" bodycontentpref="empty" whitespace="indent"
+ */
+public class Errors extends ErrorBaseTag
+{
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Errors";
+    }
+
+    /**
+     * Render the specified error messages if there are any.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+
+        // Were any error messages specified?
+        ActionErrors errors = null;
+        try {
+            errors = RequestUtils.getActionErrors(pageContext, Globals.ERROR_KEY);
+        }
+        catch (JspException e) {
+            RequestUtils.saveException(pageContext, e);
+            throw e;
+        }
+
+        if ((errors == null) || errors.isEmpty()) {
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        String qualifiedBundle = getQualifiedBundleName(_bundle);
+
+        boolean headerPresent = false;
+        boolean footerPresent = false;
+        boolean prefixPresent = false;
+        boolean suffixPresent = false;
+
+        String locale = _locale;
+        if (!isMissingDefaultMessages(pageContext))
+        {
+            try {
+                // Check for presence of header and footer message keys
+                headerPresent =
+                        RequestUtils.present(pageContext, qualifiedBundle, locale, "errors.header");
+                footerPresent =
+                        RequestUtils.present(pageContext, qualifiedBundle, locale, "errors.footer");
+                prefixPresent =
+                        RequestUtils.present(pageContext, qualifiedBundle, locale, "errors.prefix");
+                suffixPresent =
+                        RequestUtils.present(pageContext, qualifiedBundle, locale, "errors.suffix");
+            }
+            catch (JspException e) {
+                String s = Bundle.getString("Tags_ErrorsException",
+                        new Object[]{e.getMessage()});
+                registerTagError(s, null);
+                reportErrors();
+                localRelease();
+                return SKIP_BODY;
+            }
+        }
+
+        // Render the error messages appropriately
+        StringBuilder results = new StringBuilder(128);
+        boolean headerDone = false;
+        String message = null;
+        Iterator reports = null;
+        reports = errors.get();
+
+        while (reports.hasNext()) {
+            ActionError report = (ActionError) reports.next();
+            if (!headerDone) {
+                if (headerPresent) {
+                    message = RequestUtils.message(pageContext, qualifiedBundle, locale, "errors.header");
+                    results.append(message);
+                    results.append("\r\n");
+                }
+                headerDone = true;
+            }
+            if (prefixPresent) {
+                message = RequestUtils.message(pageContext, qualifiedBundle, locale, "errors.prefix");
+                results.append(message);
+            }
+            message = getErrorMessage(report, qualifiedBundle);
+            if (message != null) {
+                results.append(message);
+                results.append("\r\n");
+            }
+            if (suffixPresent) {
+                message = RequestUtils.message(pageContext, qualifiedBundle, locale, "errors.suffix");
+                results.append(message);
+            }
+        }
+        if (headerDone && footerPresent) {
+            message = RequestUtils.message(pageContext, qualifiedBundle, locale, "errors.footer");
+            results.append(message);
+            results.append("\r\n");
+        }
+
+        // Print the results to our output writer
+        ResponseUtils.write(pageContext, results.toString());
+
+        // Continue processing this page
+        localRelease();
+        return SKIP_BODY;
+
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Exceptions.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Exceptions.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,147 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+//internal imports
+
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.util.HtmlExceptionFormatter;
+import org.apache.struts.Globals;
+import org.apache.struts.util.ResponseUtils;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * Renders formatted exception data, as found in the Request with the key:
+ * <code>org.apache.struts.action.Action.EXCEPTION_KEY</code>.  Exceptions ignores its
+ * body content.
+ * <p>
+ *
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">showMessage</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Determines whether or not the message of the exception should be shown</td></tr>
+ * <tr><th rowspan="2">showStackTrace</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Returns whether or not the stack trace is being shown</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, the Exceptions tag will output the exceptions messages but not the stacktraces.
+ * <pre>&lt;netui:exceptions showMessage="true" showStackTrace="false" /></pre>
+ * @netui:tag name="exceptions" description="Displays formatted exception messages."
+ * @netui.tldx:tag requiredchild="#nothing" renderer="workshop.netui.jspdesigner.tldx.ExceptionsRenderer" bodycontentpref="empty" whitespace="indent"
+ */
+public class Exceptions extends TagSupport
+{
+    private boolean _showMessage = true;
+    private boolean _showStackTrace = false;
+    private boolean _showDevModeStackTrace = false;
+
+    /**
+     * Set whether or not the exception message is being shown.
+     * @param showMessage - true or false depending on the setting desired
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setShowMessage(boolean showMessage)
+    {
+        _showMessage = showMessage;
+    }
+
+    /**
+     * Set whether or not the stack trace is being shown.
+     * @param showStackTrace - true or false depending on the setting desired
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setShowStackTrace(boolean showStackTrace)
+    {
+        _showStackTrace = showStackTrace;
+    }
+
+    /**
+     * Set whether or not the stack trace is being shown.
+     * @param showStackTrace - true or false depending on the setting desired
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setShowDevModeStackTrace(boolean showStackTrace)
+    {
+        _showDevModeStackTrace = showStackTrace;
+    }
+
+    /**
+     * Render the exception text based on the display attributes.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        // First look for the exception in the pageflow/struts request attribute.  If it's not there,
+        // look for it in the request attribute the container provides for web.xml-configured error
+        // pages.
+        StringBuilder results = new StringBuilder(128);
+        Throwable e = (Throwable) pageContext.getAttribute(Globals.EXCEPTION_KEY, PageContext.REQUEST_SCOPE);
+
+        if (e == null) {
+            ServletRequest req = pageContext.getRequest();
+            e = (Throwable) req.getAttribute("javax.servlet.error.exception");
+            if (e == null) {
+                e = (Throwable) req.getAttribute("javax.servlet.jsp.jspException");
+            }
+        }
+
+        if (!_showStackTrace && _showDevModeStackTrace) {
+            boolean devMode = !InternalUtils.getServerAdapter().isInProductionMode();
+            if (devMode)
+                _showStackTrace = true;
+        }
+
+        if (e != null) {
+            if (_showMessage) {
+                String msg = e.getMessage();
+                // if we have message lets output the exception name and the name of the
+                if ((msg != null) && (msg.length() > 0)) {
+                    if (!_showStackTrace)
+                        msg = e.getClass().getName() + ": " + msg;
+                    results.append(HtmlExceptionFormatter.format(msg, e, _showStackTrace));
+                }
+                else {
+                    results.append(HtmlExceptionFormatter.format(e.getClass().getName(), e, _showStackTrace));
+                }
+            }
+            else {
+                results.append(HtmlExceptionFormatter.format(null, e, _showStackTrace));
+            }
+            ResponseUtils.write(pageContext, results.toString());
+        }
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        _showMessage = true;
+        _showStackTrace = false;
+        _showDevModeStackTrace = false;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FileUpload.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FileUpload.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,214 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.InputFileTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+
+/**
+ * Renders an input tag with type="file", with the given attributes.  Usage of this tag requires the parent
+ * Form tag to have enctype="multipart/form-data".
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accept</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The set of MIME types accepted for file upload.</td></tr>
+ * <tr><th rowspan="2">dataSource</th><td>Yes</td><td>No</td><td>Write Only</td></tr>
+ * <tr><td colspan="3">The name of a form bean property or an expression that contains the FormFile.</td></tr>
+ * <tr><th rowspan="2">readOnly</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Whether or not the TextBox is read-only.</td></tr>
+ * <tr><th rowspan="2">size</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The visible number of characters in the FileUpload.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this button used by the enclosing html tag to get the tag's real ID attribute for javascript and focus purposes. The real ID attribute id is generated based upon this name.</td></tr>
+ *
+ * </table>
+ * </p>
+ *
+ * <p><b>Notes</b></p>
+ * <ul>
+ * <li>The dataSource for the FileUpload tag is write-only. This means that the value of the FileUpload
+ * cannot get read back into the FileUpload on postback.</li>
+ * <li>The page flow or form bean property pointed to with the FileUpload's dataSource
+ * should be of type <code>org.apache.struts.upload.FormFile</code>.</li>
+ * </ul>
+ * @example In this sample, an &lt;input type="file" /> of size 20 will be rendered, and the uploaded
+ * file's information will be found at the form bean's <code>theFile</code> property.
+ * <pre>&lt;netui:fileUpload dataSource="{actionForm.theFile}" size="20" /></pre>
+ *
+ * @netui:tag name="fileUpload" description="Upload a file from the client to the server."
+ * @netui.tldx:tag requiredchild="attribute" renderer="workshop.netui.jspdesigner.tldx.FileUploadRenderer"
+ * bodycontentpref="empty" whitespace="indent"
+ */
+public class FileUpload extends HtmlDataSourceTag
+{
+    private InputFileTag.State _state = new InputFileTag.State();
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "FileUpload";
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>type</code>
+     * attribute.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null) {
+            if (name.equals(TYPE)) {
+                String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+                registerTagError(s, null);
+            }
+            else if (name.equals(READONLY)) {
+                _state.readonly = Boolean.valueOf(value).booleanValue();
+                return;
+            }
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Set the mime-types accepted for the FileUpload.
+     * @param accept - the accepted mime-types
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setAccept(String accept)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCEPT, accept);
+    }
+
+    /**
+     * Set if this FileUpload is read-only.
+     * @param readonly - the read-only state
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setReadonly(boolean readonly)
+    {
+        _state.readonly = readonly;
+    }
+
+    /**
+     * Set the size (in characters) of the FileUpload.
+     * @param size - the size
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setSize(String size)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, SIZE, size);
+    }
+
+    /**
+     * Render the fileUpLoad tag.  Cause the body to be buffered to look
+     * for contained tags.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content of the FileUpLoad. In this case any body content will
+     * be thrown away.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+
+        if (bodyContent != null) {
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the FileUpload.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        String idScript = null;
+        ServletRequest req = pageContext.getRequest();
+
+        // Create the state for the input tag.
+        String realName = doNaming();
+        if (_dataSource != null) {
+            _state.name = realName;
+        }
+
+        String tagId = getTagId();
+        if (tagId != null) {
+            Form parentForm = getNearestForm();
+            if (parentForm != null) {
+                parentForm.addTagID(tagId, realName);
+            }
+            idScript = addTagIdMapping(tagId, realName);
+        }
+
+        StringBuilder results = new StringBuilder(32);
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_FILE_TAG, req);
+        br.doStartTag(results, _state);
+
+        if (idScript != null)
+            results.append(idScript);
+
+        write(results.toString());
+
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _state.clear();
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,844 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.FlowControllerFactory;
+import org.apache.beehive.netui.pageflow.PageFlowConstants;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.tags.IHtmlIdWriter;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.FormTag;
+import org.apache.beehive.netui.tags.rendering.InputHiddenTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.ParamHelper;
+import org.apache.struts.Globals;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionServlet;
+import org.apache.struts.config.FormBeanConfig;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.taglib.html.Constants;
+import org.apache.struts.util.RequestUtils;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+import java.util.*;
+
+/**
+ * This tag represents an input form, associated with a bean whose
+ * properties correspond to the various fields of the form.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">action</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Required. The action invoked by submitting the Form.</td></tr>
+ * <tr><th rowspan="2">encType</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The content encoding to be used on a post submit.</td></tr>
+ * <tr><th rowspan="2">focus</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The tagID of a nested Netui tag which should receive the focus.</td></tr>
+ * <tr><th rowspan="2">location</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The location hash to append to the url.</td></tr>
+ * <tr><th rowspan="2">method</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The request method used when submitting this form.</td></tr>
+ * <tr><th rowspan="2">name</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The attribute key under which the associated ActionForm bean used to populate
+ * the input form is stored.  This ActionForm is found in the scope defined by the <code>scope</code>
+ * attribute.</td></tr>
+ * <tr><th rowspan="2">scope</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The scope ('request' or 'session') under which the associated ActionForm
+ * bean used to populate the form input fields is stored. Using the <code>name</code>, <code>type</code>
+ * and <code>scope</code> attributes defines an the ActionForm object used.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this button used by the enclosing html tag to get the tag's real
+ * ID attribute for javascript and focus purposes. The real ID attribute id is generated based
+ * upon this name.</td></tr>
+ * <tr><th rowspan="2">target</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The window target</td></tr>
+ * <tr><th rowspan="2">type</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The Java class name of the ActionForm bean to be created, if necessary.
+ * This bean will be created if the <code>name</code> and <code>scope</code> attributes are set.
+ * The bean is then used to populate the form input fields.</td></tr>
+ *
+ * </table>
+ * @example In this first sample, a JSP page in the current page flow contains the
+ * following &lt;netui:form...> tag set. This Form invokes the <code>toDropDown</code>
+ * action method in the page flow when it is submitted.
+ * <pre>
+ * &lt;netui:form action="toDropdown">
+ *     &lt;netui:imageButton
+ *     rolloverImage="resources/images/go-button-rollover.gif"
+ *     src="resources/images/go-button.gif" />
+ * &lt;/netui:form>
+ * </pre>
+ * <p>In the page flow that contains the JSP page, the action is defined to forward to a specified target;
+ * in this case, to the /dropdown/dropdownController.jpf page flow. Thus the dropdownController page flow
+ * is started when a user clicks the Go! button on the JSP. Here is the defined action from
+ * the page flow:</p>
+ * <pre>
+ *  /**
+ *   &#x2a; &#x40;jpf:action
+ *   &#x2a; &#x40;jpf:forward name="dropdown" path="/dropdown/dropdownController.jpf"
+ *   &#x2a;/
+ *   protected Forward toDropdown()
+ *   {
+ *       return new Forward("dropdown");
+ *   }
+ * </pre>
+ * <p><b>JavaScript</b></p>
+ * <p>If the Form has a focus and nested tags with TagIDs, the following Javascript is written
+ * in the rendered JSP:</p>
+ * <pre>
+ * if (document.forms[formId][focus] != "hidden")<br>
+ *     document.forms[formId][focus].focus();
+ * </pre>
+ * <p>In this next sample, the input field values will be set based upon an
+ * <code>ActionForm</code> stored in the session called <code>nameBean</code>.
+ * When the form is submitted, the action named <code>Action</code> will receive an
+ * <code>ActionForm</code> that is <code>request</code> scoped and will not receive
+ * the session bean used to populate the input fields.
+ * <pre>
+ * &lt;netui:form action="Action" type="corp.Controller$NameBean"
+ *     scope="session" name="nameBean">
+ *     Name: &lt;netui:textBox dataSource="{actionForm.name}" />
+ *     &lt;netui:button value="Submit">&lt;/netui:button>
+ * &lt;/netui:form>
+ * </pre>
+ *
+ * @netui:tag name="form" description="Represents an input form, associated with a bean whose properties correspond to the various fields of the form."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.FormRenderer" illegalancestor="form" whitespace="indent"
+ * netuiexpressioninfo="org.apache.beehive.netui.tags.html.FormInfo"
+ */
+public class Form extends HtmlBaseTag
+        implements URLParams, IHtmlIdWriter
+{
+    private static String FORM_ID = "Netui_Form_";
+
+    private FormTag.State _state = new FormTag.State();
+    private InputHiddenTag.State _hiddenState = new InputHiddenTag.State();
+
+    private String _focus = null;                  // The name of the field to receive focus, if any.
+    // @todo: did we support location in 8.1?  How?
+    private String _location = null;               // The location hash to append to the url.
+    private String _scope = null;                  // The scope (request or session) under which our associated bean is stored
+    private String _text = null;                   // The body content of this tag (if any).
+    private String _beanName = null;               // The name of the form bean to (create and) use.
+    private String _beanType = null;               // The type of the form bean to (create and) use.
+    private String _beanScope = null;              // The scope of the form bean to (create and) use.
+    private String _type = null;                   // The Java class name of the bean to be created, if necessary.
+    private String _realName = null;
+    private String _formId = null;
+
+    private ActionMapping _mapping = null;         // The ActionMapping defining where we will be submitting this form
+    private ActionServlet _servlet = null;         // The ActionServlet instance we are associated with
+    private HashMap _focusMap;
+    private ArrayList _idList = null;
+    private ModuleConfig _appConfig = null;        // The application configuration for our module.
+    private boolean _setRealName = false;
+    private Map _params;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Form";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>action</code>,
+     * and <code>method</code> attributes.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null) {
+            if (name.equals(ACTION) || name.equals(METHOD)) {
+                String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+                registerTagError(s, null);
+            }
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Return the action of the Form.
+     * @return a String representing the action name of the Form.
+     */
+    public String getAction()
+    {
+        return _state.action;
+    }
+
+    /**
+     * Set the name of the action for the Form.
+     * @param action - the name of the action to set for the Form.
+     * @netui:attribute required="true" rtexprvalue="true"
+     * @netui.tldx:attribute reftype="netui-action-url"
+     */
+    public void setAction(String action)
+    {
+        _state.action = action;
+    }
+
+    /**
+     * Set the content encoding to be used on a post submit.
+     * @param enctype - the content encoding type.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setEnctype(String enctype)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ENCTYPE, enctype);
+    }
+
+    /**
+     * this is used to
+     */
+    public String getRealName()
+    {
+        return _realName;
+    }
+
+    /**
+     *
+     */
+    public void generateRealName()
+    {
+        _setRealName = true;
+    }
+
+    /**
+     * Set the name of the field to receive focus.
+     * @param focus - the focus field name.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setFocus(String focus)
+    {
+        _focus = focus;
+    }
+
+    /**
+     * Set the location hash to append to the url.
+     * @param location - the location hash
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setLocation(String location)
+    {
+        _location = location;
+    }
+
+    /**
+     * Set the request method used when submitting this form.
+     * @param method - the request method
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setMethod(String method)
+    {
+        _state.method = method;
+    }
+
+    /**
+     * Set the attribute key under which our associated bean is stored.
+     * @param name - the attribute key name
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setName(String name)
+    {
+        _state.name = name;
+    }
+
+    /**
+     * Sets the onReset javascript event.
+     * @param onReset - the onReset event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnReset(String onReset)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONRESET, onReset);
+    }
+
+    /**
+     * Sets the onSubmit javascript event.
+     * @param onSubmit - the onReset event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnSubmit(String onSubmit)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONSUBMIT, onSubmit);
+    }
+
+    /**
+     * Sets the scope (request or session) under which the associated bean
+     * is stored.
+     * @param scope - the scope.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setScope(String scope)
+    {
+        _scope = scope;
+    }
+
+    /**
+     * Sets the window target.
+     * @param target - the window target.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setTarget(String target)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TARGET, target);
+    }
+
+    /**
+     * Sets the Java class name of the bean to be created, if necessary.
+     * @param type - the class name
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setType(String type)
+    {
+        _type = type;
+    }
+
+    /**
+     * Adds a URL parameter to the generated hyperlink.
+     * @param name  - the name of the parameter to be added.
+     * @param value - the value of the parameter to be added (a String or String[]).
+     */
+    public void addParameter(String name, Object value) throws JspException
+    {
+        if (_params == null) {
+            _params = new HashMap();
+        }
+        ParamHelper.addParam(_params, name, value);
+    }
+
+    /**
+     * Adds a tagId and name to the Form's focusMap.
+     * @param tagID - the tagID of a child tag.
+     * @param name  - the name of a child tag.
+     */
+    public void addTagID(String tagID, String name)
+    {
+        if (_focusMap == null) {
+            _focusMap = new HashMap();
+        }
+        _focusMap.put(tagID, name);
+    }
+
+    /**
+     * Return the name of the form bean corresponding to this tag. There is
+     * no corresponding setter method; this method exists so that the nested
+     * tag classes can obtain the actual bean name derived from other
+     * attributes of the tag.
+     */
+    public String getBeanName()
+    {
+        return _beanName;
+    }
+
+    /**
+     * This method will add a id and expression to the map maintained by the implementor.  This map should be
+     * written to the form as a set of hidden fields that will contain the id.
+     * @param id
+     * @param expression
+     */
+    public void writeId(String id, String expression)
+    {
+        if (_idList == null) {
+            _idList = new ArrayList();
+        }
+        _idList.add(id + "|" + expression);
+    }
+
+    /**
+     * Return the next id
+     */
+    public String getNextId()
+    {
+        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
+        Integer nextId = (Integer) req.getAttribute(ID_REQUEST_ATTRIBUTE);
+        if (nextId == null)
+            nextId = new Integer(0);
+        int id = nextId.intValue() + 1;
+        req.setAttribute(ID_REQUEST_ATTRIBUTE, new Integer(id));
+        return ID_PREFIX + id;
+    }
+
+
+    /**
+     * Render the beginning of this form.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        //Error out if there is a parent form
+        if (getNearestForm() != null) {
+            registerTagError(Bundle.getString("Tags_FormParentForm"), null);
+        }
+
+        // Look up the form bean name, scope, and type if necessary
+        lookup();
+        if (hasErrors()) {
+            reportErrors();
+            return EVAL_PAGE;
+        }
+
+        // Create an appropriate "form" element based on our parameters
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+
+        _formId = FORM_ID + getNextId(request);
+        String tagId = getTagId();
+        if (tagId != null) {
+            _realName = rewriteName(tagId);
+        }
+        else {
+            _realName = rewriteName(_formId);
+        }
+
+        // Store this tag itself as a page attribute
+        pageContext.setAttribute(Constants.FORM_KEY, this, PageContext.REQUEST_SCOPE);
+
+        // Locate or create the bean associated with our form
+        int scope = PageContext.SESSION_SCOPE;
+        if ("request".equals(_beanScope)) {
+            scope = PageContext.REQUEST_SCOPE;
+        }
+
+        Object bean = null;
+        if (_beanName != null)
+            bean = pageContext.getAttribute(_beanName, scope);
+        if (bean == null) {
+            if (_type != null) {
+                // Backwards compatibility - use explicitly specified values
+                try {
+                    ContextCache cc = ContextCache.get(pageContext.getServletContext());
+                    bean = cc.getReloadableClassHandler().newInstance(_beanType, request);
+                    if (bean != null) {
+                        ((ActionForm) bean).setServlet(_servlet);
+                    }
+                }
+                catch (Exception e) {
+                    registerTagError(Bundle.getString("Tags_FormNameBadType"), e);
+                }
+            }
+            else {
+                // New and improved - use the values from the action mapping
+                bean = RequestUtils.createActionForm(request, _mapping, _appConfig, _servlet);
+                if (bean == null) {
+                    bean = InternalUtils.createActionForm(request, _mapping, _appConfig, _servlet,
+                            pageContext.getServletContext());
+                }
+            }
+
+            if (hasErrors()) {
+                reportErrors();
+                return EVAL_PAGE;
+            }
+
+            if (bean instanceof ActionForm) {
+                ((ActionForm) bean).reset(_mapping, request);
+            }
+            if (bean == null) {
+                //Ignore - this is okay if databinding happens in the pageFlow
+            }
+            else {
+                pageContext.setAttribute(_beanName, bean, scope);
+            }
+        }
+        if (bean != null) {
+            pageContext.setAttribute(Constants.BEAN_KEY, bean,
+                    PageContext.REQUEST_SCOPE);
+            pageContext.setAttribute("actionForm", bean);
+        }
+
+        // Continue processing this page
+        return EVAL_BODY_BUFFERED;
+
+    }
+
+    /**
+     * Save the body content of the Form.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (bodyContent != null) {
+            String value = bodyContent.getString();
+            bodyContent.clearBody();
+            if (value.length() > 0)
+                _text = value;
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the end of this form.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        String idScript = null;
+
+        // Create an appropriate "form" element based on our parameters
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        ServletContext servletContext = pageContext.getServletContext();
+
+        _state.name = _beanName;
+        if (_beanName == null) {
+            _setRealName = true;
+        }
+
+        // if tagId is set we need to add a mapping to the 'id'
+        String tagId = getTagId();
+        if (tagId != null) {
+            idScript = addTagIdMapping(tagId, _realName);
+        }
+
+        // create real form name attribute
+        if (tagId != null || _setRealName)
+            _state.id = _realName;
+
+        if (_state.method == null)
+            _state.method = FORM_POST;
+
+        // encode the action
+        String actionUrl = PageflowTagUtils.getRewrittenFormAction(_state.action, pageContext);
+
+        // If the rewritten form action contains request parameters, turn them into hidden fields --
+        // it's not legal to include them in the action URI on a GET.
+        int query = actionUrl.indexOf('?');
+        Map extraHiddenParams = null;
+        if (query != -1
+                && _state.method != null && _state.method.equalsIgnoreCase(FORM_GET)
+                && !URLRewriterService.allowParamsOnFormAction(pageContext.getServletContext(), request)) {
+            extraHiddenParams = new LinkedHashMap();
+            StringTokenizer tok = new StringTokenizer(actionUrl.substring(query + 1), "&");
+            while (tok.hasMoreTokens()) {
+                String keyVal = tok.nextToken();
+                int eq = keyVal.indexOf('=');
+                if (eq != -1) {
+                    extraHiddenParams.put(keyVal.substring(0, eq), keyVal.substring(eq + 1));
+                }
+                else {
+                    extraHiddenParams.put(keyVal, "");
+                }
+            }
+
+            actionUrl = actionUrl.substring(0, query);
+        }
+
+        _state.action = actionUrl;
+
+        StringBuilder results = new StringBuilder(128);
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.FORM_TAG, request);
+        br.doStartTag(results, _state);
+
+        // for the form, lets output the contents of the body and the end tag and exit if there are errors
+        if (hasErrors()) {
+            reportErrors();
+            if (_text != null)
+                results.append(_text);
+            br.doEndTag(results);
+            write(results.toString());
+
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // Add a transaction token (if present in our session)
+        HttpSession session = pageContext.getSession();
+        if (session != null) {
+            String token =
+                    (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);
+            if (token != null) {
+                writeHiddenParam(Constants.TOKEN_KEY, token, results, request);
+            }
+        }
+
+        // add a hidden value for each parameter
+        if (_params != null) {
+            Iterator paramKeys = _params.keySet().iterator();
+            while (paramKeys.hasNext()) {
+                Object paramKey = paramKeys.next();
+                Object paramValue = _params.get(paramKey);
+                if (paramValue instanceof String[]) {
+                    String[] paramValArray = (String[]) paramValue;
+                    for (int i = 0; i < paramValArray.length; i++) {
+                        String paramName = URLRewriterService.rewriteName(servletContext, request, paramKey.toString());
+                        writeHiddenParam(paramName, paramValArray[i], results, request);
+                    }
+                }
+                else {
+                    String paramName = URLRewriterService.rewriteName(servletContext, request, paramKey.toString());
+                    writeHiddenParam(paramName, paramValue.toString(), results, request);
+                }
+            }
+        }
+
+        // add the extra hidden parameters
+        if (extraHiddenParams != null) {
+            for (Iterator i = extraHiddenParams.entrySet().iterator(); i.hasNext();) {
+                Map.Entry entry = (Map.Entry) i.next();
+                writeHiddenParam((String) entry.getKey(), (String) entry.getValue(), results, request);
+            }
+        }
+
+        // add the body content
+        if (_text != null)
+            results.append(_text);
+
+        // Remove the page scope attributes we created
+        pageContext.removeAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE);
+        pageContext.removeAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE);
+        pageContext.removeAttribute("actionForm"); 
+
+        // output the hidden fields for id transparency if this is turned on
+        if (HtmlBaseTag.isIdTransparency(servletContext)) {
+            if (_idList != null) {
+                int cnt = _idList.size();
+                for (int i = 0; i < cnt; i++) {
+                    writeHiddenParam(ID_PARAMETER_NAME, (String) _idList.get(i), results, request);
+                }
+                if (cnt > 0)
+                    results.append("\n");
+            }
+        }
+
+        // Render a tag representing the end of our current form
+        br.doEndTag(results);
+
+        // Render JavaScript to set the input focus if required
+        if ((_focus != null) && (_focusMap != null)) {
+            String focusName = (String) _focusMap.get(_focus);
+
+            if (focusName != null) {
+
+                String formName = (_beanName != null) ? _beanName : _formId;
+                String s = JavaScriptUtils.getFocusScript(formName, focusName);
+                if (s != null)
+                    results.append(s);
+            }
+        }
+
+        // output any generated javascript
+        if (idScript != null)
+            results.append(idScript);
+
+        write(results.toString());
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Write a hidden field for a paramter
+     * @param paramName  The name of the parameter
+     * @param paramValue The value of the paramter
+     * @param results    The StringBuffer to append the result to
+     * @param req        THe servlet request
+     */
+    private void writeHiddenParam(String paramName, String paramValue, StringBuilder results, ServletRequest req)
+    {
+        // put each hidden on a new line
+        results.append("\n");
+
+        // create the state
+        _hiddenState.clear();
+        _hiddenState.name = paramName;
+        _hiddenState.value = paramValue;
+
+        TagRenderingBase hiddenTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_HIDDEN_TAG, req);
+        hiddenTag.doStartTag(results, _hiddenState);
+        hiddenTag.doEndTag(results);
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _hiddenState.clear();
+
+        _focus = null;
+        _location = null;
+        _scope = null;
+        _text = null;
+        _mapping = null;
+        _beanName = null;
+        _beanType = null;
+        _beanScope = null;
+        _type = null;
+        _realName = null;
+        _formId = null;
+        _mapping = null;
+        _servlet = null;
+        _focusMap = null;
+        if (_idList != null)
+            _idList.clear();
+        _appConfig = null;
+        _setRealName = false;
+        _params = null;
+    }
+
+    /**
+     * Look up values for the <code>name</code>, <code>scope</code>, and
+     * <code>type</code> properties if necessary.
+     * @throws JspException if a required value cannot be looked up
+     */
+    private void lookup() throws JspException
+    {
+        ServletContext servletContext = pageContext.getServletContext();
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+
+        // Look up the application module configuration information we need
+        _appConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
+        if (_appConfig == null) { // Backwards compatibility hack
+            _appConfig = (ModuleConfig) servletContext.getAttribute(Globals.MODULE_KEY);
+        }
+        if (_appConfig == null) {
+            registerTagError(Bundle.getString("Tags_FormNoApplicationConfig"), null);
+            return;
+        }
+        _servlet = (ActionServlet) servletContext.getAttribute(Globals.ACTION_SERVLET_KEY);
+
+        boolean isAction = PageflowTagUtils.isAction(request, response, servletContext, _state.action);
+        if (!isAction) {
+            registerTagError(Bundle.getString("Tags_BadAction", _state.action), null);
+            return;
+        }
+
+        //
+        // If the current module is "/-global" (Global.app), then we'll first try the module
+        // associated with the current pageflow.  Later we'll try "/-global".
+        //
+        if (_appConfig.getPrefix().equals(PageFlowConstants.GLOBALAPP_MODULE_CONTEXT_PATH)) {
+            PageFlowController curPgr = PageFlowUtils.getCurrentPageFlow(request);
+
+            if (curPgr != null) {
+                ModuleConfig curPgrModule = InternalUtils.getModuleConfig(curPgr.getModulePath(),
+                        servletContext);
+
+                if (curPgrModule != null) {
+                    _appConfig = curPgrModule;
+                }
+            }
+        }
+
+        // Look up the action mapping we will be submitting to
+        String mappingName = URLRewriterService.getActionMappingName(_state.action);
+        _mapping = (ActionMapping) _appConfig.findActionConfig(mappingName);
+
+        // If we didn't find it in the current module's config, look in Global.app
+        if (_mapping == null) {
+            ModuleConfig globalAppConfig = InternalUtils.getGlobalAppConfig(servletContext);
+
+            if (globalAppConfig != null) {
+                ActionMapping globalMapping =
+                        (ActionMapping) globalAppConfig.findActionConfig(mappingName);
+
+                if (globalMapping != null) {
+                    _appConfig = globalAppConfig;
+                    _mapping = globalMapping;
+                }
+            }
+        }
+
+        if (_mapping == null) {
+            // @TODO portal - will most likely require requestURI and lookupKey
+            String jpfDescrip = "";
+            PageFlowController curJpf =
+                    FlowControllerFactory.getPageFlowForRequest(request, response, pageContext.getServletContext());
+
+            if (curJpf != null)
+                jpfDescrip = " in " + curJpf.getClass().getName();
+            JspException e = new JspException("form: ActionMapping \"" + mappingName + "\" not found" + jpfDescrip);
+            pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE);
+            throw e;
+        }
+
+        // Were the required values already specified?
+        if (_state.name != null) {
+            if (_type == null) {
+                registerTagError(Bundle.getString("Tags_FormNameNoType"), null);
+                return;
+            }
+            _beanName = _state.name;
+            _beanScope = (_scope == null ? "session" : _scope);
+            _beanType = _type;
+            return;
+        }
+
+        if (_mapping != null) {
+
+            // Look up the form bean definition
+            FormBeanConfig formBeanConfig =
+                    _appConfig.findFormBeanConfig(_mapping.getName());
+            if (formBeanConfig == null) {
+                //Ignore - this is okay if binding happens in the pageFlow.
+            }
+            else {
+                // Calculate the required values
+                _beanName = _mapping.getAttribute();
+                _beanScope = _mapping.getScope();
+                _beanType = formBeanConfig.getType();
+            }
+        }
+
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormLabel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormLabel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,169 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.LabelTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+
+/**
+ * @netui:tag name="formLabel" description="a <label> element which may point to a form control."
+ * @netui.tldx:tag requiredchild="formatDate formatNumber formatString"
+ * renderer="workshop.netui.jspdesigner.tldx.FormLabelRenderer"
+ * bodycontentpref="empty"
+ */
+public class FormLabel extends LabelBase
+        implements Formattable
+{
+    private static final Logger logger = Logger.getInstance(FormLabel.class);
+
+    private LabelTag.State _state = new LabelTag.State();
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "FormLabel";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Set the <code>for</code> attribute.
+     * @param forAttr - the for attribute.
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setFor(String forAttr)
+    {
+        // @todo: this needs to be have the name qualitification done.
+        _state.forAttr = forAttr;
+    }
+
+    /**
+     * @return the value of the for attribute.
+     */
+    public String getFor()
+    {
+        return _state.forAttr;
+    }
+
+    /**
+     * Prepare the label formatters.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return SKIP_BODY;
+    }
+
+
+    /**
+     * Render the label.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        boolean usingDefault = false;
+        boolean bypassEscape = false;
+
+        String scriptId = null;
+        ServletRequest req = pageContext.getRequest();
+
+        String labelValue = null;
+
+        // if this is not client side binding, evalute the value
+        if (_value != null)
+            labelValue = _value.toString();
+        else {
+            if (_defaultValue != null) {
+                labelValue = _defaultValue.toString();
+                bypassEscape = HtmlUtils.containsEntity(labelValue);
+            }
+            else {
+                logger.warn(Bundle.getString("Tags_LabelExpressionNull", _value));
+                labelValue = DEFAULT_NULL_TEXT;
+            }
+            usingDefault = true;
+        }
+
+        StringBuilder results = new StringBuilder(64);
+
+        // we assume that tagId will over have override id if both
+        // are defined.
+        String tagId = getTagId();
+        if (tagId != null) {
+            String realName = rewriteName(tagId);
+            scriptId = addTagIdMapping(tagId, realName);
+            _state.id = realName;
+        }
+
+       TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.LABEL_TAG, req);
+        br.doStartTag(results, _state);
+
+        // push the evaluated expression when we are not client side bound...
+        if (!usingDefault)
+            labelValue = formatText(labelValue);
+
+       if (!bypassEscape)
+            results.append(filter(labelValue, _escapeWhiteSpace));
+        else
+            results.append(labelValue);
+        br.doEndTag(results);
+
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        if (scriptId != null)
+            results.append(scriptId);
+
+        write(results.toString());
+
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatDate.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatDate.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,265 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import java.text.DateFormat;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+//external imports
+
+/**
+ * A formatter used to format dates.  This formatter uses patterns that conform to
+ * <code>java.text.SimpleDateFormat</code> pattern syntax.  Valid types for formatting are:
+ * <ul>
+ * <li>String</li>
+ * <li>java.sql.Date</li>
+ * <li>java.util.Date</li>
+ * <li>java.util.Calendar</li>
+ * </ul>
+ *
+ * <p>
+ * If the type is a String, we attempt to create a date out of the String.  The
+ * String must be defined by a common format list below.  If the string is
+ * equal the the empty string, it will be returned as the empty string.  See
+ * java.text.SimpleDateFormat for more information.
+ * <p>
+ * The valid formats are:
+ * <ul>
+ * <li>MM/dd/yy</li>
+ * <li>yyyy-MM-dd</li>
+ * <li>MMddyy</li>
+ * <li>and the local default</li>
+ * </ul>
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">country</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The country code used to determine the locale.</td></tr>
+ * <tr><th rowspan="2">language</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The language code used to determine the locale.</td></tr>
+ * <tr><th rowspan="2">pattern</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The SimpleDateFormat pattern used to format this date.</td></tr>
+ * <tr><th rowspan="2">stringInputPattern</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The pattern used to convert a String value into a date.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, the enclosing tag's date will be formatted to something like 08/29/1957.
+ * <pre>&lt;netui:formatDate pattern="MM/dd/yyyy" /> </pre>
+ *
+ * @see FormatNumber
+ * @see FormatString
+ *
+ * @netui:tag name="formatDate" description="A formatter used to format dates."
+ * @netui.tldx:tag requiredparent="label select textArea textBox data:anchorColumn data:basicColumn data:expressionColumn"
+ * requiredchild="#nothing"
+ * renderer="workshop.netui.jspdesigner.tldx.FormatDateRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class FormatDate extends FormatTag
+{
+    private static final Logger logger = Logger.getInstance(FormatDate.class);
+
+    private static final String[] commonFormats = {"MM/dd/yy", "yyyy-MM-dd", "MMddyy",
+                                                   null};
+
+    private String _stringInput;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "FormatDate";
+    }
+
+    /**
+     * Set the pattern to use to convert a String value into a date.  This
+     * will be used before the common formats.
+     * @param pattern the pattern representing the string input
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setStringInputPattern(String pattern)
+    {
+        _stringInput = pattern;
+    }
+
+    /**
+     * Create the internal Formatter instance and perform the formatting.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        Tag parentTag = getParent();
+        if (parentTag instanceof Formattable) {
+            DateFormatter formatter = new DateFormatter();
+            formatter.setPattern(_pattern);
+            formatter.setLocale(getLocale());
+            formatter.setInputPattern(_stringInput);
+            Formattable parent = (Formattable) parentTag;
+            parent.addFormatter(formatter);
+        }
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Internal FormatTag.Formatter which uses SimpleDateFormat.
+     */
+    public static class DateFormatter extends FormatTag.Formatter
+    {
+        private Locale locale;
+        private String inputPattern;
+
+        public void setLocale(Locale locale)
+        {
+            this.locale = locale;
+        }
+
+        public void setInputPattern(String pattern)
+        {
+            inputPattern = pattern;
+        }
+
+        public String format(Object dataToFormat) throws JspException
+        {
+            if (dataToFormat == null) {
+                return null;
+            }
+            StringBuilder formattedString = new StringBuilder(32);
+
+            SimpleDateFormat dateFormat = null;
+            if (getPattern() != null) {
+                if (locale != null) {
+                    dateFormat = new SimpleDateFormat(getPattern(), locale);
+                }
+                else {
+                    dateFormat = new SimpleDateFormat(getPattern());
+                }
+            }
+            else {
+                dateFormat = new SimpleDateFormat();
+            }
+
+            if (dataToFormat instanceof java.sql.Date) {
+
+                java.sql.Date date = (java.sql.Date) dataToFormat;
+                formattedString.append(dateFormat.format(date));
+            }
+            else if (dataToFormat instanceof java.util.Date) {
+
+                java.util.Date date = (java.util.Date) dataToFormat;
+                formattedString.append(dateFormat.format(date));
+            }
+            else if (dataToFormat instanceof java.util.Calendar) {
+                java.util.Calendar c = (java.util.Calendar) dataToFormat;
+                java.util.Date date = new java.util.Date(c.getTimeInMillis());
+                formattedString.append(dateFormat.format(date));
+            }
+            else if (dataToFormat instanceof String) {
+                if (dataToFormat.equals("")) {
+                    return "";
+                }
+
+                DateFormat df = null;
+                if (inputPattern != null) {
+                    try {
+                        df = new SimpleDateFormat(inputPattern);
+                    }
+                    catch (IllegalArgumentException e) {
+                        String s = Bundle.getString("Tags_formatDate_StringPatternError",
+                                new Object[]{inputPattern, e.getMessage()});
+                        logger.error(s);
+                        throw new JspException(s);
+                    }
+
+                    // let try and convert this to some type of date
+                    java.util.Date date = df.parse((String) dataToFormat,
+                            new ParsePosition(0));
+                    if (date != null) {
+                        formattedString.append(dateFormat.format(date));
+                        return formattedString.toString();
+                    }
+                }
+
+
+                // this will loop through all of the formats and
+                // try to convert the date to one of them.
+                int i;
+                for (i = 0; i < commonFormats.length; i++) {
+
+                    if (commonFormats[i] != null) {
+                        df = new SimpleDateFormat(commonFormats[i]);
+                    }
+                    else {
+                        df = new SimpleDateFormat();
+
+                    }
+
+                    // let try and convert this to some type of date
+                    java.util.Date date = df.parse((String) dataToFormat,
+                            new ParsePosition(0));
+                    if (date != null) {
+                        formattedString.append(dateFormat.format(date));
+                        break;
+                    }
+                }
+                if (i == commonFormats.length) {
+                    String s = Bundle.getString("Tags_formatDate_String_Error",
+                            new Object[]{dataToFormat});
+                    logger.error(s);
+                    throw new JspException(s);
+                }
+            }
+            else {
+                String s = Bundle.getString("Tags_formatDate_Type_Error",
+                        new Object[]{dataToFormat.getClass().getName()});
+                logger.error(s);
+                throw new JspException(s);
+            }
+
+            return formattedString.toString();
+        }
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _stringInput = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatNumber.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatNumber.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,226 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import java.text.DecimalFormat;
+import java.util.Locale;
+
+/**
+ * A formatter used to format numbers.  This formatter uses patterns that conform to
+ * <code>java.text.NumberFormat</code> pattern syntax.  FormatNumber calls <code>toString()</code> on
+ * the object to be formatted to get the value the pattern is applied to.
+ *
+ * The valid FormatNumber types are:
+ * <ul>
+ * <li>number</li>
+ * <li>currency</li>
+ * <li>percent</li>
+ * </ul>
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">country</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The country code used to determine the locale.</td></tr>
+ * <tr><th rowspan="2">language</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The language code used to determine the locale.</td></tr>
+ * <tr><th rowspan="2">pattern</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The NumberFormat pattern used to format this number.</td></tr>
+ * <tr><th rowspan="2">type</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The type of the format to apply (number, currency, or percent).</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this first sample, given the value "12345678", the enclosing tag's text will be formatted
+ * to 12,345,678.00.
+ * <pre>
+ * &lt;netui:formatNumber pattern="#,###,###.00" />
+ * </pre>
+ *
+ * <p>In the next sample, given the value ".33", the enclosing tag's text will be formatted to 33%.</p>
+ * <pre>
+ * &lt;netui:formatNumber type="percent" />
+ * </pre>
+ *
+ * <p>In the next sample, given the value "14.317", the enclosing tag's text will be formatted
+ * to $14.32 (assumes US locale for currency).</p>
+ * <pre>
+ * &lt;netui:formatNumber type="currency" />
+ * </pre>
+ * @see FormatDate
+ * @see FormatString
+ *
+ * @netui:tag name="formatNumber" description="A formatter used to format numbers."
+ * @netui.tldx:tag requiredparent="label select textArea textBox data:anchorColumn data:basicColumn data:expressionColumn"
+ * requiredchild="#nothing"
+ * renderer="workshop.netui.jspdesigner.tldx.FormatNumberRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class FormatNumber extends FormatTag
+{
+    /**
+     * The type of number format to be used.
+     */
+    protected String type;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "FormatNumber";
+    }
+
+    /**
+     * Gets the type of number format to be used.
+     * @return the type.
+     */
+    public String getType()
+    {
+        return type;
+    }
+
+    /**
+     * Sets the type of number format to be used (number, currency, or percent).
+     * @param type - the number format type.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setType(String type)
+    {
+        this.type = type;
+    }
+
+    /**
+     * Create the internal Formatter instance and perform the formatting.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        Tag parentTag = getParent();
+        if (parentTag instanceof Formattable) {
+            NumberFormatter formatter = new NumberFormatter();
+            formatter.setPattern(_pattern);
+            formatter.setType(type);
+            formatter.setLocale(getLocale());
+            Formattable parent = (Formattable) parentTag;
+            parent.addFormatter(formatter);
+        }
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        type = null;
+    }
+
+    /**
+     * Internal FormatTag.Formatter which uses NumberFormat.
+     */
+    public static class NumberFormatter extends FormatTag.Formatter
+    {
+        private String type;
+        private Locale locale;
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public void setLocale(Locale locale)
+        {
+            this.locale = locale;
+        }
+
+        public String format(Object dataToFormat) throws JspException
+        {
+            if (dataToFormat == null) {
+                return null;
+            }
+            StringBuilder formattedString = new StringBuilder(32);
+            DecimalFormat numberFormat = null;
+
+            if (locale == null) {
+                if ((type == null) || (type.equals("number"))) {
+                    numberFormat = (DecimalFormat) java.text.NumberFormat.getNumberInstance();
+                }
+                else if (type.equals("currency")) {
+                    numberFormat = (DecimalFormat) java.text.NumberFormat.getCurrencyInstance();
+                }
+                else if (type.equals("percent")) {
+                    numberFormat = (DecimalFormat) java.text.NumberFormat.getPercentInstance();
+                }
+                else {
+                    throw new JspException(Bundle.getString("Tags_NumberFormatWrongType"));
+                }
+            }
+            else {
+                if ((type == null) || (type.equals("number"))) {
+                    numberFormat = (DecimalFormat) java.text.NumberFormat.getNumberInstance(locale);
+                }
+                else if (type.equals("currency")) {
+                    numberFormat = (DecimalFormat) java.text.NumberFormat.getCurrencyInstance(locale);
+                }
+                else if (type.equals("percent")) {
+                    numberFormat = (DecimalFormat) java.text.NumberFormat.getPercentInstance(locale);
+                }
+                else {
+                    throw new JspException(Bundle.getString("Tags_NumberFormatWrongType"));
+                }
+            }
+
+            try {
+                if (getPattern() != null)
+                    numberFormat.applyPattern(getPattern());
+            }
+            catch (Exception e) {
+                throw new JspException(Bundle.getString("Tags_FormatException", e.getMessage()), e);
+            }
+            if (dataToFormat.toString().length() == 0) {
+                return "";
+            }
+            try {
+                double number = Double.parseDouble(dataToFormat.toString());
+                formattedString.append(numberFormat.format(number));
+            }
+            catch (Exception e) {
+                throw new JspException(Bundle.getString("Tags_FormatException", e.getMessage()), e);
+            }
+
+            return formattedString.toString();
+
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatString.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatString.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,235 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+//java imports
+
+//internal imports
+
+//external imports
+
+/**
+ * A formatter used to format strings.  FormatString uses the following pattern syntax:
+ * <p>
+ * The '#' character gets replaced by the next character in the string getting formatted,
+ * while other characters get put in as literals.  For example:
+ * <p>
+ * String "5555555555" with pattern "(###)###-####" would result in: (555)555-5555.
+ * <p>
+ * The '*' character will display all characters in the string at that point in the pattern.  For example:
+ * <p>
+ * String "123456" with pattern "#-*!" would result in: 1-23456!
+ * <p>
+ * If a result with a '#' pr '*' character showing is desired, the '#' or '*' needs to
+ * be escaped with the '$' character.  For example:
+ * <p>
+ * String "ABCD" with pattern "$#-####" would result in: #-ABCD.
+ * <p>
+ * To show a '$' in the result, the '$' character needs to be escaped.  For example:
+ * <p>
+ * String "1234" with pattern "$$#,###" would result in: $1,234
+ * <p>
+ * If the truncate attribute is set to "true", characters in the string that exceed the pattern
+ * will be dropped.  Otherwise, they will be appended to the end of the formatted string.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">country</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The country code used to determine the locale</td></tr>
+ * <tr><th rowspan="2">language</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The language code used to determine the locale</td></tr>
+ * <tr><th rowspan="2">pattern</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The pattern used to format this string</td></tr>
+ * <tr><th rowspan="2">truncate</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean specifying whether characters that exceed the pattern's length
+ * should be dropped.</td></tr>
+ *
+ * </table>
+ * @example In this sample, the enclosing tag's text will be formatted to fit like (555)555-5555,
+ * and additonal text beyond the pattern will be truncated.
+ * <pre>&lt;netui:formatString pattern="(###)###-####" truncate="true"/> </pre>
+ *
+ * @see FormatDate
+ * @see FormatNumber
+ *
+ * @netui:tag name="formatString" description="A formatter used to format strings."
+ * @netui.tldx:tag requiredparent="label select textArea textBox data:anchorColumn data:basicColumn data:expressionColumn"
+ * requiredchild="#nothing"
+ * renderer="workshop.netui.jspdesigner.tldx.FormatStringRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ * @netui:attribute name="pattern" required="true" rtexprvalue="true"
+ */
+public class FormatString extends FormatTag
+{
+    protected boolean truncate = false;     // Whether or not pattern-exceeding characters should be dropped.
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "FormatString";
+    }
+
+    /**
+     * Sets whether or not pattern-exceeding characters should be dropped.
+     * @param truncate - "true" or "false"
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setTruncate(boolean truncate)
+    {
+        this.truncate = truncate;
+    }
+
+    /**
+     * Create the internal Formatter instance and perform the formatting.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        Tag parentTag = getParent();
+        if (parentTag instanceof Formattable) {
+            StringFormatter formatter = new StringFormatter();
+            formatter.setPattern(_pattern);
+            formatter.setTruncate(truncate);
+            Formattable parent = (Formattable) parentTag;
+            parent.addFormatter(formatter);
+        }
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        truncate = false;
+    }
+
+    /**
+     * Internal FormatTag.Formatter which performs its own string parsing and formatting.
+     */
+    public static class StringFormatter extends FormatTag.Formatter
+    {
+        private boolean truncate;
+
+        public boolean getTruncate()
+        {
+            return truncate;
+        }
+
+        public void setTruncate(boolean truncate)
+        {
+            this.truncate = truncate;
+        }
+
+        public String format(Object dataToFormat) throws JspException
+        {
+            if (dataToFormat == null) {
+                return null;
+            }
+            StringBuilder formattedString = new StringBuilder(32);
+            int index = 0;
+            int patternIndex = 0;
+            String unformattedString = dataToFormat.toString();
+
+            int length = unformattedString.length();
+            int patternLength = getPattern().length();
+
+            int ignoreNumbers = 0;
+
+            //Cycle through each character in the string
+            for (index = 0; index < length; index++) {
+                if (patternIndex < patternLength) {
+                    boolean loop = true;
+                    while (loop) {
+                        char thisChar = getPattern().charAt(patternIndex);
+                        if (thisChar == '#')
+                            break;
+                        else if (thisChar == '*') {
+                            ignoreNumbers++;
+                            break;
+                        }
+                        else if (thisChar == '$') {
+                            if ((patternIndex + 1 < patternLength) && (getPattern().charAt(patternIndex + 1) == '$')) {
+                                patternIndex++;
+                            }
+                            else if ((patternIndex + 1 < patternLength) && (getPattern().charAt(patternIndex + 1) == '#')) {
+                                patternIndex++;
+                            }
+                            else if ((patternIndex + 1 < patternLength) && (getPattern().charAt(patternIndex + 1) == '*')) {
+                                patternIndex++;
+                            }
+                        }
+                        formattedString = formattedString.append(getPattern().charAt(patternIndex));
+                        patternIndex++;
+                        if (patternIndex >= patternLength)
+                            loop = false;
+                    }
+                }
+
+                if ((patternIndex >= patternLength) && (truncate))
+                    break;
+
+                if (ignoreNumbers == 1) {
+                    formattedString.append(unformattedString.substring(index));
+                    ignoreNumbers++;
+                }
+                else if (ignoreNumbers > 1) {
+                    //Ignore
+                }
+                else {
+                    formattedString.append(unformattedString.charAt(index));
+                }
+                patternIndex++;
+            }
+
+            if (patternIndex < patternLength) {
+                //Throw in the rest of the pattern
+                while (patternIndex < patternLength) {
+                    char patternChar = getPattern().charAt(patternIndex);
+                    if (patternChar == '#') {
+                        formattedString.append(" ");
+                    }
+                    else {
+                        formattedString.append(patternChar);
+                    }
+                    patternIndex++;
+                }
+            }
+
+            return formattedString.toString();
+
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/FormatTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,158 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import java.util.Locale;
+
+/**
+ * Abstract base class for formatting tags.  Provides the basic formatting properties,
+ * as well as the base for the internal FormatTag.Formatter class.
+ */
+public abstract class FormatTag extends AbstractBaseTag
+{
+    private static final Logger logger = Logger.getInstance(FormatTag.class);
+
+    private String _language = null;
+    private String _country = null;
+    protected String _pattern = null;        // The pattern used by a FormatTag to do its formatting.
+
+    /**
+     * Sets the language code for the locale.
+     * @param language - the language code
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setLanguage(String language)
+    {
+        _language = language;
+    }
+
+    /**
+     * Sets the country code for the locale.
+     * @param country - the country code
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setCountry(String country)
+    {
+        _country = country;
+    }
+
+    /**
+     * Returns the locale based on the country and language.
+     * @return the locale
+     */
+    public Locale getLocale()
+    {
+        Locale loc = null;
+        if (_language != null || _country != null) {
+            // language is required
+            if (_language == null) {
+                String s = Bundle.getString("Tags_LocaleRequiresLanguage",
+                        new Object[]{_country});
+                logger.error(s);
+                return super.getUserLocale();
+            }
+
+            if (_country == null)
+                loc = new Locale(_language);
+            else
+                loc = new Locale(_language, _country);
+        }
+        else
+            loc = super.getUserLocale();
+
+        return loc;
+    }
+
+    /**
+     * Sets the pattern to be used by this FormatTag.
+     * @param pattern - the pattern to be used
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setPattern(String pattern)
+            throws JspException
+    {
+        if ((pattern == null) || (pattern.length() == 0)) {
+            registerTagError(Bundle.getString("Tags_NoFormatPattern"), null);
+        }
+        _pattern = pattern;
+    }
+
+    /**
+     * Create the internal Formatter instance and perform the formatting.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        Tag parentTag = getParent();
+        if (parentTag instanceof Formattable) {
+            Formatter formatter = new Formatter();
+            formatter.setPattern(_pattern);
+            Formattable parent = (Formattable) parentTag;
+            parent.addFormatter(formatter);
+        }
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _language = null;
+        _country = null;
+        _pattern = null;
+    }
+
+    /**
+     * Internal FormatTag.Formatter which performs the actual formatting.
+     */
+    public static class Formatter
+    {
+        private String pattern;
+
+        public String getPattern()
+        {
+            return pattern;
+        }
+
+        public void setPattern(String pattern)
+        {
+            this.pattern = pattern;
+        }
+
+        public String format(Object dataToFormat) throws JspException
+        {
+            //Default implementation
+            if (dataToFormat == null)
+                return null;
+            else
+                return dataToFormat.toString();
+        }
+    }
+
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Formattable.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Formattable.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+// @todo: rename to IFormattable
+
+/**
+ * Interface that indicates whether or not a tag's output can be formatted with by a <code>FormatTag</code>.
+ */
+public interface Formattable
+{
+    /**
+     * Adds a FormatTag.Formatter instance to the tag's set of formatters.
+     * @param formatter - the formatter instance to add to the Formattable tag's set of formatters.
+     */
+    public void addFormatter(FormatTag.Formatter formatter);
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,271 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.InputHiddenTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+
+
+/**
+ * Generates a hidden tag with a given value.  Hidden ignores its body content.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">dataInput</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The dataInput tag overrides using the dataSource for the input of the value.
+ * It allows a hidden field to read it's value from one place and return the value to a new
+ * destination.</td></tr>
+ * <tr><th rowspan="2">dataSource</th><td>Yes</td><td>No</td><td>Read / Write</td></tr>
+ * <tr><td colspan="3">The name of a form bean property or an expression that resolves
+ * to a bean property.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No<td></tr>
+ * <tr><td colspan="3">The ID of this button used by the enclosing html tag to get the tag's
+ * real ID attribute for JavaScript and focus purposes. The real ID attribute id is generated
+ * based upon this name.</td></tr>
+ * </table>
+ * @example In this sample, the Hidden tag is written using the value from the form bean's status property.
+ * <pre>&lt;netui:hidden dataSource="{actionForm.status}"  /></pre>
+ *
+ * @netui:tag name="hidden" description="Generates a hidden tag with a given value."
+ * @netui.tldx:tag requiredchild="attribute"
+ * renderer="workshop.netui.jspdesigner.tldx.HiddenRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class Hidden
+        extends HtmlDataSourceTag
+{
+    private InputHiddenTag.State _state = new InputHiddenTag.State();
+
+    private String _value; // The value of the Hidden field.
+    private String _tagId;
+    private Object _dataInput;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Hidden";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>type</code>
+     * or <code>value</code> attributes.
+     * @param name  The name of the attribute
+     * @param value The value of the attribute
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name == null)
+            return;
+
+        if (name.equals(TYPE) || name.equals(VALUE)) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Return the ID of the hidden.
+     * @return the ID.
+     */
+    public String getTagId()
+    {
+        return _tagId;
+    }
+
+    /**
+     * Set the ID of the hidden.
+     * @param tagId - the ID.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setTagId(String tagId)
+    {
+        _tagId = tagId;
+    }
+
+    /**
+     * Set the data input.  This value will override the <code>
+     * dataSource</code> and provide the input value on the select box.
+     * @param dataInput the value of the input to the page.  This value
+     *                  may contain an expression.
+     * @netui:attribute required="false" rtexprvalue="true" type="java.lang.Object"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDataInput(Object dataInput)
+    {
+        _dataInput = dataInput;
+    }
+
+    /**
+     * Render the Hidden tag
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content of the Hidden.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+
+        if (bodyContent != null) {
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Generate the hidden input tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        String idScript = null;
+        Object val = evaluateDataSource();
+        String name = null;
+
+        ServletRequest req = pageContext.getRequest();
+
+        if (_dataInput != null) {
+            val = _dataInput.toString();
+        }
+
+        // if there were expression errors report them
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        if (val != null) {
+            _value = val.toString();
+        }
+
+        // Create an appropriate "input" element based on our parameters
+        StringBuilder results = new StringBuilder(32);
+
+        if (_dataSource != null) {
+            name = doNaming();
+            _state.name = name;
+        }
+
+        if (_value != null)
+            _state.value = HtmlUtils.filter(_value);
+
+        // correct for null text here
+        if (_state.value == null)
+            _state.value = "";
+
+        // output the id
+        _state.name = doNaming();
+
+        // we assume that tagId will over have override id if both
+        // are defined.
+        if (_tagId != null) {
+            _state.id = _tagId;
+            idScript = renderTagId(_state, null, true, false);
+        }
+
+        TagRenderingBase hiddenTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_HIDDEN_TAG, req);
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+        hiddenTag.doStartTag(results, _state);
+        hiddenTag.doEndTag(results);
+
+        if (idScript != null)
+            results.append(idScript);
+
+        write(results.toString());
+
+        // Continue processing this page
+        localRelease();
+        return SKIP_BODY;
+
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _value = null;
+        _tagId = null;
+        _dataInput = null;
+    }
+
+    /* ==================================================================
+     *
+     * This tag's publically exposed HTML, CSS, and JavaScript attributes
+     *
+     * ==================================================================
+     */
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(String tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.TABINDEX, tabindex);
+    }
+
+    /**
+     * Gets the tabIndex of the rendered html tag.
+     * @return the tabindex.
+     */
+    //public String getTabindex()
+    //{
+    //    return _state.getAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.TABINDEX);
+    //}
+
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Html.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Html.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,428 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractPageError;
+import org.apache.beehive.netui.tags.ErrorReporter;
+import org.apache.beehive.netui.tags.rendering.HtmlTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.struts.Globals;
+import org.apache.struts.util.ResponseUtils;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import java.util.ArrayList;
+import java.util.Locale;
+
+/**
+ * Generates the html element and performs error handling within its body.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">dir</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The direction of the HTML, left-to-right (LTR) or right-to-left (RTL).</td></tr>
+ * <tr><th rowspan="2">useLocale</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean specifying whether the html output should include
+ * <code>xml:lang=defaultLocale.getLanguage()</code>.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, the Html tag uses the default locale and the direction of the HTML is
+ * left-to-right (LTR).
+ * <pre>&lt;netui:html dir="LTR" useLocale="true"  /></pre>
+ *
+ * <p><b>JavaScript</b></p>
+ * <p>The Html tag writes out the following JavaScript functions:
+ * <pre>
+ * function getNetuiTagName(id) {
+ *     return netui_names[id]; }
+ *
+ * function getNetuiTagName(id, tag) {
+ *     if (scopeId == "")
+ *         return netui_names[id];
+ *     else
+ *         return netui_names[portletId__id]; }
+ *
+ * function getScopeId(tag) {
+ *     if (tag == null) return "";
+ *     if (tag.scopeId != null) return tag.scopeId;
+ *         return getScopeId(tag.parentElement); }
+ *
+ * results.append("\nfunction getNetuiTagName(id) {\n");
+ *      results.append("\treturn ");
+ *      results.append(NAMES_OBJECT);
+ *      results.append("[id]; }\n\n");
+ *
+ *      results.append("\nfunction getNetuiTagName(id, tag) {\n");
+ *      results.append("\tvar scopeId = getScopeId(tag);\n");
+ *      results.append("\tif (scopeId == \"\")\n");
+ *      results.append("\t\treturn ");
+ *      results.append(NAMES_OBJECT);
+ *      results.append("[id];\n");
+ *      results.append("\telse\n\t\treturn ");
+ *      results.append(NAMES_OBJECT);
+ *      results.append("[portletId + \"__\" + id]; }\n\n");
+ *
+ *      results.append("\nfunction getScopeId(tag) {\n");
+ *      results.append("\tif (tag == null) return \"\";\n");
+ *      results.append("\tif (tag.scopeId != null) return tag.scopeId;\n");
+ *      results.append("\treturn getScopeId(tag.parentElement);\n}\n\n");
+ * </pre>
+ *
+ * @netui:tag name="html" description="Generates the html element and performs error handling within its body."
+ * @netui.tldx:tag bodycontentpref="empty" renderer="workshop.netui.jspdesigner.tldx.HtmlRenderer"
+ * output="<html>|$children|</html>"
+ * whitespace="indent"
+ */
+public class Html extends ScriptContainer
+        implements ErrorReporter
+{
+    /**
+     * The HTML tag is registered into the request with this name.  This allows tags reporting
+     * errors to find the top level <code>ErrorReporter</code>.
+     */
+    public static final String HTML_TAG_ID = "netui:html";
+
+    /**
+     * Constant representing the document type html 4.01
+     */
+    public static final String HTML_401 = "html4-loose";
+
+    /**
+     * Constant representing the document type XHTML 1.0 Transitional.
+     */
+    public static final String XHTML_10 = "xhtml1-transitional";
+
+    private HtmlTag.State _state = new HtmlTag.State();
+    private TagRenderingBase _br;
+
+    private boolean _useLocale = false;     // include xml:lang=defaultLocale.getLanguage()
+    private String _saveBody = null;        // the saved body content
+    private ArrayList _errors;              // errors
+    private ErrorReporter _containerErrors; //Check to see if there is a parent error reporter
+    private int _uniqueId = 0;              // unique id sequence
+
+    private String _docType;                // The document type
+
+    private int _rendering = TagRenderingBase.UNKNOWN_RENDERING;
+
+    /**
+     * Returns the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Html";
+    }
+
+    /**
+     * This method will return the TagRenderBase enum value for the document type.  The default
+     * value is HTML 4.01.
+     * @return
+     */
+    public int getTargetDocumentType()
+    {
+        if (_rendering != TagRenderingBase.UNKNOWN_RENDERING)
+            return _rendering;
+
+        if (_docType != null) {
+            if (_docType.equals(HTML_401))
+                _rendering = TagRenderingBase.HTML_RENDERING;
+            else if (_docType.equals(XHTML_10))
+                _rendering = TagRenderingBase.XHTML_RENDERING;
+            else
+                _rendering = TagRenderingBase.HTML_RENDERING;
+        }
+        else {
+            _rendering = TagRenderingBase.HTML_RENDERING;
+        }
+        return _rendering;
+    }
+
+    /////////////////////////// Attributes ////////////////////////////
+
+    /**
+     * Sets the dir value of the html.
+     * @param dir - "LTR" or "RTL"
+     * @netui:attribute required="false"  rtexprvalue="true"
+     */
+    public void setDir(String dir)
+    {
+        _state.dir = dir;
+    }
+
+    /**
+     * Gets whether the default locale's language should be used.
+     * @return true or false
+     */
+    public boolean isUseLocale()
+    {
+        return _useLocale;
+    }
+
+    /**
+     * Sets whether the default locale's language should be used.
+     * @param locale - true or false
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setUseLocale(boolean locale)
+    {
+        _useLocale = locale;
+    }
+
+    /**
+     */
+    public String getDocumentType()
+    {
+        return _docType;
+    }
+
+    /**
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setDocumentType(String docType)
+    {
+        _docType = docType;
+    }
+
+
+    public int doStartTag() throws JspException
+    {
+        // check to see if there is a scope id
+        ServletRequest req = pageContext.getRequest();
+        _containerErrors = (ErrorReporter) req.getAttribute(CONTAINER_ERRORS);
+
+        //Make this tag available to child tags
+        req.setAttribute(HTML_TAG_ID, this);
+
+        // set the local
+        Locale currentLocale = currentLocale();
+        if (currentLocale == null) {
+            currentLocale = Locale.getDefault();
+        }
+
+        // write out the html...
+        StringBuilder sb = new StringBuilder(32);
+        _state.lang = currentLocale.getLanguage();
+
+        _br = TagRenderingBase.Factory.getRendering(TagRenderingBase.HTML_TAG, req);
+        _br.doStartTag(sb, _state);
+        sb.append("\n");
+
+        write(sb.toString());
+
+        // allow the super class to write out the <div>
+        super.doStartTag();
+
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save any body content of this tag, which will generally be the
+     * option(s) representing the values displayed to the user.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (bodyContent != null) {
+            String value = bodyContent.getString();
+            bodyContent.clearBody();
+            if (value == null)
+                value = "";
+            _saveBody = value.trim();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Write out the body content and report any errors that occured.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+
+        // For backward compatbility with 8.1, we will continue to write this here
+        // For runAtClient and 9.0 JavaScript support we will run this
+        // here which puts all of the code at the end right before the </html> tag.
+        // For backward compatbility we leave it at the top.
+        if (isLegacy()) {
+            String script = writeScriptBlock();
+            ResponseUtils.write(pageContext, script);
+        }
+
+        StringBuilder sb = new StringBuilder(128);
+        if (_saveBody != null)
+            sb.append(_saveBody);
+
+        if (!isInitScriptWritten()) {
+            String s = Bundle.getString("Tags_ClientReqScriptHeader", null);
+            registerTagError(s, null);
+        }
+
+        // if there are errors then we should output the error table
+        reportCollectedErrors(sb);
+
+        // @todo: this should also be written out by the body tag if it is present
+        if (getScopeId() != null) {
+            sb.append("</div>");
+        }
+
+        // in non-legacy mode, we will the script can be written out by another tag.
+        // typically this would be the <body> tag.  If it hasn't been written out, then we
+        // will right it out now.
+        // @todo: should we just require a body tag and not do this?
+        if (!isLegacy()) {
+            if (!isScriptWritten() && isInitScriptWritten()) {
+                writeScript(sb);
+            }
+        }
+
+        // close the html tag
+        sb.append("\n");
+        _br.doEndTag(sb);
+        write(sb.toString());
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Add an error to the errors being reported by this tag.
+     * @param ape - The AbstractPageError to add
+     */
+    public void addError(AbstractPageError ape)
+    {
+        assert (ape != null);
+
+        // if this is not the error reporter, then find an error reporter above this one.
+        if (_containerErrors == null && _errors == null) {
+            Tag par = getParent();
+            while (par != null) {
+                if (par instanceof ErrorReporter) {
+                    _containerErrors = (ErrorReporter) par;
+                    break;
+                }
+                par = par.getParent();
+            }
+        }
+
+        // if there is an error reporter, add the error and return
+        if (_containerErrors != null) {
+            _containerErrors.addError(ape);
+            return;
+        }
+
+        // This is the error reporter.
+        if (_errors == null) {
+            _errors = new ArrayList();
+        }
+
+        // add the error and update it
+        _errors.add(ape);
+        ape.errorNo = _errors.size();
+    }
+
+    /**
+     * This method will return the next unique integer within the scope
+     * of this tag.
+     * @return a unique integer
+     */
+    public int getNextId()
+    {
+        return _uniqueId++;
+    }
+
+    /**
+     * Return an ArrayList of the errors
+     * @return an <code>ArrayList</code> of all errors.
+     */
+    public ArrayList returnErrors()
+    {
+        if (_containerErrors != null)
+            return _containerErrors.returnErrors();
+        ArrayList e = _errors;
+        _errors = null;
+        return e;
+    }
+
+    /**
+     * This boolean indicates if an ErrorReporter is reporting errors
+     * or not.  The caller should check this before calling addError
+     * because the ErrorReporter may be off for some reason.
+     * @return a boolean indicating if the tag is reporting errors or not.
+     */
+    public boolean isReporting()
+    {
+        return true;
+    }
+
+
+    /**
+     * Return the current Locale for this request, creating a new one if
+     * necessary.  If there is no current Locale, and locale support is not
+     * requested, return <code>null</code>.
+     */
+    protected Locale currentLocale()
+    {
+        ServletRequest req = pageContext.getRequest();
+
+        // Create a new session if necessary
+        HttpSession session = pageContext.getSession();
+        if ((_useLocale) && (session == null))
+            session = ((HttpServletRequest) req).getSession();
+        if (session == null)
+            return null;
+
+        // Return any currently set Locale in our session
+        Locale current = (Locale) session.getAttribute(Globals.LOCALE_KEY);
+        if (current != null)
+            return current;
+
+        // Configure a new current Locale, if requested
+        if (!_useLocale)
+            return (null);
+        current = req.getLocale();
+        if (current != null)
+            session.setAttribute(Globals.LOCALE_KEY, current);
+        return current;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _br = null;
+
+        _useLocale = false;
+        _saveBody = null;
+        _errors = null;
+        _containerErrors = null;
+        _uniqueId = 0;
+
+        pageContext.getRequest().removeAttribute(HTML_TAG_ID);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlBaseTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlBaseTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,505 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.IAttributeConsumer;
+import org.apache.beehive.netui.tags.IHtmlAttrs;
+import org.apache.beehive.netui.tags.IHtmlIdWriter;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * [Base] Anchor, Form, Image, ImageAnchor (Image), Label, SelectOption
+ * [FocusBase] Button, CheckBoxOption, ImageButton, RadioButtonOption
+ * [DataSource] FileUpload
+ * [DefaultableDatSource] CheckBox, TextArea, TextBox
+ * [OptionsDataSource] Select
+ * [GroupDataSource] CheckBoxGroup, RadioButtonGroup
+ */
+// @todo: CheckBoxOption, RadioButtonOption don't have a tagId attribute
+
+abstract public class HtmlBaseTag extends AbstractBaseTag
+        implements HtmlConstants, IAttributeConsumer, IHtmlAttrs
+{
+    /**
+     * This is the name of a request scoped attribute that contains the status of what JavaScript processing
+     * has taken place.
+     */
+    public static final String JAVASCRIPT_STATUS = "netui.javascript.status";
+
+    /**
+     * Web.xml initialization parameter for attribute transparency
+     */
+    private static final String ID_TRANSPARENCY = "netui.ID_TRANSPARENCY";
+    private static Boolean _transparent;
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    abstract protected AbstractHtmlState getState();
+
+    public static boolean isIdTransparency(ServletContext ctxt)
+    {
+        if (_transparent != null)
+            return _transparent.booleanValue();
+
+        String s = ctxt.getInitParameter(ID_TRANSPARENCY);
+        System.err.println("Id Transparency:" + s);
+        _transparent = new Boolean(s);
+        return _transparent.booleanValue();
+    }
+
+    //***************************** The IHtmlCore properties *********************************/
+
+    /**
+     * Sets the style of the rendered html tag.
+     * @param style - the html style.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.JspStyleProperty" category="format"
+     */
+    public void setStyle(String style)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.style = style;
+    }
+
+    /**
+     * Sets the style class of the rendered html tag.
+     * @param styleClass - the html style class.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="Format"
+     */
+    public void setStyleClass(String styleClass)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.styleClass = styleClass;
+    }
+
+    /**
+     * Set the ID of the tag.
+     * @param tagId - the tagId.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setTagId(String tagId)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.id = tagId;
+    }
+
+    /**
+     * Return the ID of the tag.  The id may be rewritten by the container (such
+     * as a portal) to make sure it is unique.  JavaScript my lookup the actual id
+     * of the element by looking it up in the <code>netui_names</code> table written
+     * into the HTML.
+     * @return the tagId.
+     */
+    public String getTagId()
+    {
+        AbstractHtmlState tsh = getState();
+        return tsh.id;
+    }
+
+    /**
+     * Sets the value of the title attribute.
+     * @param title
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTitle(String title)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TITLE, title);
+    }
+
+    /******************** the HtmlI18n properties ******************************************/
+    /**
+     * Sets the lang attribute for the HTML element.
+     * @param lang
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="internationalization"
+     */
+    public void setLang(String lang)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, LANG, lang);
+    }
+
+    /**
+     * Sets the lang attribute for the HTML element.
+     * @param dir
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="internationalization"
+     */
+    public void setDir(String dir)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, DIR, dir);
+    }
+
+    //******************* the HtmlEvent Properties  ****************************************
+    /**
+     * Gets the onClick javascript event.
+     * @return the onClick event.
+     */
+    public String getOnClick()
+    {
+        AbstractHtmlState tsh = getState();
+        return tsh.getAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONCLICK);
+    }
+
+    /**
+     * Sets the onClick javascript event.
+     * @param onclick - the onClick event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnClick(String onclick)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONCLICK, onclick);
+    }
+
+    /**
+     * Sets the onDblClick javascript event.
+     * @param ondblclick - the onDblClick event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnDblClick(String ondblclick)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONDBLCLICK, ondblclick);
+    }
+
+    /**
+     * Sets the onKeyDown javascript event.
+     * @param onkeydown - the onKeyDown event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnKeyDown(String onkeydown)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONKEYDOWN, onkeydown);
+    }
+
+    /**
+     * Sets the onKeyPress javascript event.
+     * @param onkeypress - the onKeyPress event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnKeyPress(String onkeypress)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONKEYPRESS, onkeypress);
+    }
+
+    /**
+     * Sets the onKeyUp javascript event.
+     * @param onkeyup - the onKeyUp event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnKeyUp(String onkeyup)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONKEYUP, onkeyup);
+    }
+
+    /**
+     * Sets the onMouseDown javascript event.
+     * @param onmousedown - the onMouseDown event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnMouseDown(String onmousedown)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONMOUSEDOWN, onmousedown);
+    }
+
+    /**
+     * Sets the onMouseMove javascript event.
+     * @param onmousemove - the onMouseMove event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnMouseMove(String onmousemove)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONMOUSEMOVE, onmousemove);
+    }
+
+    /**
+     * Sets the onMouseOut javascript event.
+     * @param onmouseout - the onMouseOut event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnMouseOut(String onmouseout)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONMOUSEOUT, onmouseout);
+    }
+
+    /**
+     * Sets the onMouseOver javascript event.
+     * @param onmouseover - the onMouseOver event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnMouseOver(String onmouseover)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONMOUSEOVER, onmouseover);
+    }
+
+    /**
+     * Sets the onMouseUp javascript event.
+     * @param onmouseup - the onMouseUp event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnMouseUp(String onmouseup)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONMOUSEUP, onmouseup);
+    }
+
+
+    //******************* Helper Routines  *********************************/
+
+    protected String getJavaScriptAttribute(String name)
+    {
+        AbstractHtmlState tsh = getState();
+        return tsh.getAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, name);
+    }
+
+    /**
+     * Attribute implementation.
+     * @param name
+     * @param value
+     * @param tsh
+     * @throws JspException
+     */
+    protected void setStateAttribute(String name, String value, AbstractHtmlState tsh)
+            throws JspException
+    {
+        boolean error = false;
+
+        // validate the name attribute, in the case of an error simply return.
+        if (name == null || name.length() <= 0) {
+            String s = Bundle.getString("Tags_AttributeNameNotSet");
+            registerTagError(s, null);
+            error = true;
+        }
+
+        // it's not legal to set the id or name attributes this way
+        if (name != null && (name.equals(ID) || name.equals(NAME))) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+        }
+        if (error)
+            return;
+
+        // if there is a style or class we will let them override the base
+        if (name.equals(CLASS)) {
+            tsh.styleClass = value;
+            return;
+        }
+        else if (name.equals(STYLE)) {
+            tsh.style = value;
+            return;
+        }
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, name, value);
+    }
+
+    /**
+     * Base support for the <code>attribute</code> tag.  This requires that the tag buffer their body and
+     * write attribute in the end tag.  For the HTML tags it is not legal to set
+     * the <code>id</code> or <code>name</code> attributes.  In addition, the base tag does
+     * not allow facets to be set.  If the attribute is legal it will be added to the
+     * general expression map stored in the <code>AbstractHtmlState</code> of the tag.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (facet != null) {
+            String s = Bundle.getString("Tags_AttributeFacetNotSupported", new Object[]{facet});
+            registerTagError(s, null);
+        }
+        AbstractHtmlState tsh = getState();
+        setStateAttribute(name, value, tsh);
+    }
+
+    /**
+     * Returns the closest parent form tag, or null if there is none.
+     */
+    protected Form getNearestForm()
+    {
+        Tag parentTag = getParent();
+        while (parentTag != null) {
+            if (parentTag instanceof Form)
+                return (Form) parentTag;
+            parentTag = parentTag.getParent();
+        }
+        return null;
+    }
+
+    /**
+     * Return the closest IHtmlIdWritter.
+     */
+    protected IHtmlIdWriter getNearestIdWriter()
+    {
+        Tag parentTag = getParent();
+        while (parentTag != null) {
+            if (parentTag instanceof IHtmlIdWriter)
+                return (IHtmlIdWriter) parentTag;
+            parentTag = parentTag.getParent();
+        }
+        return null;
+    }
+
+    /**
+     * The method handles processing the id attribute.
+     * @param state
+     * @param realName
+     * @param outputAsId
+     * @param addToForm
+     * @return
+     */
+    protected final String renderTagId(AbstractHtmlState state, String realName, boolean outputAsId,
+                                       boolean addToForm)
+    {
+        assert (state != null) : "Parameter 'state' must not be null.";
+
+        if (state.id == null)
+            return null;
+
+        if (realName == null)
+            realName = rewriteName(state.id);
+
+        String idScript = addTagIdMapping(state.id, realName);
+
+        // form keeps track of this so that it can add this control to it's focus map
+        if (addToForm) {
+            Form parentForm = getNearestForm();
+            if (parentForm != null)
+                parentForm.addTagID(state.id, realName);
+        }
+
+        // some tags will output the id attribute themselves so they don't write this out
+        if (outputAsId)
+            state.id = realName;
+        else
+            state.id = null;
+
+        return idScript;
+    }
+
+    /**
+     * Free the state variables of this base class.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+    }
+
+    /**
+     * This method will add a tagId and value to the ScriptRepoter TagId map.
+     * The a ScriptContainer tag will create a JavaScript table that allows
+     * the container, such as a portal, to rewrite the id so it's unique.
+     * The real name may be looked up based  upon the tagId.
+     *
+     * If the no ScriptReporter is found, a script string will be returned
+     * to the caller so they can output the script block.
+     * @param tagId
+     * @param value
+     * @return
+     */
+    protected String addTagIdMapping(String tagId, String value)
+    {
+        String s = super.addTagIdMapping(tagId, value);
+        if (s == null)
+            return null;
+
+        // without a scripRepoter we need to create the actual
+        // JavaScript that will be written out
+        JavaScriptUtils jsu = getJavaScriptUtils((HttpServletRequest) pageContext.getRequest());
+        return jsu.getTagIdMapping(tagId, value);
+    }
+
+    /**
+     * This method will return the <code>javaScriptUtils</code> that is assocated
+     * with this request.  If this doesn't exist, it will be created before it is
+     * returned.
+     * @param request the HttpServletRequest associated with this request
+     * @return a <code>JavaScriptUtils</code> assocated with the request
+     */
+    static JavaScriptUtils getJavaScriptUtils(HttpServletRequest request)
+    {
+        assert (request != null);
+        JavaScriptUtils jsu = (JavaScriptUtils) request.getAttribute(JAVASCRIPT_STATUS);
+        if (jsu == null) {
+            jsu = new JavaScriptUtils();
+            request.setAttribute(JAVASCRIPT_STATUS, jsu);
+        }
+        assert (jsu != null);
+        return jsu;
+    }
+
+    /**
+     * This method will take any absolute URL that doesn't contain the scheme part and append
+     * the context path.  In other words, if the URL starts with '/' and the context path isn't
+     * present it will be added.
+     * @param url The url to be added.
+     * @return a url with the context path if the url begins with '/' otherwise the unchanged url.
+     */
+    protected String qualifyUrlToContext(String url)
+    {
+        /*
+        // This has been removed because we are not supporting this within the tags.  Question: should we?
+        if (url != null && url.length() > 0) {
+            if (url.charAt(0) == '/') {
+                HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+                String ctxtPath = request.getContextPath();
+                if (!url.startsWith(ctxtPath))  {
+                    url = ctxtPath + url;
+                    return url;
+                }
+            }
+        }
+        */
+        return url;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlConstants.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlConstants.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,519 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+public interface HtmlConstants
+{
+    //************************ The IHtmlCore properties  *********************************
+    /**
+     * The name of the <code>style</code> attribute.
+     */
+    static final String STYLE = "style";
+
+    /**
+     * The name of the <code>class</code> attribute.
+     */
+    static final String CLASS = "class";
+
+    /**
+     * The name of the <code>id</code> attribute.
+     */
+    static final String ID = "id";
+
+    /**
+     * The name of the <code>title</code> attribute.
+     */
+    static final String TITLE = "title";
+
+    //************************ The IHtmlI18n properties  *********************************
+    /**
+     * The name of the <code>dir</code> attribute.
+     */
+    static final String DIR = "dir";
+
+    /**
+     * The name of the <code>lang</code> attribute.
+     */
+    static final String LANG = "lang";
+
+    //************************  The IHtmlEvent properties  *******************************
+    /**
+     * The name of the <code>onchange</code> attribute.
+     */
+    static final String ONCHANGE = "onchange";
+
+    /**
+     * The name of the <code>onclick</code> attribute.
+     */
+    static final String ONCLICK = "onclick";
+
+    /**
+     * The name of the <code>ondblclick</code> attribute.
+     */
+    static final String ONDBLCLICK = "ondblclick";
+
+    /**
+     * The name of the <code>onkeydown</code> attribute.
+     */
+    static final String ONKEYDOWN = "onkeydown";
+
+    /**
+     * The name of the <code>onkeypress</code> attribute.
+     */
+    static final String ONKEYPRESS = "onkeypress";
+
+    /**
+     * The name of the <code>onkeyup</code> attribute.
+     */
+    static final String ONKEYUP = "onkeyup";
+
+    /**
+     * The name of the <code>onmousedown</code> attribute.
+     */
+    static final String ONMOUSEDOWN = "onmousedown";
+
+    /**
+     * The name of the <code>onmouseup</code> attribute.
+     */
+    static final String ONMOUSEUP = "onmouseup";
+
+    /**
+     * The name of the <code>onmousemove</code> attribute.
+     */
+    static final String ONMOUSEMOVE = "onmousemove";
+
+    /**
+     * The name of the <code>onmouseover</code> attribute.
+     */
+    static final String ONMOUSEOVER = "onmouseover";
+
+    /**
+     * The name of the <code>onmouseout</code> attribute.
+     */
+    static final String ONMOUSEOUT = "onmouseout";
+
+    /**
+     * The name of the <code>onreset</code> attribute.
+     */
+    static final String ONRESET = "onreset";
+
+    /**
+     * The name of the <code>onselect</code> attribute.
+     */
+    static final String ONSELECT = "onselect";
+
+    /**
+     * The name of the <code>onsubmit</code> attribute.
+     */
+    static final String ONSUBMIT = "onsubmit";
+
+    //****************************** cellhalign  ************************************************
+    /**
+     * The name of the <code>align</code> attribute.
+     */
+    static final String ALIGN = "align";
+
+    /**
+     * The name of the <code>char</code> attribute.
+     */
+    static final String CHAR = "char";
+
+    //****************************** cellvalign  ************************************************
+    /**
+     * The name of the <code>char</code> attribute.
+     */
+    static final String VALIGN = "valign";
+
+    /**
+     * The name of the <code>charoff</code> attribute.
+     */
+    static final String CHAROFF = "charoff";
+
+    //****************************** Other attribute constants  *********************************
+    /**
+     * The name of the <code>accesskey</code> attribute.
+     */
+    static final String ACCESSKEY = "accesskey";
+
+    /**
+     * The name of the <code>accept</code> attribute.
+     */
+    static final String ACCEPT = "accept";
+
+    /**
+     * The name of the <code>action</code> attribute.
+     */
+    static final String ACTION = "action";
+
+    /**
+     * The name of the <code>alt</code> attribute.
+     */
+    static final String ALT = "alt";
+
+    /**
+     * The name of the <code>border</code> attribute.
+     */
+    static final String BORDER = "border";
+
+    /**
+     * The name of the <code>cellspacing</code> attribute.
+     */
+    static final String CELLSPACING = "cellspacing";
+
+    /**
+     * The name of the <code>cellpadding</code> attribute.
+     */
+    static final String CELLPADDING = "cellpadding";
+
+    /**
+     * The name of the <code>charset</code> attribute.
+     */
+    static final String CHARSET = "charset";
+
+    /**
+     * The name of the <code>checked</code> attribute.
+     */
+    static final String CHECKED = "checked";
+
+    /**
+     * The name of the <code>cols</code> attribute.
+     */
+    static final String COLS = "cols";
+
+    /**
+     * The name of the <code>coords</code> attribute.
+     */
+    static final String COORDS = "coords";
+
+    /**
+     * The name of the <code>disabled</code> attribute.
+     */
+    static final String DISABLED = "disabled";
+
+    /**
+     * The name of the <code>enctype</code> attribute.
+     */
+    static final String ENCTYPE = "enctype";
+
+    /**
+     * The name of the <code>for</code> attribute.
+     */
+    static final String FOR = "for";
+
+    /**
+     * The name of the <code>frame</code> attribute.
+     */
+    static final String FRAME = "frame";
+
+    /**
+     * The name of the <code>height</code> attribute.
+     */
+    static final String HEIGHT = "height";
+
+    /**
+     * The name of the <code>href</code> attribute.
+     */
+    static final String HREF = "href";
+
+    /**
+     * The name of the <code>hreflang</code> attribute.
+     */
+    static final String HREFLANG = "hreflang";
+
+    /**
+     * The name of the <code>hspace</code> attribute.
+     */
+    static final String HSPACE = "hspace";
+
+    /**
+     * The name of the <code>ismap</code> attribute.
+     */
+    static final String ISMAP = "ismap";
+
+    /**
+     * The name of the <code>longdesc</code> attribute.
+     */
+    static final String LONGDESC = "longdesc";
+
+    /**
+     * The name of the <code>lowsrc</code> attribute.
+     */
+    static final String LOWSRC = "lowsrc";
+
+    /**
+     * The name of the <code>method</code> attribute.
+     */
+    static final String METHOD = "method";
+
+    /**
+     * The name of the <code>maxlength</code> attribute.
+     */
+    static final String MAXLENGTH = "maxlength";
+
+    /**
+     * The name of the <code>name</code> attribute.
+     */
+    static final String NAME = "name";
+
+    /**
+     * The name of the <code>onblur</code> attribute.
+     */
+    static final String ONBLUR = "onblur";
+
+    /**
+     * The name of the <code>onfocus</code> attribute.
+     */
+    static final String ONFOCUS = "onfocus";
+
+    /**
+     * The name of the <code>readonly</code> attribute.
+     */
+    static final String READONLY = "readonly";
+
+    /**
+     * The name of the <code>rel</code> attribute.
+     */
+    static final String REL = "rel";
+
+    /**
+     * The name of the <code>rev</code> attribute.
+     */
+    static final String REV = "rev";
+
+    /**
+     * The name of the <code>rows</code> attribute.
+     */
+    static final String ROWS = "rows";
+
+    /**
+     * The name of the <code>rules</code> attribute.
+     */
+    static final String RULES = "rules";
+
+    /**
+     * The name of the <code>shape</code> attribute.
+     */
+    static final String SHAPE = "shape";
+
+    /**
+     * The name of the <code>shape</code> attribute.
+     */
+    static final String SIZE = "size";
+
+    /**
+     * The name of the <code>src</code> attribute.
+     */
+    static final String SRC = "src";
+
+    /**
+     * The name of the <code>summary</code> attribute.
+     */
+    static final String SUMMARY = "summary";
+
+    /**
+     * The name of the <code>tabindex</code> attribute.
+     */
+    static final String TABINDEX = "tabindex";
+
+    /**
+     * The name of the <code>target</code> attribute.
+     */
+    static final String TARGET = "target";
+
+    /**
+     * The name of the <code>type</code> attribute.
+     */
+    static final String TYPE = "type";
+
+    /**
+     * The name of the <code>usemap</code> attribute.
+     */
+    static final String USEMAP = "usemap";
+
+    /**
+     * The name of the <code>value</code> attribute.
+     */
+    static final String VALUE = "value";
+
+    /**
+     * The name of the <code>vspace</code> attribute.
+     */
+    static final String VSPACE = "vspace";
+
+    /**
+     * The name of the <code>width</code> attribute.
+     */
+    static final String WIDTH = "width";
+
+    //************************ The input type names  *********************************
+
+    /**
+     * The InputType for the <code>button</code>
+     */
+    static final String INPUT_BUTTON = "button";
+
+    /**
+     * The InputType for the <code>checkbox</code>
+     */
+    static final String INPUT_CHECKBOX = "checkbox";
+
+    /**
+     * The InputType for the <code>file</code>
+     */
+    static final String INPUT_FILE = "file";
+
+    /**
+     * The InputType for the <code>hidden</code>
+     */
+    static final String INPUT_HIDDEN = "hidden";
+
+    /**
+     * The InputType for the <code>image</code>
+     */
+    static final String INPUT_IMAGE = "image";
+
+    /**
+     * The InputType for the <code>password</code>
+     */
+    static final String INPUT_PASSWORD = "password";
+
+    /**
+     * The InputType for the <code>radio</code>
+     */
+    static final String INPUT_RADIO = "radio";
+
+    /**
+     * The InputType for the <code>reset</code>
+     */
+    static final String INPUT_RESET = "reset";
+
+    /**
+     * The InputType for the <code>submit</code>
+     */
+    static final String INPUT_SUBMIT = "submit";
+
+    /**
+     * The InputType for the <code>text</code>
+     */
+    static final String INPUT_TEXT = "text";
+
+    /**
+     * Form <code>post</code> constant
+     */
+    static final String FORM_POST = "post";
+
+    /**
+     * Form <code>get</code> constant
+     */
+    static final String FORM_GET = "get";
+
+    //*************************** Element Names ************************
+
+    /**
+     * The name of the <code>a</code> element.
+     */
+    static final String ANCHOR = "a";
+
+    /**
+     * The name of the <code>base</code> element.
+     */
+    static final String BASE = "base";
+
+    /**
+     * The name of the <code>body</code> element.
+     */
+    static final String BODY = "body";
+
+    /**
+     * The name of the <code>br</code> element.
+     */
+    static final String BR = "br";
+
+    /**
+     * The name of the <code>caption</code> element.
+     */
+    static final String CAPTION = "caption";
+
+    /**
+     * The name of the <code>div</code> element.
+     */
+    static final String DIV = "div";
+
+    /**
+     * The name of the <code>form</code> element.
+     */
+    static final String FORM = "form";
+
+    /**
+     * The name of the <code>html</code> element.
+     */
+    static final String HTML = "html";
+
+    /**
+     * The name of the <code>image</code> element.
+     */
+    static final String IMAGE = "img";
+
+    /**
+     * The name of the <code>input</code> element.
+     */
+    static final String INPUT = "input";
+
+    /**
+     * The name of the <code>label</code> element.
+     */
+    static final String LABEL = "label";
+
+    /**
+     * The name of the <code>option</code> element.
+     */
+    static final String OPTION = "option";
+
+    /**
+     * The name of the <code>select</code> element.
+     */
+    static final String SELECT = "select";
+
+    /**
+     * The name of the <code>span</code> element.
+     */
+    static final String SPAN = "span";
+
+    /**
+     * The name of the <code>table</code> element.
+     */
+    static final String TABLE = "table";
+
+    /**
+     * The name of the <code>td</code> element.
+     */
+    static final String TD = "td";
+
+    /**
+     * The name of the <code>textarea</code> element.
+     */
+    static final String TEXTAREA = "textarea";
+
+    /**
+     * The name of the <code>tr</code> element.
+     */
+    static final String TR = "tr";
+}
+
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlDataSourceTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlDataSourceTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,110 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.IHtmlIdWriter;
+
+import javax.servlet.jsp.JspException;
+import java.util.List;
+
+/**
+ * Abstract Base class adding support for the <code>dataSource</code> attribute.
+ */
+abstract public class HtmlDataSourceTag
+        extends HtmlFocusBaseTag
+{
+    protected String _dataSource;
+
+    public HtmlDataSourceTag()
+    {
+        super();
+    }
+
+    /**
+     * Sets the tag's data source (can be an expression).
+     * @param dataSource the data source
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDataSource(String dataSource)
+    {
+        _dataSource = dataSource;
+    }
+
+    /**
+     * Return an <code>ArrayList</code> which represents a chain of <code>NameInterceptor</code>
+     * objects.  This method by default returns <code>null</code> and should be overridden
+     * by objects that support naming.
+     * @return an <code>ArrayList</code> that will contain <code>NameInterceptor</code> objects.
+     */
+    protected List getNamingChain()
+    {
+        return AbstractBaseTag.DefaultNamingChain;
+    }
+
+    /**
+     * Return the Object that is represented by the specified data source.
+     * @return
+     * @throws JspException
+     */
+    protected Object evaluateDataSource()
+            throws JspException
+    {
+        // @todo: at some point we need to switch the expression evaluation to not require '{'
+        String datasource = "{" + _dataSource + "}";
+        String ds = ensureValidExpression(datasource, "dataSource", "DataSourceError");
+        if (ds == null)
+            return null;
+        //setDataSource(ds);
+
+        // have a valid expression
+        return evaluateExpression(datasource, "dataSource");
+    }
+
+    /**
+     * @return
+     */
+    protected String doNaming()
+    {
+        assert (_dataSource != null) : "dataSource is Null";
+
+        String datasource = "{" + _dataSource + "}";
+        String name = applyNamingChain(datasource);
+        IHtmlIdWriter idWriter = getNearestIdWriter();
+        if (idWriter != null) {
+            String id = getTagId();
+            if (id == null) {
+                id = idWriter.getNextId();
+            }
+            idWriter.writeId(id, name);
+        }
+        return name;
+
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _dataSource = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlDefaultableDataSourceTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlDefaultableDataSourceTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,52 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * Abstract base class extending the <code>HtmlDataSourceTag</code> and adding support
+ * for the <code>defaultValue</code> attribute.
+ */
+abstract public class HtmlDefaultableDataSourceTag
+        extends HtmlDataSourceTag
+{
+    protected Object _defaultValue;           // A String that contains or references the data to render for the default value of this tag.
+
+    /**
+     * Sets the default value (can be an expression).
+     * @param defaultValue - the default value
+     * @netui:attribute required="false" rtexprvalue="true"  type="java.lang.Object"
+     * @netui.tldx:attribute
+     */
+    public void setDefaultValue(Object defaultValue)
+            throws JspException
+    {
+        _defaultValue = defaultValue;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _defaultValue = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlFocusBaseTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlFocusBaseTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,108 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+
+/**
+ * Abstract base class which implements support for the input tag.  This class introduces the following
+ * event attributes which are found on the &lt;input> element: <code>onblur</code>, <code>onfocus</code>,
+ * <code>onchange</code>, <code>onselect</code>.  In addition, the <code>disable</code> attribute
+ * is added.
+ */
+abstract public class HtmlFocusBaseTag extends HtmlBaseTag
+{
+    private boolean _disabled;              // Is the html control disabled?
+
+    /**
+     * Set the disable state either with the literal "true" or "false"
+     * or with an expression.
+     * @param disabled - true or false or an expression
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDisabled(boolean disabled)
+    {
+        _disabled = disabled;
+    }
+
+    /**
+     * This method will a boolean indicating if the control is disabled or not.  This will cause the
+     * disable attribute to be evaluated which may result in a runtime error or a JspException.
+     * @return <code>true</code> if the control is disabled.
+     */
+    protected final boolean isDisabled()
+    {
+        return _disabled;
+    }
+
+    /**
+     * Sets the onBlur javascript event.
+     * @param onblur - the onBlur event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnBlur(String onblur)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONBLUR, onblur);
+    }
+
+    /**
+     * Sets the onFocus javascript event.
+     * @param onfocus - the onFocus event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnFocus(String onfocus)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONFOCUS, onfocus);
+    }
+
+    /**
+     * Sets the onChange javascript event.
+     * @param onchange - the onChange event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnChange(String onchange)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONCHANGE, onchange);
+    }
+
+    /**
+     * Sets the onSelect javascript event.
+     * @param onselect - the onSelect event.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
+     */
+    public void setOnSelect(String onselect)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, ONSELECT, onselect);
+    }
+
+    protected void localRelease()
+    {
+        super.localRelease();
+        _disabled = false;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlGroupBaseTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlGroupBaseTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,585 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.IAttributeConsumer;
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+import org.apache.beehive.netui.tags.rendering.*;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.iterator.IteratorFactory;
+import org.apache.beehive.netui.util.iterator.IteratorFactoryException;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Abstract base class that provides the <code>dataSource</code>, <code>defaultValue</code>, and
+ * <code>optionsDataSource</code> attributes.
+ */
+abstract public class HtmlGroupBaseTag
+        extends AbstractBaseTag implements IDataAccessProvider, HtmlConstants, IAttributeConsumer
+{
+    private static final Logger logger = Logger.getInstance(HtmlGroupBaseTag.class);
+
+    /**
+     * Constant defining a horizontal layout of the options.
+     */
+    public final String HORIZONTAL_VALUE = "horizontal";
+
+    /**
+     * Constant defining a vertical layout of the options.
+     */
+    public final String VERTICAL_VALUE = "vertical";
+
+    private InputBooleanTag.State _inputState = new InputBooleanTag.State();
+    private SpanTag.State _spanState = new SpanTag.State();
+
+    private HashMap _attrs;
+
+    protected String _dataSource;             // The attribute value for the dataSource
+    protected Object _defaultValue;           // A String that contains or references the data to render for the default value of this tag.
+    protected Object _optionsDataSource;      // The value of the options data source.
+    protected boolean _disabled;
+
+    private String _orientation;            // legal values "horizontal, virtical"
+    private Boolean _orientVal;             // Three state boolean if we are doing virtical layout
+
+    private String _realName;                // The name that is the result of do naming
+
+    private String _style;                  // The style attribute
+    private String _class;                  // The class attribute
+
+    protected String _labelStyle = null;
+    protected String _labelStyleClass = null;
+
+    protected boolean _repeater;          // Boolean flag indicating if this is a repeater or not
+
+    // These variables are protected explicitly so they can be accessed by subclasses
+    protected int _repIdx = 0;            // The current index for repeating over the optionsDataSource
+    protected Object _repCurItem;         // The current item access by the IDataAccessProvider
+
+    public HtmlGroupBaseTag()
+    {
+        super();
+    }
+
+    /**
+     * @param value
+     * @return
+     */
+    public abstract boolean isMatched(String value);
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>href</code>
+     * attribute.  The <code>checkBoxGroup</code> and <code>radioButtonGroup</code> support two facets,
+     * <code>input</code> and <code>span</code>.  The <code>input</code> is the default and will attach
+     * attributes to the &lt;input> element.  The <code>span</code> facet will attach attributes to the
+     * &lt;span> elements which represents the label.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        // validate the name attribute, in the case of an error simply return.
+        if (name == null || name.length() <= 0) {
+            String s = Bundle.getString("Tags_AttributeNameNotSet");
+            registerTagError(s, null);
+            return;
+        }
+
+        // it's not legal to set the id or name attributes this way
+        if (name.equals(ID) || name.equals(NAME)) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+            return;
+        }
+
+        // handle the facet.  Span will place stuff into the spanState input is the default
+        // so we don't need to do anything.
+        if (facet != null) {
+            if (facet.equals("span")) {
+                _spanState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, name, value);
+                return;
+            }
+            else if (facet.equals("input")) {
+                // do nothing...
+            }
+            else {
+                String s = Bundle.getString("Tags_AttributeFacetNotSupported", new Object[]{facet});
+                registerTagError(s, null);
+                return;
+            }
+        }
+
+        // don't set the value on the input
+        if (name.equals(VALUE)) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+            return;
+        }
+
+        // we place the state into the special attribute map.
+        if (_attrs == null) {
+            _attrs = new HashMap();
+        }
+        _attrs.put(name, value);
+    }
+
+    /**
+     * Return the qualified name of the checkBoxGroup.  The qualified name is the created
+     * by calling <code>doNaming()</code>.
+     * @return the qualified name based upon the <code>dataSource</code> name.
+     * @throws JspException
+     */
+    public final String getQualifiedDataSourceName()
+            throws JspException
+    {
+        if (_realName == null)
+            _realName = doNaming();
+        return _realName;
+    }
+
+    /**
+     * Returns the boolean value or expression indicating the
+     * disable state of the RadioButtonGroup.
+     * @return the disabled state (true or false) or an expression
+     */
+    public boolean isDisabled()
+    {
+        return _disabled;
+    }
+
+    /**
+     * Set the disable state either with the literal "true" or "false"
+     * or with an expression.
+     * @param disabled - true or false or an expression
+     * @netui:attribute required="false"  rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDisabled(boolean disabled)
+    {
+        _disabled = disabled;
+    }
+
+    /**
+     * Set the orientation of the resulting options group.  The layout will be either <code>horizontal</code>
+     * or <code>vertical</code>.  The default is <code>horizontal</code>.
+     * @param orientation - true or false or an expression
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setOrientation(String orientation)
+    {
+        _orientation = orientation;
+    }
+
+    /**
+     * Returns <code>true</code> if vertical layout is set.
+     * @return <code>true</code> if vertical layout is set
+     */
+    public boolean isVertical()
+    {
+        if (_orientVal == null) {
+            boolean val = VERTICAL_VALUE.equalsIgnoreCase(_orientation);
+            _orientVal = new Boolean(val);
+        }
+        return _orientVal.booleanValue();
+    }
+
+    /**
+     * Set whether repeating of contains options is on.
+     * @param repeater - the repeater value ("true" or "false")
+     * @netui:attribute required="false"  rtexprvalue="true"
+     */
+    public void setRepeater(boolean repeater)
+    {
+        _repeater = repeater;
+    }
+
+    /**
+     * Gets whether a repeating contained options is on.
+     * @return the repeater value
+     */
+    public boolean isRepeater()
+    {
+        return _repeater;
+    }
+
+    /**
+     * Sets the style of the rendered html tag.
+     * @param style - the html style.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.JspStyleProperty" category="format"
+     */
+    public void setStyle(String style)
+    {
+        _style = style;
+    }
+
+    /**
+     * Sets the style class of the rendered html tag.
+     * @param styleClass - the html style class.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="Format"
+     */
+    public void setStyleClass(String styleClass)
+    {
+        _class = styleClass;
+    }
+
+    /**
+     * Return the label style for each contained CheckBoxOption..
+     * @return the label style
+     */
+    public String getLabelStyle()
+    {
+        return _labelStyle;
+    }
+
+    /**
+     * Set the label style for each contained CheckBoxOption..
+     * @param labelStyle - the label style
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="format" propertyclass="workshop.jspdesigner.properties.JspStyleProperty"
+     */
+    public void setLabelStyle(String labelStyle)
+    {
+        this._labelStyle = labelStyle;
+    }
+
+    /**
+     * Return the label style class for each contained CheckBoxOption..
+     * @return the label style
+     */
+    public String getLabelStyleClass()
+    {
+        return _labelStyleClass;
+    }
+
+    /**
+     * Set the label style class for each contained CheckBoxOption..
+     * @param labelStyleClass - the label style
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="format"
+     */
+    public void setLabelStyleClass(String labelStyleClass)
+    {
+        this._labelStyleClass = labelStyleClass;
+    }
+
+
+    /**
+     * Sets the tag's data source (can be an expression).
+     * @param dataSource the data source
+     * @netui:attribute required="true"  rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDataSource(String dataSource)
+    {
+        _dataSource = dataSource;
+    }
+
+    /**
+     * Gets the tag's data source (can be an expression).
+     * @return the data source
+     */
+   public String getDataSource()
+    {
+        return _dataSource;
+    }
+
+    //********************************** IDataAccessProvider Interface  ******************************
+    // setDataSource is implemented by the HtmlDataSourceTag class
+    // getDataSource is implemented by the HtmlDataSourceTag class
+
+    /**
+     * Get the current index in this iteration.  This should be a
+     * zero based integer that increments after each iteration.
+     * @return the current index of iteration or 0
+     */
+    public int getCurrentIndex()
+    {
+        return _repIdx;
+    }
+
+    /**
+     * Get the current data item in this IDataAccessProvider.
+     * @return the current data item or <code>null</code>
+     */
+    public Object getCurrentItem()
+    {
+        return _repCurItem;
+    }
+
+    /**
+     * Get a metadata object for the current item.  This interface
+     * is optional, and implementations of this interface are
+     * provided by the IDataAccessProvider interface.  See these
+     * implementations for information about their support for
+     * current item metadata.
+     * @return the current metadata or <code>null</code> if no metadata can be
+     *         found or metadata is not supported by a IDataAccessProvider implementation
+     */
+    public Object getCurrentMetadata()
+    {
+        return null;
+    }
+
+    /**
+     * Get the parent IDataAccessProvider of a IDataAccessProvider.  A IDataAccessProvider
+     * implementation may be able to nest IDataAccessProviders.  In this case,
+     * it can be useful to be able to also nest access to data from parent
+     * providers.  Implementations of this interface are left with having
+     * to discover and export parents.  The return value from this call
+     * on an implementing Object can be <code>null</code>.
+     * @return the parent IDataAccessProvider or <code>null</code> if this method
+     *         is not supported or the parent can not be found.
+     */
+    public IDataAccessProvider getProviderParent()
+    {
+        return (IDataAccessProvider) findAncestorWithClass(this, IDataAccessProvider.class);
+    }
+
+    /**
+     * This method indicates that the expression of the repeater is bound into a
+     * client based context.
+     * @return <code>true</code> if the expression of this is bound on the client.
+     */
+    public boolean isBindingOnClient()
+    {
+        // @todo: need to really implement this
+        return false;
+    }
+
+    /**
+     * Return an <code>ArrayList</code> which represents a chain of <code>NameInterceptor</code>
+     * objects.  This method by default returns <code>null</code> and should be overridden
+     * by objects that support naming.
+     * @return an <code>ArrayList</code> that will contain <code>NameInterceptor</code> objects.
+     */
+    protected List getNamingChain()
+    {
+        return AbstractBaseTag.DefaultNamingChain;
+    }
+
+    /**
+     * Return the Object that is represented by the specified data source.
+     * @return
+     * @throws JspException
+     */
+    protected Object evaluateDataSource()
+            throws JspException
+    {
+        String dataSource = "{" + _dataSource + "}";
+        String ds = ensureValidExpression(dataSource, "dataSource", "DataSourceError");
+        if (ds == null)
+            return null;
+        //setDataSource(ds);
+
+        // have a valid expression
+        return evaluateExpression(dataSource, "dataSource");
+    }
+
+    protected String doNaming()
+            throws JspException
+    {
+        String dataSource = "{" + _dataSource + "}";
+        return applyNamingChain(dataSource);
+    }
+
+    /**
+     * Sets the default value (can be an expression).
+     * @param defaultValue - the default value
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDefaultValue(Object defaultValue)
+            throws JspException
+    {
+        _defaultValue = defaultValue;
+    }
+
+    /**
+     * Gets the options datasource value (an expression).
+     * @return the options datasource
+     */
+    public Object getOptionsDataSource()
+    {
+        return _optionsDataSource;
+    }
+
+    /**
+     * Sets the options datasource value (an expression).
+     * @param optionsDataSource - the options datasource
+     * @netui:attribute required="false" rtexprvalue="true" type="java.lang.Object"
+     * @netui.tldx:attribute
+     */
+    public void setOptionsDataSource(Object optionsDataSource)
+            throws JspException
+    {
+        _optionsDataSource = optionsDataSource;
+    }
+
+    /**
+     * Return the real value of the <code>optionDataSource</code> attribute.  The value returned will
+     * always be an instance of <code>Iterator</code> This value reflects the
+     * result of expression evaluation on the options data source.
+     * @return the object that represents the options data source.
+     */
+    protected Object evaluateOptionsDataSource()
+            throws JspException
+    {
+        if (_optionsDataSource == null) {
+            // optionsDataSource is null so this is a warning
+            logger.warn(Bundle.getString("Tags_IteratorError",
+                    new Object[]{getTagName(), "optionsDataSource", _optionsDataSource}));
+            return IteratorFactory.EMPTY_ITERATOR;
+        }
+
+        if (_optionsDataSource instanceof Map)
+            return _optionsDataSource;
+
+        Iterator it = IteratorFactory.EMPTY_ITERATOR;
+        try {
+            // This shouldn't return null, so we will return the Empty Iterator
+            it = IteratorFactory.makeIterator(_optionsDataSource);
+            if (it == null) {
+                it = IteratorFactory.EMPTY_ITERATOR;
+            }
+        }
+        catch (IteratorFactoryException ife) {
+            // we were not able to get an itertor on the options data source.
+            // This is an error.
+            String s = Bundle.getString("Tags_Iteration_Error", new Object[]{ife.getTypeName()});
+            registerTagError(s, ife);
+        }
+
+        assert (it != null && it instanceof Iterator);
+        return it;
+    }
+
+    /**
+     * This will create a new option in the HTML.
+     */
+    protected void addOption(StringBuilder buffer, String type, String optionValue,
+                             String optionDisplay, int idx, String altText, String accessKey, boolean disabled)
+            throws JspException
+    {
+        ServletRequest req = pageContext.getRequest();
+        ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+
+        assert(buffer != null);
+        assert(optionValue != null);
+        assert(optionDisplay != null);
+        assert(type != null);
+
+        if (_orientation != null && isVertical()) {
+            cr.TR_TD(buffer);
+        }
+
+        _inputState.clear();
+        _inputState.type = type;
+        _inputState.name = getQualifiedDataSourceName();
+        _inputState.value = optionValue;
+        _inputState.style = _style;
+        _inputState.styleClass = _class;
+
+        if (isMatched(optionValue)) {
+            _inputState.checked = true;
+        }
+        _inputState.disabled = isDisabled();
+        _inputState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, altText);
+        _inputState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, accessKey);
+
+        // if there are attributes defined push them to the options.
+        if (_attrs != null && _attrs.size() > 0) {
+            Iterator iterator = _attrs.keySet().iterator();
+            for (; iterator.hasNext();) {
+                String key = (String) iterator.next();
+                if (key == null)
+                    continue;
+
+                String value = (String) _attrs.get(key);
+                _inputState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, key, value);
+            }
+        }
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_BOOLEAN_TAG, req);
+        br.doStartTag(buffer, _inputState);
+        br.doEndTag(buffer);
+
+        String ls = _labelStyle;
+        String lsc = _labelStyleClass;
+
+        _spanState.style = ls;
+        _spanState.styleClass = lsc;
+
+        br = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, req);
+        br.doStartTag(buffer, _spanState);
+        buffer.append(optionDisplay);
+        br.doEndTag(buffer);
+
+        // backward compatibility this is now overridden by the _orientation
+        if (_orientation == null) {
+            cr.BR(buffer);
+        }
+        else {
+            if (isVertical()) {
+                cr.TR_TD(buffer);
+            }
+            else {
+                cr.NBSP(buffer);
+            }
+        }
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        if (_attrs != null)
+            _attrs.clear();
+        _dataSource = null;
+        _defaultValue = null;
+        _optionsDataSource = null;
+        _disabled = false;
+        _orientation = null;
+        _orientVal = null;
+        _realName = null;
+        _style = null;
+        _class = null;
+        _labelStyle = null;
+        _labelStyleClass = null;
+
+        _repIdx = 0;
+        _repCurItem = null;
+    }
+
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlOptionsDataSourceTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlOptionsDataSourceTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * Abstract base class extending the <code>HtmlDefaultableDataSourceTag</code> and adding support
+ * for the <code>optionsDataSource</code> attribute.
+ */
+abstract public class HtmlOptionsDataSourceTag extends HtmlDefaultableDataSourceTag
+{
+    /**
+     * The value of the options data source.
+     */
+    protected Object _optionsDataSource;
+
+    /**
+     * Sets the options datasource value (an expression).
+     * @param optionsDataSource - the options datasource
+     * @netui:attribute required="false"  rtexprvalue="true" type="java.lang.Object"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setOptionsDataSource(Object optionsDataSource)
+            throws JspException
+    {
+        _optionsDataSource = optionsDataSource;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _optionsDataSource = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Image.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Image.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,387 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.ImageTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.ParamHelper;
+import org.apache.struts.Globals;
+import org.apache.struts.config.ModuleConfig;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Generates an image with the specified attributes.  Image ignores its
+ * body content.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">align</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Property to specify where to align the image.</td></tr>
+ * <tr><th rowspan="2">alt</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Property to specify alt text of an image.</td></tr>
+ * <tr><th rowspan="2">border</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The border size around the image.</td></tr>
+ * <tr><th rowspan="2">height</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The image height.</td></tr>
+ * <tr><th rowspan="2">hspace</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The horizontal spacing around the image.</td></tr>
+ * <tr><th rowspan="2">id</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><th rowspan="2">isMap</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The server-side image map declaration.</td></tr>
+ * <tr><th rowspan="2">location</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The location hash to append to the url.</td></tr>
+ * <tr><th rowspan="2">lowsrc</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The low resolution image source URI.</td></tr>
+ * <tr><th rowspan="2">src</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The image source URI.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The id of this image.  The real id written to the HTML stream may
+ * be changed by the container (Portal), but may be looked up with the <code>tagId</code>
+ * value through the JavaScript method <code>getNetuiTagName</code> method written by
+ * the &lt;netui:html> tag.</td></tr>
+ * <tr><th rowspan="2">useMap</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The client-side image map declaration.</td></tr>
+ * <tr><th rowspan="2">vspace</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The vertical spacing around the image.</td></tr>
+ * <tr><th rowspan="2">width</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The image width.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, an Image shows "friends.jpg" at 150 x 175 pixels, with the id "Friends".
+ * <pre>&lt;netui:image src="friends.jpg" id="Friends" height="150" width="175" /></pre>
+ *
+ * @netui:tag name="image" description="Places an image file type on your page."
+ * @netui.tldx:tag requiredchild="parameter parameterMap attribute"
+ * renderer="workshop.netui.jspdesigner.tldx.ImageRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class Image extends HtmlBaseTag
+        implements URLParams
+{
+    private ImageTag.State _state = new ImageTag.State();
+
+    private String _location = null;         // The location hash to append to the url.
+    private String _id = null;
+    private Map _params;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Image";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>src</code>
+     * attribute.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null && name.equals(SRC)) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Sets the property to specify where to align the image.
+     * @param align - the image alignment.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setAlign(String align)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALIGN, align);
+    }
+
+    /**
+     * Sets the property to specify the alt text of the image.
+     * @param alt - the image alignment.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setAlt(String alt)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+    }
+
+    /**
+     * Sets the property to specify the longdesc.
+     * @param longdesc - the longdesc.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setLongdesc(String longdesc)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, LONGDESC, longdesc);
+    }
+    /**
+     * Sets the border size around the image.
+     * @param border - the border size.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setBorder(String border)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, border);
+    }
+
+    /**
+     * Sets the image height.
+     * @param height - the height.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setHeight(String height)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HEIGHT, height);
+    }
+
+    /**
+     * Sets the the horizontal spacing around the image.
+     * @param hspace - the horizontal spacing.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setHspace(String hspace)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HSPACE, hspace);
+    }
+
+    /**
+     * Sets the server-side image map declaration.
+     * @param ismap - the image map declaration.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setIsmap(String ismap)
+    {
+        AbstractHtmlState tsh = getState();
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ISMAP, ismap);
+    }
+
+    /**
+     * Sets the location hash to append to the url.
+     * @param location - the location hash.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setLocation(String location)
+    {
+        _location = location;
+    }
+
+    /**
+     * Sets the image source URI.
+     * @param src - the source URI.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"  reftype="img-url"
+     */
+    public void setSrc(String src)
+            throws JspException
+    {
+        _state.src = src;
+    }
+
+   /**
+     * Sets the client-side image map declaration.
+     * @param usemap - the map declaration.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setUsemap(String usemap)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, USEMAP, usemap);
+    }
+
+    /**
+     * Sets the vertical spacing around the image.
+     * @param vspace - the vertical spacing.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setVspace(String vspace)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, VSPACE, vspace);
+    }
+
+    /**
+     * Sets the image width.
+     * @param width - the image width.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setWidth(String width)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, WIDTH, width);
+    }
+
+    /**
+     * Adds a URL parameter to the generated hyperlink.
+     * @param name  - the name of the parameter to be added.
+     * @param value - the value of the parameter to be added (a String or String[]).
+     */
+    public void addParameter(String name, Object value) throws JspException
+    {
+        if (_params == null) {
+            _params = new HashMap();
+        }
+        ParamHelper.addParam(_params, name, value);
+    }
+
+    /**
+     * Render the beginning of the IMG tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        // Evaluate the body of this tag
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Render the end of the IMG tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        ServletRequest req = pageContext.getRequest();
+        String scriptId = null;
+
+        // Generate the name definition or image element
+        StringBuilder results = new StringBuilder(128);
+
+        // the src attribute
+        String srcurl = url(_state.src);
+        if (srcurl != null) {
+            srcurl = PageflowTagUtils.prepareResourceUrl(pageContext, srcurl);
+            if (_location != null) {
+                srcurl = srcurl + "#" + _location;
+            }
+            _state.src = srcurl;
+        }
+
+        // we assume that tagId will over have override id if both
+        // are defined.
+        // @todo: should we move the tagId stuff to the base class?
+        String tagId = getTagId();
+        if (tagId != null) {
+            String realName = rewriteName(tagId);
+            scriptId = addTagIdMapping(tagId, realName);
+            _state.id = realName;
+        }
+        else if (_id != null) {
+            _state.id = _id;
+        }
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.IMAGE_TAG, req);
+        br.doStartTag(results, _state);
+        br.doEndTag(results);
+
+
+        if (scriptId != null)
+            results.append(scriptId);
+
+        write(results.toString());
+
+        // Evaluate the remainder of this page
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+
+        _location = null;
+        _id = null;
+        _params = null;
+    }
+
+    /**
+     * Return the specified src URL, modified as necessary with optional
+     * request parameters.
+     * @param url The URL to be modified (or null if this url will not be used)
+     * @throws JspException if an error occurs preparing the URL
+     */
+    protected String url(String url)
+            throws JspException
+    {
+
+        if (url == null || _params == null)
+            return url;
+
+        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+        String encoding = response.getCharacterEncoding();
+
+        StringBuilder src = new StringBuilder(128);
+        if (url.startsWith("/")) {
+            src.append(req.getContextPath());
+        }
+
+        url = HtmlUtils.addParams(url, _params, encoding);
+        src.append(url);
+        return src.toString();
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,466 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.tags.IHtmlAccessable;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.ImageTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+
+/**
+ * Generates a URL-encoded hyperlink to a specified URI with an image
+ * enclosed as the body.  ImageAnchor provides support for image rollovers.
+ *
+ * An imageAnchor must have one of five attributes to correctly create the hyperlink:
+ * <ul>
+ * <li>action - an action invoked by clicking the hyperlink.</li>
+ * <li>forward - a forward to redirect to.</li>
+ * <li>href - a URL to go to</li>
+ * <li>linkName - an internal place in the page to move to</li>
+ * <li>page - The module-relative page URL to which this hyperlink will be rendered.</li>
+ * </ul>
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">action</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An action invoked by clicking the link.</td></tr>
+ * <tr><th rowspan="2">align</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Property to specify where to align the image.</td></tr>
+ * <tr><th rowspan="2">alt</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Property to specify alt text of an image.</td></tr>
+ * <tr><th rowspan="2">border</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The border size around the image</td></tr>
+ * <tr><th rowspan="2">formSubmit</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">True if clicking this link should submit its enclosing <code>form</code>.</td></tr>
+ * <tr><th rowspan="2">forward</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The logical forward name from which to retrieve the hyperlink URI.</td></tr>
+ * <tr><th rowspan="2">height</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The image height</td></tr>
+ * <tr><th rowspan="2">href</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A URL to go to.</td></tr>
+ * <tr><th rowspan="2">hspace</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The horizontal spacing around the image</td></tr>
+ * <tr><th rowspan="2">isMap</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The server-side image map declaration.</td></tr>
+ * <tr><th rowspan="2">linkName</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">An internal place in the page to move to.</td></tr>
+ * <tr><th rowspan="2">location</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Location within the URI to visit.</td></tr>
+ * <tr><th rowspan="2">lowsrc</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The low resolution image source URI.</td></tr>
+ * <tr><th rowspan="2">rolloverImage</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The URI of the rollover image.</td></tr>
+ * <tr><th rowspan="2">src</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The image source URI</td></tr>
+ * <tr><th rowspan="2">target</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The window target.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The id of this imageAnchor.  The real id written to the HTML stream
+ * may be changed by the container (Portal), but may be looked up with the <code>tagId</code>
+ * value through the JavaScript method <code>getNetuiTagName</code> method written by
+ * the &lt;netui:html> tag.</td></tr>
+ * <tr><th rowspan="2">useMap</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The client-side image map declaration.</td></tr>
+ * <tr><th rowspan="2">vspace</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The vertical spacing around the image.</td></tr>
+ * <tr><th rowspan="2">width</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The image width.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, an ImageAnchor shows "top.jpg" at 25 x 25 pixels and navigates to index.jsp when clicked.
+ * <pre>&lt;netui:imageAnchor href="index.jsp" src="top.jpg" height="25" width="25" /&gt;</pre>
+ * </p>
+ * <p><b>JavaScript</b></p>
+ * <p>If an ImageAnchor sets the <code>formSubmit</code> attribute to <code>true</code> and no
+ * <code>onClick</code> attribute is set, the following JavaScript will be written into the page,
+ * referenced by the <code>onclick</code> attribute of the generated image anchor, and will cause
+ * the form to submit:<br/>
+ * <pre>
+ * function submit[formname][formAction]Form() {
+ *   for(var i=0; i&lt;document.forms.length; i++) {
+ *     if (document.forms[i].action == "[formAction]") {
+ *       document.forms[i].method="POST";
+ *       document.forms[i].action="[formAction]";
+ *       document.forms[i].submit();
+ *     }
+ *   }
+ * }
+ * </pre>
+ * <p>It is possible to write a custom <code>onClick</code> JavaScript event handler that would
+ * do additional work, for example form validation, and still POST the form correctly.  To
+ * accomplish this, implement a JavaScript method like that set in the <code>onClick</code>
+ * attribute of the image anchor tag as:</p>
+ * <pre>
+ * &lt;netui:imageAnchor formSubmit="true" onClick="SubmitFromAnchor(); return false;"&gt;View Results&lt;/netui:imageAnchor&gt;
+ * </pre>
+ * <p>And add JavaScript to the page. For example:</p>
+ * <pre>
+ * function SubmitFromAnchor()
+ * {
+ *   // implement custom logic here
+ *
+ *   for(var i=0; i&lt;document.forms.length; i++)
+ *   {
+ *     // submit to the action /aWebapp/formPost.do
+ *     if (document.forms[i].action == "/aWebapp/formPost.do")
+ *     {
+ *       document.forms[i].method="POST";
+ *       document.forms[i].action="/aWebapp/formPost.do";
+ *       document.forms[i].submit();
+ *     }
+ *   }
+ * }
+ * </pre>
+ * <p>This will execute JavaScript code to execute before posting the form.</p>
+ *
+ * @netui:tag name="imageAnchor" description="Combines the functionality of the netui:image and netui:anchor tags."
+ * @netui.tldx:tag requiredchild="parameter parameterMap attribute"
+ * renderer="workshop.netui.jspdesigner.tldx.ImageAnchorRenderer"
+ * whitespace="indent"
+ */
+public class ImageAnchor
+        extends Anchor
+        implements IHtmlAccessable
+{
+    ImageTag.State _imgState = new ImageTag.State();
+
+    //@todo: tagId is not handled here
+    private String _rolloverImage = null; // The roll-over image of the ImageAnchor.
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "ImageAnchor";
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>src</code>
+     * attribute. ImageAnchor supports two facets, <code>image</code> and <code>anchor<code>.  The default
+     * facet is anchor, meaning if the facet is not specified, the attribute will be applied to the
+     * &lt;a> element.  To apply an attribute to the &lt;img> element you must specify the
+     * <code>image</code> facet.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null && name.equals(SRC)) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+        }
+        if (facet != null) {
+            if (facet.equals("image")) {
+                setStateAttribute(name, value, _imgState);
+                return;
+            }
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Sets the property to specify where to align the image.
+     * @param align - the image alignment.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setAlign(String align)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALIGN, align);
+    }
+
+    /**
+     * Sets the property to specify the alt text of the image.
+     * @param alt - the image alignment.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setAlt(String alt)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+    }
+
+    /**
+     * Sets the property to specify the longdesc.
+     * @param longdesc - the longdesc.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression" category="misc"
+     */
+    public void setLongdesc(String longdesc)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, LONGDESC, longdesc);
+    }
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true" type="char"
+     */
+    public void setAccessKey(char accessKey)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the border size around the image.
+     * @param border - the border size.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setBorder(String border)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, border);
+    }
+
+    /**
+     * Sets the image height.
+     * @param height - the height.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setHeight(String height)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HEIGHT, height);
+    }
+
+    /**
+     * Sets the the horizontal spacing around the image.
+     * @param hspace - the horizontal spacing.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression" category="misc"
+     */
+    public void setHspace(String hspace)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HSPACE, hspace);
+    }
+
+    /**
+     * Sets the server-side image map declaration.
+     * @param ismap - the image map declaration.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setIsmap(String ismap)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ISMAP, ismap);
+    }
+
+    /**
+     * Sets the roll-over image of the ImageAnchor.
+     * @param rolloverImage - the rollover image.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"
+     */
+    public void setRolloverImage(String rolloverImage)
+    {
+        _rolloverImage = rolloverImage;
+    }
+
+    /**
+     * Sets the image source URI.
+     * @param src - the image source URI.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"
+     * language="netuiexpression"
+     * reftype="img-url"
+     */
+    public void setSrc(String src)
+            throws JspException
+    {
+        _imgState.src = src;
+    }
+
+    /**
+     * Sets the client-side image map declaration.
+     * @param usemap - the map declaration.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setUsemap(String usemap)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, USEMAP, usemap);
+    }
+
+   /**
+     * Sets the vertical spacing around the image.
+     * @param vspace - the vertical spacing.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setVspace(String vspace)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, VSPACE, vspace);
+    }
+
+    /**
+     * Set the &lt;img> style for the contained image. When the tag library is
+     * running in legacy mode, this will override the <code>style</code> attribute if that is
+     * set.  If this is not set, and <code>style</code> is set, then it will be applied to
+     * the image.
+     * @param imageStyle - the label style
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="format" propertyclass="workshop.jspdesigner.properties.JspStyleProperty"
+     */
+    public void setImageStyle(String imageStyle)
+    {
+        _imgState.style = imageStyle;
+    }
+
+    /**
+     * Set the label style class for each contained CheckBoxOption. When the tag library is
+     * running in legacy mode, this will override the <code>styleClass</code> attribute if that is
+     * set.  If this is not set, and <code>styleClass</code> is set, then it will be applied to
+     * the image.
+     * @param imageClass - the image class
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="format"
+     */
+    public void setImageStyleClass(String imageClass)
+    {
+        _imgState.styleClass = imageClass;
+    }
+
+    /**
+     * Sets the image width.
+     * @param width - the image width.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setWidth(String width)
+    {
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, WIDTH, width);
+    }
+
+    /**
+     * Insert rollover javascript.
+     * <p>
+     * Support for indexed property since Struts 1.1
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        if (_rolloverImage != null && getJavaScriptAttribute(ONMOUSEOVER) == null) {
+            // cause the roll over script to be inserted
+            JavaScriptUtils jsu = getJavaScriptUtils((HttpServletRequest) pageContext.getRequest());
+            String s = jsu.writeRollover(getScriptReporter());
+            if (s != null)
+                write(s);
+        }
+
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Render the image and hyperlink.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        ServletRequest req = pageContext.getRequest();
+
+        // build the anchor into the results
+        StringBuilder results = new StringBuilder(128);
+        StringBuilder script = new StringBuilder(128);
+
+        // render the anchor tag
+        TagRenderingBase trb = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, req);
+        if (!createAnchorBeginTag(results, script, trb)) {
+            reportErrors();
+            if (script.length() > 0)
+                write(script.toString());
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // if there are errors then return....
+        if (hasErrors()) {
+            reportErrors();
+            if (script.length() > 0)
+                write(script.toString());
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // set the source and lowsrc attributes
+        // the lowsrc is deprecated and should be removed.
+        if (_imgState.src != null) {
+            _imgState.src = PageflowTagUtils.prepareResourceUrl(pageContext, _imgState.src);
+        }
+
+        // set the rollover image
+        if (_rolloverImage != null) {
+           _rolloverImage = PageflowTagUtils.prepareResourceUrl(pageContext, _rolloverImage);
+            _rolloverImage = qualifyUrlToContext(_rolloverImage);
+
+            HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+            if (getJavaScriptAttribute(ONMOUSEOUT) == null) {
+                _imgState.onmouseout = "swapImage(this,'" + response.encodeURL(_imgState.src) + "')";
+            }
+            if (getJavaScriptAttribute(ONMOUSEOVER) == null) {
+                _imgState.onmouseover = "swapImage(this,'" + response.encodeURL(_rolloverImage) + "')";
+            }
+        }
+
+        // render the image tag.
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.IMAGE_TAG, req);
+        br.doStartTag(results, _imgState);
+        br.doEndTag(results);
+
+        // write the end tag
+        trb.doEndTag(results);
+        if (script.length() > 0)
+            results.append(script.toString());
+
+        write(results.toString());
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _imgState.clear();
+        _rolloverImage = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageButton.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageButton.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,373 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.tags.IHtmlAccessable;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.InputImageTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.struts.Globals;
+import org.apache.struts.config.ModuleConfig;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+
+/**
+ * Generates an <code>&lt;input type="image"></code> tag with the specified attributes. ImageButton
+ * ignores its body content.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">align</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Property to specify where to align the image.</td></tr>
+ * <tr><th rowspan="2">alt</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Property to specify alt text of an image.</td></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A boolean value which if true will cause the ImageButton to be disabled.</td></tr>
+ * <tr><th rowspan="2">height</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The image height</td></tr>
+ * <tr><th rowspan="2">hspace</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The horizontal spacing around the image</td></tr>
+ * <tr><th rowspan="2">rolloverImage</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The URI of the rollover image</td></tr>
+ * <tr><th rowspan="2">src</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The URI of the image</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The id of this image.  The real id written to the HTML stream may be changed
+ * by the container (Portal), but may be looked up with the 'tagId' value through the JavaScript
+ * method <code>getNetuiTagName</code> method written by the &lt;netui:html> tag.</td></tr>
+ * <tr><th rowspan="2">vspace</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The vertical spacing around the image.</td></tr>
+ * <tr><th rowspan="2">width</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The image width.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, an ImageButton shows "house.jpg", and "house_highlight.jpg" upon mouseover
+ * of the image. When clicked, the ImageButton will invoke the action specified on the
+ * &lt;netui:form> that contains it.
+ * <pre>&lt;netui:imageButton rolloverImage="house_highlight.jpg" src="house.jpg" /></pre>
+ *
+ * <p><b>JavaScript</b></p>
+ * <p>If the ImageButton has a rolloverImage, the following javascript will be written:</p>
+ * <pre>
+ * function swapImage(control, image) <br>{<br>
+ * &nbsp;&nbsp;control.src = image;<br>}<br>
+ * </pre>
+ *
+ * @netui:tag name="imageButton" description="Combines the functionality of the netui:image and netui:button tags."
+ * @netui.tldx:tag requiredchild="attribute"
+ * renderer="workshop.netui.jspdesigner.tldx.ImageButtonRenderer"
+ * whitespace="indent"
+ */
+public class ImageButton
+        extends HtmlFocusBaseTag
+        implements IHtmlAccessable
+{
+    private InputImageTag.State _state = new InputImageTag.State();
+
+    private String _page;            // The module-relative URI of the image.
+    private String _rolloverImage;   // The roll-over image of the ImageButton.
+    private String _id;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "ImageButton";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>src</code>
+     * and <code>value</code> attributes
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null) {
+            if (name.equals(SRC) || name.equals(VALUE)) {
+                String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+                registerTagError(s, null);
+            }
+            else {
+                if (name.equals(DISABLED)) {
+                    _state.disabled = new Boolean(value).booleanValue();
+                    return;
+                }
+            }
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Sets the property to specify where to align the image.
+     * @param align - the image alignment.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setAlign(String align)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALIGN, align);
+    }
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true" type="char"
+     * @netui.tldx:attribute
+     */
+    public void setAccessKey(char accessKey)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(String tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, tabindex);
+    }
+
+    /**
+     * Sets the usemap of for the map.
+     * @param usemap - the tab index.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setUsemap(String usemap)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, USEMAP, usemap);
+    }
+
+   /**
+     * Sets the ismap of for the map.
+     * @param ismap - the tab index.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setIsmap(String ismap)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ISMAP, ismap);
+    }
+
+    /**
+     * Sets the property to specify the alt text of the image.
+     * @param alt - the image alt text.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setAlt(String alt)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+    }
+    /**
+     * Sets the roll-over image of the ImageAnchor.
+     * @param rolloverImage - the rollover image.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"
+     */
+    public void setRolloverImage(String rolloverImage)
+    {
+        _rolloverImage = rolloverImage;
+    }
+
+    /**
+     * Sets the image source URI.
+     * @param src - the source URI.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"
+     * language="netuiexpression" reftype="img-url"
+     */
+    public void setSrc(String src)
+            throws JspException
+    {
+        _state.src = src;
+    }
+
+    /**
+     * Set the value of the ImageButton.
+     * @param value - the value of the ImageButton.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setValue(String value)
+    {
+        _state.value = value;
+    }
+
+    /**
+     * Process the start of this tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+
+        if (_rolloverImage != null && getJavaScriptAttribute(ONMOUSEOVER) == null) {
+            // cause the roll over script to be inserted
+            JavaScriptUtils jsu = getJavaScriptUtils((HttpServletRequest) pageContext.getRequest());
+            String s = jsu.writeRollover(getScriptReporter());
+            if (s != null)
+                write(s);
+        }
+
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content of the ImageButton.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+
+        if (bodyContent != null) {
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Process the end of this tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        ServletRequest req = pageContext.getRequest();
+        String scriptId = null;
+        String tmp = null;
+        StringBuilder results = new StringBuilder(128);
+
+        // we assume that tagId will over have override id if both
+        // are defined.
+        if (getTagId() != null) {
+            scriptId = renderTagId(_state, null, true, false);
+        }
+        else {
+            _state.id = _id;
+        }
+
+        tmp = src();
+        if (tmp != null) {
+            tmp = PageflowTagUtils.prepareResourceUrl(pageContext, tmp);
+            _state.src = tmp;
+        }
+
+        _state.disabled = isDisabled();
+
+        if (_rolloverImage != null) {
+
+            if (hasErrors()) {
+                reportErrors();
+                localRelease();
+                return EVAL_PAGE;
+            }
+
+            _rolloverImage = PageflowTagUtils.prepareResourceUrl(pageContext, _rolloverImage);
+            _rolloverImage = qualifyUrlToContext(_rolloverImage);
+        }
+
+        if ((getJavaScriptAttribute(ONMOUSEOUT) == null) && (_rolloverImage != null)) {
+            setOnMouseOut("swapImage(this,'" + tmp + "')");
+        }
+        if ((getJavaScriptAttribute(ONMOUSEOVER) == null) && (_rolloverImage != null)) {
+            setOnMouseOver("swapImage(this,'" + _rolloverImage + "')");
+        }
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_IMAGE_TAG, req);
+        br.doStartTag(results, _state);
+        br.doEndTag(results);
+
+        if (scriptId != null)
+            results.append(scriptId);
+
+        write(results.toString());
+
+        // Evaluate the remainder of this page
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+
+        _page = null;
+        _rolloverImage = null;
+        _id = null;
+    }
+
+    /**
+     * Return the base source URL that will be rendered in the <code>src</code>
+     * property for this generated element, or <code>null</code> if there is
+     * no such URL.
+     */
+    private String src()
+    {
+
+        // Deal with a direct context-relative page that has been specified
+        if (_page != null) {
+            HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+            ModuleConfig config = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
+            if (config == null)
+                return (request.getContextPath() + _page);
+            return (request.getContextPath() + config.getPrefix() + _page);
+        }
+
+        // Deal with an absolute source that has been specified
+        if (_state.src != null)
+            return _state.src;
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/JavaScriptUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/JavaScriptUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,210 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.ScriptReporter;
+
+import java.io.Serializable;
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+/**
+ * Provides tag specific support for the HTML tags so they can create JavaScript.
+ */
+public class JavaScriptUtils implements Serializable
+{
+    private static final String BUNDLE_NAME = "org.apache.beehive.netui.tags.html.javaScript";
+    private boolean _anchorFormSubmit = false;
+    private boolean _rollover = false;
+    private boolean _writeLookupMethods = false;
+
+    public String writeAnchorFormSubmit(ScriptReporter scriptReporter)
+    {
+        // check to see if we have already written out the form submit
+        if (_anchorFormSubmit)
+            return null;
+
+        _anchorFormSubmit = true;
+
+        // get the method and write it.
+        String s = getString("anchorFormSubmit", null);
+
+        // if we passed in a script reporter, it will handle the
+        // javaScript, otherwise update the buffer by writting a
+        // script block into it.
+        if (scriptReporter != null) {
+            scriptReporter.addScriptFunction(s);
+            return null;
+        }
+
+        StringBuilder sb = new StringBuilder();
+        writeScriptBlock(sb, s);
+        return sb.toString();
+    }
+
+    /**
+     */
+    public String writeAnchorFormSubmitAction(String action, String newAction)
+    {
+        assert (action != null);
+        assert (newAction != null);
+
+        // @TODO: Need to escape the action? and newAction/
+        String s = getString("anchorFormSubmitAction",
+                new Object[]{action, newAction});
+        return s;
+    }
+
+    /**
+     * this will write out the form focus script block
+     */
+    public static String getFocusScript(String formName, String fieldName)
+    {
+        assert (formName != null);
+        assert (fieldName != null);
+
+        // @TODO: Need to escaping
+        String s = getString("setFocus", new Object[]{formName, fieldName});
+        StringBuilder sb = new StringBuilder();
+        writeScriptBlock(sb, s);
+        return sb.toString();
+    }
+
+    /**
+     * This method will write out a tagId map entry for when there
+     * isn't a ScriptContainer defined.
+     */
+    public String getTagIdMapping(String tagId, String value)
+    {
+        String s = getString("singleIdMappingTable", new Object[]{
+            tagId, value});
+        String meths = writeNetuiNameFunctions(null);
+        if (meths != null)
+            s += meths;
+        StringBuilder sb = new StringBuilder();
+        writeScriptBlock(sb, s);
+        return sb.toString();
+    }
+
+    /**
+     *
+     */
+    public String writeRollover(ScriptReporter scriptReporter)
+    {
+        if (_rollover)
+            return null;
+        _rollover = true;
+
+        String s = getString("rollover", null);
+        if (scriptReporter != null) {
+            scriptReporter.addScriptFunction(s);
+            return null;
+        }
+
+        StringBuilder sb = new StringBuilder();
+        writeScriptBlock(sb, s);
+        return sb.toString();
+    }
+
+    public String writeIdMap(ScriptReporter scriptRepoter, String entries)
+    {
+        String s = getString("idMappingTable", new Object[]{entries});
+        if (scriptRepoter != null) {
+            scriptRepoter.addScriptCode(s);
+            return null;
+        }
+        return s;
+    }
+
+    public String writeNetuiNameFunctions(ScriptReporter scriptReporter)
+    {
+        if (_writeLookupMethods)
+            return null;
+        _writeLookupMethods = true;
+
+        // allocate a String Buffer only if there is no script reporter
+        StringBuilder sb = null;
+        if (scriptReporter == null)
+            sb = new StringBuilder();
+
+        String s = getString("getNetuiTagNameAdvanced", null);
+        if (scriptReporter != null)
+            scriptReporter.addScriptFunction(s);
+        else {
+            sb.append(s);
+            sb.append("\n");
+        }
+
+        s = getString("getScopeId", null);
+        if (scriptReporter != null)
+            scriptReporter.addScriptFunction(s);
+        else {
+            sb.append(s);
+            sb.append("\n");
+        }
+
+        return (sb != null) ? sb.toString() : null;
+    }
+
+    /**
+     * This is a static method that will write a consistent look/feel to the
+     * tags and comment markup that appears around the JavaScript.
+     * @param results the StringBuilder that will have the &lt;script>
+     *                tag written into
+     * @param script  the JavaScript block
+     */
+    public static void writeScriptBlock(StringBuilder results, String script)
+    {
+        assert(results != null);
+
+        results.append("\n\n<script language=\"JavaScript\" type=\"text/JavaScript\">\n");
+        results.append("<!--\n");
+        results.append(script);
+        results.append("-->\n");
+        results.append("</script>\n\n");
+    }
+
+    /**
+     * Returns the string specified by aKey from the errors.properties bundle.
+     * @param aKey The key for the message pattern in the bundle.
+     * @param args The args to use in the message format.
+     */
+    public static String getString(String aKey, Object[] args)
+    {
+        assert (aKey != null);
+
+        String pattern = getBundle().getString(aKey);
+        if (args == null)
+            return pattern;
+
+        MessageFormat format = new MessageFormat(pattern);
+        String result = format.format(args).toString();
+        return result;
+    }
+
+    /**
+     * Returns the resource bundle named Bundle[].properties in the
+     * package of the specified class.
+     */
+    private static ResourceBundle getBundle()
+    {
+        return ResourceBundle.getBundle(BUNDLE_NAME);
+    }
+
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Label.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Label.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,203 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.SpanTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+
+/**
+ * Generates styled text span based on an expression or literal value.
+ *
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">dataformatas</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The data format of the Label</td></tr>
+ * <tr><th rowspan="2">defaultValue</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal default value that will be used when an expression results in a
+ * NULL value. If the default value is an expression, the any defined formatters will be applied
+ * to the default value.  If the defaultValue is not an expression, the value will be output without
+ * applying formatters. If the default value is being output and contains a XML Entity, such as
+ * "&amp;nbsp;", then the default value is output without applying any escaping to it.
+ * The result default value acts like a literal string.</td></tr>
+ * <tr><th rowspan="2">escapeWhiteSpaceForHtml</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Flag that will set an escape for white space.  The default value is false.</td></tr>
+ * <tr><th rowspan="2">id</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3"><b>The <code>id</code> attribute has been deprecated; instead, use
+ * <code>tagId</code>.</b> The id of the span surrounding the Label text. You should use
+ * <code>tagId</code> which will encode the id correctly for containers such as the Portal which
+ * rewrite IDs to make them unique.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The id of this label.  The real id written to the HTML stream may be changed by
+ * the container (Portal), but may be looked up with the <code>tagId</code> value through the JavaScript
+ * method <code>getNetuiTagName</code> method written by the &lt;netui:html> tag.</td></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal value or an expression that resolves to a bean property.</td></tr>
+ *
+ * </table>
+ * </p>
+ *
+ * <p>If the resulting value to be output is the <nobr>" "</nobr> String, it will output as
+ * the value <nobr><code>"&amp;nbsp;"</code></nobr>.</p>
+ * @example In this first sample, a Label displays the form bean's firstName property.
+ * <pre>&lt;netui:label value="{actionForm.firstName}" /></pre>
+ *
+ * <p>In this next sample, the HTML in the rendered JSP will contain the text
+ * "&amp;nbsp;" and the user will see ' '.</p>
+ * <pre>&lt;netui:label value="{pageFlow.somethingNull}" defaultValue="&amp;nbsp;"/></pre>
+ *
+ * <p>In this next sample, the HTML will contain the text "&amp;nbsp;" and the user will
+ * see '&amp;nbsp;'</p>
+ * <pre>&lt;netui:label value="{pageFlow.somethingNull}" defaultValue="&amp;amp;nbsp;"/></pre>
+ *
+ * <p>In the next sample, if the read-only data binding expression <code>pageFlow.someString</code> returns
+ * the value " " then the HTML will contain the value "&amp;nbsp;" and the user will see ' '.</p>
+ * <pre>&lt;netui:label value="{pageFlow.someString}" /></pre>
+ * 
+ * @netui:tag name="label" description="Places formatted or dynamically generated text on the page."
+ * @netui.tldx:tag requiredchild="formatDate formatNumber formatString attribute"
+ * renderer="workshop.netui.jspdesigner.tldx.LabelRenderer"
+ * bodycontentpref="empty"
+ */
+public class Label extends LabelBase
+        implements Formattable
+{
+    private static final Logger logger = Logger.getInstance(Label.class);
+
+    private SpanTag.State _state = new SpanTag.State();
+    private String _id;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Label";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Prepare the label formatters.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Render the label.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        boolean bypassEscape = false;
+
+        String scriptId = null;
+        ServletRequest req = pageContext.getRequest();
+
+        Object labelObject = null;
+
+        // if this is not client side binding, evalute the value
+        if (_value != null)
+            labelObject = _value;
+        else {
+            if (_defaultValue != null) {
+                labelObject = _defaultValue;
+                bypassEscape = HtmlUtils.containsEntity(_defaultValue.toString());
+            }
+            else {
+                logger.warn(Bundle.getString("Tags_LabelExpressionNull", _value));
+                labelObject = DEFAULT_NULL_TEXT;
+            }
+        }
+
+        StringBuilder results = new StringBuilder(64);
+
+        // we assume that tagId will over have override id if both
+        // are defined.
+        String tagId = getTagId();
+        if (tagId != null) {
+            String realName = rewriteName(tagId);
+            scriptId = addTagIdMapping(tagId, realName);
+            _state.id = realName;
+        }
+        else if (_id != null) {
+            _state.id = _id;
+        }
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, req);
+        br.doStartTag(results, _state);
+
+        // push the evaluated expression when we are not client side bound...
+        String labelValue = formatText(labelObject);
+
+        if (!bypassEscape)
+            results.append(filter(labelValue, _escapeWhiteSpace));
+        else
+            results.append(labelValue);
+
+        br.doEndTag(results);
+
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        if (scriptId != null)
+            results.append(scriptId);
+
+        write(results.toString());
+
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _id = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/LabelBase.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/LabelBase.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,142 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.HtmlUtils;
+
+import javax.servlet.jsp.JspException;
+import java.util.ArrayList;
+
+/**
+ * This is a base class providing implementation for both the Label and FormLabel.
+ */
+public abstract class LabelBase extends HtmlBaseTag
+        implements Formattable
+{
+    protected static final String DEFAULT_NULL_TEXT = "";
+
+    protected Object _defaultValue;               // The attribute value of the defaultValue attribute
+    protected Object _value;                      // The text of the Label.
+    protected boolean _escapeWhiteSpace = true;   // escape white space flag
+    private ArrayList _formatters;              // The formatters
+
+    /**
+     * Set the default value of this Label.
+     * This can be an expression.  If the default value is an expression
+     * all formatters will be applied, otherwise the default value will be output
+     * without being formatted.
+     * @param defaultValue - the default value
+     * @netui:attribute required="false" rtexprvalue="true" type="java.lang.Object"
+     * @netui.tldx:attribute
+     */
+    public void setDefaultValue(Object defaultValue)
+    {
+        _defaultValue = defaultValue;
+    }
+
+    /**
+     * Sets the text of the Label.
+     * @param value - the Label value or expression.
+     * @netui:attribute required="true" rtexprvalue="true" type="java.lang.Object"
+     * @netui.tldx:attribute
+     */
+    public void setValue(Object value)
+    {
+        _value = value;
+    }
+
+    /**
+     * Sets a <code>boolean</code> flag indicating if we will escape
+     * white space for HTML.  If this is <code>true</code> the white space
+     * charcters ' ' will be converted into "&nbsp;" and '\n' converted into
+     * "<br />".  The result is that in HTML white space will be represented
+     * correctly.  If this is <code>false</code> then white space will be
+     * output as it is found in the value.
+     * @param escapeWhiteSpace - boolean indicating if we are escaping for white space.
+     * @netui:attribute required="false" rtexprvalue="true"  type="boolean"
+     */
+    public void setEscapeWhiteSpaceForHtml(boolean escapeWhiteSpace)
+    {
+        _escapeWhiteSpace = escapeWhiteSpace;
+
+    }
+
+    /**
+     * Adds a FormatTag.Formatter to the Label's set of formatters
+     * @param formatter - a FormatTag.Formatter added by a child FormatTag.
+     */
+    public void addFormatter(FormatTag.Formatter formatter)
+    {
+        if (_formatters == null)
+            _formatters = new ArrayList();
+        _formatters.add(formatter);
+    }
+
+    /**
+     * Filter the specified string for characters that are senstive to
+     * HTML interpreters, returning the string with these characters replaced
+     * by the corresponding character entities.
+     * @param value                 The string to be filtered and returned
+     * @param markupHTMLSpaceReturn convert space characters and return characters
+     *                              to &amp;nbsp; and &lt;br /&gt; marketup for html.
+     */
+    protected String filter(String value, boolean markupHTMLSpaceReturn)
+    {
+        if (value.equals(" "))
+            return "&nbsp;";
+
+        return HtmlUtils.filter(value, markupHTMLSpaceReturn);
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _defaultValue = null;
+        _escapeWhiteSpace = true;
+        _formatters = null;
+        _value = null;
+    }
+
+    /**
+     *
+     */
+    protected String formatText(Object text)
+            throws JspException
+    {
+        if (text == null)
+            return null;
+        if (_formatters == null)
+            return text.toString();
+
+        for (int i = 0; i < _formatters.size(); i++) {
+            FormatTag.Formatter currentFormatter = (FormatTag.Formatter) _formatters.get(i);
+            try {
+                text = currentFormatter.format(text);
+            }
+            catch (JspException e) {
+                registerTagError(e.getMessage(), e);
+            }
+        }
+        return text.toString();
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Parameter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Parameter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+// java imports
+
+// internal imports
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * Writes a URL parameter to a URL on its parent tag.  The parent tag must implement URLParams.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">name</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The name of the parameter.</td></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal value or an expression that resolves to a bean property.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, a parameter enclosed by a <code>URLParams</code> tag
+ * will add to the enclosing tag's URL with the name-value pair of <code>numberToShow</code> and
+ * the value of the <code>currentNumber</code> property in the page flow.
+ * <pre>&lt;netui:parameter name="numberToShow" value="{pageFlow.currentNumber}" /></pre>
+ * 
+ * @see ParameterMap
+ *
+ * @netui:tag name="parameter" description="Writes a URL parameter to a URL on its parent tag."
+ * @netui.tldx:tag requiredparent="anchor button form image imageAnchor datagrid:anchorColumn data:anchorColumn"
+ * requiredchild="#nothing"
+ * renderer="workshop.netui.jspdesigner.tldx.ParameterRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class Parameter
+        extends AbstractBaseTag
+{
+    private String _name = null;
+    private String _value = null;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Parameter";
+    }
+
+    /**
+     * Sets the name of the URL parameter.
+     * @param name - the parameter name.
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setName(String name)
+    {
+        _name = name;
+    }
+
+    /**
+     * Sets the value of the URL parameter.  This can be an expression.
+     * @param value - the parameter value.
+     * @netui:attribute required="true" rtexprvalue="true" type="java.lang.Object"
+     * @netui.tldx:attribute
+     */
+    public void setValue(Object value)
+            throws JspException
+    {
+        _value = value.toString();
+    }
+
+    /**
+     * Add the URL parameter to the Parameter's parent.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        Tag parentTag = findAncestorWithClass(this,URLParams.class);
+        if (parentTag == null) {
+            String msg = Bundle.getString("Tags_InvalidParameterParent");
+            registerTagError(msg, null);
+            reportErrors();
+        }
+        else {
+            URLParams parent = (URLParams) parentTag;
+            parent.addParameter(_name, _value);
+        }
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _name = null;
+        _value = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ParameterMap.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ParameterMap.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,122 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+// java imports
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Writes each in a map of URL parameters to a URL on its parent tag.
+ * The parent tag must implement URLParams.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">map</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An expression pointing to a map of parameters.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, a ParameterMap enclosed by a <code>URLParams</code> tag
+ * gets its parameters from the page flow's <code>parameterHashMap</code> property (a Map),
+ * and will add to the enclosing tag's URL parameters with the parameterHashMap's name-value
+ * pairs.
+ * <pre>&lt;netui:parameterMap map="{pageFlow.parameterHashMap}" /></pre>
+ * 
+ * @see Parameter
+ *
+ * @netui:tag name="parameterMap" description="Provides a read-only XScript expression that points to a map of parameters. Each entry in the map provides a URL parameter that will be added to the parent tag's URL."
+ * @netui.tldx:tag requiredparent="anchor button form image imageAnchor data:anchorColumn"
+ * requiredchild="#nothing"
+ * renderer="workshop.netui.jspdesigner.tldx.ParameterMapRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class ParameterMap
+        extends AbstractBaseTag
+{
+    private Map _map = null;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "ParameterMap";
+    }
+
+    /**
+     * Sets the map expression.
+     * @param map - the map expression.
+     * @netui:attribute required="true" rtexprvalue="true" type="java.util.Map"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setMap(Map map) throws JspException
+    {
+        _map = map;
+    }
+
+    /**
+     * Add each parameter in the URL parameter map to the Parameter's parent.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        Tag parentTag = findAncestorWithClass(this,URLParams.class);
+        if (parentTag != null) {
+            // this map shouldn't be null because the attribute is required.
+            // @todo: when Asserts are on, we should assert this instead of this conditional
+            if (_map != null) {
+                URLParams parent = (URLParams) parentTag;
+                Iterator it = _map.entrySet().iterator();
+                while (it.hasNext()) {
+                    Map.Entry key = (Map.Entry) it.next();
+                    parent.addParameter(key.getKey().toString(),key.getValue().toString());
+                }
+            }
+        }
+        else {
+            String msg = Bundle.getString("Tags_InvalidParameterMapParent");
+            registerTagError(msg, null);
+            reportErrors();
+        }
+
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _map = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RadioButtonGroup.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RadioButtonGroup.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,392 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.ProcessPopulate;
+import org.apache.beehive.netui.tags.naming.FormDataNameInterceptor;
+import org.apache.beehive.netui.tags.naming.IndexedNameInterceptor;
+import org.apache.beehive.netui.tags.naming.PrefixNameInterceptor;
+import org.apache.beehive.netui.tags.rendering.ConstantRendering;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.tags.GroupOption;
+import org.apache.beehive.netui.script.common.DataAccessProviderBean;
+import org.apache.beehive.netui.script.common.DataAccessProviderStack;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.*;
+
+/**
+ * Groups a collection of RadioButtonOptions, and handles databinding of their values.
+ *
+ * If RadioButtonGroup uses any Format tags, it must have those tags come before above any nested
+ * RadioButtonOption tags.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">dataSource</th><td>Yes</td><td>No</td><td>Read / Write</td></tr>
+ * <tr><td colspan="3">The name of a form bean property or an expression that contains the RadioButtonGroup state</td></tr>
+ * <tr><th rowspan="2">defaultValue</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal value or an expression that is used to set the RadioButtonGroup's initial state</td></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A boolean value which if true will cause the RadioButtonGroup to be disabled.</td></tr>
+ * <tr><th rowspan="2">labelStyle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The style of the label for each contained RadioButtonOption</td></tr>
+ * <tr><th rowspan="2">labelStyleClass</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The style class of the label for each contained RadioButtonOption</td></tr>
+ * <tr><th rowspan="2">optionsDataSource</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An expression which is used to generate a set of dynamic RadioButtonOptions</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this radioButtonGroup used by the enclosing html tag to get the tag's name for javascript purposes</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, a RadioButtonGroup has a set of RadioButtonOptions drawn from the
+ * page flow's paymentTypes, uses the page flow's defaultPaymentType as a default if
+ * no paymentType has been selected, and writes the selected paymentType to the form
+ * bean's selectedPaymentType property.
+ * <pre>&lt;netui:radioButtonGroup dataSource="{actionForm.selectedPaymentType}"
+ *      defaultValue="{pageFlow.defaultPaymentType}"
+ *      optionsDataSource="{pageFlow.paymentTypes} />
+ * </pre>
+ * 
+ * @see RadioButtonOption
+ *
+ * @netui:tag name="radioButtonGroup" description="Defines a group of netui:radioButtonOption elements."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.RadioButtonGroupRenderer" whitespace="indent"
+ */
+public class RadioButtonGroup
+        extends HtmlGroupBaseTag
+{
+    // @todo: selection may not work with options in repeater.
+    private static final Logger logger = Logger.getInstance(RadioButtonGroup.class);
+
+    public static final String RADIOBUTTONGROUP_KEY = "radio_button_group_key";
+
+    private String _match;                      // The actual values we will match against, calculated in doStartTag().
+    private String _defaultRadio;               //
+    private Object _dyanmicAttrs;               // The optionsDataSource object
+    private StringBuilder _saveBody;       // The body text
+
+
+    private static final List _internalNamingChain;
+
+    static
+    {
+        List l = new ArrayList(3);
+        l.add(new FormDataNameInterceptor());
+        l.add(new IndexedNameInterceptor());
+        l.add(new PrefixNameInterceptor(RADIOBUTTONGROUP_KEY));
+        _internalNamingChain = Collections.unmodifiableList(l);
+    }
+
+    static
+    {
+        org.apache.beehive.netui.pageflow.ProcessPopulate.registerPrefixHandler(RADIOBUTTONGROUP_KEY, new RadioButtonGroupPrefixHandler());
+    }
+
+    /**
+     * The handler for naming and indexing the RadioButtonGroup.
+     */
+    private static class RadioButtonGroupPrefixHandler
+            implements org.apache.beehive.netui.pageflow.RequestParameterHandler
+    {
+        public void process(javax.servlet.http.HttpServletRequest request, String key,
+                            ProcessPopulate.ExpressionUpdateNode node)
+        {
+            if (logger.isDebugEnabled()) {
+                logger.debug("*********************************************\n" +
+                        "process with key \"" + key + "\" and expression \"" + node.expression + "\"" +
+                        "*********************************************\n");
+            }
+        }
+    }
+
+    public RadioButtonGroup()
+    {
+        super();
+    }
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "RadioButtonGroup";
+    }
+
+    /**
+     * Return an <code>ArrayList</code> which represents a chain of <code>NameInterceptor</code>
+     * objects.  This method by default returns <code>null</code> and should be overridden
+     * by objects that support naming.
+     * @return an <code>ArrayList</code> that will contain <code>NameInterceptor</code> objects.
+     */
+    protected List getNamingChain()
+    {
+        return _internalNamingChain;
+    }
+
+    /**
+     * Override the default value to return a string or the empty string if the default value results in a
+     * <code>null</code> value.
+     * @return the value returned from <code>super.evaluteDefaultValue</code> or the empty string.
+     */
+    protected Object evaluateDefaultValue()
+            throws JspException
+    {
+        Object val = _defaultValue;
+
+        if (val != null)
+            return val.toString();
+        return "";
+    }
+
+    /**
+     * Does the specified value match one of those we are looking for?
+     * @param value Value to be compared
+     */
+    public boolean isMatched(String value)
+    {
+        if (value == null)
+            return false;
+        if (_match != null)
+            return value.equals(_match);
+        if (_defaultRadio != null)
+            return value.equals(_defaultRadio);
+
+        return false;
+    }
+
+    /**
+     * Determine the match for the RadioButtonGroup
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        // evaluate the datasource and disabled state.
+        Object val = evaluateDataSource();
+        if (val != null)
+            _match = val.toString();
+
+        // Store this tag itself as a page attribute
+        pageContext.setAttribute(RADIOBUTTONGROUP_KEY, this);
+        _defaultRadio = (String) evaluateDefaultValue();
+
+        // see if there are errors in the evaluation
+        if (hasErrors()) {
+            reportErrors();
+            return SKIP_BODY;
+        }
+
+        ServletRequest req = pageContext.getRequest();
+        ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+        StringBuilder results = new StringBuilder(64);
+        if (isVertical()) {
+            cr.TABLE(results);
+        }
+
+        // if this is a repeater then we shouid prime the pump...
+        _dyanmicAttrs = evaluateOptionsDataSource();
+        assert (_dyanmicAttrs != null);
+        assert (_dyanmicAttrs instanceof Map ||
+                _dyanmicAttrs instanceof Iterator);
+
+        if (_repeater) {
+            if (!(_dyanmicAttrs instanceof Iterator)) {
+                String s = Bundle.getString("Tags_OptionsDSIteratorError");
+                registerTagError(s, null);
+                return SKIP_BODY;
+            }
+            while (((Iterator) _dyanmicAttrs).hasNext()) {
+                _repCurItem = ((Iterator) _dyanmicAttrs).next();
+                if (_repCurItem != null)
+                    break;
+            }
+            if (isVertical())
+                cr.TR_TD(results);
+
+            DataAccessProviderStack.addDataAccessProvider(this, pageContext);
+        }
+        write(results.toString());
+
+        // Continue processing this page
+        _saveBody = new StringBuilder(128);
+        return EVAL_BODY_INCLUDE;
+    }
+
+    /**
+     * Save any body content of this tag, which will generally be the
+     * option(s) representing the values displayed to the user.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (hasErrors())
+            return SKIP_BODY;
+
+        if (bodyContent != null) {
+            String value = bodyContent.getString();
+            bodyContent.clearBody();
+            if (value == null)
+                value = "";
+            _saveBody.append(value);
+        }
+
+        if (_repeater) {
+            ServletRequest req = pageContext.getRequest();
+            ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+            if (isVertical())
+                cr.end_TD_TR(_saveBody);
+
+            while (((Iterator) _dyanmicAttrs).hasNext()) {
+                _repCurItem = ((Iterator) _dyanmicAttrs).next();
+                if (_repCurItem != null) {
+                    _repIdx++;
+                    if (isVertical())
+                        cr.TR_TD(_saveBody);
+                    return EVAL_BODY_AGAIN;
+                }
+            }
+        }
+
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the set of RadioButtonOptions.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        String idScript = null;
+        String altText = null;
+        String accessKey = null;
+
+        // Remove the page scope attributes we created
+        pageContext.removeAttribute(RADIOBUTTONGROUP_KEY);
+        ServletRequest req = pageContext.getRequest();
+        ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+
+        StringBuilder results = new StringBuilder(128);
+        if (_saveBody != null)
+            results.append(_saveBody);
+        if (_repeater) {
+            // Render a tag representing the end of our current form
+            if (isVertical())
+                cr.end_TABLE(results);
+
+            if (idScript != null)
+                results.append(idScript);
+
+            write(results.toString());
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // Render a tag representing the end of our current form
+
+        if (_dyanmicAttrs instanceof Map) {
+            Map dynamicRadiosMap = (Map) _dyanmicAttrs;
+            Iterator keyIterator = dynamicRadiosMap.keySet().iterator();
+            int idx = 0;
+            while (keyIterator.hasNext()) {
+                Object optionValue = keyIterator.next();
+                String optionDisplay = null;
+                if (dynamicRadiosMap.get(optionValue) != null) {
+                    optionDisplay = dynamicRadiosMap.get(optionValue).toString();
+                }
+                else {
+                    optionDisplay = "";
+                }
+
+                addOption(results, INPUT_RADIO, optionValue.toString(), optionDisplay, idx++, altText, accessKey, _disabled);
+                if (hasErrors()) {
+                    reportErrors();
+                    localRelease();
+                    return EVAL_PAGE;
+                }
+                results.append("\n");
+
+            }
+        }
+        else {
+            assert(_dyanmicAttrs instanceof Iterator);
+
+            Iterator it = (Iterator) _dyanmicAttrs;
+            int idx = 0;
+            while (it.hasNext()) {
+                Object o = it.next();
+                if (o == null)
+                    continue;
+
+                if (o instanceof GroupOption) {
+                    GroupOption go = (GroupOption) o;
+                    addOption(results, INPUT_RADIO, go.getValue(), go.getName(), idx++, go.getAlt(), go.getAccessKey(), _disabled);
+                }
+                else {
+                    String radioValue = o.toString();
+                    addOption(results, INPUT_RADIO, radioValue, radioValue, idx++, altText, accessKey, _disabled);
+                }
+                if (hasErrors()) {
+                    reportErrors();
+                    localRelease();
+                    return EVAL_PAGE;
+                }
+                results.append("\n");
+            }
+        }
+
+        if (isVertical()) {
+            cr.end_TABLE(results);
+        }
+
+        if (idScript != null)
+            results.append(idScript);
+
+        write(results.toString());
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        if(_repeater)
+            DataAccessProviderStack.removeDataAccessProvider(pageContext);
+        
+        super.localRelease();
+
+        _match = null;
+        _defaultRadio = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RadioButtonOption.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RadioButtonOption.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,319 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.IHtmlAccessable;
+import org.apache.beehive.netui.tags.rendering.*;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * A radio button whose state is determined by its enclosing RadioButtonGroup.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">alt</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Define the <code>alt</code> attribute of the &lt;Input> element.</td></tr>
+ * <tr><th rowspan="2">labelStyle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The style of the label for each contained CheckBoxOption</td></tr>
+ * <tr><th rowspan="2">labelStyleClass</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The style class of the label for each contained CheckBoxOption</td></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An expression to a bean property, or a literal, which is the value of
+ * this option</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, a RadioButtonOption (within a RadioButtonGroup) displays a label of
+ * Credit Card and reads its value from the page flow's paymentOption1 property.
+ * <pre>&lt;netui:radioButtonOption value="{pageFlow.paymentOption1}">Credit
+ * Card&lt;/netui:radioButtonOption></pre>
+ * 
+ * @see RadioButtonGroup
+ *
+ * @netui:tag name="radioButtonOption" description="A radio button whose state is determined by its enclosing netui:RadioButtonGroup."
+ * @netui.tldx:tag requiredparent="radioButtonGroup td"
+ * renderer="workshop.netui.jspdesigner.tldx.RadioButtonOptionRenderer"
+ * whitespace="indent"
+ * @netui:attribute name="tagId" hide="true"
+ */
+public class RadioButtonOption
+        extends HtmlFocusBaseTag
+        implements IHtmlAccessable
+{
+    private InputBooleanTag.State _state = new InputBooleanTag.State();
+    private SpanTag.State _spanState = new SpanTag.State();
+    private String _text;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "RadioButtonOption";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>type</code>
+     * and <code>value</code> attribute.
+     * @param name  The name of the attribute
+     * @param value The value of the attribute
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null) {
+            if (name.equals(TYPE) || name.equals(VALUE) || name.equals(CHECKED)) {
+                String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+                registerTagError(s, null);
+            }
+            else {
+                _state.disabled = new Boolean(value).booleanValue();
+                return;
+            }
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Set the label style for each contained RadioButtonOption.
+     * The label style here will override a labelStyle at the RadioButtonGroup level.
+     * @param labelStyle - the label style
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="format" propertyclass="workshop.jspdesigner.properties.JspStyleProperty"
+     */
+    public void setLabelStyle(String labelStyle)
+    {
+        _spanState.style = labelStyle;
+    }
+
+    /**
+     * Set the label style class for each contained RadioButtonOption.
+     * The label style class here will override a labelStyleClass at the RadioButtonGroup level.
+     * @param labelStyleClass - the label style
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="format"
+     */
+    public void setLabelStyleClass(String labelStyleClass)
+    {
+        _spanState.styleClass = labelStyleClass;
+    }
+
+    /**
+     * Set the value of this RadioButtonOption.
+     * @param value - the RadioButtonOption value
+     * @netui:attribute required="true" rtexprvalue="true" type="java.lang.Object"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setValue(Object value)
+            throws JspException
+    {
+        if (value != null)
+            _state.value = value.toString();
+        else
+            _state.value = null;
+    }
+
+    /**
+     * Process the start of this tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+
+        Tag parentTag = getParent();
+
+        if (!(parentTag instanceof RadioButtonGroup)) {
+            String s = Bundle.getString("Tags_RadioButtonOptionNoRadioButtonGroup");
+            registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        RadioButtonGroup parent = (RadioButtonGroup) parentTag;
+        if ((parent.getOptionsDataSource() != null) && !parent.isRepeater()) {
+            String s = Bundle.getString("Tags_RadioOptionParentHasOptionsDataSource");
+            parent.registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        return EVAL_BODY_BUFFERED;
+
+    }
+
+    /**
+     * Process the body text of this tag (if any).
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+
+        String text = bodyContent.getString();
+        if (text != null) {
+            text = text.trim();
+            bodyContent.clearBody();
+            if (text.length() > 0)
+                _text = text;
+        }
+        return SKIP_BODY;
+
+    }
+
+    /**
+     * Process the end of this tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        ServletRequest req = pageContext.getRequest();
+        ConstantRendering cr = TagRenderingBase.Factory.getConstantRendering(req);
+
+        // this was verified in doBeginTag
+        assert(getParent() instanceof RadioButtonGroup);
+        RadioButtonGroup parent = (RadioButtonGroup) getParent();
+        boolean repeat = parent.isRepeater();
+
+        // Generate an HTML <input type='radio'> element
+        StringBuilder results = new StringBuilder(128);
+        if (parent.isVertical()) {
+            cr.TR_TD(results);
+        }
+        _state.type = INPUT_RADIO;
+        _state.name = parent.getQualifiedDataSourceName();
+
+
+        _state.checked = new Boolean(parent.isMatched(_state.value)).booleanValue();
+        _state.disabled = isDisabled();
+        if (!_state.disabled)
+            _state.disabled = parent.isDisabled();
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_BOOLEAN_TAG, req);
+        br.doStartTag(results, _state);
+
+        // if this is in a repeater, then we only output the <input tag>
+        if (repeat) {
+            write(results.toString());
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        if (_spanState.style == null) {
+            _spanState.style = parent.getLabelStyle();
+        }
+        if (_spanState.styleClass == null) {
+            _spanState.styleClass = parent.getLabelStyleClass();
+        }
+
+        TagRenderingBase spanTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, req);
+        spanTag.doStartTag(results, _spanState);
+        if (_text == null)
+            results.append(_state.value);
+        else
+            results.append(_text);
+        spanTag.doEndTag(results);
+
+        if (parent.isVertical()) {
+            cr.end_TD_TR(results);
+        }
+
+        write(results.toString());
+
+        // Continue evaluating this page
+        localRelease();
+        return EVAL_PAGE;
+
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _spanState.clear();
+
+        _text = null;
+    }
+
+    /* ==================================================================
+     *
+     * This tag's publically exposed HTML, CSS, and JavaScript attributes
+     *
+     * ==================================================================
+     */
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true" type="char"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAccessKey(char accessKey)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the alt attribute value.
+     * @param alt - the alt value.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAlt(String alt)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false" rtexprvalue="true" type="char"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(int tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, Integer.toString(tabindex));
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RewriteName.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RewriteName.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,124 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * Allow a name, typically either an <code>id</code> or <code>name</code> attribute, to participate in URL
+ * rewritting.  Some containers such as WebLogic Portal rewrite names so they are unique.
+ * This tag will cause the name to be made available from <code>getNetuiTagName</code>
+ * JavaScript, which is output from the &lt;netui:html&gt; tag.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">name</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The value of the name which will be rewritten.
+ * The real name will be output and may be looked up using 'name'.</td></tr>
+ * <tr><th rowspan="2">resultId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A name that will cause the real name to be stored into the page context
+ * under this name.</td></tr>
+ * </table>
+ * </p>
+ * @example In this sample, we are creating an HTML span and setting the id attribute to 'foo'.  The
+ * actual value that will be output may change depending on the container processing the
+ * request.  The value 'foo' can be passed to <code>getNetuiTagName</code> to find the real
+ * value of the id attribute.
+ * <pre>&lt;span id="&lt;netui:rewriteName name="foo"/&gt;"&gt;</pre>
+ * 
+ * @see RewriteURL
+ *
+ * @netui:tag name="rewriteName" description="Allows the URL Rewriter to rewrite the name attribute before it is output into the HTML stream."
+ * @netui.tldx:tag requiredchild="#nothing"
+ * renderer="workshop.netui.jspdesigner.tldx.RewriteNameRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class RewriteName
+        extends AbstractBaseTag
+{
+    private String _name = null;
+    private String _resultId = null;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "RewriteName";
+    }
+
+    /**
+     * Sets the name to be rewritten.
+     * @param name - the parameter name.
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setName(String name)
+    {
+        _name = name;
+    }
+
+    /**
+     * Sets the resultId which, if non-null, will store the real name
+     * in the page context under the resultId name;
+     * @param resultId - the parameter name.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setResultId(String resultId)
+    {
+        _resultId = resultId;
+    }
+
+    /**
+     * Pass the name attribute to the URLRewriter and output the
+     * returned value.  Updates the HTML tag to output the mapping.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        String realName = rewriteName(_name);
+        if (_resultId != null)
+            pageContext.setAttribute(_resultId, realName);
+
+        // @TODO: Is there any way to make this work.  Currently if
+        // there is now script container, we will eat the <script> blocks
+        // because we cannot write them out in the middle of the tag being
+        // written
+        addTagIdMapping(_name, realName);
+        write(realName);
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _name = null;
+        _resultId = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RewriteURL.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/RewriteURL.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,119 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.util.URLRewriter;
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.FileUtils;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+
+/**
+ * Allow a name, typically either an id or name attribute, to participate in URL
+ * rewritting.  Some containers such as WebLogic Portal rewrite names so they are unique.
+ * This tag will cause the name to be made available from <code>getNetuiTagName</code>
+ * JavaScript which is output from the &lt;netui:html&gt; tag.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">URL</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The value of the URL that will be rewritten.</td></tr>
+ *
+ * </table>
+ * @example In this sample, we are creating an HTML span and setting the id attribute to 'foo'.  The
+ * actual value that will be output may change depending on the container processing the
+ * request. The value 'foo' can be passed to <code>getNetuiTagName</code> to find the real
+ * value of the id attribute.
+ * <pre>&lt;span id="&lt;netui:rewriteURL URL="foo"/&gt;"&gt;</pre>
+ * 
+ * @see RewriteName
+ *
+ * @netui:tag name="rewriteURL" description="Allows the URL Rewriter to rewrite the url attribute before it is output into the HTML stream."
+ * @netui.tldx:tag requiredchild="#nothing"
+ * renderer="workshop.netui.jspdesigner.tldx.RewriteURLRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class RewriteURL extends AbstractBaseTag
+{
+    protected String url = null;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "RewriteURL";
+    }
+
+    /**
+     * Sets the name to be rewritten.
+     * @param url - the parameter name.
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setURL(String url)
+    {
+        this.url = url;
+    }
+
+    /**
+     * Add the URL parameter to the Parameter's parent.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+        ServletContext context = pageContext.getServletContext();
+
+        String type = URLRewriter.ACTION_UNSECURE;
+        boolean absoluteUrl = false;
+
+        if (FileUtils.isAbsoluteURI(url))
+            absoluteUrl = true;
+
+        if ((!absoluteUrl) && (URLRewriterService.needsSecure(request,
+                context, url, true)))
+            type = URLRewriter.ACTION_SECURE;
+
+        String internalHref = URLRewriterService.rewriteURL(context, request, response,
+                url, type);
+
+        write(internalHref);
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        url = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptContainer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptContainer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,512 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.ScriptReporter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * Acts as a container that will bundle up JavaScript created by other NetUI tags,
+ * and output it within a single &lt;script> tag. This is especially needed for
+ * Portal web applications, because they often cannot rely on having
+ * &lt;html> ... &lt;/html> tags to provide a default container. In a portlet,
+ * some JSP pages might be included into other JSP pages. Having redundant
+ * &lt;html> ... &lt;/html> tags in the rendered portlet JSP can result in display
+ * problems for some browsers. However, omitting the &lt;html> tag (and the
+ * container it provides) can result in cluttered code, especially where Javascript
+ * appears in the file. To solve this issue, WebLogic Workshop provides the
+ * &lt;netui:scriptContainer> tag.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">scopeID</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID that is associated with the code methods.</td></tr>
+ * </table>
+ * </p>
+ * @example The &lt;netui:scriptContainer> ... &lt;/netui:scriptContainer tag set simply
+ * encloses other NetUI tags that you want to belong to that script container.
+ * The first &lt;netui:scriptContainer> tag should appear after the JSP's &lt;body> tag.
+ * The closing &lt;/netui:scriptContainer> tag should appear before the JSP's &lt;/body> tag.
+ * 
+ * @netui:tag name="scriptContainer" description="ScriptContainers defines a container that will gather all of the JavaScript of their children and output it in a single &lt;script> tag.  In addition, they providing scoping of tagIds."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.ScriptContainerRenderer" whitespace="indent"
+ */
+public class ScriptContainer extends AbstractBaseTag
+        implements ScriptReporter
+{
+    private String _saveBody = null;  // the saved body content of the tag
+    private String _scopeId = null;
+    private ArrayList _funcBlocks;
+    private ArrayList _codeBlocks;
+    private HashMap _initNames;
+    private HashMap _idMap;
+    private HashMap _anchorRewriters;
+    private boolean _runAtClient = false;
+    private boolean _writeScript = false;
+    private boolean _writeInitScript = false;
+    private boolean _legacy = false;
+
+    /**
+     * Returns the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "ScriptContainer";
+    }
+
+    /////////////////////////// ScriptReporter Interface ////////////////////////////
+
+    /**
+     * This method will add Script as a function.
+     * @param script the text of the function. This value must not be null.
+     */
+    public void addScriptFunction(String script)
+    {
+        assert (script != null) : "The paramter 'script' must not be null";
+
+        // get the list of function blocks and add this script to it.
+        if (_funcBlocks == null) {
+            _funcBlocks = new ArrayList();
+        }
+        assert (_funcBlocks != null) : "_funcBlocks should not be null";
+        _funcBlocks.add(script);
+    }
+
+    /**
+     * This method will add Script as top level code that runs when
+     * the page is loaded.
+     * @param script the text of the script
+     */
+    public void addScriptCode(String script)
+    {
+        assert (script != null) : "The parameter 'script' must not be null";
+        if (_codeBlocks == null) {
+            _codeBlocks = new ArrayList();
+        }
+        assert (_codeBlocks != null) : "_cldeBlocks should not be null";
+        _codeBlocks.add(script);
+    }
+
+    /**
+     * Adds a tagID and tagName to the Html's getId javascript function.
+     * @param tagId   - the id of a child tag.
+     * @param tagName - the name of a child tag.
+     */
+    public void addTagId(String tagId, String tagName)
+    {
+        assert (tagId != null) : "The parameter 'tagId' must not be null";
+        assert (tagName != null) : "The parameter 'tagName' must not be null";
+
+        if (_idMap == null) {
+            _idMap = new HashMap();
+        }
+
+        assert (_idMap != null) : "_idMap should not be null";
+        _idMap.put(tagId, tagName);
+    }
+
+    /**
+     * This method will add a new method to the initialization code.
+     * @param varClass the name of the variable containing the javascript feature
+     */
+    public void addInitMethod(String varClass)
+    {
+        assert (varClass != null) : "The parameter 'varClass' must not be null";
+        if (_initNames == null) {
+            _initNames = new HashMap();
+        }
+        assert (_initNames != null) : "_initNames should not be null";
+
+        // check to see if this has been added.  Only add the name once.
+        Object o = _initNames.get(varClass);
+        if (o == null)
+            _initNames.put(varClass, varClass);
+    }
+
+    /**
+     * This method will add a method to be called which will handle state changes
+     * associated with an anchor post.
+     * @param rewriter the name of a method which will rewrite the anchor.
+     */
+    public void addAnchorPostRewriter(String rewriter)
+    {
+        if (_anchorRewriters == null) {
+            _anchorRewriters = new HashMap();
+        }
+
+        assert (_anchorRewriters != null) : "Anchor Rewriters is null";
+
+
+        Object o = _anchorRewriters.get(rewriter);
+        if (o == null)
+            _anchorRewriters.put(rewriter, rewriter);
+    }
+
+    /**
+     * This method will output all of the Script associated with the script reporter.
+     * @param sb The script is written into the provided StringBuffer. This value must not be null.
+     */
+    public void writeScript(StringBuilder sb)
+    {
+        assert(sb != null) : "The paramter 'sb' must not be null;";
+
+        if (isRunAtClient()) {
+            addInitCode();
+            addAnchorRewriters();
+        }
+        String script = writeScriptBlock();
+        sb.append(script);
+        _writeScript = true;
+    }
+
+    /**
+     * This method will output all of the Script that appears inside the <head> tag.
+     * @param sb The script is written into the provided StringBuffer. This value must not be null.
+     */
+    public void writeInitScript(StringBuilder sb)
+    {
+        defineNetUIScope(sb);
+        _writeInitScript = true;
+    }
+
+    public boolean isScriptWritten()
+    {
+        return _writeScript;
+    }
+
+    /**
+     * Returns true if the <code>writeInitScript</code> method has been called.
+     * @return <code>true</code> if the <code>writeInitScript</code> method has been called.
+     */
+    public boolean isInitScriptWritten()
+    {
+        // if we are not runAtClient then there is no initialization code written out.  So return
+        // true because the init condition is met.
+        if (!_runAtClient)
+            return true;
+        return _writeInitScript;
+    }
+
+    /////////////////////////// Attributes ////////////////////////////
+
+    /**
+     * Set the scopeId associated with the code methods
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setScopeId(String scopeId)
+    {
+        _scopeId = scopeId;
+    }
+
+    /**
+     * return the scopeId associated with the ScriptContainer
+     */
+    public String getScopeId()
+    {
+        return _scopeId;
+
+    }
+
+    /**
+     * Boolean indicating that the script container is supporting RunAtClient features.
+     * @param runAtClient boolean flag indicating we are running at the client
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setRunAtClient(boolean runAtClient)
+    {
+        _runAtClient = runAtClient;
+    }
+
+    /**
+     * Return the runAtClient state of the container.
+     * @return boolean indicating if runAtClient features are enabled or not.
+     */
+    public boolean isRunAtClient()
+    {
+        return _runAtClient;
+    }
+
+    ///////////////////////////////// Tag Methods ////////////////////////////////////////
+
+    public int doStartTag()
+            throws JspException
+    {
+        establishTagMode();
+
+        // if there is a scopeId, then we need to create a div to contains
+        // everything
+        StringBuilder sb = new StringBuilder(64);
+        if (_scopeId != null) {
+            sb.append("<div");
+            sb.append(" scopeId=\"");
+            sb.append(_scopeId);
+            sb.append("\" ");
+            sb.append(">");
+        }
+
+        if (_legacy)
+            writeInitScript(sb);
+
+        write(sb.toString());
+
+        return EVAL_BODY_BUFFERED;
+    }
+
+
+    /**
+     * Save any body content of this tag, which will generally be the
+     * option(s) representing the values displayed to the user.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody()
+            throws JspException
+    {
+        if (bodyContent != null) {
+            String value = bodyContent.getString();
+            bodyContent.clearBody();
+            if (value == null)
+                value = "";
+            _saveBody = value.trim();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Write out the body content and report any errors that occured.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        write(_saveBody);
+
+        // Add the code to support the JavaScript framework
+        addInitCode();
+        addAnchorRewriters();
+
+        // writeout the script.
+        String s = writeScriptBlock();
+        write(s);
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /////////////////////////////////// Protected Support ////////////////////////////////////
+
+    /**
+     * This sets the state of the legacy flag.  Legacy mode supports the tags set
+     * in backward compatability mode.  There are serveral areas where backward features
+     * are changed but legacy mode leaves the features working as they did in WLS 8.1.  Legacy mode
+     * is set in in the WLS 8.1 NetUI configuration file by default.
+     */
+    protected void establishTagMode()
+    {
+        _legacy = HtmlUtils.isLegacy(this);
+    }
+
+    /**
+     * Returns a boolean indicating that we are in Legacy Mode.
+     * @return <code>true</code> if legacy mode is on.
+     */
+    public final boolean isLegacy()
+    {
+        // @todo: this is to be removed.  This was used to support features from WLW
+        return _legacy;
+    }
+
+    /**
+     * This method will add the initialization code to NetUI.
+     */
+    protected void addInitCode()
+    {
+        // We only add the initialization code if we support runAtClient features
+        if (!_runAtClient)
+            return;
+
+        // add the NetUI object to the container
+        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
+
+        // Walk all of the initialization parameters
+        StringBuilder initSb = new StringBuilder("");
+        if (_initNames != null) {
+            Iterator it = _initNames.values().iterator();
+            while (it.hasNext()) {
+                String varClass = (String) it.next();
+                String varName = Character.toLowerCase(varClass.charAt(0)) +
+                        varClass.substring(1);
+                String initLine = JavaScriptUtils.getString("createNetUIInitLine", new Object[]{varName, varClass});
+                initSb.append(initLine);
+            }
+        }
+
+        String script = JavaScriptUtils.getString("createNetUI", new Object[]{req.getContextPath(),
+                                                                              initSb.toString()});
+        addScriptFunction(script);
+    }
+
+    /**
+     * This method will define the NetUI constructor.  NetUI is the root level
+     * variable that acts as a container for the JavaScript infrastructure supported by NetUI.
+     * @param sb A StringBuffer to write the new script block into
+     */
+    protected void defineNetUIScope(StringBuilder sb)
+    {
+        assert(sb != null) : "The paramater 'sb' must not be null";
+
+        // We only add the initialization code if we support runAtClient features
+        if (!_runAtClient)
+            return;
+
+        String s = JavaScriptUtils.getString("defineNetUI", null);
+        assert(s != null) : "Didn't find the Script 'defineNetUI'";
+        JavaScriptUtils.writeScriptBlock(sb, s);
+    }
+
+    /**
+     * Add the anchor rewriter code.  Rewriter code is only on when <code>runAtClient</code> is set on
+     * the script container.
+     */
+    protected void addAnchorRewriters()
+    {
+        // We only add the initialization code if we support runAtClient features
+        if (!_runAtClient)
+            return;
+
+        // add the NetUI object to the container
+        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
+
+        // Walk all of the initialization parameters
+        StringBuilder initSb = new StringBuilder("");
+        if (_anchorRewriters != null) {
+            Iterator it = _anchorRewriters.values().iterator();
+            while (it.hasNext()) {
+                String varClass = (String) it.next();
+                String varName = Character.toLowerCase(varClass.charAt(0)) +
+                        varClass.substring(1);
+                String initLine = JavaScriptUtils.getString("createAnchorRewriterLine", new Object[]{varName, varClass});
+                assert(initLine != null) : "The script 'createAnchorRewriterLine' was not found";
+                initSb.append(initLine);
+            }
+        }
+
+        String script = JavaScriptUtils.getString("createAnchorRewriter", new Object[]{req.getContextPath(),
+                                                                                       initSb.toString()});
+        assert(script != null) : "The script 'createAnchorRewriter' was not found";
+        addScriptFunction(script);
+    }
+
+    /**
+     * This will write the script block.
+     * @return
+     */
+    protected String writeScriptBlock()
+    {
+        processIdMap();
+
+        StringBuilder sb = new StringBuilder();
+        if (_codeBlocks != null && _codeBlocks.size() > 0) {
+            String s = JavaScriptUtils.getString("codeComment", null);
+            sb.append(s);
+            int cnt = _codeBlocks.size();
+            for (int i = 0; i < cnt; i++) {
+                sb.append((String) _codeBlocks.get(i));
+                if (i != cnt - 1) {
+                    sb.append("\n");
+                }
+            }
+        }
+
+        if (_funcBlocks != null && _funcBlocks.size() > 0) {
+            String s = JavaScriptUtils.getString("functionComment", null);
+            sb.append(s);
+            int cnt = _funcBlocks.size();
+            for (int i = 0; i < cnt; i++) {
+                sb.append((String) _funcBlocks.get(i));
+                if (i != cnt - 1) {
+                    sb.append("\n");
+                }
+            }
+        }
+
+        if (sb.length() == 0)
+            return "";
+
+        StringBuilder out = new StringBuilder();
+        JavaScriptUtils.writeScriptBlock(out, sb.toString());
+        return out.toString();
+    }
+
+    /////////////////////////////////// Private Support ////////////////////////////////////
+
+    private void processIdMap()
+    {
+        // if no map or empty then return
+        if (_idMap == null || _idMap.size() == 0)
+            return;
+
+        StringBuilder results = new StringBuilder(128);
+        JavaScriptUtils jsu = HtmlBaseTag.getJavaScriptUtils((HttpServletRequest) pageContext.getRequest());
+        Iterator ids = _idMap.keySet().iterator();
+        while (ids.hasNext()) {
+            Object id = ids.next();
+            Object value = _idMap.get(id);
+            if (_scopeId != null)
+                id = _scopeId + "__" + id;
+            String entry = JavaScriptUtils.getString("idMappingEntry", new Object[]{id, value});
+            results.append(entry);
+        }
+        jsu.writeIdMap(this, results.toString());
+        jsu.writeNetuiNameFunctions(this);
+    }
+
+    /////////////////////////////////// Local Release ////////////////////////////////////
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _saveBody = null;
+        _scopeId = null;
+        _runAtClient = false;
+        _writeScript = false;
+        _writeInitScript = false;
+        _legacy = false;
+
+        if (_funcBlocks != null)
+            _funcBlocks.clear();
+        if (_codeBlocks != null)
+            _codeBlocks.clear();
+        if (_initNames != null)
+            _initNames.clear();
+        if (_idMap != null)
+            _idMap.clear();
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptHeader.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptHeader.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,118 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.ScriptReporter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+
+/**
+ * @netui:tag name="scriptHeader" description="ScriptHeader will write the <script> and JavaScript includes into the HTML <head> tag."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.ScriptHeaderRenderer" whitespace="indent"
+ */
+public class ScriptHeader extends AbstractBaseTag
+{
+    private String _features;
+    private boolean _tree;
+    private boolean _divPanel;
+
+    /**
+     * Returns the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "ScriptHeader";
+    }
+
+    /**
+     * Set a list of features that we will generate JavaScript script HTML element including the defined
+     * .js file.  This string should be a common separated list of features.  The mapping between the feature
+     * name and .js file is found in the netui.config file.
+     * @param features - the common separated list of features included.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setFeatures(String features)
+    {
+        // @todo: we need to implement the mapping file
+        _features = features;
+    }
+
+    /**
+     * @param treeSupport - the features
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setTreeSupport(boolean treeSupport)
+    {
+        _tree = treeSupport;
+    }
+
+    /**
+     * @param divPanelSupport - the features
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setDivPanelSupport(boolean divPanelSupport)
+    {
+        _divPanel = divPanelSupport;
+    }
+
+    /**
+     * Process the start of the Button.
+     * @throws javax.servlet.jsp.JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        StringBuilder results = new StringBuilder(64);
+        ScriptReporter sr = getScriptReporter();
+        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
+
+        // write out the initialization code.
+        if (sr != null)
+            sr.writeInitScript(results);
+
+        // write out all of the includes
+        // @todo: is there a type that we should be seting on this
+        // @todo: this should be found in the renderers.
+        if (_tree || _divPanel) {
+            results.append("\n\t<script src=\"");
+            results.append(req.getContextPath());
+            results.append("/resources/javascript/netui-tree.js\"></script>");
+        }
+
+        write(results.toString());
+        return EVAL_BODY_INCLUDE;
+    }
+
+    public int doEndTag()
+            throws JspException
+    {
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    protected void localRelease()
+    {
+        _features = null;
+        _tree = false;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Select.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/Select.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1061 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.pageflow.ProcessPopulate;
+import org.apache.beehive.netui.pageflow.RequestParameterHandler;
+import org.apache.beehive.netui.script.common.DataAccessProviderBean;
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+import org.apache.beehive.netui.script.common.DataAccessProviderStack;
+import org.apache.beehive.netui.tags.naming.FormDataNameInterceptor;
+import org.apache.beehive.netui.tags.naming.IndexedNameInterceptor;
+import org.apache.beehive.netui.tags.naming.PrefixNameInterceptor;
+import org.apache.beehive.netui.tags.rendering.*;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.iterator.IteratorFactory;
+import org.apache.beehive.netui.util.iterator.IteratorFactoryException;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.*;
+
+
+/**
+ * Renders a select containing a set of SelectOptions.
+ *
+ * Select binds to an Iterator of Strings.
+ *
+ * If Select uses any Format tags, it must have those tags come before any nested
+ * SelectOption tags.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">dataSource</th><td>Yes</td><td>No</td><td>Read / Write</td></tr>
+ * <tr><td colspan="3">The name of a form bean property or an expression that contains the
+ * Select state.</td></tr>
+ * <tr><th rowspan="2">defaultValue</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal value or an expression that is used to set the Select's
+ * initial state.</td></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A boolean value which if true will cause the Select to be disabled.</td></tr>
+ * <tr><th rowspan="2">multiple</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Whether or not multi-selection is enabled.</td></tr>
+ * <tr><th rowspan="2">nullable</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Whether a (null) option should be added to the bottom of the list.
+ * If the Select has multiple=true, (null) won't be shown regardless.</td></tr>
+ * <tr><th rowspan="2">nullableOptionText</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">If <code>nullable</code> is <code>true</code>, then this is optional text
+ * for the option.  The default is to use the empty string, "", as the value.</td></tr>
+ * <tr><th rowspan="2">optionsDataSource</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An expression which is used to generate a set of dynamic SelectOption tags.
+ * </td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this select used by the enclosing html tag to get the tag's
+ * name for javascript and focus purposes.</td></tr>
+ * <tr><th rowspan="2">size</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The number of visible options.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example Use the <code>optionsDataSource</code> attribute to reference a dynamically generated dropdown list.
+ * Source files for the following example can be seen at:
+ *
+ * <p>&lt;WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/dropdown/select.jsp</p>
+ *
+ * <pre>
+ * &lt;netui:select dataSource="{actionForm.selectedOption}"
+ *     optionsDataSource="{actionForm.itemOptions}" />
+ * </pre>
+ *
+ * <p>Note that the <code>optionsDataSource</code> attribute refers to a <code>java.util.Map</code>
+ * object. The WebLogic Workshop runtime will interpret the Map object as a series
+ * of &lt;netui:selectOption> tags. HTML that is similar to the following will be rendered in the browser:</p>
+ *
+ * <pre>
+ * &lt;select name="wlw-select_key:{actionForm.selectedOption}">
+ * 	&lt;option value="633">Aurora Bridge&lt;/option>
+ * 	&lt;option value="631">FA-18 fighter jet&lt;/option>
+ * 	&lt;option value="635">Space Needle&lt;/option>
+ * 	&lt;option value="642">Thin Mints&lt;/option>
+ * 	...
+ * &lt;/select>
+ * </pre>
+ * 
+ * @see SelectOption
+ *
+ * @netui:tag name="select" description="Defines a multiple-choice menu or drop-down list within a netui:form element."
+ * @netui:attribute name="onSelect" hide="true"
+ * @netui.tldx:tag requiredchild="formatDate formatNumber formatString selectOption attribute"
+ * renderer="workshop.netui.jspdesigner.tldx.SelectRenderer"
+ * whitespace="indent"
+ * @netui.tldx:attribute name="dataSource"
+ * @netui.tldx:attribute name="defaultValue"
+ */
+public class Select extends HtmlOptionsDataSourceTag
+        implements IDataAccessProvider, Formattable
+{
+    // @todo: needs to create DRT tests for: verification of errors, verirication of data sources matching,
+    // @todo: verification of formating inside a repeater.
+    // @todo: on the null tag, we need to default the null value to NULL_VALUE
+    // @todo: need to handle null.
+
+    private static final Logger logger = Logger.getInstance(Select.class);
+
+    private SelectTag.State _state = new SelectTag.State();
+    private OptionTag.State _optionState = new OptionTag.State();
+    private InputHiddenTag.State _hiddenState = new InputHiddenTag.State();
+
+    /**
+     * Default value of the options <code>value</code> attribute.
+     */
+    public static final String NULL_VALUE = "netui_null";
+
+    /**
+     * Constant value of the <code>repeatingType</code> attribute for options handling the <code>optionsDataSource</code>.
+     */
+    public static final String REPEATING_OPTION = "Option";
+
+    /**
+     * Constant value of the <code>repeatingType</code> attribute for options handling the <code>defaultValue</code>.
+     */
+    public static final String REPEATING_DEFAULT = "Default";
+
+    /**
+     * Constant value of the <code>repeatingType</code> attribute for options handling the <code>dataSource</code>.
+     */
+    public static final String REPEATING_DATASOURCE = "DataSource";
+
+    /**
+     * Constant value of the <code>repeatingType</code> attribute for options handling the <code>optionsDataSource,
+     * defaultValue and dataSource</code>.
+     */
+    public static final String REPEATING_DATA = "Data";
+
+    /**
+     * Constant value of the <code>repeatingType</code> attribute for options handling the <code>null</code> option.
+     */
+    public static final String REPEATING_NULL = "Null";
+
+    /**
+     * <code>int</code> value returned by <code>getRepeatingStage</code> when the <code>optionsDataSource</code>
+     * is being processed.
+     */
+    public static final int STAGE_OPTION = 1;
+
+    /**
+     * <code>int</code> value returned by <code>getRepeatingStage</code> when the <code>dataSource</code>
+     * is being processed.
+     */
+    public static final int STAGE_DATASOURCE = 2;
+
+    /**
+     * <code>int</code> value returned by <code>getRepeatingStage</code> when the <code>defaultValue</code>
+     * is being processed.
+     */
+    public static final int STAGE_DEFAULT = 3;
+
+    /**
+     * <code>int</code> value returned by <code>getRepeatingStage</code> when the <code>null</code> option
+     * is being processed.
+     */
+    public static final int STAGE_NULL = 4;
+
+    private static final String SELECT_KEY = "select_key";
+    private static final String OLDVALUE_SUFFIX = "OldValue";
+
+    // IDataAccessProvider support
+    private int _repIdx = 0;            // The current index for repeating over the optionsDataSource
+    private int _repCurStage = 0;       // The current stage defined by the stage constants above
+    private boolean _repeater;          // Boolean flag indicating if this is a repeater or not
+    private Object _repCurItem;         // The current item access by the IDataAccessProvider
+    private Object _dynamicOptions;     // The interator (or map) for the options data source, repeating this is current var
+
+    private String _saveBody;
+    private String _nullableOptionText;
+
+    private List _defaultSelections;
+    private ArrayList _formatters;
+    private ArrayList _optionList;
+    private String[] _match;             // The actual values we will match against
+    private boolean _nullable;
+
+    private static final List _internalNamingChain;
+
+    static
+    {
+        List l = new ArrayList(3);
+        l.add(new FormDataNameInterceptor());
+        l.add(new IndexedNameInterceptor());
+        l.add(new PrefixNameInterceptor(SELECT_KEY));
+        _internalNamingChain = Collections.unmodifiableList(l);
+    }
+
+    static
+    {
+        org.apache.beehive.netui.pageflow.ProcessPopulate.registerPrefixHandler(SELECT_KEY, new SelectPrefixHandler());
+    }
+
+    /**
+     */
+    private static class SelectPrefixHandler
+            implements RequestParameterHandler
+    {
+        public void process(javax.servlet.http.HttpServletRequest request, String key,
+                            ProcessPopulate.ExpressionUpdateNode node)
+        {
+            String[] returnArray = null;
+
+            if (!key.endsWith(OLDVALUE_SUFFIX)) {
+                //This select has values and should stay that way
+                returnArray = request.getParameterValues(key);
+            }
+            else {
+                //Check the request to see if select also exists
+                String newKey = key.substring(0, key.indexOf(OLDVALUE_SUFFIX));
+                String[] select = request.getParameterValues(newKey);
+                if (select != null) {
+                    returnArray = select;
+                }
+                else {
+                    returnArray = new String[0]; //null;
+                }
+            }
+
+            if (node.expression.endsWith(OLDVALUE_SUFFIX)) {
+                node.expression = node.expression.substring(0, node.expression.indexOf(OLDVALUE_SUFFIX));
+            }
+
+            //Check for the NULL_VALUE, replace it with null
+            for (int i = 0; i < returnArray.length; i++) {
+                if (returnArray[i].equals(NULL_VALUE)) {
+                    returnArray[i] = null;
+                }
+            }
+
+            node.values = returnArray;
+
+            if (logger.isDebugEnabled()) {
+                logger.debug("\n*********************************************\n" +
+                        "process with key \"" + key + "\" and expression \"" + node.expression + "\"" + "and result size: "
+                        + (returnArray != null ? "" + returnArray.length : null) + "\n" +
+                        "*********************************************\n");
+            }
+        }
+    }
+
+    public Select()
+    {
+        super();
+    }
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "Select";
+    }
+
+    public String getDataSource()
+    {
+        return _dataSource.toString();
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Return an <code>ArrayList</code> which represents a chain of <code>NameInterceptor</code>
+     * objects.  This method by default returns <code>null</code> and should be overridden
+     * by objects that support naming.
+     * @return an <code>ArrayList</code> that will contain <code>NameInterceptor</code> objects.
+     */
+    protected List getNamingChain()
+    {
+        return _internalNamingChain;
+    }
+
+    /**
+     * Evaluate the defaultValues
+     */
+    protected Object evaluateDefaultValue()
+            throws JspException
+    {
+        Object val = _defaultValue;
+
+        List defaults = null;
+        if (val instanceof String) {
+            defaults = new ArrayList();
+            defaults.add(val);
+        }
+        else {
+            Iterator optionsIterator = null;
+            try {
+                optionsIterator = IteratorFactory.makeIterator(val);
+
+                // default value is optional so only warn
+                if (optionsIterator == null && _defaultValue != null)
+                    logger.warn(Bundle.getString("Tags_IteratorError",
+                            new Object[]{getTagName(), "defaultValue", _defaultValue}));
+
+                if (optionsIterator == null)
+                    optionsIterator = IteratorFactory.EMPTY_ITERATOR;
+            }
+            catch (IteratorFactoryException ife) {
+                String s = Bundle.getString("Tags_Iteration_Error", new Object[]{ife.getTypeName()});
+                registerTagError(s, ife);
+                return null;
+            }
+
+            defaults = new ArrayList();
+            while (optionsIterator.hasNext()) {
+                Object o = optionsIterator.next();
+                defaults.add(o.toString());
+            }
+        }
+
+        return defaults;
+    }
+
+    /**
+     * Set whether multiple selections are allowed.
+     * @param multiple - the multiple value ("true" or "false")
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setMultiple(boolean multiple)
+    {
+        _state.multiple = multiple;
+    }
+
+    /**
+     * Set whether repeating of contains options is on.
+     * @param repeater - the repeater value ("true" or "false")
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setRepeater(boolean repeater)
+    {
+        _repeater = repeater;
+    }
+
+    /**
+     * Gets whether a repeating contained options is on.
+     * @return the repeater value
+     */
+    public boolean isRepeater()
+    {
+        return _repeater;
+    }
+
+    /**
+     * Set whether a null option is desired.
+     * @param nullable - the nullable value
+     * @netui:attribute required="false"  rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setNullable(boolean nullable)
+    {
+        _nullable = nullable;
+    }
+
+    /**
+     * Gets the options datasource value (an expression).
+     * @return the options datasource
+     */
+    public Object getOptionsDataSource()
+    {
+        return _optionsDataSource;
+    }
+
+    /**
+     * Set the text of the nullable option.
+     * If the <code>nullable<code> option is true, this is
+     * the text of that option. The default is "";
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setNullableOptionText(String nullableOptionText)
+    {
+        _nullableOptionText = nullableOptionText;
+    }
+
+    /**
+     * This method will return the object representing the <code>optionsDataSource</code>.  This
+     * is overridden from the base class, because there are only two types which will be
+     * retunred from the method.  The <code>optionsDataSource</code> will either be a instance of a <code>Map</code>
+     * or and instanceof a <code>Iterator</code>.
+     * @return the object instance object representing the objectsDataSource.  This may be null.
+     * @throws JspException on an error
+     */
+    protected Object evaluateOptionsDataSource()
+            throws JspException
+    {
+        Object val = _optionsDataSource;
+        if (val == null) {
+            // optionsDataSource is option so this is a warning
+            if (_optionsDataSource != null)
+                logger.warn(Bundle.getString("Tags_IteratorError",
+                        new Object[]{getTagName(), "optionsDataSource", _optionsDataSource}));
+            return null;
+        }
+
+        if (val instanceof Map)
+            return val;
+
+        Iterator options = null;
+        try {
+            // This shouldn't return null, but we will handle it
+            // if it does
+            options = IteratorFactory.makeIterator(val);
+            if (options == null)
+                options = IteratorFactory.EMPTY_ITERATOR;
+
+        }
+        catch (IteratorFactoryException ife) {
+            // we were not able to get an iterator on the options data source.
+            // This is an error.
+            String s = Bundle.getString("Tags_Iteration_Error", new Object[]{ife.getTypeName()});
+            registerTagError(s, ife);
+            return null;
+        }
+
+        return options;
+    }
+
+    /**
+     * Sets how many options are displayed.
+     * @param size - the size (a number)
+     * @netui:attribute required="false" rtexprvalue="true" type="int"
+     * @netui.tldx:attribute
+     */
+    public void setSize(int size)
+    {
+        _state.size = size;
+    }
+
+    /**
+     * Does the specified value match one of those we are looking for?
+     * @param value Value to be compared
+     */
+    public boolean isMatched(String value)
+    {
+        if (value == null)
+            return false;
+        if ((_match != null)) {
+            for (int i = 0; i < _match.length; i++) {
+                if (value.equals(_match[i]))
+                    return true;
+            }
+        }
+        else {
+            if (_defaultSelections != null) {
+                return (_defaultSelections.contains(value));
+            }
+        }
+
+        return false;
+
+    }
+
+    //********************************** IDataAccessProvider Interface  ******************************
+    // setDataSource is implemented by the HtmlDataSourceTag class
+    // getDataSource is implemented by the HtmlDataSourceTag class
+
+    /**
+     * Get the current index in this iteration.  This should be a
+     * zero based integer that increments after each iteration.
+     * @return the current index of iteration or 0
+     */
+    public int getCurrentIndex()
+    {
+        return _repIdx;
+    }
+
+    /**
+     * Get the current data item in this IDataAccessProvider.
+     * @return the current data item or <code>null</code>
+     */
+    public Object getCurrentItem()
+    {
+        return _repCurItem;
+    }
+
+    /**
+     * Get a metadata object for the current item.  This interface
+     * is optional, and implementations of this interface are
+     * provided by the IDataAccessProvider interface.  See these
+     * implementations for information about their support for
+     * current item metadata.
+     * @return the current metadata or <code>null</code> if no metadata can be
+     *         found or metadata is not supported by a IDataAccessProvider implementation
+     */
+    public Object getCurrentMetadata()
+    {
+        return this;
+    }
+
+    /**
+     * Get the parent IDataAccessProvider of a IDataAccessProvider.  A IDataAccessProvider
+     * implementation may be able to nest IDataAccessProviders.  In this case,
+     * it can be useful to be able to also nest access to data from parent
+     * providers.  Implementations of this interface are left with having
+     * to discover and export parents.  The return value from this call
+     * on an implementing Object can be <code>null</code>.
+     * @return the parent IDataAccessProvider or <code>null</code> if this method
+     *         is not supported or the parent can not be found.
+     */
+    public IDataAccessProvider getProviderParent()
+    {
+        return (IDataAccessProvider) findAncestorWithClass(this, IDataAccessProvider.class);
+    }
+
+    /**
+     * This method indicates that the expression of the repeater is bound into a
+     * client based context.
+     * @return <code>true</code> if the expression of this is bound on the client.
+     */
+    public boolean isBindingOnClient()
+    {
+        // @todo: need to really implement this
+        return false;
+    }
+
+    /**
+     * This method will return the current stage being process when the select is acting as a repeater.
+     * Integer constants are defined for the return values, <code>STAGE_OPTION, STAGE_DATASOURCE, STAGE_DEFAULT,
+     * STAGE_NULL</code>
+     * @return an integer indicating the current repeating stage.
+     */
+    public int getRepeatingStage()
+    {
+        return _repCurStage;
+    }
+
+    /**
+     * Render the beginning of this select.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        Object val = evaluateDataSource();
+        _defaultSelections = (List) evaluateDefaultValue();
+
+        // if there were expression errors report them
+        if (hasErrors())
+            return SKIP_BODY;
+
+        buildMatch(val);
+        if (hasErrors())
+            return SKIP_BODY;
+
+
+        _formatters = new ArrayList();
+        _optionList = new ArrayList();
+
+        // Walk the options data source
+        _dynamicOptions = evaluateOptionsDataSource();
+        if (_repeater) {
+            // @todo: need to support nulls...
+            if (!(_dynamicOptions instanceof Iterator)) {
+                String s = Bundle.getString("Tags_OptionsDSIteratorError");
+                registerTagError(s, null);
+                return SKIP_BODY;
+            }
+            _repCurItem = ((Iterator) _dynamicOptions).next();
+            _repCurStage = STAGE_OPTION;
+
+            DataAccessProviderStack.addDataAccessProvider(this, pageContext);
+        }
+
+        // Continue processing this page
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save any body content of this tag, which will generally be the
+     * option(s) representing the values displayed to the user.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (hasErrors()) {
+            return SKIP_BODY;
+        }
+
+        // if this is a repeater we need to repeater over the body...
+        if (_repeater) {
+            if (doRepeaterAfterBody())
+                return EVAL_BODY_AGAIN;
+        }
+
+        if (bodyContent != null) {
+            String value = bodyContent.getString();
+            bodyContent.clearBody();
+            if (value == null)
+                value = "";
+            _saveBody = value.trim();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render the end of this select.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        String scriptId = null;
+        ServletRequest req = pageContext.getRequest();
+
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        _state.disabled = isDisabled();
+
+        //Create hidden field for state tracking
+        String realName = doNaming();
+
+        // create the string buffer for the results
+        StringBuilder results = new StringBuilder(128);
+
+        // Only write out the hidden field if the select is not
+        // disabled.  If it is disabled, then nothing will be posted
+        // back from this.
+        if (!_state.disabled) {
+            _hiddenState.clear();
+            String hiddenParamName = null;
+            hiddenParamName = realName + OLDVALUE_SUFFIX;
+            _hiddenState.name = hiddenParamName;
+            _hiddenState.value = "true";
+
+            TagRenderingBase hiddenTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_HIDDEN_TAG, req);
+            hiddenTag.doStartTag(results, _hiddenState);
+            hiddenTag.doEndTag(results);
+            results.append("\n");
+        }
+
+        // Create an appropriate "form" element based on our parameters
+        _state.name = realName;
+        scriptId = renderTagId(_state, realName, false, true);
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.SELECT_TAG, req);
+        br.doStartTag(results, _state);
+
+        // Render a tag representing the end of our current form
+        if (_saveBody != null)
+            results.append(_saveBody);
+
+        // if we are repeating then the body contained the options so we can exit here
+        if (_repeater) {
+
+            if (hasErrors()) {
+                reportErrors();
+                localRelease();
+                return EVAL_PAGE;
+            }
+            br.doEndTag(results);
+
+            if (scriptId != null)
+                results.append(scriptId);
+
+            write(results.toString());
+
+            // Continue processing this page
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // All of the code below will pass through the optionsDataSource, the dataSource and defaultValue and
+        // create a full Select.
+        if (_dynamicOptions != null) {
+            if (_dynamicOptions instanceof Map) {
+                Map dynamicOptionsMap = (Map) _dynamicOptions;
+                Iterator keyIterator = dynamicOptionsMap.keySet().iterator();
+                while (keyIterator.hasNext()) {
+                    Object optionValue = keyIterator.next();
+                    String optionDisplay = null;
+                    if (dynamicOptionsMap.get(optionValue) != null) {
+                        optionDisplay = dynamicOptionsMap.get(optionValue).toString();
+                    }
+
+                    addOption(req, results, optionValue.toString(), optionDisplay);
+                }
+            }
+            else if (_dynamicOptions instanceof Iterator) {
+                Iterator dynamicOptionsIterator = (Iterator) evaluateOptionsDataSource();
+                while (dynamicOptionsIterator.hasNext()) {
+                    Object o = dynamicOptionsIterator.next();
+                    if (o != null) {
+                        String optionValue = o.toString();
+                        addOption(req, results, optionValue, optionValue);
+                    }
+                }
+            }
+        }
+
+        // add the value from the DataSource and Default value
+        addDatasourceIfNeeded(req, results);
+        addDefaultsIfNeeded(req, results);
+        if (_nullable && !isMultiple()) {
+            String txt = (_nullableOptionText != null) ? _nullableOptionText : "";
+            addOption(req, results, NULL_VALUE, txt);
+        }
+
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+        br.doEndTag(results);
+
+        if (scriptId != null)
+            results.append(scriptId);
+
+        write(results.toString());
+
+        // Continue processing this page
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        if(_repeater)
+            DataAccessProviderStack.removeDataAccessProvider(pageContext);
+        
+        super.localRelease();
+        _state.clear();
+        _optionState.clear();
+
+        _defaultSelections = null;
+        _formatters = null;
+        _match = null;
+        _saveBody = null;
+        _nullable = false;
+        _nullableOptionText = null;
+        _optionList = null;
+
+        _repIdx = 0;
+        _repeater = false;
+        _repCurItem = null;
+        _repCurStage = 0;
+        _dynamicOptions = null;
+    }
+
+    private boolean doRepeaterAfterBody()
+    {
+        _repIdx++;
+        if (_repCurStage == STAGE_OPTION) {
+            assert (_dynamicOptions instanceof Iterator);
+            while (((Iterator) _dynamicOptions).hasNext()) {
+                _repCurItem = ((Iterator) _dynamicOptions).next();
+                // @todo: what do we do if there is a null?
+                if (_repCurItem != null) {
+                    _optionList.add(_repCurItem);
+                    return true;
+                }
+            }
+
+            // initialize for the next stage which must follow this stage in the code:  (Basically a fall through)
+            _repCurStage = STAGE_DATASOURCE;
+            if (_match != null) {
+                _dynamicOptions = Arrays.asList(_match).iterator();
+            }
+        }
+
+        if (_repCurStage == STAGE_DATASOURCE) {
+            if (_dynamicOptions != null) {
+                assert (_dynamicOptions instanceof Iterator);
+                while (((Iterator) _dynamicOptions).hasNext()) {
+                    _repCurItem = ((Iterator) _dynamicOptions).next();
+                    if (!_optionList.contains(_repCurItem)) {
+                        _optionList.add(_repCurItem);
+                        return true;
+                    }
+                }
+            }
+
+            // initialize for the next stage which must follow this stage in the code
+            _repCurStage = STAGE_DEFAULT;
+            if (_defaultSelections != null) {
+                _dynamicOptions = _defaultSelections.iterator();
+            }
+        }
+
+        if (_repCurStage == STAGE_DEFAULT) {
+            if (_dynamicOptions != null) {
+                assert (_dynamicOptions instanceof Iterator);
+                while (((Iterator) _dynamicOptions).hasNext()) {
+                    _repCurItem = ((Iterator) _dynamicOptions).next();
+                    if (!_optionList.contains(_repCurItem)) {
+                        return true;
+                    }
+                }
+            }
+
+            // initialize for the next stage which must follow this stage in the code
+            _repCurItem = null;
+            if (_nullable) {
+                _repCurStage = STAGE_NULL;
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * This method builds the list of selected items so that they can be marked as selected.
+     * @param val The <code>dataSource</code>
+     * @throws JspException if there is an error
+     */
+    private void buildMatch(Object val)
+            throws JspException
+    {
+        // create the match data
+        if (val != null) {
+            if (val instanceof String) {
+                _match = new String[]{(String) val};
+            }
+            else if (val instanceof String[]) {
+                String[] s = (String[]) val;
+                int cnt = 0;
+                for (int i = 0; i < s.length; i++) {
+                    if (s[i] != null)
+                        cnt++;
+                }
+                if (cnt == s.length)
+                    _match = s;
+                else {
+                    if (cnt > 0) {
+                        _match = new String[cnt];
+                        cnt = 0;
+                        for (int i = 0; i < s.length; i++) {
+                            if (s[i] != null) {
+                                _match[cnt++] = s[i];
+                            }
+                        }
+                    }
+                }
+            }
+            else {
+                Iterator matchIterator = null;
+                try {
+                    // val is never null so this would be an error
+                    matchIterator = IteratorFactory.makeIterator(val);
+                    if (matchIterator == null) {
+                        matchIterator = IteratorFactory.EMPTY_ITERATOR;
+                    }
+
+                }
+                catch (IteratorFactoryException ife) {
+                    String s = Bundle.getString("Tags_Iteration_Error",
+                            new Object[]{ife.getTypeName()});
+                    registerTagError(s, ife);
+                    reportErrors();
+                }
+
+                ArrayList matchList = new ArrayList();
+                while (matchIterator.hasNext()) {
+                    Object o = matchIterator.next();
+                    if (o == null)
+                        continue;
+                    matchList.add(o);
+                }
+
+                int size = matchList.size();
+                _match = new String[size];
+                for (int i = 0; i < size; i++) {
+                    assert (matchList.get(i) != null);
+                    assert (matchList.get(i).toString() != null);
+                    _match[i] = matchList.get(i).toString();
+                }
+            }
+            if (logger.isDebugEnabled()) {
+                logger.debug("****** Select Matches ******");
+                if (_match != null) {
+                    for (int i = 0; i < _match.length; i++) {
+                        logger.debug(i + ": " + _match[i]);
+                    }
+                }
+            }
+        }
+        else {
+            if (_nullable && !isMultiple()) {
+                _match = new String[]{NULL_VALUE};
+            }
+        }
+    }
+
+    // add the default values specified in the tag if they are needed.
+    private void addDefaultsIfNeeded(ServletRequest req, StringBuilder buffer)
+            throws JspException
+    {
+        if (_defaultSelections != null) {
+            Iterator iterator = _defaultSelections.iterator();
+            while (iterator.hasNext()) {
+                Object selection = iterator.next();
+                if (!_optionList.contains(selection)) {
+                    addOption(req, buffer, selection.toString(), selection.toString());
+                }
+            }
+        }
+    }
+
+    private boolean isMultiple()
+    {
+        return _state.multiple;
+    }
+
+    // add dthe datasource values if needed.
+    private void addDatasourceIfNeeded(ServletRequest req, StringBuilder buffer)
+            throws JspException
+    {
+        if (_match == null)
+            return;
+
+        for (int i = 0; i < _match.length; i++) {
+            if (!_optionList.contains(_match[i])) {
+                if (!_match[i].equals(NULL_VALUE))
+                    addOption(req, buffer, _match[i], _match[i]);
+            }
+        }
+    }
+
+    private void addOption(ServletRequest req, StringBuilder buffer, String optionValue,
+                           String optionDisplay)
+            throws JspException
+    {
+        assert(buffer != null);
+        assert(optionValue != null);
+        assert(optionDisplay != null);
+
+        buffer.append("\n");
+        _optionState.clear();
+        _optionState.value = optionValue;
+        _optionState.style = _state.style;
+        _optionState.styleClass = _state.styleClass;
+
+        if (isMatched(optionValue)) {
+            _optionState.selected = true;
+        }
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.OPTION_TAG, req);
+        br.doStartTag(buffer, _optionState);
+
+
+        if (optionDisplay != null) {
+            buffer.append(formatText(optionDisplay));
+        }
+        else {
+            buffer.append("&lt;");
+            buffer.append(optionValue);
+            buffer.append(">");
+        }
+
+        br.doEndTag(buffer);
+
+        addOptionToList(optionValue);
+    }
+
+    /**
+     * Adds a FormatTag.Formatter to the Select's set of formatters
+     * @param formatter - a FormatTag.Formatter added by a child FormatTag.
+     */
+    public void addFormatter(FormatTag.Formatter formatter)
+    {
+        _formatters.add(formatter);
+    }
+
+    /**
+     */
+    public void addOptionToList(String value)
+    {
+        _optionList.add(value);
+    }
+
+    /**
+     * Apply the Select's set of formatters to the given text
+     * @param text - the text to format.
+     * @return the formatted text
+     */
+    public String formatText(Object text)
+            throws JspException
+    {
+        for (int i = 0; i < _formatters.size(); i++) {
+            FormatTag.Formatter currentFormatter = (FormatTag.Formatter) _formatters.get(i);
+            try {
+                text = currentFormatter.format(text);
+            }
+            catch (JspException e) {
+                registerTagError(e.getMessage(), e);
+            }
+        }
+        return text.toString();
+    }
+
+    /* ==================================================================
+     *
+     * This tag's publically exposed HTML, CSS, and JavaScript attributes
+     *
+     * ==================================================================
+     */
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setAccessKey(String accessKey)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, accessKey);
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false" rtexprvalue="true" type="int"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(int tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, Integer.toString(tabindex));
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/SelectOption.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/SelectOption.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,353 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.OptionTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * An option whose state is determined by its enclosing SelectOption.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The option's disabled state ("true" or "false") </td></tr>
+ * <tr><th rowspan="2">id</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3"><b>The <code>id</code> attribute has been deprecated; instead, use
+ * <code>tagId</code>.</b> The id attribute of the generated selectOption. You should use the
+ * <code>tagId</code> which will encode the id correctly for containers such as the Portal
+ * which needs to rewrite IDs to make them unique.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The id of this anchor.  The real id written to the HTML stream may be changed
+ * by the container (Portal), but may be looked up with the 'tagId' value through the JavaScript
+ * method <code>getNetuiTagName</code> method written by the &lt;netui:html> tag.</td></tr>
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">An expression to a bean property, or a literal, which is the value of
+ * this option.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example <pre>&lt;netui:selectOption value="{pageFlow.option2}">Option 2&lt;/netui:selectOption></pre>
+ * In this sample, a SelectOption (within a Select) displays a label of Option 2 and reads its
+ * value from the page flow's option2 property.
+ * <p>To reference a dynamically generated series of &lt;netui:selectOption> tags, pass a
+ * <code>java.util.Map</code> object to a &lt;netui:select> tag. 
+ * 
+ * @see Select
+ *
+ * @netui:tag name="selectOption" description="An option whose state is determined by its enclosing netui:selectOption."
+ * @netui.tldx:tag requiredparent="select"
+ * requiredchild="label attribute"
+ * renderer="workshop.netui.jspdesigner.tldx.SelectOptionRenderer"
+ * bodycontentpref="empty"
+ * whitespace="indent"
+ */
+public class SelectOption extends HtmlBaseTag
+{
+    private OptionTag.State _state = new OptionTag.State();
+
+    // this has it's own version of disabled in it...
+    private String _text;               // The message text to be displayed to the user for this tag (if any)
+    private boolean _disabled;          // Is this option disabled?
+    private String _value;              // The server value for this option
+    private String _id;
+    private String _repeatingType;       // The type of the repeater.
+    private boolean _hasError = false;   // Hack to avoid registering the same error in the SelectOption AND the Select.
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "SelectOption";
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>value</code>
+     * attribute.
+     * @param name  The name of the attribute
+     * @param value The value of the attribute
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name == null)
+            return;
+
+        if (name.equals(VALUE)) {
+            String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+            registerTagError(s, null);
+        }
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Gets if this option is disabled or not.
+     * @return the disabled state ("true" or "false")
+     */
+    public boolean getDisabled()
+    {
+        return _disabled;
+    }
+
+    /**
+     * Set if this option is disabled or not.
+     * @param disabled - "true" or "false"
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setDisabled(boolean disabled)
+    {
+        _disabled = disabled;
+    }
+
+    /**
+     * This method will a boolean indicating if the control is disabled or not.  This will cause the
+     * disable attribute to be evaluated which may result in a runtime error or a JspException.
+     * @return <code>true</code> if the control is disabled.
+     * @throws JspException on an exception.
+     */
+    protected boolean isDisabled()
+            throws JspException
+    {
+        return _disabled;
+    }
+
+    /**
+     * Gets if this option is disabled or not.
+     * @return the disabled state ("true" or "false")
+     */
+    public String getRepeatingType()
+    {
+        return _repeatingType;
+    }
+
+    /**
+     * If the options is being used inside a repeating Select, this is the type of the option.
+     * @param repeatingType - "Options", "Default", "DataSource", "Null", "Data"
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setRepeatingType(String repeatingType)
+    {
+        _repeatingType = repeatingType;
+    }
+
+    /**
+     * Set the value of this SelectOption.
+     * @param value - the SelectOption value
+     * @netui:attribute required="true" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setValue(String value)
+            throws JspException
+    {
+        _value = value;
+    }
+
+    /**
+     * Process the start of this tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+
+        Tag parentTag = getParent();
+        while (! (parentTag instanceof Select))
+            parentTag = parentTag.getParent();
+
+        if (parentTag == null) {
+            //throw error
+            String s = Bundle.getString("Tags_SelectOptionNoSelect");
+            registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        Select parentSelect = (Select) parentTag;
+        boolean repeating = parentSelect.isRepeater();
+
+        // if we find an option inside a select and it's not a repeating select report the error
+        if ((parentSelect.getOptionsDataSource() != null) && !repeating) {
+            String s = Bundle.getString("Tags_SelectOptionParentHasOptionsDataSource");
+            _hasError = true;
+            parentSelect.registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        // if we are an option inside a repeating select, we must specify the type of repeater we are.
+        if (repeating && _repeatingType == null) {
+            String s = Bundle.getString("Tags_SelectRepeatingOptionType");
+            _hasError = true;
+            parentSelect.registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        if (repeating && !isRenderable(parentSelect)) {
+            return SKIP_BODY;
+        }
+
+        // Do nothing until doEndTag() is called
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Process the body text of this tag (if any).
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        String text = bodyContent.getString();
+        if (text != null) {
+            bodyContent.clearBody();
+            text = text.trim();
+            if (text.length() > 0)
+                _text = text;
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Process the end of this tag.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        String scriptId = null;
+
+        ServletRequest req = pageContext.getRequest();
+
+        if ((hasErrors()) || _hasError) {
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // the parent was validated in the doStartTag call
+        Tag parentTag = getParent();
+        while (! (parentTag instanceof Select))
+            parentTag = parentTag.getParent();
+
+        assert (parentTag instanceof Select);
+        Select parentSelect = (Select) parentTag;
+        if (parentSelect.isRepeater()) {
+            if (!isRenderable(parentSelect))
+                return EVAL_PAGE;
+        }
+
+
+        // Generate an HTML <option> element
+        StringBuilder results = new StringBuilder(128);
+        _state.value = _value;
+
+        // we assume that tagId will over have override id if both
+        // are defined.
+        String tagId = getTagId();
+        if (tagId != null) {
+            String realName = rewriteName(tagId);
+            scriptId = addTagIdMapping(tagId, realName);
+            _state.id = realName;
+        }
+        else if (_id != null) {
+            _state.id = _id;
+        }
+
+            _state.disabled = _disabled;
+
+        if (parentSelect.isMatched(_value))
+            _state.selected = true;
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.OPTION_TAG, req);
+        br.doStartTag(results, _state);
+
+
+        if (_text == null)
+            results.append(parentSelect.formatText(_value));
+        else {
+            //@TODO: How should we report errors
+            results.append(parentSelect.formatText(_text));
+        }
+        br.doEndTag(results);
+
+        parentSelect.addOptionToList(_value);
+
+        if (scriptId != null)
+            results.append(scriptId);
+
+        write(results.toString());
+
+        // Continue evaluating this page
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+
+        _text = null;
+        _disabled = false;
+        _value = null;
+        _hasError = false;
+        _id = null;
+        //_optionValue = null;
+    }
+
+    private boolean isRenderable(Select sel)
+    {
+        assert(sel != null);
+
+        if (_repeatingType == null)
+            return true;
+
+        int stage = sel.getRepeatingStage();
+        if (stage == Select.STAGE_NULL)
+            return _repeatingType.equals(Select.REPEATING_NULL);
+        if (_repeatingType.equals(Select.REPEATING_DATA))
+            return true;
+        if (stage == Select.STAGE_OPTION && _repeatingType.equals(Select.REPEATING_OPTION))
+            return true;
+        if (stage == Select.STAGE_DATASOURCE && _repeatingType.equals(Select.REPEATING_DATASOURCE))
+            return true;
+        if (stage == Select.STAGE_DEFAULT && _repeatingType.equals(Select.REPEATING_DEFAULT))
+            return true;
+        return false;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextArea.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextArea.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,311 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.tags.rendering.TextAreaTag;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.ArrayList;
+
+/**
+ * Renders a databound TextArea with the given attributes.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">cols</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The number of columns in the TextArea</td></tr>
+ * <tr><th rowspan="2">dataSource</th><td>Yes</td><td>No</td><td>Read / Write</td></tr>
+ * <tr><td colspan="3">The name of a form bean property or an expression that contains
+ * the TextArea state.</td></tr>
+ * <tr><th rowspan="2">defaultValue</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal value or an expression that is used to set the TextArea's
+ * initial state. The default value is applied only if the dataSource returns null.</td></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A boolean specifying whether the TextArea is disabled.</td></tr>
+ * <tr><th rowspan="2">readOnly</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean specifying whether the TextArea is read-only.</td></tr>
+ * <tr><th rowspan="2">rows</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The number of rows in the TextArea.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this textarea used by the enclosing html tag to get the tag's name
+ * for JavaScript and focus purposes.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, a TextArea of 3 rows and 25 columns reads from and writes to the form bean's
+ * description property, and reads from the default value in the pageflow if the description
+ * property in the form bean is null.
+ * <pre>
+ * &lt;netui:textArea dataSource="{actionForm.description}"
+ *                    defaultValue="{pageFlow.defaultDescription}"
+ *                    cols="25" rows="3" />
+ * </pre>
+ * 
+ * @netui:tag name="textArea" description="Renders a databound TextArea with the given attributes."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.TextAreaRenderer" bodycontentpref="empty" whitespace="indent"
+ */
+public class TextArea extends HtmlDefaultableDataSourceTag
+        implements Formattable
+{
+    private TextAreaTag.State _state = new TextAreaTag.State();
+
+    private ArrayList _formatters = null;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "TextArea";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null) {
+            if (name.equals(DISABLED)) {
+                _state.disabled = new Boolean(value).booleanValue();
+                return;
+            }
+            else if (name.equals(READONLY)) {
+                _state.readonly = new Boolean(value).booleanValue();
+                return;
+            }
+            else if (name.equals(COLS)) {
+                _state.cols = Integer.parseInt(value);
+                return;
+            }
+            else if (name.equals(ROWS)) {
+                _state.rows = Integer.parseInt(value);
+                return;
+            }
+        }
+
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Sets the number of columns in the TextArea.
+     * @param cols - the number of columns
+     * @netui:attribute required="false" rtexprvalue="true" type="int"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setCols(int cols)
+    {
+        _state.cols = cols;
+    }
+
+    /**
+     * Set if this TextArea is read-only.
+     * @param readonly - the read-only state
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setReadonly(boolean readonly)
+    {
+        _state.readonly = readonly;
+    }
+
+    /**
+     * Sets the number of rows in the TextArea.
+     * @param rows - the number of rows
+     * @netui:attribute required="false" rtexprvalue="true" type="int"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setRows(int rows)
+    {
+        _state.rows = rows;
+    }
+
+    /**
+     * Prepare the TextArea's formatters.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Render the TextArea.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        ServletRequest req = pageContext.getRequest();
+        Object textObject = null;
+        String scriptId = null;
+
+        // Get the value of the data source.  The object will not be null.
+        Object val = evaluateDataSource();
+        textObject = (val != null) ? val : "";
+        assert(textObject != null);
+
+        // setup the rest of the state.
+        _state.name = doNaming();
+
+        scriptId = renderTagId(_state, _state.name, false, true);
+        _state.disabled = isDisabled();
+
+        // if there were expression errors report them
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // Buffer to write the results
+        StringBuilder results = new StringBuilder(64);
+
+        // create the input tag.
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.TEXT_AREA_TAG, req);
+        br.doStartTag(results, _state);
+
+        // create the text value which will be found inside the textarea.
+        if ((textObject == null) || (textObject.toString().length() == 0)) {
+            textObject = _defaultValue;
+        }
+
+        String text = formatText(textObject);
+        if (text != null)
+            text = HtmlUtils.filter(text);
+        if (text == null)
+            text = "";
+
+        results.append(text);
+        br.doEndTag(results);
+
+        // if there are errors report them...
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // report any script
+        if (scriptId != null)
+            results.append(scriptId);
+
+        write(results.toString());
+
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+        _formatters = null;
+    }
+
+    /**
+     * Adds a FormatTag.Formatter to the TextArea's set of formatters
+     * @param formatter - a FormatTag.Formatter added by a child FormatTag.
+     */
+    public void addFormatter(FormatTag.Formatter formatter)
+    {
+        if (_formatters == null)
+            _formatters = new ArrayList();
+
+        _formatters.add(formatter);
+    }
+
+    /**
+     */
+    private String formatText(Object text)
+            throws JspException
+    {
+        if (text == null)
+            return null;
+        if (_formatters == null)
+            return text.toString();
+
+        for (int i = 0; i < _formatters.size(); i++) {
+            FormatTag.Formatter currentFormatter = (FormatTag.Formatter) _formatters.get(i);
+            try {
+                text = currentFormatter.format(text);
+            }
+            catch (JspException e) {
+                registerTagError(e.getMessage(), null);
+            }
+        }
+        return text.toString();
+    }
+
+    /* ==================================================================
+     *
+     * This tag's publically exposed HTML, CSS, and JavaScript attributes
+     *
+     * ==================================================================
+     */
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true" type="char"
+     */
+    public void setAccessKey(char accessKey)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, "accesskey", Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(String tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, tabindex);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextBox.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextBox.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,336 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.IHtmlAccessable;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.InputTextTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.ArrayList;
+
+/**
+ * Renders a databound TextBox with the given attributes.
+ *
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">accessKey</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Define the keyboard navigation key for the element.</td></tr>
+ * <tr><th rowspan="2">alt</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Define the alt attribute of the &lt;Input> element.</td></tr>
+ * <tr><th rowspan="2">dataSource</th><td>Yes</td><td>No</td><td>Read / Write</td></tr>
+ * <tr><td colspan="3">The name of a form bean property or an expression that contains the
+ * TextBox state.</td></tr>
+ * <tr><th rowspan="2">defaultValue</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A literal value or an expression that is used to set the TextBox's
+ * initial state. The default value is applied only if the dataSource returns null.</td></tr>
+ * <tr><th rowspan="2">disabled</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">A boolean value which if true will cause the textBox to be disabled.</td></tr>
+ * <tr><th rowspan="2">maxLength</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The maximum number of characters in the TextBox.</td></tr>
+ * <tr><th rowspan="2">password</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean specifying whether the password characters that the user enters into
+ * the textBox will be disguised in the browser.</td></tr>
+ * <tr><th rowspan="2">readOnly</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean specifying whether the TextBox is read-only.</td></tr>
+ * <tr><th rowspan="2">size</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The visible number of characters in the TextBox.</td></tr>
+ * <tr><th rowspan="2">tagId</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The ID of this textbox used by the enclosing html tag to get the tag's name,
+ * for JavaScript and focus purposes.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example In this sample, a TextBox of size 20 reads from and writes to the form bean's firstname property,
+ * and reads from the default value in the pageflow if the firstName property in the form bean is null.
+ * <pre>
+ * &lt;netui:textBox dataSource="{actionForm.firstName}"
+ *                   defaultValue="{pageFlow.defaultFirstName}"
+ *                   size="20" />
+ * </pre>
+ * 
+ * @netui:tag name="textBox" description="Renders a databound TextBox with the given attributes."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.TextboxRenderer" bodycontentpref="empty" whitespace="indent"
+ */
+public class TextBox extends HtmlDefaultableDataSourceTag
+        implements Formattable, IHtmlAccessable
+{
+    private InputTextTag.State _state = new InputTextTag.State();
+
+    private ArrayList _formatters;
+    private boolean _password = false;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "TextBox";
+    }
+
+    /**
+     * This method will return the state associated with the tag.  This is used by this
+     * base class to access the individual state objects created by the tags.
+     * @return a subclass of the <code>AbstractHtmlState</code> class.
+     */
+    protected AbstractHtmlState getState()
+    {
+        return _state;
+    }
+
+    /**
+     * Base support for the attribute tag.  This is overridden to prevent setting the <code>type</code>,
+     * and <code>value</code> attributes.
+     * @param name  The name of the attribute.  This value may not be null or the empty string.
+     * @param value The value of the attribute.  This may contain an expression.
+     * @param facet The name of a facet to which the attribute will be applied.  This is optional.
+     * @throws JspException A JspException may be thrown if there is an error setting the attribute.
+     */
+    public void setAttribute(String name, String value, String facet)
+            throws JspException
+    {
+        if (name != null) {
+            if (name.equals(TYPE) || name.equals(VALUE)) {
+                String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
+                registerTagError(s, null);
+            }
+            else {
+                if (name.equals(DISABLED)) {
+                    _state.disabled = new Boolean(value).booleanValue();
+                    return;
+                }
+                else if (name.equals(READONLY)) {
+                    _state.readonly = new Boolean(value).booleanValue();
+                    return;
+                }
+                else if (name.equals(MAXLENGTH)) {
+                    _state.maxlength = Integer.parseInt(value);
+                    return;
+                }
+                else if (name.equals(SIZE)) {
+                    _state.size = Integer.parseInt(value);
+                    return;
+                }
+            }
+        }
+
+        super.setAttribute(name, value, facet);
+    }
+
+    /**
+     * Set the maximum length (in characters) of the TextBox.
+     * @param maxlength - the max length
+     * @netui:attribute required="false" rtexprvalue="true" type="int"
+     * @netui.tldx:attribute
+     */
+    public void setMaxlength(int maxlength)
+    {
+        _state.maxlength = maxlength;
+    }
+
+    /**
+     * Set the password state (true means this is a password field).
+     * @param password - the password state
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setPassword(boolean password)
+    {
+        _password = password;
+    }
+
+    /**
+     * Set if this TextBox is read-only.
+     * @param readonly - the read-only state
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setReadonly(boolean readonly)
+    {
+        _state.readonly = readonly;
+    }
+
+    /**
+     * Set the size (in characters) of the TextBox.
+     * @param size - the size
+     * @netui:attribute required="false" rtexprvalue="true" type="int"
+     * @netui.tldx:attribute
+     */
+    public void setSize(int size)
+    {
+        _state.size = size;
+    }
+
+    /**
+     * Prepare the TextBox's formatters.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Render the TextBox.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag() throws JspException
+    {
+        ServletRequest req = pageContext.getRequest();
+        String scriptId = null;
+
+        // Create an appropriate "input" element based on our parameters
+        if (_password) {
+            _state.type = INPUT_PASSWORD;
+        }
+        else {
+            _state.type = INPUT_TEXT;
+        }
+
+        // Create the state for the input tag
+        _state.name = doNaming();
+        scriptId = renderTagId(_state, _state.name, false, true);
+        _state.disabled = isDisabled();
+
+        // Create the text value of the TextBox
+        Object textObject = evaluateDataSource();
+        if ((textObject == null) || (textObject.toString().length() == 0)) {
+            textObject = _defaultValue;
+        }
+        assert(textObject != null) : "Default value was evaluated to null";
+
+        String text = formatText(textObject);
+        if (text != null)
+            text = HtmlUtils.filter(text);
+        if (text == null) {
+            text = "";
+        }
+        _state.value = text;
+
+        StringBuilder results = new StringBuilder(256);
+
+        // report any errors that may be found
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // create the input tag.
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_TEXT_TAG, req);
+        br.doStartTag(results, _state);
+        br.doEndTag(results);
+
+        // write any script that needs to be written
+        if (scriptId != null)
+            results.append(scriptId);
+
+        write(results.toString());
+
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _state.clear();
+
+        _formatters = null;
+        _password = false;
+    }
+
+    /**
+     * Adds a FormatTag.Formatter to the TextBox's set of formatters
+     * @param formatter - a FormatTag.Formatter added by a child FormatTag.
+     */
+    public void addFormatter(FormatTag.Formatter formatter)
+    {
+        if (_formatters == null)
+            _formatters = new ArrayList();
+
+        _formatters.add(formatter);
+    }
+
+    /**
+     */
+    private String formatText(Object text)
+            throws JspException
+    {
+        if (text == null)
+            return null;
+        if (_formatters == null)
+            return text.toString();
+
+        for (int i = 0; i < _formatters.size(); i++) {
+            FormatTag.Formatter currentFormatter = (FormatTag.Formatter) _formatters.get(i);
+            try {
+                text = currentFormatter.format(text);
+            }
+            catch (JspException e) {
+                registerTagError(e.getMessage(), null);
+            }
+        }
+        return text.toString();
+    }
+
+
+    /**
+     * Sets the accessKey attribute value.  This should key value of the
+     * keyboard navigation key.  It is recommended not to use the following
+     * values because there are often used by browsers <code>A, C, E, F, G,
+     * H, V, left arrow, and right arrow</code>.
+     * @param accessKey - the accessKey value.
+     * @netui:attribute required="false" rtexprvalue="true" type="char"
+     */
+    public void setAccessKey(char accessKey)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey));
+    }
+
+    /**
+     * Sets the alt attribute value.
+     * @param alt - the alt value.
+     * @netui:attribute required="false"  rtexprvalue="true"
+     */
+    public void setAlt(String alt)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+    }
+
+    /**
+     * Sets the tabIndex of the rendered html tag.
+     * @param tabindex - the tab index.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="misc"
+     */
+    public void setTabindex(String tabindex)
+    {
+        _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, tabindex);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/URLParams.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/URLParams.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.html;
+
+import javax.servlet.jsp.JspException;
+
+// @todo: should this be rename to IURLParams?
+
+public interface URLParams
+{
+    public void addParameter(String name, Object value) throws JspException;
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/folder_16_pad.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/handledownlast.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/handledownmiddle.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/handlerightlast.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/handlerightmiddle.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/linelastnode.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/linemiddlenode.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/images/linevertical.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/javaScript.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/javaScript.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,157 @@
+# This properties files defines all of the JavaScript generated by the HTML
+# tags.  This file does not need I18N support.
+
+# This is a header comment for the code that will run when the page is loaded
+codeComment=\
+\n// **** This section contains code that will run when the page is loaded ****\n\
+\n\
+\n
+
+functionComment=\
+\n// **** This section contains functions typically run as events ****\n\
+\n\
+\n
+
+# generic method to submit a form, used by Anchor and ImageAnchor
+# The following method will be written out once an may be called by
+# multiple anchor and imageAnchors.  The event JavaScript is defined following it.
+anchorFormSubmit=\
+// submit the form from an Anchor or ImageAnchor\n\
+// Search for the form by actionName,\n\
+// Replace the action with the passed in action\n\
+// Submit the form\n\
+function anchor_submit_form(netuiName, newAction)\n\
+{\n\
+\  for (var i=0; i<document.forms.length; i++) {\n\
+\     if (document.forms[i].id == netuiName) {\n\
+\        document.forms[i].method = "POST";\n\
+\        document.forms[i].action = newAction;\n\
+\        document.forms[i].submit();\n\
+\     }\n\
+\   }\n\
+}\n
+
+# The action event that will call the form submit javascript
+anchorFormSubmitAction=anchor_submit_form("{0}","{1}");return false;
+
+# This script will run and set the focus onto the named element
+# It is a page level statement that runs to set the initial focus on
+# the page.
+setFocus=\
+// set the focus on a field within the named form\n\
+if (document.forms["{0}"]["{1}"].type != "hidden")\n\
+\    document.forms["{0}"]["{1}"].focus();\n
+
+# This script will do a standard image replacement in a rollover
+rollover=\
+// Simple rollover function which replaces the image.src with the passed image\n\
+function swapImage(control, image)\n\
+{\n\
+\  control.src = image;\n\
+}\n
+
+# JavaScript that will become the mapping between the id and real name
+idMappingTable=\
+// Build the netui_names table to map the tagId attributes\n\
+// to the real id written into the HTML\n\
+if (netui_names == null)\n\
+\   var netui_names = new Object();\n\
+{0}\n
+
+# this is the individual entry into the mapping table for each mapping
+idMappingEntry=\
+netui_names.{0}="{1}"\n
+
+# simple method to return the real id for the a scoped tagId
+getNetuiTagNameAdvanced=\
+// method which will return a real id for a tagId,\n\
+// the tag parameter will be used to find the scopeId for\n\
+// containers that may scope their ids\n\
+function getNetuiTagName(id, tag)\n\
+{\n\
+\   var scopeId = getScopeId(tag);\n\
+\   if (scopeId == \"\")\n\
+\      return netui_names[id];\n\
+\   else\n\
+\      return netui_names[scopeId  + "__" + id];\n\
+}\n
+
+# method to find the scope id
+getScopeId=\
+// This method will walk the hierarchy from the pass element looking for a scopeId.\n\
+// The first scopeId found will be returned or the empty string if a scopeId is not found.\n\
+function getScopeId(tag)\n\
+{\n\
+\   if (tag == null)\n\
+\      return "";\n\
+\   if (tag.scopeId != null)\n\
+\      return tag.scopeId;\n\
+\   return getScopeId(tag.parentElement);\n\
+}\n
+
+# JavaScript that will become the mapping between the id and real name
+singleIdMappingTable=\
+// Build the netui_names table to map the tagId attributes\n\
+// to the real id written into the HTML\n\
+if (netui_names == null)\n\
+\   var netui_names = new Object();\n\
+netui_names.{0}="{1}"\n
+
+# Define the base NetUI variable for scoping all our JavaScript into it
+defineNetUI=\
+// define the constructor for the NetUI object\n\
+function NetUI() {\n\
+\   this.members = new Object();    // the named object\n\
+}\n\
+\n\
+// create the variable, it will be empty\n\
+var netUI = new NetUI();\n\n
+
+# Script that will create the NetUI variable and put the webApp inside it
+# in addition, we create the initialization code and run it.
+createNetUI=\
+// Create the NetUI variable and put the webapp name into it\n\
+netUI.webAppName = "{0}";\n\
+\n\
+// This method will init the\n\
+NetUI.prototype.init = function()\n\
+'{'\n\
+{1}\n\
+}\n\
+\n\
+netUI.init();\n\n
+
+#create the initialization lines
+createNetUIInitLine=\
+\     // create the {0} object and initialize it.\n\
+\     this.{0} = new {1}();\n\
+\     this.{0}.init();\n\n
+
+# Script that will create the NetUI variable and put the webApp inside it
+# in addition, we create the initialization code and run it.
+createAnchorRewriter=\
+// Create the NetUI anchor rewriter method\n\
+function NetUIAnchorRewriter(node)\n\
+'{'\n\
+{1}\n\
+}\n\
+\n
+
+#create the anchor rewriter.
+createAnchorRewriterLine=\
+\     // create the {0} object and initialize it.\n\
+\     netUI.{0}.rewriteAnchor(node);\n\n
+
+#create the anchor rewriter if there is already an onclick defined
+createAnchorRewriterOnClickExists=\
+return NetUIAnchorInvoke(this,"{0}");
+
+#This method will invoke the NetUICommand infrastructure
+netuiAction=\
+return netUI.action("{0}");
+
+
+
+
+
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/package.html
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/html/package.html	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<html>
+  <body>
+    <p>
+    This package defines the core set of HTML tags provided by NetUI.
+    </p>
+    <p>
+    The tags used by a template page are:
+    <ul>
+    <li><b>HtmlBase</b> -- This is the base abstract type for the
+        HTML specific tags.
+    </ul>
+    </p>
+  </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/FormDataNameInterceptor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/FormDataNameInterceptor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,76 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.naming;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * A {@link NameInterceptor} that qualifies all non-expression attributes
+ * that are expected to be expressions into valid
+ * expressions.  This conversion is for Struts compatability;
+ * In Struts, the "property" property is used to specify which
+ * property on the action form should be rendered in a tag's
+ * HTML.  These attributes are converted into expressions
+ * by qualifying them into the <code>actionForm</code> binding
+ * context.
+ * <br/>
+ * <br/>
+ * For example, the <code>dataSource</code> attribute on a text box
+ * tag would be qualified into the <code>actionForm</code> context
+ * if the attribute was not an expression.
+ */
+public class FormDataNameInterceptor
+        implements NameInterceptor
+{
+    private static final Logger logger = Logger.getInstance(FormDataNameInterceptor.class);
+
+    /**
+     * Qualify the name of a NetUI JSP tag into the "actionForm" data binding context.
+     * This feature is used to convert non-expression tag names, as those used in Struts,
+     * into actionForm expressions that NetUI consumes.
+     *
+     * @param name the name to qualify into the actionForm binding context.  If this is "foo", the returned value
+     * is {actionForm.foo}
+     * @return the qualified name or <code>null</code> if an error occurred
+     */
+    public String rewriteName(String name,Tag currentTag)
+            throws ExpressionEvaluationException {
+        ExpressionEvaluator eval = ExpressionEvaluatorFactory.getInstance();
+
+        try {
+            if (!eval.isExpression(name))
+                return eval.qualify("actionForm",name);
+            return name;
+        }
+        catch (Exception e) {
+            if (logger.isErrorEnabled())
+                logger.error("Could not qualify name \""+name+"\" into the actionForm binding context.",e);
+
+            // return the Struts name.  This should cause regular Struts databinding to execute so this property will
+            // be updated anyway.
+            return name;
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/IndexedNameInterceptor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/IndexedNameInterceptor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,233 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.naming;
+
+// java imports
+import java.util.List;
+
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.tagext.TagSupport;
+
+// internal imports
+import org.apache.beehive.netui.script.Expression;
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * A {@link NameInterceptor} that is used to rewrite names which
+ * reference the <code>container</code> databinding context.  This
+ * NameInterceptor is for use by tags that render form-updatable HTML
+ * elements.  If the dataSource attribute of the tag references a
+ * <code>container</code> binding context, the name must be qualified
+ * into a real path down a bean / property hierarchy in order to
+ * correctly update that value on a POST.  This NameInterceptor
+ * rewrites that name using the given name and the hierarchy of
+ * {@link org.apache.beehive.netui.script.common.IDataAccessProvider} tags in a JSP page.
+ */
+public class IndexedNameInterceptor
+        implements NameInterceptor
+{
+    private static final Logger _logger = Logger.getInstance(IndexedNameInterceptor.class);
+
+    /**
+     * Rewrite an expression into a fully-qualified reference to a specific JavaBean property
+     * on an object. 
+     *
+     * @param name the expression to rewrite
+     * @param currentTag the current JSP tag that can be used as the leaf for walking up 
+     *                   to find parent tags that provide information used to 
+     *                   rewrite the expression.
+     */
+    public final String rewriteName(String name, Tag currentTag)
+            throws ExpressionEvaluationException 
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("rewrite expression \"" + name + "\"");
+
+        IDataAccessProvider dap = getCurrentProvider(currentTag);
+        // if the DAP is null, there is no rewriting to do
+        if(dap == null)
+            return name;
+
+        // given a hierarchy of "container.container.container.item.someProp", the correct parent needs
+        // to be found so that expression rewriting can happen correctly.
+        //
+        // ensure that this expression contains container.item
+        Expression parsed = getExpressionEvaluator().parseExpression(name);
+        assert parsed != null;
+
+        int containerCount = 0;
+        List tokens = parsed.getTokens();
+        for(int i = 0; i < tokens.size(); i++)
+        {
+            String tok = tokens.get(i).toString();
+            if(i == 0)
+            {
+                if(!tok.equals("container"))
+                    break;
+                else continue;
+            }
+            // this skips the "current" IDataAccessProvider
+            else if(tok.equals("container"))
+                containerCount++;
+            else if(tok.equals("item"))
+                break;
+        }
+
+        if(_logger.isDebugEnabled()) _logger.debug("container parent count: " + containerCount);
+
+        // now walk up the DataAccessProvier hierarchy until the top-most parent is found
+        // the top-most parent is the first one that does not reference "container.item" but
+        // is bound directly to a specific object such as "actionForm" or "pageFlow".  This 
+        // handles the case where a set of nested IDataAccessProvider tags are "skipped" by
+        // an expression like "container.container.container.item.foo".  In order to find
+        // the correct root to start rewriting the names, one needs to walk up three 
+        // DAPs in order to find the correct root from which to start. 
+        //
+        // In general, containerCount is zero here for the "container.item.foo" case.
+        for(int i = 0; i < containerCount; i++) 
+        {
+            dap = dap.getProviderParent();
+        }
+
+        // now, the top-most DAP parent is known
+        assert dap != null;
+        
+        // strip off the "container.item" from the expression that is being rewritten
+        // this should be two tokens into the expression.
+        if(containerCount > 0)
+        {
+            name = parsed.getExpression(containerCount);
+        }
+
+        // now, change the binding context of the parent DAP hierarchy to create a 
+        // String that looks like "actionForm.customers[42].order[12].lineItem[2].name"
+        // note, this is done without using the expression that was passed-in and 
+        // is derived entirely from the IDataAccessProvider parent hierarchy.
+        String parentNames = rewriteNameInternal(dap);
+
+        if(_logger.isDebugEnabled()) _logger.debug("name hierarchy: " + parentNames + " name: " +name);
+
+        // with a newly re-written expression prefix, substitute this fully-qualified binding
+        // string into the given expression for "container.item".
+        String newName = changeContext(name, "container.item", parentNames, dap.getCurrentIndex());
+
+        if(_logger.isDebugEnabled()) _logger.debug("rewrittenName: " + newName);
+
+        return newName;
+    }
+
+    /**
+     * A default method to find the "current" IDataAccessProvider.  This method is 
+     * left as non-final so that the implementation here can be tested 
+     * outside of a servlet container.
+     */
+    protected IDataAccessProvider getCurrentProvider(Tag tag) 
+    {
+        return (IDataAccessProvider)TagSupport.findAncestorWithClass(tag,IDataAccessProvider.class);
+    }
+
+    /**
+     * Rewrite a parent IDataAccessProvider's dataSource to be fully qualified.
+     *
+     * "container.container.container.container.item.foo" -> "DS1.DS2.DS3.DS4.foo"
+     */
+    private final String rewriteNameInternal(IDataAccessProvider dap)
+            throws ExpressionEvaluationException 
+    {
+        if(_logger.isDebugEnabled())
+            _logger.debug("assign index to name: " + dap.getDataSource());
+
+        Expression parsedDataSource = getExpressionEvaluator().parseExpression(dap.getDataSource());
+        assert parsedDataSource != null;
+
+        // @todo: perf
+        boolean isContainerBound = (parsedDataSource.getTokens().get(0)).toString().equals("container");
+
+        // rewrite the name of the current IDataAccessProvider.
+        String parentName = null;
+        // if the current DAP has a parent IDataAccessProvider, rewrite the name of the parent
+        if(dap.getProviderParent() != null)
+            parentName = rewriteNameInternal(dap.getProviderParent());
+        // if the current DAP has no parent, or it does not reference the "container." binding context,
+        // we've found the "root" IDataAccessProvider
+        else if(dap.getProviderParent() == null || (dap.getProviderParent() != null && !isContainerBound)) 
+        {
+            return dap.getDataSource();
+        }
+
+        // now, we've found the root and can start rewriting the expressions throughout 
+        // the rest of the DAP hierarchy
+        if(_logger.isDebugEnabled())
+        {
+            _logger.debug("changeContext: DAP.dataSource=" + dap.getDataSource() + " oldContext=container newContext=" +
+                          parentName + " currentIndex=" + dap.getProviderParent().getCurrentIndex() + 
+                          " parentName is container: " + isContainerBound); 
+        }
+
+        String retVal = null;
+        String ds = dap.getDataSource();
+
+        // If the current DAP's dataSource is "container.item", the binding context needs to change to that
+        // of the parent.  This case should only occur for the last token -- the "name" passed into
+        // the method.  Oterwise, just replace the "container" to that of the parent.  Both are 
+        // qualified with the DAP's current index so that "actionForm.customers" becomes 
+        // "actionForm.customers[12]".  
+
+        boolean isContainerItemBound = false;
+        if(isContainerBound && (parsedDataSource.getTokens().get(1)).toString().equals("item"))
+            isContainerItemBound = true;
+            
+        if(isContainerItemBound)
+            retVal = changeContext(ds, "container.item", parentName, dap.getProviderParent().getCurrentIndex());
+        else
+            retVal = changeContext(ds, "container", parentName, dap.getProviderParent().getCurrentIndex());
+
+        if(_logger.isDebugEnabled()) _logger.debug("fully-qualified binding expression: \"" + retVal + "\"");
+
+        return retVal;
+    }
+
+    protected ExpressionEvaluator getExpressionEvaluator()
+    {
+        return ExpressionEvaluatorFactory.getInstance();
+    }
+
+    private final String changeContext(String dataSource, String oldContext, String newContext, int index)
+            throws ExpressionEvaluationException 
+    {
+        try 
+        {
+            return getExpressionEvaluator().changeContext(dataSource, oldContext, newContext, index);
+        }
+        catch (ExpressionEvaluationException ee) 
+        {
+            if(_logger.isErrorEnabled()) _logger.error("An error occurred changing the binding context of the expression \"" + 
+                                                       dataSource + "\".  Cause: " + ee, ee);
+
+            throw ee;
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/NameInterceptor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/NameInterceptor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.naming;
+
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * An interface that is used to allow interceptors to
+ * modify attributes that are going to be written to a
+ * client from a NetUI JSP tag.
+ * <br/>
+ * Several concrete implementations of this interface are
+ * provided in order to rewrite names on form tags as they
+ * are rendered to the browser.
+ *
+ * @see FormDataNameInterceptor
+ * @see IndexedNameInterceptor
+ * @see PrefixNameInterceptor
+ */
+public interface NameInterceptor
+{
+
+    /**
+     *
+     * @param name
+     * @param currentTag
+     * @return
+     * @throws ExpressionEvaluationException
+     */
+    public String rewriteName(String name,Tag currentTag) throws ExpressionEvaluationException;
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/PrefixNameInterceptor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/PrefixNameInterceptor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.naming;
+
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * A {@link NameInterceptor} that is used to add a prefix handler onto a
+ * NetUI tag that is being written to the client.  Occasionally, NetUI
+ * tags need to be pre-processed before passing the name and value
+ * to the {@link org.apache.beehive.netui.pageflow.ProcessPopulate} handler
+ * in order to update a bean property.  This preprocessing is done by
+ * implementing a handler implementing the interface
+ * {@link org.apache.beehive.netui.pageflow.RequestParamterHandler}, registering
+ * this interface with the {@link org.apache.beehive.netui.pageflow.ProcessPopulate#registerPrefixHandler(String, RequestParamterHandler)}
+ * method, and adding a prefix which references this RequestParameterHandler to the
+ * name of each paramter that should be handled by the implementation before
+ * updating the bean property.
+ */
+public class PrefixNameInterceptor implements NameInterceptor
+{
+    private String tagKey;
+
+    public PrefixNameInterceptor(String key) {
+        tagKey = key;
+    }
+
+    protected PrefixNameInterceptor() {
+        super();
+    }
+
+    public String rewriteName(String name,Tag currentTag)
+            throws ExpressionEvaluationException {
+        return rewriteNameInternal(name,tagKey);
+    }
+
+    protected String rewriteNameInternal(String name,String key)
+            throws ExpressionEvaluationException {
+        return org.apache.beehive.netui.pageflow.ProcessPopulate.writeHandlerName(key,name);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/package.html
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/naming/package.html	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<html>
+  <body>
+    <p>
+    This package provides support for plugable naming of data source elements.
+    </p>
+    <p>
+    The tags used by a template page are:
+    <ul>
+    <li><b>NameInterceptor</b> -- This interface defines the contract 
+        for the naming service.
+    </ul>
+    </p>
+  </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/package.html
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/package.html	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+<html>
+  <body>
+    <p>
+    Provides the classes and interfaces fundamental to the NetUI tags.  The primary abstract base
+    class is {@link org.apache.beehive.netui.tags.AbstractBaseTag}, which most tags extend from. This class
+    provides implementation of most of the basic services used by the NetUI tags.  There are three
+    basic types of NetUI Tags based upon how they data bind to objects:
+    <ul>
+    <li><b>Read-only</b> -- These tags bind to their primary value through the <code>value</code>
+    attribute.  In addition, many other attributes on tags provide read-only binding.</li>
+    <li><b>Read-Write</b> -- These values provide read/write access to variables on the server.
+    Tags bind their primary value through the <code>dataSource</code> attribute.</li>
+    <li><b>Read-Write Multiple Values</b> -- This type of tag may read and write multiple values.
+    Typically, these tags support a <code>optionsDataSource</code> attribute allowing the full
+    set of options to be specified.</li>
+    </ul>
+    In addition, to these common attributes, many tags provide a <code>defaultValue</code>
+    attribute which can provide the default value if the <code>dataSource</code> object is null.
+    </p>
+    <p>
+    <code>AbstractBaseTag</code> provides base features allowing the implementation of <code>dataSource,
+    defaultValue</code>, and <code>optionsDataSource</code>.  There are also base classes in both this package
+    and the {@link org.apache.beehive.netui.html} package which support these attributes.
+    </p>
+    <p>
+    The primary base classes are:
+    <ul>
+    <li><b>AbstractBaseTag</b> -- This is an abstract base class for
+    all tags.  I provides support for generic tag features, expression management, naming support,
+    generic attribute support, error reporting and JavaScript services.</li>
+    <li><b>DataSourceTag</b> -- </li>
+    <li><b>DefaultableDataSourceTag</b> -- </li>
+    <li><b>OptionsDataSourceTag</b> -- </li>
+    </ul>
+    </p>
+    <p>There are a number of supporting interfaces provided by the package.  These interfaces
+    allow tags to provide services or participate in provided services.  These are the primary
+    interfaces:
+    <ul>
+    <li><b>DataAccessProvider</b> -- This interfaces allows object to provide their
+    children with a relative binding context using the 'container' binding context.</li>
+    <li><b>ErrorReporter</b> -- This interfaces allows objects to act as a container for
+    reporting errors generated by their children.</li>
+    <li><b>ScriptReporter</b> -- This interfaces allows objects to act as a container for
+    JavaScript for their children.</li>
+    </ul>
+  </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractAttributeState.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractAttributeState.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,133 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import java.util.HashMap;
+import java.util.Map;
+
+abstract public class AbstractAttributeState extends AbstractTagState
+{
+    private static final Logger logger = Logger.getInstance(AbstractAttributeState.class);
+
+    /**
+     * String constant for the empty string.
+     */
+    public static final String EMPTY_STRING = "";
+
+    /**
+     * The integer type constant indentifying the General Attributes  <code>AbstractBaseTag</code>
+     * reserves 0-9 for indentification.
+     */
+    public static final int ATTR_GENERAL = 0;
+
+    private HashMap generalMap = null;              // the map of general attributes
+
+    public HashMap getGeneralAttributeMap()
+    {
+        return generalMap;
+    }
+
+    /**
+     * This method will return the map that represents the passed in <code>type</code>.  The boolean flag
+     * </code>createIfNull</code> indicates that the map should be created or not if it's null. This
+     * class defines two maps defined by  <code>@see #ATTR_GENERAL</code> and <code>ATTR_GENERAL_EXPRESSION</code>
+     * @param type         <code>integer</code> type indentifying the map to be created.
+     * @param createIfNull <code>boolean</code> flag indicating if the map should be created if it doesn't exist.
+     * @return The map or null
+     * @see #ATTR_GENERAL
+     */
+    public Map selectMap(int type, boolean createIfNull)
+    {
+        Map ret = null;
+        if (type == ATTR_GENERAL) {
+            if (generalMap == null && createIfNull)
+                generalMap = new HashMap();
+            ret = generalMap;
+        }
+
+        return ret;
+    }
+
+    public void clear()
+    {
+        if (generalMap != null)
+            generalMap.clear();
+    }
+
+    /**
+     * Register a name value part into a named attribute map.  The base type
+     * supports two attribute maps, the first are general attributes and the second are
+     * attributes which may contain expressions.  These are identified by the type definition
+     * <code>ATTR_GENERAL<code>  and <code>ATTR_GENERAL_EXPRESSION</code> respectively.
+     * @param type     an integer key identifying the map.
+     * @param attrName the name of the attribute
+     * @param value    the value of the attribute
+     */
+    public void registerAttribute(int type, String attrName, String value)
+    {
+
+        assert(attrName != null);
+        if (value == null)
+            return;
+
+        Map map = selectMap(type, true);
+        if (map == null) {
+            String s = Bundle.getString("Tags_ParameterAccessError",
+                    new Object[]{new Integer(type), attrName});
+            logger.error(s);
+            return;
+        }
+        map.put(attrName, value);
+    }
+
+    /**
+     * Remove a previously registered attribute value from map.
+     * @param type     an integer key indentifying the map
+     * @param attrName the name of the attribute to remove from the specified map
+     */
+    public void removeAttribute(int type, String attrName)
+    {
+        Map map = selectMap(type, false);
+        if (map == null) {
+            String s = Bundle.getString("Tags_ParameterAccessError",
+                    new Object[]{new Integer(type), attrName});
+            logger.error(s);
+            return;
+        }
+
+        map.remove(attrName);
+    }
+
+    /**
+     * Return a named attribute value from the specified attribute map.
+     * @param type     an integer key indentifying the map
+     * @param attrName the name of the attribute we will get the value from.
+     * @return a string value of the attribute if set or null.
+     */
+    public String getAttribute(int type, String attrName)
+    {
+        Map map = selectMap(type, false);
+        if (map == null)
+            return null;
+        return (String) map.get(attrName);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractHtmlState.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractHtmlState.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This class extends the <code>AbstractAttributeState</code> to add support for HTML.
+ * This class add support for the <code>id</code>, <code>style</code>, and <code>class</code>
+ * attributes.  In addition, there is a <code>Map</code> that supports the JavaScript
+ * event attributes.
+ */
+public class AbstractHtmlState extends AbstractAttributeState
+{
+    /**
+     * Define the Attribute Map for the JavaScript event handler attributes.
+     */
+    public static final int ATTR_JAVASCRIPT = 12;
+
+    /**
+     * The HTML <code>id</code> attribute.
+     */
+    public String id;
+
+    /**
+     * The HTML <code>style</code> attribute.
+     */
+    public String style;
+
+    /**
+     * The HTML <code>class</code> attribute.
+     */
+    public String styleClass;
+
+    private HashMap _jsMap = null;       // Map used to hold the registered JavaScript attributes.
+
+    /**
+     * Return the Map Containing the JavaScript entries.
+     * @return a <code>Map</code> of the JavaScript attributes.
+     */
+    public HashMap getEventMap()
+    {
+        return _jsMap;
+    }
+
+    /**
+     * Initialize the state.
+     */
+    public void clear()
+    {
+        super.clear();
+
+        if (_jsMap != null)
+            _jsMap.clear();
+
+        id = null;
+        style = null;
+        styleClass = null;
+    }
+
+    /**
+     * This method will return the map that represents the passed in <code>type</code>.  The boolean flag
+     * </code>createIfNull</code> indicates that the map should be created or not if it's null. This
+     * class defines two maps defined by  <code>@see #ATTR_STYLE</code> and <code>ATTR_JAVASCRIPT</code>
+     * @param type         <code>integer</code> type indentifying the map to be created.
+     * @param createIfNull <code>boolean</code> flag indicating if the map should be created if it doesn't exist.
+     * @return The map or null
+     * @see #ATTR_JAVASCRIPT
+     */
+    public Map selectMap(int type, boolean createIfNull)
+    {
+        if (type == ATTR_JAVASCRIPT) {
+            if (_jsMap == null && createIfNull)
+                _jsMap = new HashMap();
+            return _jsMap;
+        }
+        return super.selectMap(type, createIfNull);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractTagState.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractTagState.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+abstract public class AbstractTagState
+{
+    abstract public void clear();
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AnchorTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AnchorTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Rendering for HTML anchor tags $lt;a>.  In HTML 4.01 the start and end tags are both required.
+ * There are no required attributes.
+ */
+abstract public class AnchorTag extends TagHtmlBase implements HtmlConstants
+{
+    /**
+     * Add the Renderer for the HTML and XHTML tokens.
+     * @param html  The map of HTML Tag Renderers
+     * @param xhtml The map of XHTML Tag Renderers
+     */
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(ANCHOR_TAG, new Rendering());
+        xhtml.put(ANCHOR_TAG, new Rendering());
+    }
+
+    /**
+     * The State assocated with the Anchor Tag.
+     */
+    public static class State extends AbstractHtmlState
+    {
+        // @todo: the onclick should be moved out of this into the map....
+        public String name;
+        public String href;
+        public String onClick;
+
+        public void clear()
+        {
+            super.clear();
+
+            name = null;
+            href = null;
+            onClick = null;
+        }
+    }
+
+    /**
+     * Private class implementation of of the Anchor Tag.
+     */
+    private static class Rendering extends AnchorTag
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of AnchorTag.State";
+
+            // convert to AnchorTag.State
+            State state = (State) renderState;
+
+            renderTag(sb, ANCHOR);
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, NAME, state.name);
+            renderAttribute(sb, HREF, state.href);
+
+            renderAttribute(sb, CLASS, state.styleClass);
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+
+            renderAttributeSingleQuotes(sb, ONCLICK, state.onClick);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, ANCHOR);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/BaseTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/BaseTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Render the HTML &lt;base> tag.  This is the document base URI.
+ * In HTML 4.01 the start tag is required and the end tag forbidden.
+ * The tag will be rendered as a single tag.  The href attribute is required in HTML 4.01 and optional
+ * in XHTML.
+ */
+public abstract class BaseTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(BASE_TAG, new HtmlRendering());
+        xhtml.put(BASE_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractAttributeState
+    {
+        public String target;
+        public String href;
+
+        public void clear()
+        {
+            super.clear();
+
+            target = null;
+            href = null;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof BaseTag.State) : "Paramater 'renderState' must be an instance of Base.State";
+
+        State state = (State) renderState;
+
+        renderTag(sb, BASE);
+        renderAttribute(sb, HREF, state.href);
+        renderAttribute(sb, TARGET, state.target);
+
+        // These are not actually used by the <base> tag, but may be set by external sources.
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        writeEnd(sb);
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+        // do nothing...
+    }
+
+    abstract protected void writeEnd(StringBuilder sb);
+
+
+    private static class HtmlRendering extends BaseTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(">");
+        }
+    }
+
+    private static class XhtmlRendering extends BaseTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(" />");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/BodyTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/BodyTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,70 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Render the HTML &lt;body> tag.  In HTML 4.01 both the start and end tag are optional.  This
+ * renderer will write both.  There are no required attributes.
+ */
+public abstract class BodyTag extends TagHtmlBase
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(BODY_TAG, new Rendering());
+        xhtml.put(BODY_TAG, new Rendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public void clear()
+        {
+            super.clear();
+        }
+    }
+
+    private static class Rendering extends BodyTag implements HtmlConstants
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of BodyTag.State";
+
+            State state = (State) renderState;
+
+            renderTag(sb, BODY);
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, CLASS, state.styleClass);
+
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, BODY);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/CaptionTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/CaptionTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Render the HTML &lt;caption> element.  In HTML 4.01 both the start and end tags are required.
+ * There are no required attributes.
+ */
+public abstract class CaptionTag extends TagHtmlBase
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(CAPTION_TAG, new Rendering());
+        xhtml.put(CAPTION_TAG, new Rendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public void clear()
+        {
+            super.clear();
+        }
+    }
+
+    private static class Rendering extends CaptionTag implements HtmlConstants
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of CaptionTag.State";
+
+            State state = (State) renderState;
+
+            renderTag(sb, CAPTION);
+
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, CLASS, state.styleClass);
+
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, CAPTION);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/ConstantRendering.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/ConstantRendering.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+/**
+ * This class will render the constant HTML used by the tags
+ */
+abstract public class ConstantRendering
+{
+    abstract public void BR(StringBuilder sb);
+
+    public void TR_TD(StringBuilder sb)
+    {
+        sb.append("<tr><td>");
+    }
+
+    public void end_TD_TR(StringBuilder sb)
+    {
+        sb.append("</td></tr>");
+    }
+
+    public void TABLE(StringBuilder sb)
+    {
+        sb.append("<table>");
+    }
+
+    public void end_TABLE(StringBuilder sb)
+    {
+        sb.append("</table>");
+    }
+
+    public void NBSP(StringBuilder sb)
+    {
+        sb.append("&nbsp;");
+    }
+
+    private static class HtmlConstants extends ConstantRendering
+    {
+        public void BR(StringBuilder sb)
+        {
+            sb.append("<br>");
+        }
+    }
+
+    private static class XhtmlConstants extends ConstantRendering
+    {
+        public void BR(StringBuilder sb)
+        {
+            sb.append("<br />");
+        }
+    }
+
+    public static ConstantRendering getRendering(int type)
+    {
+
+        if (type == TagRenderingBase.HTML_RENDERING)
+            return new HtmlConstants();
+        if (type == TagRenderingBase.XHTML_RENDERING)
+            return new XhtmlConstants();
+        assert (false) : "Didn't find the requested contant renderer:" + type;
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/DivTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/DivTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,69 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Div, Start Tag: optional, End tag: optional
+ */
+public abstract class DivTag extends TagHtmlBase
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(DIV_TAG, new Rendering());
+        xhtml.put(DIV_TAG, new Rendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public void clear()
+        {
+            super.clear();
+        }
+    }
+
+    private static class Rendering extends DivTag implements HtmlConstants
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of SpanTag.State";
+
+            State state = (State) renderState;
+
+            renderTag(sb, DIV);
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, CLASS, state.styleClass);
+
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, DIV);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/FormTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/FormTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Renderthe HTML &lt;form> element.  In HTML 4.01 both the start and end tag are rquired.
+ * The action is a required attribute.
+ */
+public abstract class FormTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(FORM_TAG, new HtmlRendering());
+        xhtml.put(FORM_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String name;
+        public String method;
+        public String action;
+
+        public void clear()
+        {
+            super.clear();
+
+            name = null;
+            method = null;
+            action = null;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        State state = (State) renderState;
+
+        renderTag(sb, FORM);
+        renderNameAndId(sb, state);
+        renderAttribute(sb, ACTION, state.action);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderAttribute(sb, METHOD, state.method);
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+
+        sb.append(">");
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+        renderEndTag(sb, FORM);
+    }
+
+    abstract void renderNameAndId(StringBuilder sb, State renderState);
+
+    private static class HtmlRendering extends FormTag
+    {
+        public void renderNameAndId(StringBuilder sb, State state)
+        {
+            renderAttribute(sb, NAME, state.name);
+            renderAttribute(sb, ID, state.id);
+        }
+    }
+
+    private static class XhtmlRendering extends FormTag
+    {
+        public void renderNameAndId(StringBuilder sb, State state)
+        {
+            renderAttribute(sb, ID, state.name);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/HtmlTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/HtmlTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Renderthe HTML &lt;form> element.  In HTML 4.01 both the start and end tag are rquired.
+ * The action is a required attribute.
+ */
+abstract public class HtmlTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(HTML_TAG, new HtmlTag.HtmlRendering());
+        xhtml.put(HTML_TAG, new HtmlTag.XhtmlRendering());
+    }
+
+    public static class State extends AbstractTagState
+    {
+        public String lang;
+        public String dir;
+
+        public void clear()
+        {
+            lang = null;
+            dir = null;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        State state = (State) renderState;
+
+        renderDocType(sb);
+        sb.append("\n");
+        renderTag(sb, HTML);
+        renderAttribute(sb, LANG, state.lang);
+        renderAttribute(sb, DIR, state.dir);
+        renderAdditionalAttributes(sb, state);
+
+        sb.append(">");
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+        renderEndTag(sb, HTML);
+    }
+
+    abstract protected void renderAdditionalAttributes(StringBuilder sb, State renderState);
+
+    abstract protected void renderDocType(StringBuilder sb);
+
+    private static class HtmlRendering extends HtmlTag
+    {
+        protected void renderDocType(StringBuilder sb)
+        {
+            sb.append("<!DOCTYPE HTML PUBLIC \"//W3C//DTD HTML 4.01 Transitional//EN\"\n\t\"http://www.w3.org/TR/html4/loose.dtd\">");
+        }
+
+        protected void renderAdditionalAttributes(StringBuilder sb, State renderState)
+        {
+        }
+
+    }
+
+    private static class XhtmlRendering extends HtmlTag
+    {
+        protected void renderDocType(StringBuilder sb)
+        {
+            sb.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
+        }
+
+        protected void renderAdditionalAttributes(StringBuilder sb, State renderState)
+        {
+            renderAttribute(sb, "xml:lang", renderState.lang);
+            renderAttribute(sb, "xmlns", "http://www.w3.org/1999/xhtml");
+
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/ImageTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/ImageTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,97 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Render the HTML &lt;img> element.  In HTML 4.01, the start tag is required and end tag forbidden.
+ * The attributes src and alt are both required.
+ */
+abstract public class ImageTag extends TagHtmlBase implements HtmlConstants
+{
+    // @todo: need to remove onmouseover and onmouseout
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(IMAGE_TAG, new HtmlRendering());
+        xhtml.put(IMAGE_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String src;
+        public String onmouseover;
+        public String onmouseout;
+
+        public void clear()
+        {
+            super.clear();
+
+            src = null;
+            onmouseover = null;
+            onmouseout = null;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of ImageTag.State";
+
+        State state = (State) renderState;
+
+        renderTag(sb, IMAGE);
+        renderAttribute(sb, SRC, state.src);
+        renderAttribute(sb, ID, state.id);
+
+        renderAttribute(sb, STYLE, state.style);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        renderAttribute(sb, ONMOUSEOUT, state.onmouseout);
+        renderAttribute(sb, ONMOUSEOVER, state.onmouseover);
+
+        writeEnd(sb);
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+    }
+
+    abstract protected void writeEnd(StringBuilder sb);
+
+    private static class HtmlRendering extends ImageTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(">");
+        }
+    }
+
+    private static class XhtmlRendering extends ImageTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(" />");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputBooleanTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputBooleanTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,135 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Render and HTML &lt;input> element of either type checkbox or radio.  In HTML 4.01 the start
+ * tag is required and the end tag is forbidden.  There are no required attributes.
+ */
+abstract public class InputBooleanTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(INPUT_BOOLEAN_TAG, new HtmlRendering());
+        xhtml.put(INPUT_BOOLEAN_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String type;
+        public boolean disabled;
+        public boolean checked;
+        public String name;
+        public String value;
+
+        public void clear()
+        {
+            super.clear();
+
+            type = null;
+            disabled = false;
+            checked = false;
+            name = null;
+            value = null;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of InputBooleanTag.State";
+
+        State state = (State) renderState;
+
+        // Generate an HTML input element
+        // Create an appropriate "input" element based on our parameters
+        renderTag(sb, INPUT);
+        renderAttribute(sb, TYPE, state.type);
+        renderAttribute(sb, NAME, state.name);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderAttribute(sb, VALUE, state.value);
+        renderDisabled(sb, state.disabled);
+        renderChecked(sb, state.checked);
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        writeEnd(sb);
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+    }
+
+    abstract protected void writeEnd(StringBuilder sb);
+
+    abstract protected void renderDisabled(StringBuilder sb, boolean disabled);
+
+    abstract protected void renderChecked(StringBuilder sb, boolean checked);
+
+
+    private static class HtmlRendering extends InputBooleanTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(">");
+        }
+
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                sb.append(" " + DISABLED);
+
+        }
+
+        protected void renderChecked(StringBuilder sb, boolean checked)
+        {
+            if (checked)
+                sb.append(" " + CHECKED);
+
+        }
+
+    }
+
+    private static class XhtmlRendering extends InputBooleanTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(" />");
+        }
+
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                renderAttribute(sb, DISABLED, DISABLED);
+        }
+
+        protected void renderChecked(StringBuilder sb, boolean checked)
+        {
+            if (checked)
+                renderAttribute(sb, CHECKED, CHECKED);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputFileTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputFileTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,111 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: required, End tag: forbidden
+ * Required href
+ */
+abstract public class InputFileTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(INPUT_FILE_TAG, new HtmlRendering());
+        xhtml.put(INPUT_FILE_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String name;
+        public boolean readonly;
+
+        public void clear()
+        {
+            super.clear();
+
+            name = null;
+            readonly = false;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of InputFileTag.State";
+
+        State state = (State) renderState;
+
+        // Generate an HTML element
+        renderTag(sb, INPUT);
+        renderAttribute(sb, TYPE, INPUT_FILE);
+        renderAttribute(sb, NAME, state.name);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderReadOnly(sb, state.readonly);
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        writeEnd(sb);
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+    }
+
+    abstract protected void writeEnd(StringBuilder sb);
+
+    abstract protected void renderReadOnly(StringBuilder sb, boolean readonly);
+
+
+    private static class HtmlRendering extends InputFileTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(">");
+        }
+
+        protected void renderReadOnly(StringBuilder sb, boolean readonly)
+        {
+            if (readonly)
+                sb.append(" readonly");
+
+        }
+    }
+
+    private static class XhtmlRendering extends InputFileTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(" />");
+        }
+
+        protected void renderReadOnly(StringBuilder sb, boolean readonly)
+        {
+            if (readonly)
+                renderAttribute(sb, "readonly", "readonly");
+
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputHiddenTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputHiddenTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,94 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: required, End tag: forbidden
+ * Required href
+ */
+abstract public class InputHiddenTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(INPUT_HIDDEN_TAG, new HtmlRendering());
+        xhtml.put(INPUT_HIDDEN_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String name;
+        public String value;
+
+        public void clear()
+        {
+            super.clear();
+
+            name = null;
+            value = null;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of InputHiddenTag.State";
+
+        State state = (State) renderState;
+
+        // Generate an HTML element
+        renderTag(sb, INPUT);
+        renderAttribute(sb, TYPE, INPUT_HIDDEN);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, NAME, state.name);
+        renderAttribute(sb, VALUE, state.value);
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        writeEnd(sb);
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+    }
+
+    abstract protected void writeEnd(StringBuilder sb);
+
+
+    private static class HtmlRendering extends InputHiddenTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(">");
+        }
+    }
+
+    private static class XhtmlRendering extends InputHiddenTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(" />");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputImageTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputImageTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,116 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: required, End tag: forbidden
+ * Required href
+ */
+abstract public class InputImageTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(INPUT_IMAGE_TAG, new HtmlRendering());
+        xhtml.put(INPUT_IMAGE_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String src;
+        public String value;
+        public boolean disabled;
+
+        public void clear()
+        {
+            super.clear();
+            src = null;
+            value = null;
+            disabled = false;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of InputImageTag.State";
+
+        State state = (State) renderState;
+
+        // Generate an HTML element
+        renderTag(sb, INPUT);
+        renderAttribute(sb, TYPE, INPUT_IMAGE);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderAttribute(sb, SRC, state.src);
+        renderAttribute(sb, VALUE, state.value);
+
+        renderDisabled(sb, state.disabled);
+
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+
+        writeEnd(sb);
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+    }
+
+    abstract protected void writeEnd(StringBuilder sb);
+
+    abstract protected void renderDisabled(StringBuilder sb, boolean disabled);
+
+
+    private static class HtmlRendering extends InputImageTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(">");
+        }
+
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                sb.append(" disabled");
+
+        }
+
+    }
+
+    private static class XhtmlRendering extends InputImageTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(" />");
+        }
+
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                renderAttribute(sb, "disabled", "disabled");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputSubmitTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputSubmitTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,119 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: required, End tag: forbidden
+ * Required href
+ */
+abstract public class InputSubmitTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(INPUT_SUBMIT_TAG, new HtmlRendering());
+        xhtml.put(INPUT_SUBMIT_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String type;
+        public boolean disabled;
+        public String name;
+        public String value;
+
+        public void clear()
+        {
+            super.clear();
+
+            type = null;
+            disabled = false;
+            name = null;
+            value = null;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of InputSubmitTag.State";
+
+        State state = (State) renderState;
+
+        // Generate an HTML element
+        renderTag(sb, INPUT);
+        if (state.type == null)
+            state.type = INPUT_SUBMIT;
+        renderAttribute(sb, TYPE, state.type);
+        renderAttribute(sb, NAME, state.name);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderAttribute(sb, VALUE, state.value);
+
+        renderDisabled(sb, state.disabled);
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        writeEnd(sb);
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+    }
+
+    abstract protected void writeEnd(StringBuilder sb);
+
+    abstract protected void renderDisabled(StringBuilder sb, boolean disabled);
+
+
+    private static class HtmlRendering extends InputSubmitTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(">");
+        }
+
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                sb.append(" disabled");
+
+        }
+
+    }
+
+    private static class XhtmlRendering extends InputSubmitTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(" />");
+        }
+
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                renderAttribute(sb, "disabled", "disabled");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputTextTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/InputTextTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,144 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: required, End tag: forbidden
+ * Required href
+ */
+abstract public class InputTextTag extends TagHtmlBase
+        implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(INPUT_TEXT_TAG, new HtmlRendering());
+        xhtml.put(INPUT_TEXT_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String type;
+        public boolean disabled;
+        public int maxlength;
+        public int size;
+        public String value;
+        public boolean readonly;
+
+        public String name;
+
+        public void clear()
+        {
+            super.clear();
+
+            type = null;
+            disabled = false;
+            maxlength = 0;
+            size = 0;
+            value = null;
+            readonly = false;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of AnchorTag.State";
+
+        State state = (State) renderState;
+
+        // Generate an HTML element
+        renderTag(sb, INPUT);
+        if (state.type == null)
+            state.type = INPUT_TEXT;
+
+        renderAttribute(sb, TYPE, state.type);
+        renderAttribute(sb, NAME, state.name);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderAttribute(sb, VALUE, state.value);
+
+        if (state.maxlength > 0)
+            renderAttribute(sb, MAXLENGTH, Integer.toString(state.maxlength));
+        if (state.size > 0)
+            renderAttribute(sb, SIZE, Integer.toString(state.size));
+        renderDisabled(sb, state.disabled);
+        renderReadonly(sb, state.readonly);
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        writeEnd(sb);
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+    }
+
+    abstract protected void writeEnd(StringBuilder sb);
+
+    abstract protected void renderDisabled(StringBuilder sb, boolean disabled);
+
+    abstract protected void renderReadonly(StringBuilder sb, boolean readonly);
+
+
+    private static class HtmlRendering extends InputTextTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(">");
+        }
+
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                sb.append(" disabled");
+        }
+
+        protected void renderReadonly(StringBuilder sb, boolean readonly)
+        {
+            if (readonly)
+                sb.append(" readonly");
+        }
+    }
+
+    private static class XhtmlRendering extends InputTextTag
+    {
+        protected void writeEnd(StringBuilder sb)
+        {
+            sb.append(" />");
+        }
+
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                renderAttribute(sb, "disabled", "disabled");
+        }
+
+        protected void renderReadonly(StringBuilder sb, boolean readonly)
+        {
+            if (readonly)
+                renderAttribute(sb, "readonly", "readonly");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/LabelTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/LabelTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,76 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Render the HTML &lt;label> element.  In HTML 4.01 the start and end tags are required.
+ */
+public abstract class LabelTag extends TagHtmlBase
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(LABEL_TAG, new Rendering());
+        xhtml.put(LABEL_TAG, new Rendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String forAttr;
+        public String richDataSource;
+
+        public void clear()
+        {
+            super.clear();
+            forAttr = null;
+            richDataSource = null;
+        }
+    }
+
+    private static class Rendering extends LabelTag implements HtmlConstants
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of LabelTag.State";
+
+            State state = (State) renderState;
+
+
+            renderTag(sb, LABEL);
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, FOR, state.forAttr);
+            renderAttribute(sb, CLASS, state.styleClass);
+
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, LABEL);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/OptionTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/OptionTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: optional, End tag: optional
+ * Required href
+ */
+public abstract class OptionTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(OPTION_TAG, new HtmlRendering());
+        xhtml.put(OPTION_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String value;
+        public boolean disabled;
+        public boolean selected;
+
+        public void clear()
+        {
+            super.clear();
+
+            value = null;
+            disabled = false;
+            selected = false;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of OptionTag.State";
+
+        State state = (State) renderState;
+
+        renderTag(sb, OPTION);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderAttribute(sb, VALUE, state.value);
+        renderDisabled(sb, state.disabled);
+        renderSelected(sb, state.selected);
+
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        sb.append(">");
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+        renderEndTag(sb, OPTION);
+    }
+
+    abstract protected void renderDisabled(StringBuilder sb, boolean disabled);
+
+    abstract protected void renderSelected(StringBuilder sb, boolean selected);
+
+
+    private static class HtmlRendering extends OptionTag
+    {
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                sb.append(" disabled");
+        }
+
+        protected void renderSelected(StringBuilder sb, boolean selected)
+        {
+            if (selected)
+                sb.append(" selected");
+        }
+    }
+
+    private static class XhtmlRendering extends OptionTag
+    {
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                renderAttribute(sb, "disabled", "disabled");
+        }
+
+        protected void renderSelected(StringBuilder sb, boolean selected)
+        {
+            if (selected)
+                renderAttribute(sb, "selected", "selected");
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/SelectTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/SelectTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: optional, End tag: optional
+ * Required href
+ */
+public abstract class SelectTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(SELECT_TAG, new HtmlRendering());
+        xhtml.put(SELECT_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public String name;
+        public boolean disabled;
+        public boolean multiple;
+        public int size;
+
+        public void clear()
+        {
+            super.clear();
+            name = null;
+            disabled = false;
+            multiple = false;
+            size = 0;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of SelectTag.State";
+
+        State state = (State) renderState;
+
+        renderTag(sb, SELECT);
+        renderAttribute(sb, NAME, state.name);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, CLASS, state.styleClass);
+        renderMultiple(sb, state.multiple);
+        renderDisabled(sb, state.disabled);
+        if (state.size > 0)
+            renderAttribute(sb, SIZE, Integer.toString(state.size));
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        sb.append(">");
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+        renderEndTag(sb, SELECT);
+    }
+
+    abstract protected void renderDisabled(StringBuilder sb, boolean disabled);
+
+    abstract protected void renderMultiple(StringBuilder sb, boolean readonly);
+
+
+    private static class HtmlRendering extends SelectTag
+    {
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                sb.append(" disabled");
+
+        }
+
+        protected void renderMultiple(StringBuilder sb, boolean multiple)
+        {
+            if (multiple)
+                sb.append(" multiple");
+
+        }
+    }
+
+    private static class XhtmlRendering extends SelectTag
+    {
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                renderAttribute(sb, "disabled", "disabled");
+
+        }
+
+        protected void renderMultiple(StringBuilder sb, boolean multiple)
+        {
+            if (multiple)
+                renderAttribute(sb, "multiple", "multiple");
+
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/SpanTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/SpanTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,70 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: optional, End tag: optional
+ * Required href
+ */
+public abstract class SpanTag extends TagHtmlBase
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(SPAN_TAG, new Rendering());
+        xhtml.put(SPAN_TAG, new Rendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public void clear()
+        {
+            super.clear();
+        }
+    }
+
+    private static class Rendering extends SpanTag implements HtmlConstants
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of SpanTag.State";
+
+            State state = (State) renderState;
+
+            renderTag(sb, SPAN);
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, CLASS, state.styleClass);
+
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, SPAN);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TableTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TableTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: optional, End tag: optional
+ * Required href
+ */
+public abstract class TableTag extends TagHtmlBase
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(TABLE_TAG, new Rendering());
+        xhtml.put(TABLE_TAG, new Rendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public void clear()
+        {
+            super.clear();
+        }
+    }
+
+    private static class Rendering extends TableTag implements HtmlConstants
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of TableTag.State";
+
+            State state = (State) renderState;
+
+            renderTag(sb, TABLE);
+
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, CLASS, state.styleClass);
+
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, TABLE);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TagHtmlBase.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TagHtmlBase.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import java.util.HashMap;
+
+abstract public class TagHtmlBase extends TagRenderingBase
+{
+    /**
+     * Render all of the attributes defined in a map and return the string value.  The attributes
+     * are rendered with in a name="value" style supported by XML.
+     * @param type an integer key indentifying the map
+     */
+    protected void renderAttributes(int type, StringBuilder sb, AbstractAttributeState state)
+    {
+        HashMap map = null;
+        switch (type) {
+        case AbstractHtmlState.ATTR_JAVASCRIPT:
+            assert(state instanceof AbstractHtmlState) : "ATTR_JAVASCRIPT requires a AbstractHtmlState instance";
+            AbstractHtmlState htmlState = (AbstractHtmlState) state;
+            map = htmlState.getEventMap();
+            break;
+        default:
+            super.renderAttributes(type, sb, state);
+            return;
+        }
+        renderGeneral(map, sb);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TagRenderingBase.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TagRenderingBase.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,325 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.Html;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.ServletRequest;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ *
+ */
+public abstract class TagRenderingBase
+{
+    private static final Logger logger = Logger.getInstance(TagRenderingBase.class);
+
+    /**
+     * Unknown Rendering
+     */
+    public static final int UNKNOWN_RENDERING = 0;
+
+    /**
+     * Identifier for HTML 4.01 Rendering
+     */
+    public static final int HTML_RENDERING = 1;
+
+    /**
+     * Identifier for XHTML Transitional Rendering
+     */
+    public static final int XHTML_RENDERING = 2;
+
+    //////////////////////////////////// Supported Rendering Constants  ////////////////////////////
+    // @todo: Lets put this stuff into the request and then lookup the renderers based upon position
+
+    /**
+     * Token identifying the Anchor Renderer &lt;a>
+     */
+    public static final Object ANCHOR_TAG = new Object();
+
+    /**
+     * Token indentifying the Base Renderer &lt;base>
+     */
+    public static final Object BASE_TAG = new Object();
+    public static final Object BODY_TAG = new Object();
+    public static final Object BR_TAG = new Object();
+    public static final Object CAPTION_TAG = new Object();
+    public static final Object FORM_TAG = new Object();
+    public static final Object IMAGE_TAG = new Object();
+    public static final Object INPUT_BOOLEAN_TAG = new Object();
+    public static final Object INPUT_FILE_TAG = new Object();
+    public static final Object INPUT_HIDDEN_TAG = new Object();
+    public static final Object INPUT_IMAGE_TAG = new Object();
+    public static final Object INPUT_SUBMIT_TAG = new Object();
+    public static final Object INPUT_TEXT_TAG = new Object();
+    public static final Object HTML_TAG = new Object();
+    public static final Object LABEL_TAG = new Object();
+    public static final Object OPTION_TAG = new Object();
+    public static final Object SELECT_TAG = new Object();
+    public static final Object SPAN_TAG = new Object();
+    public static final Object DIV_TAG = new Object();
+    public static final Object TABLE_TAG = new Object();
+    public static final Object TD_TAG = new Object();
+    public static final Object TEXT_AREA_TAG = new Object();
+    public static final Object TR_TAG = new Object();
+
+    //////////////////////////////////// Abstract Methods  ////////////////////////////
+
+    /**
+     * Render the start tag for an element.  The element will render the tag and all of it's
+     * attributes into a StringBuffer.
+     * @param sb          A StringBuffer where the element start tag is appended.
+     * @param renderState The state assocated with the element.
+     */
+    abstract public void doStartTag(StringBuilder sb, AbstractTagState renderState);
+
+    /**
+     * Render the end tag for an element. The end tag will be rendered if the tag requires an end tag.
+     * @param sb A StringBuffer where the element end tag may be appended.
+     */
+    abstract public void doEndTag(StringBuilder sb);
+
+    /**
+     * @param buf
+     * @param name
+     */
+    protected final void renderTag(StringBuilder buf, String name)
+    {
+        assert (buf != null) : "Parameter 'buf' must not be null.";
+        assert (name != null) : "Parameter 'name' must not be null";
+
+        buf.append("<");
+        buf.append(name);
+    }
+
+    /**
+     * @param buf
+     * @param name
+     */
+    protected final void renderEndTag(StringBuilder buf, String name)
+    {
+        buf.append("</");
+        buf.append(name);
+        buf.append(">");
+    }
+
+    /**
+     * This method will append an attribute value to a StringBuffer.
+     * The method assumes that the attr is not <code>null</code>.  If the
+     * <code>value</code> attribute is <code>null</code> the attribute will not be appended to the
+     * <code>StringBuffer</code>.
+     * @param buf   The StringBuffer to append the attribute into.
+     * @param name  The name of the attribute
+     * @param value The value of teh attribute.  If this is <code>null</code> the attribute will not be written.
+     */
+    protected final void renderAttribute(StringBuilder buf, String name, String value)
+    {
+        assert (buf != null) : "Parameter 'buf' must not be null.";
+        assert (name != null) : "Parameter 'name' must not be null";
+
+        // without a value lets skip writting this out
+        if (value == null)
+            return;
+
+        buf.append(" ");
+        buf.append(name);
+        buf.append("=\"");
+        buf.append(value);
+        buf.append("\"");
+    }
+
+    /**
+     * @param buf
+     * @param name
+     * @param value
+     */
+    protected final void renderAttributeSingleQuotes(StringBuilder buf, String name, String value)
+    {
+        assert (buf != null) : "Parameter 'buf' must not be null.";
+        assert (name != null) : "Parameter 'name' must not be null";
+
+        // without a value lets skip writting this out
+        if (value == null)
+            return;
+
+        buf.append(" ");
+        buf.append(name);
+        buf.append("='");
+        buf.append(value);
+        buf.append("'");
+    }
+
+    /**
+     * Render all of the attributes defined in a map and return the string value.  The attributes
+     * are rendered with in a name="value" style supported by XML.
+     * @param type an integer key indentifying the map
+     */
+    protected void renderAttributes(int type, StringBuilder sb, AbstractAttributeState state)
+    {
+        HashMap map = null;
+        switch (type) {
+        case AbstractAttributeState.ATTR_GENERAL:
+            map = state.getGeneralAttributeMap();
+            break;
+        default:
+            String s = Bundle.getString("Tags_ParameterRenderError",
+                    new Object[]{new Integer(type)});
+            logger.error(s);
+            throw new IllegalStateException(s);
+        }
+        renderGeneral(map, sb);
+    }
+
+
+    /**
+     * This method will render all of the general attributes.
+     */
+    protected void renderGeneral(HashMap map, StringBuilder sb)
+    {
+        if (map == null)
+            return;
+
+        Iterator iterator = map.keySet().iterator();
+        for (; iterator.hasNext();) {
+            String key = (String) iterator.next();
+            if (key == null)
+                continue;
+
+            String value = (String) map.get(key);
+            renderAttribute(sb, key, value);
+        }
+    }
+
+
+    /**
+     * This is the factory for obtaining a Tag Rendering object.  The factory supports to types
+     * of renderings HTML 4.01 and XHTML.  The factory is responsible for creating the rendering objects and
+     * passing them out.  The target encoding may be specified on a page by page basis within a WebApp.  The
+     * <code>getRendering</code> method will return a <code>TagRenderingBase</code> object.  This object is always
+     * a stateless object.  The state needed to render the tag will be passed into the tag.
+     */
+    public static class Factory
+    {
+        private static HashMap _xhtml;      // The XHTML TagRenderingBase objects
+        private static HashMap _html;       // The HTML TagRenderingBase objects
+
+        private static ConstantRendering _xhtmlConstants;
+        private static ConstantRendering _htmlConstants;
+
+
+        // create the HashMaps and their static renderings.
+        static
+        {
+            _xhtml = new HashMap(37);
+            _html = new HashMap(37);
+
+            // build the supported renderers.
+            AnchorTag.add(_html, _xhtml);
+            BaseTag.add(_html, _xhtml);
+            BodyTag.add(_html, _xhtml);
+            CaptionTag.add(_html, _xhtml);
+            DivTag.add(_html, _xhtml);
+            FormTag.add(_html, _xhtml);
+            ImageTag.add(_html, _xhtml);
+            InputBooleanTag.add(_html, _xhtml);
+            InputFileTag.add(_html, _xhtml);
+            InputHiddenTag.add(_html, _xhtml);
+            InputImageTag.add(_html, _xhtml);
+            InputSubmitTag.add(_html, _xhtml);
+            InputTextTag.add(_html, _xhtml);
+            HtmlTag.add(_html, _xhtml);
+            LabelTag.add(_html, _xhtml);
+            OptionTag.add(_html, _xhtml);
+            SelectTag.add(_html, _xhtml);
+            SpanTag.add(_html, _xhtml);
+            TableTag.add(_html, _xhtml);
+            TdTag.add(_html, _xhtml);
+            TextAreaTag.add(_html, _xhtml);
+            TrTag.add(_html, _xhtml);
+        }
+
+        /**
+         * Factory method for getting a TagRenderingBase for a tag.  The default rendering is HTML 4.01.
+         * @param token The type of TagRenderingBase to retrieve.
+         * @param req   The <code>ServletRequest</code> used to see what type of rendering is being done.
+         * @return A <code>TagRenderingBase</code>
+         */
+        public static TagRenderingBase getRendering(Object token, ServletRequest req)
+        {
+            Html html = (Html) req.getAttribute(Html.HTML_TAG_ID);
+
+            // the default is html 4.0
+            int renderingType = HTML_RENDERING;
+            if (html != null) {
+                renderingType = html.getTargetDocumentType();
+            }
+
+            // pick the map of renderers
+            HashMap h = (renderingType == HTML_RENDERING) ? _html : _xhtml;
+
+            // return the renderer
+            Object o = h.get(token);
+            assert(o != null) : "Renderer was not found for [" + token + "] rendering:" + renderingType;
+            return (TagRenderingBase) o;
+        }
+
+        /**
+         * @param req
+         * @return
+         */
+        public static ConstantRendering getConstantRendering(ServletRequest req)
+        {
+            Html html = (Html) req.getAttribute(Html.HTML_TAG_ID);
+
+            if (_htmlConstants == null) {
+                _htmlConstants = ConstantRendering.getRendering(HTML_RENDERING);
+                _xhtmlConstants = ConstantRendering.getRendering(XHTML_RENDERING);
+            }
+
+            // the default is html 4.0
+            int renderingType = HTML_RENDERING;
+            if (html != null) {
+                renderingType = html.getTargetDocumentType();
+            }
+            return (renderingType == HTML_RENDERING) ? _htmlConstants : _xhtmlConstants;
+
+        }
+    }
+
+    /**
+     * @param req
+     * @return
+     */
+    public static String getAmp(ServletRequest req)
+    {
+        Html html = (Html) req.getAttribute(Html.HTML_TAG_ID);
+
+        // the default is html 4.0
+        int renderingType = HTML_RENDERING;
+        if (html != null) {
+            renderingType = html.getTargetDocumentType();
+        }
+
+        // pick the map of renderers
+        return (renderingType == HTML_RENDERING) ? "&" : "&amp;";
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TdTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TdTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: optional, End tag: optional
+ * Required href
+ */
+public abstract class TdTag extends TagHtmlBase
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(TD_TAG, new Rendering());
+        xhtml.put(TD_TAG, new Rendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public void clear()
+        {
+            super.clear();
+        }
+    }
+
+    private static class Rendering extends TdTag implements HtmlConstants
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of TdTag.State";
+
+            State state = (State) renderState;
+
+            renderTag(sb, TD);
+
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, CLASS, state.styleClass);
+
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, TD);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TextAreaTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TextAreaTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,123 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: optional, End tag: optional
+ * Required href
+ */
+public abstract class TextAreaTag extends TagHtmlBase implements HtmlConstants
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(TEXT_AREA_TAG, new HtmlRendering());
+        xhtml.put(TEXT_AREA_TAG, new XhtmlRendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public int rows;
+        public int cols;
+        public boolean readonly;
+        public boolean disabled;
+        public String name;
+
+        public void clear()
+        {
+            super.clear();
+            rows = 0;
+            cols = 0;
+            readonly = false;
+            disabled = false;
+            name = null;
+        }
+    }
+
+    public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+    {
+        assert(sb != null) : "Parameter 'sb' must not be null";
+        assert(renderState != null) : "Parameter 'renderState' must not be null";
+        assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of TextAreaTag.State";
+
+        State state = (State) renderState;
+
+        renderTag(sb, TEXTAREA);
+        renderAttribute(sb, NAME, state.name);
+        renderAttribute(sb, ID, state.id);
+        renderAttribute(sb, CLASS, state.styleClass);
+
+        renderReadonly(sb, state.readonly);
+        renderDisabled(sb, state.disabled);
+
+        if (state.rows > 0)
+            renderAttribute(sb, ROWS, Integer.toString(state.rows));
+        if (state.cols > 0)
+            renderAttribute(sb, COLS, Integer.toString(state.cols));
+
+        renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+        renderAttribute(sb, STYLE, state.style);
+        renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+        sb.append(">");
+    }
+
+    public void doEndTag(StringBuilder sb)
+    {
+        renderEndTag(sb, TEXTAREA);
+    }
+
+    abstract protected void renderDisabled(StringBuilder sb, boolean disabled);
+
+    abstract protected void renderReadonly(StringBuilder sb, boolean readonly);
+
+
+    private static class HtmlRendering extends TextAreaTag
+    {
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                sb.append(" disabled");
+        }
+
+        protected void renderReadonly(StringBuilder sb, boolean readonly)
+        {
+            if (readonly)
+                sb.append(" readonly");
+        }
+    }
+
+    private static class XhtmlRendering extends TextAreaTag
+    {
+        protected void renderDisabled(StringBuilder sb, boolean disabled)
+        {
+            if (disabled)
+                renderAttribute(sb, "disabled", "disabled");
+        }
+
+        protected void renderReadonly(StringBuilder sb, boolean readonly)
+        {
+            if (readonly)
+                renderAttribute(sb, "readonly", "readonly");
+        }
+    }
+}
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TrTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/TrTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.rendering;
+
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+
+import java.util.HashMap;
+
+/**
+ * Body, Start Tag: optional, End tag: optional
+ * Required href
+ */
+public abstract class TrTag extends TagHtmlBase
+{
+    public static void add(HashMap html, HashMap xhtml)
+    {
+        html.put(TR_TAG, new Rendering());
+        xhtml.put(TR_TAG, new Rendering());
+    }
+
+    public static class State extends AbstractHtmlState
+    {
+        public void clear()
+        {
+            super.clear();
+        }
+    }
+
+    private static class Rendering extends TrTag implements HtmlConstants
+    {
+        public void doStartTag(StringBuilder sb, AbstractTagState renderState)
+        {
+            assert(sb != null) : "Parameter 'sb' must not be null";
+            assert(renderState != null) : "Parameter 'renderState' must not be null";
+            assert(renderState instanceof State) : "Paramater 'renderState' must be an instance of TdTag.State";
+
+            State state = (State) renderState;
+
+            renderTag(sb, TR);
+
+            renderAttribute(sb, ID, state.id);
+            renderAttribute(sb, CLASS, state.styleClass);
+
+            renderAttributes(AbstractHtmlState.ATTR_GENERAL, sb, state);
+            renderAttribute(sb, STYLE, state.style);
+            renderAttributes(AbstractHtmlState.ATTR_JAVASCRIPT, sb, state);
+            sb.append(">");
+        }
+
+        public void doEndTag(StringBuilder sb)
+        {
+            renderEndTag(sb, TR);
+        }
+    }
+}
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/AttributeRenderer.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/AttributeRenderer.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,397 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.AnchorTag;
+import org.apache.beehive.netui.tags.rendering.DivTag;
+import org.apache.beehive.netui.tags.rendering.ImageTag;
+
+import java.util.ArrayList;
+
+class AttributeRenderer
+{
+    private static final ArrayList empty = new ArrayList();
+    private static final RemoveInfo emptyRemoves = new RemoveInfo();
+    private ArrayList[] _lists;
+    private RemoveInfo _removes;
+
+    /**
+     * Create the attribute renderer.  This will create Empty lists for each of the types of
+     * attributes supported.  These empty lists will be replaced once an attribute is added to them.
+     */
+    public AttributeRenderer()
+    {
+        _lists = new ArrayList[TreeHtmlAttributeInfo.HTML_LOCATION_CNT];
+        for (int i = 0; i < _lists.length; i++) {
+            _lists[i] = empty;
+        }
+    }
+
+    /**
+     * Add all of the attributes associated with an element to the internal lists.
+     * @param elem
+     * @return
+     */
+    public RemoveInfo addElement(TreeElement elem)
+    {
+        // if the attributes are empty then there is nothing to add to lists
+        ArrayList attrs = elem.getAttributeList();
+        if (attrs == null || attrs.size() == 0)
+            return emptyRemoves;
+
+        // We will track all of the elements that we are removing from the current inheritence
+        // list set and return those back to the caller to stash away on the stack.
+        RemoveInfo removes = _removes;
+        if (removes == null)
+            removes = new RemoveInfo();
+
+        // walk all of the attributes
+        int cnt = attrs.size();
+        assert (cnt > 0);
+        for (int i = 0; i < cnt; i++) {
+            TreeHtmlAttributeInfo attr = (TreeHtmlAttributeInfo) attrs.get(i);
+            if (attr.isOnDiv()) {
+                addAttribute(TreeHtmlAttributeInfo.HTML_LOCATION_DIV, attr, removes);
+            }
+            if (attr.isOnIcon()) {
+                addAttribute(TreeHtmlAttributeInfo.HTML_LOCATION_ICON, attr, removes);
+            }
+            if (attr.isOnIconLink()) {
+                addAttribute(TreeHtmlAttributeInfo.HTML_LOCATION_ICON_LINK, attr, removes);
+            }
+            if (attr.isOnLabelLink()) {
+                addAttribute(TreeHtmlAttributeInfo.HTML_LOCATION_LABEL_LINK, attr, removes);
+            }
+        }
+
+        // if we didn't remove anything then we should simply stash the array list away for next time
+        // and return null.
+        if (removes.removes.size() == 0) {
+            _removes = removes;
+            removes = null;
+        }
+        else {
+            _removes = null;
+        }
+
+        return removes;
+    }
+
+    /**
+     * This method will remove all of the elements scoped to the attribute.
+     * @param elem
+     */
+    public void removeElementScoped(TreeElement elem, RemoveInfo removes)
+    {
+        assert(elem != null);
+
+        // check to see if we can exist without processing this element.  If the element
+        // didn't define any attribute then we can.  This is inforced in the addElement method.
+        ArrayList attrs = elem.getAttributeList();
+        if (attrs == null || attrs.size() == 0)
+            return;
+
+        // walk all of the lists and each list looking for attributes that
+        // are scoped only to the element
+        for (int i = 0; i < _lists.length; i++) {
+            ArrayList al = _lists[i];
+            assert(al != null);
+
+            int cnt = al.size();
+            for (int j = 0; j < cnt; j++) {
+                TreeHtmlAttributeInfo attr = (TreeHtmlAttributeInfo) al.get(j);
+                assert(attr != null);
+                // Remove all of the attributes not scoped to the element itself.  We need to
+                // update the indexes because this removes the current item..
+                if (!attr.isApplyToDescendents()) {
+                    al.remove(j);
+                    cnt--;
+                    j--;
+                    if (removes != null && removes.scopeOverrides) {
+                        TreeHtmlAttributeInfo addBack = checkScopeRemoval(i, attr, removes);
+                        if (addBack != null) {
+                            if (!al.contains(addBack))
+                                al.add(addBack);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public void removeElement(TreeElement elem, RemoveInfo removes)
+    {
+        // walk all of the attributes associated with the element, for any that are passed
+        // on to their decendents we will remove.  This will be done for each type of element
+        // being removed.
+        ArrayList attrs = elem.getAttributeList();
+        if (attrs != null) {
+            int cnt = attrs.size();
+            for (int i = 0; i < cnt; i++) {
+                TreeHtmlAttributeInfo attr = (TreeHtmlAttributeInfo) attrs.get(i);
+
+                // if the attribute is being passed on to the decendents then we need to output
+                // that attribute.
+                if (attr.isApplyToDescendents()) {
+                    if (attr.isOnDiv()) {
+                        removeAttribute(TreeHtmlAttributeInfo.HTML_LOCATION_DIV, attr, removes);
+                    }
+                    if (attr.isOnIcon()) {
+                        removeAttribute(TreeHtmlAttributeInfo.HTML_LOCATION_ICON, attr, removes);
+                    }
+                    if (attr.isOnIconLink()) {
+                        removeAttribute(TreeHtmlAttributeInfo.HTML_LOCATION_ICON_LINK, attr, removes);
+                    }
+                    if (attr.isOnLabelLink()) {
+                        removeAttribute(TreeHtmlAttributeInfo.HTML_LOCATION_LABEL_LINK, attr, removes);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * This method will render the values assocated with the Icon Image.
+     * @param state
+     * @param elem
+     */
+    public void renderIconImage(ImageTag.State state, TreeElement elem)
+    {
+        ArrayList al = _lists[TreeHtmlAttributeInfo.HTML_LOCATION_ICON];
+
+        assert(al != null);
+        if (al.size() == 0)
+            return;
+
+        int cnt = al.size();
+        for (int i = 0; i < cnt; i++) {
+            TreeHtmlAttributeInfo attr = (TreeHtmlAttributeInfo) al.get(i);
+            state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, attr.getAttribute(), attr.getValue());
+        }
+    }
+
+    public void renderLabelLink(AnchorTag.State state, TreeElement elem)
+    {
+        ArrayList al = _lists[TreeHtmlAttributeInfo.HTML_LOCATION_LABEL_LINK];
+
+        assert(al != null);
+        if (al.size() == 0)
+            return;
+
+        int cnt = al.size();
+        for (int i = 0; i < cnt; i++) {
+            TreeHtmlAttributeInfo attr = (TreeHtmlAttributeInfo) al.get(i);
+            state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, attr.getAttribute(), attr.getValue());
+        }
+    }
+
+    public void renderIconLink(AnchorTag.State state, TreeElement elem)
+    {
+        ArrayList al = _lists[TreeHtmlAttributeInfo.HTML_LOCATION_ICON_LINK];
+
+        assert(al != null);
+        if (al.size() == 0)
+            return;
+
+        int cnt = al.size();
+        for (int i = 0; i < cnt; i++) {
+            TreeHtmlAttributeInfo attr = (TreeHtmlAttributeInfo) al.get(i);
+            state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, attr.getAttribute(), attr.getValue());
+        }
+    }
+
+    public void renderDiv(DivTag.State state, TreeElement elem)
+    {
+        ArrayList al = _lists[TreeHtmlAttributeInfo.HTML_LOCATION_DIV];
+
+        assert(al != null);
+        if (al.size() == 0)
+            return;
+
+        int cnt = al.size();
+        for (int i = 0; i < cnt; i++) {
+            TreeHtmlAttributeInfo attr = (TreeHtmlAttributeInfo) al.get(i);
+            state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, attr.getAttribute(), attr.getValue());
+        }
+    }
+
+    public String toString()
+    {
+        return "AttributeRender: D:" + _lists[TreeHtmlAttributeInfo.HTML_LOCATION_DIV].size() +
+                " I:" + _lists[TreeHtmlAttributeInfo.HTML_LOCATION_ICON].size() +
+                " IL:" + _lists[TreeHtmlAttributeInfo.HTML_LOCATION_ICON_LINK].size() +
+                " LL:" + _lists[TreeHtmlAttributeInfo.HTML_LOCATION_LABEL_LINK].size();
+    }
+
+    private TreeHtmlAttributeInfo checkScopeRemoval(int list, TreeHtmlAttributeInfo attr, RemoveInfo removes)
+    {
+        int cnt = removes.removes.size();
+        assert(cnt > 0);
+
+        for (int i = 0; i < cnt; i++) {
+            TreeHtmlAttributeInfo a = (TreeHtmlAttributeInfo) removes.removes.get(i);
+            if (a.getAttribute().equals(attr.getAttribute())) {
+                switch (list) {
+                case TreeHtmlAttributeInfo.HTML_LOCATION_DIV:
+                    if (a.isOnDiv())
+                        return a;
+                    break;
+                case TreeHtmlAttributeInfo.HTML_LOCATION_ICON:
+                    if (a.isOnIcon())
+                        return a;
+                    break;
+                case TreeHtmlAttributeInfo.HTML_LOCATION_ICON_LINK:
+                    if (a.isOnIconLink())
+                        return a;
+                    break;
+                case TreeHtmlAttributeInfo.HTML_LOCATION_LABEL_LINK:
+                    if (a.isOnLabelLink())
+                        return a;
+                    break;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * This method will add an attribute to the list of inheritted attributes.
+     * @param list
+     * @param attr
+     * @param removes
+     */
+    private void addAttribute(int list, TreeHtmlAttributeInfo attr, RemoveInfo removes)
+    {
+        ArrayList al = _lists[list];
+        // if the array list is the empty list then we need to allocate a new array list
+        if (al == empty) {
+            al = new ArrayList();
+            _lists[list] = al;
+        }
+
+        // check to see if this attribute is already inside the tree.
+        int cnt = al.size();
+        for (int i = 0; i < cnt; i++) {
+            TreeHtmlAttributeInfo a = (TreeHtmlAttributeInfo) al.get(i);
+            assert(a != null);
+            if (a.getAttribute().equals(attr.getAttribute())) {
+                removes.removes.add(a);
+                if (!attr.isApplyToDescendents()) {
+                    removes.scopeOverrides = true;
+                }
+                al.remove(a);
+                break;
+            }
+        }
+
+        // add this to the list
+        al.add(attr);
+    }
+
+    /**
+     * This method will add an attribute to the list of inheritted attributes.
+     * @param list
+     * @param attr
+     * @param removes
+     */
+    private void removeAttribute(int list, TreeHtmlAttributeInfo attr, RemoveInfo removes)
+    {
+        assert(attr != null);
+
+        // get the correct array list
+        ArrayList al = _lists[list];
+        assert(al != null);
+
+        // remove the attributes from the array list -- this should never fail
+        boolean removed = al.remove(attr);
+        if (!removed) {
+            // @todo: need to remove this...This should become an assert...
+            System.err.println("Unable to remove attribute:" + attr.getAttribute() + "=" + attr.getValue());
+        }
+
+        // if there was a list of removed attributes we need to possibly add one back
+        // We do this by walking the removes list and when we find an attribute with the
+        // same name and supporting the same list type, we add it to the list.
+        if (removes != null) {
+
+            // walk the remove list looking for an attribute with the same name
+            int cnt = removes.removes.size();
+            for (int i = 0; i < cnt; i++) {
+                TreeHtmlAttributeInfo a = (TreeHtmlAttributeInfo) removes.removes.get(i);
+                if (attr.getAttribute().equals(a.getAttribute())) {
+
+                    // based upon the type we are removing, if the matching attribute supports the type
+                    // then we add it back.
+                    switch (list) {
+                    case TreeHtmlAttributeInfo.HTML_LOCATION_DIV:
+                        if (a.isOnDiv() && !al.contains(a))
+                            al.add(a);
+                        break;
+                    case TreeHtmlAttributeInfo.HTML_LOCATION_ICON:
+                        if (a.isOnIcon() && !al.contains(a))
+                            al.add(a);
+                        break;
+                    case TreeHtmlAttributeInfo.HTML_LOCATION_ICON_LINK:
+                        if (a.isOnIconLink() && !al.contains(a))
+                            al.add(a);
+                        break;
+                    case TreeHtmlAttributeInfo.HTML_LOCATION_LABEL_LINK:
+                        if (a.isOnLabelLink() && !al.contains(a)) {
+                            al.add(a);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * @param sb
+     * @param name
+     * @param value
+     */
+    private void writeAttribute(StringBuilder sb, String name, String value)
+    {
+        // @todo: this is duplicated from AbstractBaseTag.  Not sure if that shouldn't become a static
+        // method that could be shared.
+        if (value == null)
+            return;
+        assert(name != null);
+        sb.append(" ");
+        sb.append(name);
+        sb.append("=\"");
+        sb.append(value);
+        sb.append("\"");
+    }
+
+
+    public static class RemoveInfo
+    {
+        ArrayList removes;
+        boolean scopeOverrides;
+
+        public RemoveInfo()
+        {
+            removes = new ArrayList();
+            scopeOverrides = false;
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/InheritableState.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/InheritableState.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,253 @@
+package org.apache.beehive.netui.tags.tree;
+
+
+/**
+ * This is a set of tree properties that are used to render the tree markup.
+ */
+public class InheritableState implements java.io.Serializable
+{
+    /**
+     * The default directory name for icon images.
+     */
+    public static final String DEFAULT_IMAGES = "resources/images";
+
+    /**
+     * The names of tree state images that we need.
+     */
+    private static final String IMAGE_HANDLE_DOWN_LAST = "handledownlast.gif";
+    private static final String IMAGE_HANDLE_DOWN_MIDDLE = "handledownmiddle.gif";
+    private static final String IMAGE_HANDLE_RIGHT_LAST = "handlerightlast.gif";
+    private static final String IMAGE_HANDLE_RIGHT_MIDDLE = "handlerightmiddle.gif";
+    private static final String IMAGE_LINE_LAST = "linelastnode.gif";
+    private static final String IMAGE_LINE_MIDDLE = "linemiddlenode.gif";
+    private static final String IMAGE_LINE_VERTICAL = "linevertical.gif";
+    private static final String IMAGE_SPACER = "spacer.gif";
+    private static final String DEFAULT_ICON = "folder_16_pad.gif";
+
+    // The private state of the state
+    private String _imageHandleDownLast = null;
+    private String _imageHandleDownMiddle = null;
+    private String _imageHandleRightLast = null;
+    private String _imageHandleRightMiddle = null;
+    private String _imageLineLast = null;
+    private String _imageLineMiddle = null;
+    private String _imageLineVertical = null;
+    private String _imageSpacer = null;
+    private String _defaultIcon = null;
+    private String _selectionAction = null;
+    private String _expansionAction = null;
+    private String _expandTarget = null;
+    private String _imageRoot = null;
+
+    // A parent state object which we chain to if the state isn't set on this object.
+    private InheritableState _parent;
+
+
+    public void setParent(InheritableState parent)
+    {
+        _parent = parent;
+    }
+
+    public String getImageHandleDownLast()
+    {
+        if (_imageHandleDownLast != null)
+            return _imageHandleDownLast;
+        if (_parent != null)
+            return _parent.getImageHandleDownLast();
+        return null;
+    }
+
+    public void setImageHandleDownLast(String imageHandleDownLast)
+    {
+        _imageHandleDownLast = imageHandleDownLast;
+    }
+
+    public String getImageHandleDownMiddle()
+    {
+        if (_imageHandleDownMiddle != null)
+            return _imageHandleDownMiddle;
+        if (_parent != null)
+            return _parent.getImageHandleDownMiddle();
+        return null;
+    }
+
+    public void setImageHandleDownMiddle(String imageHandleDownMiddle)
+    {
+        _imageHandleDownMiddle = imageHandleDownMiddle;
+    }
+
+    public String getImageHandleRightLast()
+    {
+        if (_imageHandleRightLast != null)
+            return _imageHandleRightLast;
+        if (_parent != null)
+            return _parent.getImageHandleRightLast();
+        return null;
+    }
+
+    public void setImageHandleRightLast(String imageHandleRightLast)
+    {
+        _imageHandleRightLast = imageHandleRightLast;
+    }
+
+    public String getImageHandleRightMiddle()
+    {
+        if (_imageHandleRightMiddle != null)
+            return _imageHandleRightMiddle;
+        if (_parent != null)
+            return _parent.getImageHandleRightMiddle();
+        return null;
+    }
+
+    public void setImageHandleRightMiddle(String imageHandleRightMiddle)
+    {
+        _imageHandleRightMiddle = imageHandleRightMiddle;
+    }
+
+    public String getImageLineLast()
+    {
+        if (_imageLineLast != null)
+            return _imageLineLast;
+        if (_parent != null)
+            return _parent.getImageLineLast();
+        return null;
+    }
+
+    public void setImageLineLast(String imageLineLast)
+    {
+        _imageLineLast = imageLineLast;
+    }
+
+    public String getImageLineMiddle()
+    {
+        if (_imageLineMiddle != null)
+            return _imageLineMiddle;
+        if (_parent != null)
+            return _parent.getImageLineMiddle();
+        return null;
+    }
+
+    public void setImageLineMiddle(String imageLineMiddle)
+    {
+        _imageLineMiddle = imageLineMiddle;
+    }
+
+    public String getImageLineVertical()
+    {
+        if (_imageLineVertical != null)
+            return _imageLineVertical;
+        if (_parent != null)
+            return _parent.getImageLineVertical();
+        return null;
+    }
+
+    public void setImageLineVertical(String imageLineVertical)
+    {
+        _imageLineVertical = imageLineVertical;
+    }
+
+    public String getImageSpacer()
+    {
+        if (_imageSpacer != null)
+            return _imageSpacer;
+        if (_parent != null)
+            return _parent.getImageSpacer();
+        return null;
+    }
+
+    public void setImageSpacer(String imageSpacer)
+    {
+        _imageSpacer = imageSpacer;
+    }
+
+    public String getDefaultIcon()
+    {
+        if (_defaultIcon != null)
+            return _defaultIcon;
+        if (_parent != null)
+            return _parent.getDefaultIcon();
+        return null;
+    }
+
+    public void setDefaultIcon(String defaultIcon)
+    {
+        _defaultIcon = defaultIcon;
+    }
+
+    public String getSelectionAction()
+    {
+        if (_selectionAction != null)
+            return _selectionAction;
+        if (_parent != null)
+            return _parent.getSelectionAction();
+        return null;
+    }
+
+    public void setSelectionAction(String action)
+    {
+        _selectionAction = action;
+    }
+
+    public String getExpansionAction()
+    {
+        if (_expansionAction != null)
+            return _expansionAction;
+        if (_parent != null)
+            return _parent.getExpansionAction();
+        return null;
+    }
+
+    public void setExpansionAction(String action)
+    {
+        _expansionAction = action;
+    }
+
+    public String getExpandTarget()
+    {
+        if (_expandTarget != null)
+            return _expandTarget;
+        if (_parent != null)
+            return _parent.getExpandTarget();
+        return null;
+    }
+
+    public void setExpandTarget(String target)
+    {
+        _expandTarget = target;
+    }
+
+    public String getImageRoot()
+    {
+        if (_imageRoot != null)
+            return _imageRoot;
+        if (_parent != null)
+            return _parent.getImageRoot();
+        return null;
+    }
+
+    public void setImageRoot(String imageRoot)
+    {
+        _imageRoot = imageRoot;
+    }
+
+    /**
+     * This method initalizes the state of the properties to their default values used by the
+     * tree tag to create the tree markup.
+     */
+    public void initalizeTreeState()
+    {
+        _imageHandleDownLast = IMAGE_HANDLE_DOWN_LAST;
+        _imageHandleDownMiddle = IMAGE_HANDLE_DOWN_MIDDLE;
+        _imageHandleRightLast = IMAGE_HANDLE_RIGHT_LAST;
+        _imageHandleRightMiddle = IMAGE_HANDLE_RIGHT_MIDDLE;
+        _imageLineLast = IMAGE_LINE_LAST;
+        _imageLineMiddle = IMAGE_LINE_MIDDLE;
+        _imageLineVertical = IMAGE_LINE_VERTICAL;
+        _imageSpacer = IMAGE_SPACER;
+        _defaultIcon = DEFAULT_ICON;
+        _imageRoot = null;
+
+        _selectionAction = null;
+        _expansionAction = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1117 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.script.ExpressionUpdateException;
+import org.apache.beehive.netui.script.IllegalExpressionException;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.ScriptReporter;
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+import org.apache.beehive.netui.tags.html.JavaScriptUtils;
+import org.apache.beehive.netui.tags.rendering.*;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.FileUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import java.io.IOException;
+import java.net.URLEncoder;
+
+
+/**
+ * Netui tag that renders a tree control represented by a set of
+ * <code>TreeElement</code> objects.
+ * <p/>
+ * <p/>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th><th>Data Bindable</th></tr>
+ * <p/>
+ * <tr><th rowspan="2">action</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Hyperlink to which expand/contract actions should be sent.</td></tr>
+ * <tr><th rowspan="2">imageHandleDownLast</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The image name for an open non-leaf node with no line below it.</td></tr>
+ * <tr><th rowspan="2">imageHandleDownMiddle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The image name for an open non-leaf node with a line below it.</td></tr>
+ * <tr><th rowspan="2">imageHandleRightLast</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The image name for a closed non-leaf node with no line below it.</td></tr>
+ * <tr><th rowspan="2">imageHandleRightMiddle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The image name for a closed non-leaf node with a line below it.</td></tr>
+ * <tr><th rowspan="2">imageLineLast</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The image name for a blank area of the tree.</td></tr>
+ * <tr><th rowspan="2">imageLineMiddle</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The image name for an area with a line through it.</td></tr>
+ * <tr><th rowspan="2">imageLineVertical</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The image name for an area with a line through it.</td></tr>
+ * <tr><th rowspan="2">imageRoot</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The name of the directory containing the images for our icons, relative to the
+ * page including this tag.</td></tr>
+ * <tr><th rowspan="2">style</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">CSS style <code>class</code> to be applied to be applied to the entire rendered
+ * output of the tree control.</td></tr>
+ * <tr><th rowspan="2">styleSelected</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">CSS style <code>class</code> to be applied to the text of any element that
+ * is currently selected.</td></tr>
+ * <tr><th rowspan="2">styleUnselected</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">CSS style <code>class</code> to be applied to the text of any element
+ * that is not currently selected.</td></tr>
+ * <tr><th rowspan="2">tree</th><td>Yes</td><td>No</td><td>Read/Write</td></tr>
+ * <tr><td colspan="3">Attribute name in the session or expression under which the root TreeElement
+ * of the tree we are rendering is stored.</td></tr>
+ * <p/>
+ * </table></p>
+ * @example In this sample, a Tree in the session named "MyTree" has some CSS styles
+ * associated with it and uses an action called TreeNavigation to handle
+ * node expansion/collapse.
+ * <pre>&lt;netui:tree tree="MyTree" imageRoot="/webapp/images" style="tree"
+ *                     styleSelected="tree-selected" styleUnselected="tree-unselected"
+ *                     action="/webapp/TreeNavigation.do" /></pre>
+ * 
+ * @see org.apache.beehive.netui.tags.tree.TreeElement
+ *
+ * @netui:tag name="richTree" description="Renders a tree control represented by a set of TreeElement objects."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.TreeRenderer" whitespace="indent"
+ * @netui:attribute name="tagId" required="true"
+ */
+public class Tree extends AbstractBaseTag implements HtmlConstants
+{
+    /**
+     * The name of the directory containing the images for our icons,
+     * relative to the page including this tag.
+     */
+    //private String _imageRoot = null;
+    private TreeElement _rootNode = null;
+
+    // The new style and class attributes
+    private String _selectionStyle;      // selection style
+    private String _selectionClass;      // selection class
+    private String _unselectStyle;       // unselect style
+    private String _unselectClass;       // unselect class
+    private String _disabledStyle;        // disabled style
+    private String _disabledClass;        // disabled class
+    private String _treeStyle;           // tree style
+    private String _treeClass;           // tree class
+
+    private String _errorText;           // Text of any error that may have occurred.
+
+    private String _dataSource = null;       // The name of the tree.
+
+    private String _tagId;                   // tag that should uniquely indentify a tree.  Required for multiple tree using auto expand
+    private String[] _expanded = null;
+    private boolean _shouldExit = false;
+    private boolean _runAtClient = false;    // run at client
+
+    private InheritableState _iState = new InheritableState();
+
+    // These are used in a stateless manner.  They do not have to be cleared
+    // in the local release because each state is cleared before it is set to write a start tag.
+    private ImageTag.State _imgState = new ImageTag.State();
+    private AnchorTag.State _anchorState = new AnchorTag.State();
+    private DivTag.State _divState = new DivTag.State();
+    private SpanTag.State _spanState = new SpanTag.State();
+
+    public Tree()
+    {
+        _iState.initalizeTreeState();
+    }
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "RichTree";
+    }
+
+    /**
+     * Sets the action used for expanding and contracting tree nodes.
+     * @param action - the action
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="general" reftype="netui-action-url"
+     */
+    public void setExpansionAction(String action)
+    {
+        _iState.setExpansionAction(action);
+    }
+
+    /**
+     * Sets the action used for expanding and contracting tree nodes.
+     * @param action - the action
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute category="general" reftype="netui-action-url"
+     */
+    public void setSelectionAction(String action)
+    {
+        _iState.setSelectionAction(action);
+    }
+
+    /**
+     * Return the action for selection events on the tree.  This action will be called
+     * when a TreeElement is selected.
+     * @return the selection action name.
+     */
+    public String getSelectionAction()
+    {
+        return _iState.getSelectionAction();
+    }
+
+    /**
+     * Sets the action used for expanding and contracting tree nodes.
+     * @param target - the target for expansion
+     * @netui:attribute
+     * @netui.tldx:attribute category="general" reftype="netui-action-url"
+     */
+    public void setExpansionTarget(String target)
+    {
+        _iState.setExpandTarget(target);
+    }
+
+
+    /**
+     * Set the ID of the tag.
+     * @param tagId - the tagId.
+     * @netui:attribute required="true" rtexprvalue="true"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setTagId(String tagId)
+    {
+        // @todo: Need to fully support the tagid including rewrite and script
+        _tagId = tagId;
+    }
+
+    /**
+     * Sets the image name for an open non-leaf node with no
+     * line below it.  (Defaults to "handledownlast.gif").
+     * @param imageHandleDownLast - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageHandleDownLast(String imageHandleDownLast)
+    {
+        _iState.setImageHandleDownLast(imageHandleDownLast);
+    }
+
+    /**
+     * Sets the image name for an open non-leaf node with a
+     * line below it.  (Defaults to "handledownmiddle.gif").
+     * @param imageHandleDownMiddle - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageHandleDownMiddle(String imageHandleDownMiddle)
+    {
+        _iState.setImageHandleDownMiddle(imageHandleDownMiddle);
+    }
+
+    /**
+     * Sets the image name for a closed non-leaf node with no
+     * line below it.  (Defaults to "handlerightlast.gif").
+     * @param imageHandleRightLast - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageHandleRightLast(String imageHandleRightLast)
+    {
+        _iState.setImageHandleRightLast(imageHandleRightLast);
+    }
+
+    /**
+     * Sets the image name for a closed non-leaf node with a
+     * line below it.  (Defaults to "handlerightmiddle.gif").
+     * @param imageHandleRightMiddle - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageHandleRightMiddle(String imageHandleRightMiddle)
+    {
+        _iState.setImageHandleRightMiddle(imageHandleRightMiddle);
+    }
+
+    /**
+     * Sets the image name for a blank area of the tree.
+     * (Defaults to "linelastnode.gif").
+     * @param imageLineLast - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageLineLast(String imageLineLast)
+    {
+        _iState.setImageLineLast(imageLineLast);
+    }
+
+    /**
+     * Sets the default icon for TreeElements for a blank area of the tree.
+     * (Defaults to "linelastnode.gif").
+     * @param defaultIcon - the image name of the defaultIcon
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setDefaultIcon(String defaultIcon)
+    {
+        _iState.setDefaultIcon(defaultIcon);
+    }
+
+    /**
+     * Sets the image name for an area with a line through it.
+     * (Defaults to "linemiddlenode.gif").
+     * @param imageLineMiddle - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageLineMiddle(String imageLineMiddle)
+    {
+        _iState.setImageLineMiddle(imageLineMiddle);
+    }
+
+    /**
+     * Sets the image name for an area with a line through it.
+     * (Defaults to "linevertical.gif").
+     * @param imageLineVertical - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageLineVertical(String imageLineVertical)
+    {
+        _iState.setImageLineVertical(imageLineVertical);
+    }
+
+    /**
+     * Sets the name of the directory containing the images for our icons,
+     * relative to the page including this tag.
+     * @param imageRoot - the directory name
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="images"
+     */
+    public void setImageRoot(String imageRoot)
+    {
+        _iState.setImageRoot(imageRoot);
+    }
+
+    /**
+     * Returns the is run at client state.
+     * @return
+     */
+    //public boolean isRunAtClient()
+    //{
+    //    return _runAtClient;
+    //}
+
+    /**
+     * @param runAtClient
+     * @netui:attribute required="false" rtexprvalue="false"
+     */
+    public void setRunAtClient(boolean runAtClient)
+    {
+        _runAtClient = runAtClient;
+    }
+
+    /**
+     * Sets the root <code>TreeElement</code> of this tree.
+     * @param rootNode - the root treeNode
+     * @netui:attribute required="false"
+     */
+    public void setRootNode(TreeElement rootNode)
+    {
+        _rootNode = rootNode;
+        if (rootNode.getName() == null) {
+            rootNode.setName("0");
+        }
+    }
+
+    public TreeElement getRootNode()
+    {
+        return _rootNode;
+    }
+
+    /**
+     * Set the style of a tree element when is is selected.  This results in a <code>style</code>
+     * attribute being generated for this tree node.
+     * @param selectionStyle
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="format" propertyclass="workshop.jspdesigner.properties.JspStyleProperty"
+     */
+    public void setSelectionStyle(String selectionStyle)
+    {
+        _selectionStyle = selectionStyle;
+    }
+
+    /**
+     * Set the style class of a tree element when is is disabled.  A disabled element will have
+     * a style can my be expanded/contracted, but my not be selected.
+     * @param disableClass
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="format"
+     */
+
+    public void setDisableClass(String disableClass)
+    {
+        _disabledClass = disableClass;
+    }
+
+    /**
+     * Set the style of a tree element when is is disabled.  A disabled element will have
+     * a style can my be expanded/contracted, but my not be selected.
+     * @param disabledStyle
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="format" propertyclass="workshop.jspdesigner.properties.JspStyleProperty"
+     */
+    public void setDisabledStyle(String disabledStyle)
+    {
+        _disabledStyle = disabledStyle;
+    }
+
+    /**
+     * Set the style class of a tree element when is is selected.  This results in a <code>class</code>
+     * attribute being generated for this tree node.
+     * @param selectionClass
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="format"
+     */
+    public void setSelectionClass(String selectionClass)
+    {
+        _selectionClass = selectionClass;
+    }
+
+    /**
+     * Set the style class of a tree element when is is not selected.  This results in a <code>style</code>
+     * attribute being generated for this tree node.
+     * @param unselectStyle
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="format"  propertyclass="workshop.jspdesigner.properties.JspStyleProperty"
+     */
+    public void setUnselectStyle(String unselectStyle)
+    {
+        _unselectStyle = unselectStyle;
+    }
+
+    /**
+     * Set the style class of a tree element when is is selected.  This results in a <code>class</code>
+     * attribute being generated for this tree node.
+     * @param unselectClass
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="format"
+     */
+    public void setUnselectClass(String unselectClass)
+    {
+        _unselectClass = unselectClass;
+    }
+
+    /**
+     * Sets the <code>style</code> attribute of the tree.
+     * @param treeStyle - the style
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="format" propertyclass="workshop.jspdesigner.properties.JspStyleProperty"
+     */
+    public void setTreeStyle(String treeStyle)
+    {
+        _treeStyle = treeStyle;
+    }
+
+    /**
+     * Sets the <code>class</code> attribute of the tree.
+     * @param treeClass - the style
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="format"
+     */
+    public void setTreeClass(String treeClass)
+    {
+        _treeClass = treeClass;
+    }
+
+    /**
+     * Sets an expression which indentifies the TreeElement that represents the root of
+     * the tree.
+     * @param dataSource - the tree attribute name
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setDataSource(String dataSource)
+    {
+        _dataSource = dataSource;
+    }
+
+    /**
+     * This indicates that there has been an error.
+     */
+    public void setError()
+    {
+        _shouldExit = true;
+    }
+
+    /**
+     * Prepare the Tree for rendering.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        // See if there is a TreeRoot already defined.
+        TreeElement root = null;
+        try {
+            root = getTreeRoot();
+        }
+        catch (IllegalExpressionException iee) {
+            String s = Bundle.getString("TreeRootError", new Object[]{_dataSource, iee.getMessage()});
+            registerTagError(s, null);
+        }
+
+        // report any errors and skip the body.
+        if (hasErrors()) {
+            reportErrors();
+            _shouldExit = true;
+            return SKIP_BODY;
+        }
+
+        // If we don't have a root element, then we need to create it by processing the body which contains
+        // <TreeItems> tags that define the tree.
+        return (root == null) ? EVAL_BODY_BUFFERED : SKIP_BODY;
+    }
+
+    /**
+     * Save any body content of this tag, which will generally be the
+     * option(s) representing the values displayed to the user.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody()
+            throws JspException
+    {
+        if (bodyContent != null) {
+            // save any text as the error text for the tag.  The Items will output error messages during
+            // processing which will result in a body.  We trim this test to cleanup white space.
+            _errorText = bodyContent.getString().trim();
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render this Tree control.
+     * @throws JspException if a processing error occurs
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        // check to see if we should exit due to an error occuring
+        // write out any error text and return.
+        if (_shouldExit) {
+            if (_errorText != null)
+                write(_errorText);
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // Set the image Root if it is not set.
+        if (_iState.getImageRoot() == null)
+            _iState.setImageRoot(((HttpServletRequest) pageContext.getRequest()).getContextPath() + "/" +
+                    InheritableState.DEFAULT_IMAGES);
+
+        //  errors should have been caught in doBeginTag
+        TreeElement treeRoot = getTreeRoot();
+        assert(treeRoot != null);
+
+        // if the tree root hasn't been defined, then we need to update the what the object that is
+        // pointed at by the dataSource expression.
+        if (treeRoot == null) {
+            if (_rootNode != null) {
+                try {
+                    String datasource = "{" + _dataSource + "}";
+                    updateExpression(datasource, _rootNode);
+                }
+                catch (ExpressionUpdateException e) {
+                    String s = Bundle.getString("Tags_UnableToWriteTree", new Object[]{_dataSource, e.getMessage()});
+                    registerTagError(s, null);
+                    reportErrors();
+                    localRelease();
+                    return EVAL_PAGE;
+                }
+                treeRoot = _rootNode;
+            }
+
+            // indicate an update error and return
+            if (treeRoot == null) {
+                String s = Bundle.getString("Tags_TreeNoAttribute", _dataSource);
+                registerTagError(s, null);
+                reportErrors();
+                localRelease();
+                return EVAL_PAGE;
+            }
+        }
+
+        // prepare to render the tree
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+        StringBuilder sb = new StringBuilder();
+
+        // this is the treeId from the request.  If there was an tree expansion this will be
+        // non-null and it identifies what tree had the expansion request.
+        assert(_tagId != null);
+        String treeId = request.getParameter(TreeElement.TREE_ID);
+        if (treeId != null && _tagId.equals(treeId)) {
+            TreeHelpers.processTreeRequest(treeId, treeRoot, request);
+        }
+
+        // check for the nodes that are expanded...
+        _expanded = request.getParameterValues("tree-state");
+
+        // Add the script support for the tree.
+        if (_runAtClient) {
+            ScriptReporter sr = getScriptReporter();
+            sr.addInitMethod(TreeElement.TREE_JAVASCRIPT_CLASS);
+            sr.addAnchorPostRewriter(TreeElement.TREE_JAVASCRIPT_CLASS);
+        }
+
+        // create a containing tree level <div> and place the tree level styles on it.
+        _divState.clear();
+        _divState.styleClass = _treeClass;
+        _divState.style = _treeStyle;
+        TagRenderingBase divRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.DIV_TAG, request);
+        divRenderer.doStartTag(sb, _divState);
+        sb.append("\n");
+
+        // Render the tree.
+        AttributeRenderer extraAttrs = new AttributeRenderer();
+        render(sb, request, response, treeRoot, 0, extraAttrs, _iState);
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // finish the tree representation and write it
+        divRenderer.doEndTag(sb);
+        sb.append("\n");
+        write(sb.toString());
+
+        localRelease();
+        return EVAL_PAGE;
+
+    }
+
+    /**
+     * Release all state information set by this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _rootNode = null;
+        _iState.initalizeTreeState();
+
+        _selectionStyle = null;
+        _selectionClass = null;
+        _unselectStyle = null;
+        _unselectClass = null;
+        _disabledStyle = null;
+        _disabledClass = null;
+        _treeStyle = null;
+        _treeClass = null;
+
+        _errorText = null;
+
+        _dataSource = null;
+        _tagId = null;
+        _expanded = null;
+        _shouldExit = false;
+        _runAtClient = false;
+    }
+
+    /**
+     * Return the <code>TreeControl</code> instance for the tree control that
+     * we are rendering.
+     * @throws JspException if no TreeControl instance can be found
+     */
+    protected TreeElement getTreeRoot()
+            throws JspException
+    {
+
+        String datasource = "{" + _dataSource + "}";
+        Object treeNode = evaluateExpression(datasource, "dataSource");
+        if (treeNode == null || hasErrors()) {
+            return null;
+        }
+
+        if (!(treeNode instanceof TreeElement)) {
+            String s = Bundle.getString("Tags_TreeInvalidAttribute", _dataSource);
+            registerTagError(s, null);
+            return null;
+        }
+        return (TreeElement) treeNode;
+    }
+
+    /**
+     * This is a recursive method which generates the markup for the tree.
+     * @param sb
+     * @param request
+     * @param response
+     * @param node
+     * @param level
+     * @param attrs
+     * @param state
+     * @throws JspException
+     */
+    protected void render(StringBuilder sb, HttpServletRequest request, HttpServletResponse response,
+                          TreeElement node, int level, AttributeRenderer attrs, InheritableState state)
+            throws JspException
+    {
+        // assert the values...
+        assert(sb != null);
+        assert(request != null);
+        assert(response != null);
+        assert(node != null);
+
+        String encoding = response.getCharacterEncoding();
+        String nodeName = node.getName();
+
+        assert(nodeName != null);
+
+        // HACK to take into account special characters like = and &
+        // in the node name, could remove this code if encode URL
+        // and later request.getParameter() could deal with = and &
+        // character in parameter values.
+        String encodedNodeName = null;
+        try {
+            encodedNodeName = URLEncoder.encode(nodeName, encoding);
+            assert(encodedNodeName != null);
+        }
+        catch (IOException e) {
+            // report the exception and return.
+            String s = Bundle.getString("Tags_TreeEncodingError", null);
+            registerTagError(s, e);
+            return;
+        }
+
+        // add any attributes to the renderer
+        //System.err.println("Render [" + node.getName() + "]\t" + attrs);
+        AttributeRenderer.RemoveInfo removes = attrs.addElement(node);
+
+        // get the renderers for this tree...
+        StringBuilder img = new StringBuilder(32);
+        TagRenderingBase imageRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.IMAGE_TAG, request);
+        TagRenderingBase anchorRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, request);
+        TagRenderingBase divRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.DIV_TAG, request);
+        TagRenderingBase spanRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, request);
+
+
+        // Render the beginning of this node
+        _divState.clear();
+        String tagId = node.getTagId();
+        if (tagId != null) {
+            renderTagId(tagId, _divState);
+        }
+        attrs.renderDiv(_divState, node);
+        if (_runAtClient) {
+            _divState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, "netui-tree-level", Integer.toString(level));
+        }
+        sb.append("   ");
+        divRenderer.doStartTag(sb, _divState);
+        sb.append("\n");
+
+        // In devMode we will verify the structure of the tree.  This will not run in
+        // production mode.
+        boolean devMode = !InternalUtils.getServerAdapter().isInProductionMode();
+        if (devMode) {
+            boolean error = false;
+            StringBuilder errorText = new StringBuilder();
+            if (node.getName() == null) {
+                errorText.append("name");
+                error = true;
+            }
+            if (node.getParent() == null) {
+                if (error)
+                    errorText.append(", ");
+                errorText.append("parent");
+            }
+
+            if (error)
+                registerTagError(Bundle.getString("Tags_TreeStructureError", errorText.toString()), null);
+        }
+
+        // check for tree override properties
+        InheritableState is = node.getInheritableState();
+        if (is != null) {
+            is.setParent(state);
+            state = is;
+        }
+
+        // Create the appropriate number of indents
+        // These are either the spacer.gif if the parent is the last in the line or the
+        // vertical line gif if the parent is not the last child.
+        _imgState.clear();
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, WIDTH, "16px");
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, "0");
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, "");
+        for (int i = 0; i < level; i++) {
+            int levels = level - i;
+            TreeElement parent = node;
+            for (int j = 1; j <= levels; j++)
+                parent = parent.getParent();
+
+            img.setLength(0);
+            img.append(state.getImageRoot());
+            img.append('/');
+            if (parent.isLast()) {
+                img.append(state.getImageSpacer());
+                _imgState.style = null;
+            }
+            else {
+                img.append(state.getImageLineVertical());
+                _imgState.style = "vertical-align:middle;";
+            }
+            sb.append("      ");
+            _imgState.src = img.toString();
+            imageRenderer.doStartTag(sb, _imgState);
+            imageRenderer.doEndTag(sb);
+            sb.append("\n");
+        }
+
+        // boolean flag that will indicate if there is an open anchor created
+        boolean closeAnchor = false;
+        if (!_runAtClient)
+            closeAnchor = renderExpansionAnchor(sb, anchorRenderer, request, response, node, encodedNodeName);
+        else {
+            // Render client expansion and initialize the tree JavaScript support
+            closeAnchor = renderClientExpansionAnchor(sb, anchorRenderer, node, encodedNodeName);
+        }
+
+        // place the image into the anchor....
+        // The type of the image depends upon the position and the type of the node.
+        img.setLength(0);
+        img.append(state.getImageRoot());
+        img.append('/');
+        if (node.isLeaf()) {                        // leaf node either last or middle
+            if (node.isLast())
+                img.append(state.getImageLineLast());
+            else
+                img.append(state.getImageLineMiddle());
+        }
+        else if (node.isExpanded()) {               // interior node that is expanded
+            if (node.isLast())
+                img.append(state.getImageHandleDownLast());
+            else
+                img.append(state.getImageHandleDownMiddle());
+        }
+        else {                                      // interior not expanded
+            if (node.isLast())
+                img.append(state.getImageHandleRightLast());
+            else
+                img.append(state.getImageHandleRightMiddle());
+        }
+
+        // write out the image which occurs next to the icon
+        if (!closeAnchor)
+            sb.append("      ");
+
+        _imgState.clear();
+        _imgState.src = img.toString();
+        _imgState.style = "vertical-align:middle;";
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, "0");
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, "");
+        imageRenderer.doStartTag(sb, _imgState);
+        imageRenderer.doEndTag(sb);
+
+        // close the anchor if one was openned...
+        if (closeAnchor)
+            anchorRenderer.doEndTag(sb);
+        sb.append("\n");
+
+        // Calculate the selection link for this node, if the node is disabled, we can skip
+        // this because a disabled node may not be selected.
+        String selectionLink = null;
+        if (!node.isDisabled()) {
+
+            // The action on the node overrides all.  Otherwise, check to see if there
+            // is either an href or clientAction.  If neither is set, then we inherit the
+            // action defined on the trees inheritable state.
+            String action = node.getAction();
+            if (action == null) {
+                selectionLink = node.getHref();
+                if (selectionLink == null && node.getClientAction() != null)
+                    selectionLink = "";
+                if (selectionLink == null)
+                    action = state.getSelectionAction();
+            }
+
+            // process the action into a URL
+            if (action != null && selectionLink == null) {
+                selectionLink = PageflowTagUtils.createActionURL(pageContext, action);
+                selectionLink = PageflowTagUtils.addParam(selectionLink, TreeElement.SELECTED_NODE, encodedNodeName);
+                if (_tagId != null)
+                    selectionLink = PageflowTagUtils.addParam(selectionLink, TreeElement.TREE_ID, _tagId);
+
+                // Add the jpf ScopeID param if necessary.
+                String scope = node.getScope();
+                if (scope != null) {
+                    selectionLink = PageflowTagUtils.addParam(selectionLink, ScopedServletUtils.SCOPE_ID_PARAM, scope);
+                }
+
+                if ((selectionLink != null) && (!FileUtils.isAbsoluteURI(selectionLink)))
+                    selectionLink = PageflowTagUtils.prepareActionUrl(pageContext, selectionLink);
+            }
+        }
+
+        TagRenderingBase endRender = null;
+        // if there is a selection link we need to put an anchor out.
+        if (selectionLink != null) {
+            _anchorState.clear();
+            _anchorState.href = selectionLink;
+            _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TARGET, node.getTarget());
+
+            // set the selection styles
+            if (node.isSelected()) {
+                _anchorState.style = _selectionStyle;
+                _anchorState.styleClass = _selectionClass;
+            }
+            else {
+                _anchorState.style = _unselectStyle;
+                _anchorState.styleClass = _unselectClass;
+            }
+
+            // render any attributes applied to the HTML
+            attrs.renderIconLink(_anchorState, node);
+
+            // render the runAtClient attributes
+            if (_runAtClient) {
+                String action = node.getClientAction();
+                if (action == null)
+                    action = "NetUIAnchorRewriter(this);";
+                else {
+                    action = escapeEscapes(action);
+                    action = JavaScriptUtils.getString("netuiAction", new Object[]{action});
+                }
+                _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ONCLICK, action);
+            }
+
+            // actually render the anchor.
+            sb.append("      ");
+            anchorRenderer.doStartTag(sb, _anchorState);
+            endRender = anchorRenderer;
+        }
+        else {
+            // This node doesn's support selection.  This means we consider it disabled.  We will
+            // put a span around it and set the style/class to indicate that it is disabled.
+            _spanState.clear();
+            _spanState.styleClass = _disabledClass;
+            _spanState.style = _disabledStyle;
+            sb.append("      ");
+            spanRenderer.doStartTag(sb, _spanState);
+            endRender = spanRenderer;
+        }
+        sb.append("&nbsp;");
+
+        // Render the icon for this node, there will always unless the tree turns off default
+        // icons by setting the useDefaultIcons attribute to false.
+        String icon = node.getIcon();
+        if (icon == null) {
+            icon = state.getImageRoot() + "/" + state.getDefaultIcon();
+        }
+        else {
+            icon = state.getImageRoot() + "/" + icon;
+        }
+
+        // write out the icon
+        if (icon != null) {
+            _imgState.clear();
+            _imgState.src = icon;
+            _imgState.style = "vertical-align:middle";
+            String alt = Bundle.getString("Tags_TreeAltText", null);
+            _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+            _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, "0");
+
+            // set the inheritted attributes
+            attrs.renderIconImage(_imgState, node);
+            imageRenderer.doStartTag(sb, _imgState);
+            imageRenderer.doEndTag(sb);
+            sb.append("&nbsp;");
+        }
+
+        // Render the label for this node (if any)
+        String label = node.getLabel();
+        if (label != null) {
+            sb.append(label);
+            sb.append("&nbsp;");
+        }
+        endRender.doEndTag(sb);
+
+        // if there is content then we should render that here...
+        String ctnt = node.getContent();
+        if (ctnt != null) {
+            sb.append("\n      ");
+            sb.append(ctnt);
+        }
+
+        // Render the end of this node
+        sb.append("\n   ");
+        divRenderer.doEndTag(sb);
+        sb.append("\n");
+
+        // now remove all of the attributes scoped with this...
+
+        attrs.removeElementScoped(node, removes);
+        // Render the children of this node
+        if (_runAtClient || node.isExpanded()) {
+            TreeElement children[] = node.getChildren();
+            int newLevel = level + 1;
+            for (int i = 0; i < children.length; i++) {
+                render(sb, request, response, children[i], newLevel, attrs, state);
+            }
+        }
+        attrs.removeElement(node, removes);
+    }
+
+    private boolean renderExpansionAnchor(StringBuilder sb, TagRenderingBase anchorRenderer,
+                                          HttpServletRequest request, HttpServletResponse response,
+                                          TreeElement node, String encodedNodeName)
+            throws JspException
+    {
+        // Render the tree state image for this node
+        String action = _iState.getExpansionAction();
+        if (action == null) {
+            action = _iState.getSelectionAction();
+        }
+        boolean isAction = PageflowTagUtils.isAction(request, response, pageContext.getServletContext(), action);
+        if (!isAction) {
+            registerTagError(Bundle.getString("Tags_BadAction", action), null);
+            return false;
+        }
+        action = PageflowTagUtils.createActionURL(pageContext, action);
+        action = PageflowTagUtils.prepareActionUrl(pageContext, action);
+
+        // encode the tree parameters into the action.
+        String amp = TagRenderingBase.getAmp(request);
+        if (action.indexOf("?") > -1) {
+            action = action + amp + TreeElement.EXPAND_NODE + "=" + encodedNodeName;
+        }
+        else {
+            action = action + "?" + TreeElement.EXPAND_NODE + "=" + encodedNodeName;
+        }
+        assert (_tagId != null);
+        action = action + amp + TreeElement.TREE_ID + "=" + _tagId;
+
+
+        boolean ret = false;
+        if ((action != null) && !node.isLeaf()) {
+            _anchorState.clear();
+            _anchorState.href = action;
+            _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TARGET, _iState.getExpandTarget());
+            sb.append("      ");
+            anchorRenderer.doStartTag(sb, _anchorState);
+            ret = true;
+        }
+        return ret;
+    }
+
+    /**
+     * @param sb
+     * @param node
+     * @param encodedNodeName
+     * @return
+     */
+    private boolean renderClientExpansionAnchor(StringBuilder sb, TagRenderingBase anchorRenderer,
+                                                TreeElement node, String encodedNodeName)
+    {
+        if (!node.isLeaf()) {
+            boolean expanded = nodeIsExpanded(node, encodedNodeName);
+            if (node.isExpanded() != expanded) {
+                node.onExpand();
+                node.setExpanded(expanded);
+            }
+
+            _anchorState.clear();
+            _anchorState.href = "";
+            _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TreeElement.TREE_ANCHOR,
+                    (expanded ? TreeElement.TREE_EXPAND_STATE : TreeElement.TREE_COLLAPSE_STATE));
+            _anchorState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TreeElement.TREE_ANCHOR_ID, encodedNodeName);
+
+            sb.append("      ");
+            anchorRenderer.doStartTag(sb, _anchorState);
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @param node
+     * @param nodeName
+     * @return
+     */
+    private boolean nodeIsExpanded(TreeElement node, String nodeName)
+    {
+        if (_expanded == null)
+            return node.isExpanded();
+        for (int i = 0; i < _expanded.length; i++) {
+            if (nodeName.equals(_expanded[i]))
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * Replace any occurrence of the specified placeholder in the specified
+     * template string with the specified replacement value.
+     * @param template    Pattern string possibly containing the placeholder
+     * @param placeholder Placeholder expression to be replaced
+     * @param value       Replacement value for the placeholder
+     */
+    protected String replace(String template, String placeholder, String value)
+    {
+        if (template == null)
+            return null;
+        if ((placeholder == null) || (value == null))
+            return template;
+
+        while (true) {
+            int index = template.indexOf(placeholder);
+            if (index < 0)
+                break;
+            StringBuilder temp = new StringBuilder(template.substring(0, index));
+            temp.append(value);
+            temp.append(template.substring(index + placeholder.length()));
+            template = temp.toString();
+        }
+        return template;
+    }
+
+    /**
+     * This method will handle creating the tagId attribute.  The tagId attribute indentifies the
+     * tag in the generated HTML.  There is a lookup table created in JavaScript mapping the <coe>tagId</code>
+     * to the actual name.  The tagId is also run through the naming service so it can be scoped.  Some tags will
+     * write that <code>tagid</code> out as the <code>id</code> attribute of the HTML tag being generated.
+     * @param tagId
+     * @param state
+     * @return
+     */
+    protected final String renderTagId(String tagId, AbstractHtmlState state)
+    {
+
+        assert(_tagId != null);
+
+        String realName = rewriteName(tagId);
+        String idScript = addTagIdMapping(tagId, realName);
+
+        // some tags will output the id attribute themselves so they don't write this out
+        if (realName != null) {
+            state.id = realName;
+        }
+        return idScript;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeContent.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeContent.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,102 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * @netui:tag name="treeContent" description="Set the additional content that will be displayed on the right of the label of a tree."
+ * @netui.tldx:tag requiredparent="treeItem"
+ * renderer="workshop.netui.jspdesigner.tldx.TreeContentRenderer"
+ * whitespace="indent"
+ * @see org.apache.beehive.netui.tags.tree.Tree
+ * @see org.apache.beehive.netui.tags.tree.TreeElement
+ */
+public class TreeContent extends AbstractBaseTag
+{
+    private String _text;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "TreeLabel";
+    }
+
+    /**
+     * Instantiate a new TreeElement.
+     * @throws javax.servlet.jsp.JspException if a JSP exception has occurred
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content into the label.  This will only occur if the there was not call to set the content
+     * from a child <code>TreeLabel</code> or <code>TreeItemContent</code>.  If the content is set then we
+     * will trim the content.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (bodyContent != null) {
+            String value = bodyContent.getString().trim();
+            if (value.length() > 0) {
+                _text = value;
+            }
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Add this node to the parent.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        Object o = getParent();
+        assert (o != null);
+        if (!(o instanceof TreeItem)) {
+            System.err.println("Invalid Parent:" + o.getClass().getName());
+            return EVAL_PAGE;
+        }
+
+        // assign the value to the parent's label value
+        TreeItem ti = (TreeItem) o;
+        ti.setItemContent(_text);
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release all state information set by this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _text = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeElement.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,794 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ * An individual node of a <code>Tree</code>, and rendered by that Tree instance.
+ */
+public class TreeElement implements Serializable
+{
+    // These are the bits for the boolean state.  The boolean state is stored
+    // in the _boolState variable.  All boolean values should be accessed through
+    // their property accessors.
+    private static final int EXPANDED = 0x01;
+    private static final int SELECTED = 0x02;
+    private static final int DISABLED = 0x04;
+    private static final int EXPAND_ON_SERVER = 0x08;
+
+    public static final String SELECTED_NODE = "netui_treeselected";
+    public static final String EXPAND_NODE = "netui_treenode";
+    public static final String TREE_ID = "netui_treeid";
+    public static final String TREE_JAVASCRIPT_CLASS = "NetUITree";
+
+    /**
+     * Constant used to indicate an anchor is an expand/collapse tree node
+     */
+    public static final String TREE_ANCHOR = "netui-tree-anchor";
+    public static final String TREE_ANCHOR_ID = "netui-tree-id";
+    public static final String TREE_EXPAND_STATE = "expand";
+    public static final String TREE_COLLAPSE_STATE = "collapse";
+
+    /**
+     * Constant used to indicate that a tree node anchor should be set expanded.
+     */
+    public static final String TREE_EXPANDED = "expand";
+
+    // this is used as the TreeElement list for leaf nodes because they don't have children
+    private static final TreeElement[] EMPTY_TREE = new TreeElement[0];
+
+    private String _content;         // The extra HTML content of the node
+    private String _label;           // The label that will be displayed when this node is visible.
+    private String _title;
+    private String _name;            // The unique (within the entire tree) name of this node.
+    private int _boolState;          // the boolean state of things
+
+    private TreeElement _parent;     // The parent node of this node, null for the root
+    private ArrayList _children;     // The children of this node
+    public ArrayList _attribute;     // The attributes assocated with the element.
+
+    private ExtendedInfo _info;      // The extended info
+
+    /**
+     * Default constructor for creating a simple tree.
+     */
+    public TreeElement()
+    {
+        _name = "0";
+    }
+
+    /**
+     * Construct a new TreeElement with the specified parameters.
+     * @param expanded Should this node be expanded?
+     */
+    public TreeElement(String label, boolean expanded)
+    {
+        this();
+        _label = label;
+        setExpanded(expanded);
+    }
+
+    //********************** PUBLICALLY EXPOSED PROPERTIES **********************************
+
+    /**
+     * Gets the pathname to the icon file displayed when this node is visible,
+     * relative to the image directory for the images.
+     * @return the icon pathname
+     */
+    public String getIcon()
+    {
+        return (_info == null) ? null : _info._icon;
+    }
+
+    /**
+     * Set the pathname to the icon to display when this node is visible.  The name is relative to the
+     * image directory.
+     * @param icon The relative path to the icond.
+     */
+    public void setIcon(String icon)
+    {
+        ExtendedInfo info = getInfo(icon);
+        if (info != null)
+            info._icon = icon;
+    }
+
+    /**
+     * Gets the label that will be displayed when this node is visible.
+     * @return the label
+     */
+    public String getLabel()
+    {
+        return _label;
+    }
+
+    /**
+     * Set the text of the label associated with this node.
+     * @param label The text of the tree node.
+     */
+    public void setLabel(String label)
+    {
+        _label = label;
+    }
+
+    /**
+     * Return the content.  The content is extra HTML that will be output to the right of the
+     * Nodes's label.
+     * @return the content
+     */
+    public String getContent()
+    {
+        return _content;
+    }
+
+    /**
+     * Set the content of the node.  The content will be output to the right of the Nodes label.
+     * @param content The text of the tree node.
+     */
+    public void setContent(String content)
+    {
+        _content = content;
+    }
+
+    /**
+     * Gets the action invoked if this node
+     * is selected by the user.
+     * @return the action
+     */
+    public String getAction()
+    {
+        return (_info == null) ? null : _info._action;
+    }
+
+    /**
+     * Set the action to be called when the node is selected.  A tree node may only have a <code>action</code>
+     * or <code>href</code> or <code>clientAction</code> set but not both.
+     * @param action an action in the page flow that will run when the node is selected.
+     */
+    public void setAction(String action)
+    {
+        ExtendedInfo info = getInfo(action);
+        if (info != null)
+            info._action = action;
+    }
+
+    /**
+     * Gets the client action invoked if this node is selected by the user.
+     * @return the action
+     */
+    public String getClientAction()
+    {
+        return (_info == null) ? null : _info._clientAction;
+    }
+
+    /**
+     * Set the client action to be called when the node is selected.  A tree node may only have a <code>action</code>
+     * or <code>href</code> or <code>clientAction</code> set but not both.
+     * @param clientAction an action in the page flow that will run when the node is selected.
+     */
+    public void setClientAction(String clientAction)
+    {
+        ExtendedInfo info = getInfo(clientAction);
+        if (info != null)
+            info._clientAction = clientAction;
+    }
+
+    /**
+     * Return the ID of the tag.  The id may be rewritten by the container (such
+     * as a portal) to make sure it is unique.  JavaScript my lookup the actual id
+     * of the element by looking it up in the <code>netui_names</code> table written
+     * into the HTML.
+     * @return the tagId.
+     */
+    public String getTagId()
+    {
+        return (_info == null) ? null : _info._tagId;
+    }
+
+    /**
+     * Set the ID of the tag.
+     * @param tagId - the tagId.
+     */
+    public void setTagId(String tagId)
+    {
+        ExtendedInfo info = getInfo(tagId);
+        if (info != null)
+            info._tagId = tagId;
+    }
+
+    /**
+     * Gets the hyperlink to which control will be directed if this node
+     * is selected by the user.
+     * @return the action
+     */
+    public String getHref()
+    {
+        return (_info == null) ? null : _info._href;
+    }
+
+    /**
+     * Set the hyperlink which will be called when the node is selected.   A tree node may only have
+     * a <code>action</code> or <code>href</code> or <code>clientAction</code> set but not both.
+     * @param href The hyperlink called when the node is selected.
+     */
+    public void setHref(String href)
+    {
+        ExtendedInfo info = getInfo(href);
+        if (info != null)
+            info._href = href;
+    }
+
+    /**
+     * Gets the window target for the hyperlink identified by the
+     * <code>action</code> property, if this node is selected.
+     * @return the window target
+     */
+    public String getTarget()
+    {
+        return (_info == null) ? null : _info._target;
+    }
+
+    /**
+     * Set the window target for the hyperlink indentified by the <code>action</code>.
+     * @param target the window target.
+     */
+    public void setTarget(String target)
+    {
+        ExtendedInfo info = getInfo(target);
+        if (info != null)
+            info._target = target;
+    }
+
+    /**
+     * Gets if this node is currently expanded.
+     * @return the expanded state
+     */
+    public boolean isExpanded()
+    {
+        return ((_boolState & EXPANDED) != 0);
+    }
+
+    /**
+     * Sets if this node is currently expanded.
+     * @param expanded - the expanded state
+     */
+    public void setExpanded(boolean expanded)
+    {
+        if (expanded)
+            _boolState = _boolState | EXPANDED;
+        else
+            _boolState = _boolState & (-1 ^ EXPANDED);
+    }
+
+    /**
+     * This method will return the state of the expand on server attribute.
+     * @return the boolean value of the expandOnServer attribute.
+     */
+    public boolean isExpandOnServer()
+    {
+        return ((_boolState & EXPAND_ON_SERVER) != 0);
+    }
+
+    /**
+     * Set the value of the expandOnServer attribute.  If the attribute is <code>true</code>
+     * and <code>runAtClient</code> is also true, then an expansion on this node will cause that
+     * to happen on the server.  When runAtClient is false, all expansions will happen on the server.
+     * @param expandOnServer boolean value indicating if the node should be expanded on the server.
+     */
+    public void setExpandOnServer(boolean expandOnServer)
+    {
+        if (expandOnServer)
+            _boolState = _boolState | EXPAND_ON_SERVER;
+        else
+            _boolState = _boolState & (-1 ^ EXPAND_ON_SERVER);
+    }
+
+    /**
+     * Get the target scope for this node's URI.
+     * @return a String that identifies the target scope for this node's URI.
+     * @see #setScope
+     */
+    public String getScope()
+    {
+        return (_info == null) ? null : _info._scope;
+    }
+
+    /**
+     * Set the target scope for this anchor's URI.  Any page flow that handles the URI will be made active within the
+     * given scope.  Scopes allow multiple page flows to be active within the same user session; page flows in different
+     * scopes do not in general interact with each other.  This attribute is commonly used in conjunction with the
+     * <code>target</code> attribute to invoke a new page flow in a separate window.
+     * @param scope a String that identifies the scope in which the target page flow will be made active.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass" language="netuiexpression"
+     */
+    public void setScope(String scope)
+    {
+        ExtendedInfo info = getInfo(scope);
+        if (info != null)
+            info._scope = scope;
+    }
+
+    /**
+     * Set the title attribute for the node.
+     * @return
+     */
+    public String getTitle()
+    {
+        return _title;
+    }
+
+    /**
+     * Returns the current title attribute for the node.
+     * @param title
+     */
+    public void setTitle(String title)
+    {
+        _title = title;
+    }
+
+    public InheritableState getInheritableState()
+    {
+        return (_info == null) ? null : _info._state;
+    }
+
+    public void setInheritableState(InheritableState state)
+    {
+        ExtendedInfo info = getInfo(state);
+        if (info != null) {
+            info._state = state;
+        }
+    }
+
+    //***************************  READ-ONLY PROPERTIES SET BY INTERNAL METHODS **************************
+
+    /**
+     * Gets whether or not this is the last node in the set of children
+     * for the parent node.
+     * @return if this is the last or not
+     */
+    public boolean isLast()
+    {
+        if (_parent == null)
+            return true;
+        int last = _parent.size() - 1;
+        assert(last >= 0);
+        return (_parent.getChild(last) == this);
+    }
+
+    /**
+     * Gets whether or not this a "leaf" node (i.e. one with no children)
+     * @return if this is the last or not
+     */
+    public boolean isLeaf()
+    {
+        if (_children == null)
+            return true;
+        return (_children.size() < 1);
+    }
+
+    /**
+     * Returns the unique name of the node. The unique name is set when the child is added to the tree.
+     * @return The unique name of the node.
+     */
+    public String getName()
+    {
+        return _name;
+    }
+
+    /**
+     * Gets the parent node of this node, or <code>null</code> if this
+     * is the root node.
+     * @return the TreeElement parent
+     */
+    public TreeElement getParent()
+    {
+        return _parent;
+    }
+
+    /**
+     * Gets whether this node currently selected.  This is set by the tag render method.
+     * @return the selected state
+     */
+    public boolean isSelected()
+    {
+        return ((_boolState & SELECTED) != 0);
+    }
+
+    /**
+     * Sets whether this node currently selected.
+     * @param selected - the selected state
+     */
+    public void setSelected(boolean selected)
+    {
+        if (selected)
+            _boolState = _boolState | SELECTED;
+        else
+            _boolState = _boolState & (-1 ^ SELECTED);
+    }
+
+    /**
+     * Gets whether this node currently selected.  This is set by the tag render method.
+     * @return the selected state
+     */
+    public boolean isDisabled()
+    {
+        return ((_boolState & DISABLED) != 0);
+    }
+
+    /**
+     * Sets whether this node currently selected.
+     * @param disabled - the selected state
+     */
+    public void setDisabled(boolean disabled)
+    {
+        if (disabled)
+            _boolState = _boolState | DISABLED;
+        else
+            _boolState = _boolState & (-1 ^ DISABLED);
+    }
+
+    /**
+     * This method is called by the children tags of the TreeItem.  If there is a <code>TreeHtmlAttribute</code>
+     * it will set the attribute name and value.
+     * @param attr
+     */
+    public void setAttribute(TreeHtmlAttributeInfo attr)
+    {
+        if (_attribute == null) {
+            _attribute = new ArrayList();
+        }
+        attr.setParent(this);
+        _attribute.add(attr);
+    }
+
+    /**
+     * Return the list of attributes.  This method may return null if there are
+     * no elements. In addition, the map may be exist but be empty.
+     * @return a ArrayList of attribute values or null.
+     */
+    public ArrayList getAttributeList()
+    {
+        return _attribute;
+    }
+
+    ///*********************** PROTECTED PROPERTY SETTERS *************************************
+    /**
+     * Set the unique name of the node.  Uniqueness is not verified by this routine.  This routine is protected
+     * because it is only called during add and remove of children.
+     * @param name the name of the node.
+     */
+    protected void setName(String name)
+    {
+        _name = name;
+    }
+
+    /**
+     * Sets the parent node of this node.  This node will set the width value (which is really the
+     * depth in the tree of the node).
+     * @param parent - the TreeElement parent
+     */
+    protected void setParent(TreeElement parent)
+    {
+        _parent = parent;
+    }
+
+    //*************************** EVENT METHODS *****************************
+
+    /**
+     * Code that runs when the node is expanded.
+     */
+    public void onExpand()
+    {
+        //do nothing
+    }
+
+    /**
+     * Code that runs when the node is selected.
+     */
+    public void onSelect()
+    {
+        //do nothing
+    }
+
+    //***************** CHILD/PARENT MANAGEMENT METHODS **************************************
+
+    /**
+     * Add a new child node to the end of the list.
+     * @param child The new child node
+     * @throws IllegalArgumentException if the name of the new child
+     *                                  node is not unique
+     */
+    public void addChild(TreeElement child)
+            throws IllegalArgumentException
+    {
+
+        TreeElement theChild = child;
+        theChild.setParent(this);
+        if (getName() == null) {
+            setName("0");
+        }
+        if (_children == null) {
+            _children = new ArrayList();
+        }
+        //int n = _children.size();
+        //if (n > 0) {
+        //    TreeElement node = (TreeElement) _children.get(n - 1);
+        //    node.setLast(false);
+        //}
+        //theChild.setLast(true);
+        _children.add(child);
+        int n = _children.size();
+        theChild.updateName(this, n - 1);
+    }
+
+    /**
+     * This method will return the number of children of the node.
+     * @return the number of children of this tree element.
+     */
+    public int size()
+    {
+        if (_children == null)
+            return 0;
+        return _children.size();
+    }
+
+    /**
+     * Add a new child node at the specified position in the child list.
+     * @param offset Zero-relative offset at which the new node
+     *               should be inserted
+     * @param child  The new child node
+     * @throws IllegalArgumentException if the name of the new child
+     *                                  node is not unique
+     */
+    public void addChild(int offset, TreeElement child)
+            throws IllegalArgumentException
+    {
+        child.setSelected(false);
+        child.setParent(this);
+        if (_children == null)
+            _children = new ArrayList();
+        _children.add(offset, child);
+
+        //Need to rename all affected!
+        int size = _children.size();
+        for (int i = offset; i < size; i++) {
+            TreeElement thisChild = (TreeElement) _children.get(i);
+            thisChild.updateName(this, i);
+        }
+
+    }
+
+    /**
+     *
+     */
+    public void clearChildren()
+    {
+        _children.clear();
+    }
+
+    /**
+     * Return the set of child nodes for this node.
+     * @return the child node array
+     */
+    public TreeElement[] getChildren()
+    {
+        if (_children == null)
+            return EMPTY_TREE;
+        TreeElement results[] = new TreeElement[_children.size()];
+        return (TreeElement[]) _children.toArray(results);
+    }
+
+    /**
+     * Return the child node at the given zero-relative index.
+     * @param index The child node index
+     * @return the child node
+     */
+    public TreeElement getChild(int index)
+    {
+        TreeElement childNode = null;
+        if (_children == null)
+            return null;
+        Object child = _children.get(index);
+        if (child != null) {
+            childNode = (TreeElement) child;
+        }
+        return childNode;
+    }
+
+    /**
+     * Remove the child node (and all children of that child) at the
+     * specified position in the child list.
+     * @param offset Zero-relative offset at which the existing
+     *               node should be removed
+     */
+    public void removeChild(int offset)
+    {
+        if (_children == null)
+            return;
+
+        TreeElement child = (TreeElement) _children.get(offset);
+        child.setParent(null);
+        child.setName(null);
+
+        // Rename all affected children
+        int size = _children.size();
+        for (int i = offset; i < size; i++) {
+            TreeElement thisChild = (TreeElement) _children.get(i);
+            thisChild.updateName(this, i);
+        }
+    }
+
+    /**
+     * Remove the specified child node.  All of the
+     * children of this child node will also be removed.
+     * @param child Child node to be removed
+     */
+    public void removeChild(TreeElement child)
+    {
+
+        if (child == null || _children == null)
+            return;
+
+        int size = _children.size();
+        int removeIndex = -1;
+        for (int i = 0; i < size; i++) {
+            if (child == (TreeElement) _children.get(i)) {
+                _children.remove(i);
+                child.setParent(null);
+                removeIndex = i;
+                break;
+            }
+        }
+        if (removeIndex >= 0) {
+            size = _children.size();
+            for (int i = removeIndex; i < size; i++) {
+                TreeElement thisChild = (TreeElement) _children.get(i);
+                thisChild.updateName(this, i);
+            }
+        }
+    }
+
+    /**
+     * This method will update the name of this node and all of the children node.  The name
+     * of a node reflects it's position in the tree.
+     * @param parentNode The parent node of this node.
+     * @param index      the index position of this node within the parent node.
+     */
+    protected void updateName(TreeElement parentNode, int index)
+    {
+        setName(getNodeName(parentNode, index));
+        TreeElement[] children = getChildren();
+        for (int i = 0; i < children.length; i++) {
+            children[i].updateName(this, i);
+        }
+    }
+
+    //************  TREE BASED MANAGEMENT METHODS **************************************
+    /**
+     * Gets the root node of this tree.
+     * @param node The TreeElement to start from
+     * @return The root node
+     */
+    public static TreeElement getRoot(TreeElement node)
+    {
+        TreeElement parentNode = node.getParent();
+        while (parentNode != null) {
+            node = parentNode;
+            parentNode = node.getParent();
+        }
+        return node;
+    }
+
+    /**
+     * Given a node, find the named child.
+     * @param nodeName the name of the child to find.
+     * @return the node identified by the name
+     */
+    public TreeElement findNode(String nodeName)
+    {
+        TreeElement root = getRoot(this);
+        TreeElement node = root.findNodeRecurse(nodeName, nodeName);
+        return node;
+    }
+
+    /**
+     * @param parentNode
+     * @param index
+     * @return
+     */
+    private String getNodeName(TreeElement parentNode, int index)
+    {
+        String nodeName = "" + index;
+        if (parentNode != null) {
+            nodeName = parentNode.getName() + "." + nodeName;
+        }
+
+        return nodeName;
+    }
+
+    /**
+     * Helper routine that will recursively search the tree for the node.
+     * @param fullName    The full name that we are looking for
+     * @param currentName The name of the current node.
+     * @return The node matching the name or <code>null</code>
+     */
+    private TreeElement findNodeRecurse(String fullName, String currentName)
+    {
+        String remainingName = null;
+
+        if ((currentName == null) || (fullName == null)) {
+            return null;
+        }
+        if (getName().equals(fullName)) {
+            return this;
+        }
+        if (currentName.indexOf('.') > 0) {
+            remainingName = currentName.substring(currentName.indexOf('.') + 1);
+            int nextIndex = -1;
+            if (remainingName.indexOf(".") > -1) {
+                nextIndex = new Integer(remainingName.substring(0, remainingName.indexOf('.'))).intValue();
+            }
+            else {
+                nextIndex = new Integer(remainingName).intValue();
+            }
+
+            TreeElement child = getChild(nextIndex);
+            if (child != null) {
+                return child.findNodeRecurse(fullName, remainingName);
+            }
+            else {
+                return null;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * This will get the ExtendedInfo object.  If it hasn't been created, this routine only
+     * creates it if the object passed in is non-null.
+     * @param o
+     * @return
+     */
+    private ExtendedInfo getInfo(Object o)
+    {
+        if (_info == null && o != null) {
+            _info = new ExtendedInfo();
+        }
+        return _info;
+    }
+
+    /**
+     * This class contains the attributes which infrequently used.  This is an optimiation
+     * where the tree only contains the things necessary to render the base tree.  Less commmonly used
+     * features are not exposed by this structure.
+     */
+    private static class ExtendedInfo
+    {
+        public String _clientAction;    // Action to run on the client.
+        public String _href;            // href to call if the node is selected
+        public String _scope;           // The Scope
+        public String _icon;            // The pathname to the icon file displayed when this node is visible
+        public String _tagId;           // The tagId of the node
+        public String _target;          // The window target for the hyperlink identified
+        public String _action;          // The action invoked if this node is selected by the user.
+        public InheritableState _state; // The inheritable state from the tree
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHelpers.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHelpers.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,97 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * This class provides a set of static helper methods that deal with a tree.
+ */
+public class TreeHelpers
+{
+    /**
+     * If this tree was selected or expanded this will handle that processing.
+     * @param treeId
+     * @param treeRoot
+     * @param request
+     */
+    public static void processTreeRequest(String treeId, TreeElement treeRoot, HttpServletRequest request)
+    {
+        assert(treeId != null) : "parameter treeId must not be null.";
+        assert(treeRoot != null) : "parameter treeRoot must not be null.";
+        assert(request != null) : "paramater request must not be null.";
+
+        // check the root node to see if it is a TreeRootElement.  if it is, then we
+        // use it to change the selected node.  Otherwise we will do a recursive search
+        // of the tree to select the node.
+        String selectNode = request.getParameter(TreeElement.SELECTED_NODE);
+        if (selectNode != null) {
+            if (treeRoot instanceof TreeRootElement) {
+                TreeRootElement root = (TreeRootElement) treeRoot;
+                root.changeSelected(selectNode);
+            }
+            else {
+                setSelected(treeRoot, selectNode);
+            }
+        }
+
+        // handle auto expand.
+        String expandNode = null;
+
+        // our we auto expanding this node?
+        expandNode = request.getParameter(TreeElement.EXPAND_NODE);
+
+        // if we are auto expanding flip the expand of this node if it was expanded
+        if (expandNode != null) {
+            TreeElement n = treeRoot.findNode(expandNode);
+            if (n != null) {
+                n.onExpand();
+                n.setExpanded(!n.isExpanded());
+            }
+        }
+    }
+
+    /**
+     * Recursive routine to set the selected node.  This will set the selected node
+     * and clear the selection on all other nodes.  It will walk the full tree.
+     * @param node
+     * @param selected
+     */
+    protected static void setSelected(TreeElement node, String selected)
+    {
+        assert(node != null);
+        if (node.getName().equals(selected)) {
+            node.onSelect();
+            node.setSelected(true);
+        }
+        else {
+            if (node.isSelected()) {
+                node.onSelect();
+                node.setSelected(false);
+            }
+        }
+
+        TreeElement children[] = node.getChildren();
+        assert(children != null);
+        for (int i = 0; i < children.length; i++) {
+            setSelected(children[i], selected);
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHtmlAttribute.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHtmlAttribute.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,155 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * @netui:tag name="treeHtmlAttribute" description="Set an attribute on the tree."
+ * @netui.tldx:tag requiredparent="treeItem tree"
+ * renderer="workshop.netui.jspdesigner.tldx.TreeHtmlAttributeRenderer"
+ * whitespace="indent"
+ * @see org.apache.beehive.netui.tags.tree.Tree
+ * @see org.apache.beehive.netui.tags.tree.TreeElement
+ */
+public class TreeHtmlAttribute extends AbstractBaseTag
+{
+    TreeHtmlAttributeInfo _info = new TreeHtmlAttributeInfo();
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "TreeHtmlAttribute";
+    }
+
+    /**
+     * Sets the name of the attribute.  This must be in the proper HTML Attribute form.  For example,
+     * "onmouseclick" or "href".
+     * @param attr - the name of the HTML attribute.
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute
+     */
+    public void setAttribute(String attr)
+    {
+        _info.setAttribute(attr);
+    }
+
+    /**
+     * Sets HTML attribute value.
+     * @param value - The value of the HTML Attribute.
+     * @netui:attribute required="true"
+     * @netui.tldx:attribute
+     */
+    public void setValue(String value)
+    {
+        _info.setValue(value);
+    }
+
+    /**
+     * @param onIcon
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute
+     */
+    public void setOnIcon(boolean onIcon)
+    {
+        _info.setOnIcon(onIcon);
+    }
+
+    /**
+     * @param onIconLink
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute
+     */
+    public void setOnIconLink(boolean onIconLink)
+    {
+        _info.setOnIconLink(onIconLink);
+    }
+
+    /**
+     * @param onLabelLink
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute
+     */
+    public void setOnLabelLink(boolean onLabelLink)
+    {
+        _info.setOnLabelLink(onLabelLink);
+    }
+
+    /**
+     * @param onDiv
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute
+     */
+    public void setOnDiv(boolean onDiv)
+    {
+        _info.setOnDiv(onDiv);
+    }
+
+    /**
+     * @param applyToDescendents
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute
+     */
+    public void setApplyToDescendents(boolean applyToDescendents)
+    {
+        _info.setApplyToDescendents(applyToDescendents);
+    }
+
+    /**
+     * Instantiate a new TreeElement.
+     * @throws javax.servlet.jsp.JspException if a JSP exception has occurred
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    public int doEndTag()
+            throws JspException
+    {
+        Object o = getParent();
+        assert (o != null);
+
+        if (o instanceof TreeItem) {
+            TreeItem ti = (TreeItem) o;
+            ti.setItemAttribute(_info);
+        }
+        else {
+            System.err.println("Unknown thing here");
+        }
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release all state information set by this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _info = new TreeHtmlAttributeInfo();
+
+    }
+}
+

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHtmlAttributeInfo.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeHtmlAttributeInfo.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+/**
+ * This structure is used to track the use of HTML attributes within a tree item.
+ */
+public class TreeHtmlAttributeInfo implements java.io.Serializable
+{
+    public static final int HTML_LOCATION_DIV = 0;
+    public static final int HTML_LOCATION_ICON = 1;
+    public static final int HTML_LOCATION_ICON_LINK = 2;
+    public static final int HTML_LOCATION_LABEL_LINK = 3;
+    public static final int HTML_LOCATION_CNT = 4;
+
+    private static final int APPLY_TO_DESCENDENTS = 0x01;
+    private static final int ON_ICON = 0x02;
+    private static final int ON_ICON_LINK = 0x04;
+    private static final int ON_LABEL_LINK = 0x08;
+    private static final int ON_DIV = 0x10;
+
+    private String _attribute;
+    private String _value;
+    private int state;
+    private TreeElement _parent;
+
+    public String getAttribute()
+    {
+        return _attribute;
+    }
+
+    public void setAttribute(String attribute)
+    {
+        _attribute = attribute;
+    }
+
+    public String getValue()
+    {
+        return _value;
+    }
+
+    public void setValue(String value)
+    {
+        _value = value;
+    }
+
+    public TreeElement getParent()
+    {
+        return _parent;
+    }
+
+    public void setParent(TreeElement parent)
+    {
+        _parent = parent;
+    }
+
+    public boolean isApplyToDescendents()
+    {
+        return ((state & APPLY_TO_DESCENDENTS) != 0);
+    }
+
+    public void setApplyToDescendents(boolean applyToDescendents)
+    {
+        if (applyToDescendents)
+            state = state | APPLY_TO_DESCENDENTS;
+        else
+            state = state & (-1 ^ APPLY_TO_DESCENDENTS);
+
+    }
+
+    public boolean isOnDiv()
+    {
+        return ((state & ON_DIV) != 0);
+    }
+
+    public void setOnDiv(boolean onDiv)
+    {
+        if (onDiv)
+            state = state | ON_DIV;
+        else
+            state = state & (-1 ^ ON_DIV);
+
+    }
+
+    public boolean isOnIcon()
+    {
+        return ((state & ON_ICON) != 0);
+    }
+
+    public void setOnIcon(boolean onIcon)
+    {
+        if (onIcon)
+            state = state | ON_ICON;
+        else
+            state = state & (-1 ^ ON_ICON);
+
+    }
+
+    public boolean isOnIconLink()
+    {
+        return ((state & ON_ICON_LINK) != 0);
+    }
+
+    public void setOnIconLink(boolean onIconLink)
+    {
+        if (onIconLink)
+            state = state | ON_ICON_LINK;
+        else
+            state = state & (-1 ^ ON_ICON_LINK);
+    }
+
+    public boolean isOnLabelLink()
+    {
+        return ((state & ON_LABEL_LINK) != 0);
+    }
+
+    public void setOnLabelLink(boolean onLabelLink)
+    {
+        if (onLabelLink)
+            state = state | ON_LABEL_LINK;
+        else
+            state = state & (-1 ^ ON_LABEL_LINK);
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeItem.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeItem.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,474 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+/**
+ * Instantiates a TreeElement object that will get added to the parent tag (either a Tree or
+ * another TreeItem).
+ * <p/>
+ * <p/>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ * <p/>
+ * <tr><th rowspan="2">action</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">An action invoked by clicking the tree item.</td></tr>
+ * <tr><th rowspan="2">expanded</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The tree item's expanded state.</td></tr>
+ * <tr><th rowspan="2">icon</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The tree item's icon URI.</td></tr>
+ * <tr><th rowspan="2">label</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The label of the tree item.</td></tr>
+ * <tr><th rowspan="2">target</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A window target.</td></tr>
+ * <p/>
+ * </table>
+ * </p>
+ * @example In this first sample, a Node contained by a parent Node or Tree will display with
+ * the label of "Login" and when clicked, will navigate to the Login pageflow.
+ * <pre>&lt;netui:node label="Login" action="/netui/login/Login.jpf" /></pre>
+ * <p>In this next sample, a Node contained by a parent Node or Tree will display with
+ * the label of "Human Resources" and icon "folder16.gif" and most likely will have
+ * child Node tags because it does not have an action and starts expanded.</p>
+ * <pre>&lt;netui:node label="Human Resources" icon="folder16.gif" expanded="true"></pre>
+ * 
+ * @see Tree
+ * @see org.apache.beehive.netui.tags.tree.TreeElement
+ *
+ * @netui:tag name="treeItem" description="Instantiates a TreeElement object that will get added to the parent tag (either a Tree or another TreeItem)."
+ * @netui.tldx:tag requiredparent="richTree treeItem"
+ * requiredchild="treeItem treeLabel treeContent treePropertyOverride"
+ * renderer="workshop.netui.jspdesigner.tldx.TreeItemRenderer"
+ * whitespace="indent"
+ */
+public class TreeItem extends AbstractBaseTag
+{
+    private String _action;           // The action raised when the TreeItem is selected
+    private String _clientAction;     // A client action that may run instead of the action.
+    private boolean _expanded;        // boolean to indicate if the tree is expanded
+    private boolean _expandOnServer;  // boolean to indicate if the tree should be expanded on the server
+    private boolean _disabled;        // boolean to indicate if the tree should be expanded on the server
+    private String _href;             // href link called when the TreeItem is selected
+    private String _scope;            // the scope so that we support multiple page flows
+    private String _icon;             // The icon representing the TreeItem
+    private TreeElement _treeElement; // pointer to the tree node
+    private String _target;           // The target window for the selection event
+    private String _title;            // The title (if there is one)
+    private String _tagId;            // tag that should uniquely indentify a tree.  Required for multiple tree using auto expand
+    private ArrayList _attributes;    // array list of attributes
+    private InheritableState _state;  // the state
+
+    private boolean _child = false;  // has a child set the content
+    private String _childLabel;      // value set by a TreeLabel
+    private String _childContent;    // value set by a TreeItemContent tag
+
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "TreeItem";
+    }
+
+    //*********************************** TAG PROPERTIES ***************************************************************
+
+    /**
+     * Set the TreeItem's action.
+     * @param action - the action.
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="general" reftype="netui-action-url"
+     */
+    public void setAction(String action)
+    {
+        _action = action;
+    }
+
+    /**
+     * Sets an action to run on the client when the tree is selected.
+     * @param action - the client action.
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setClientAction(String action)
+    {
+        _clientAction = action;
+    }
+
+    /**
+     * Set the ID of the tag.
+     * @param tagId - the tagId.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setTagId(String tagId)
+    {
+        _tagId = tagId;
+    }
+
+    /**
+     * Sets the TreeItem expansion state.
+     * @param expanded - the expanded state.
+     * @netui:attribute required="false"
+     */
+    public void setExpanded(boolean expanded)
+    {
+        _expanded = expanded;
+    }
+
+    /**
+     * Sets the TreeItem expansion state.
+     * @param disabled - the expanded state.
+     * @netui:attribute required="false"
+     */
+    public void setDisabled(boolean disabled)
+    {
+        _disabled = disabled;
+    }
+
+    /**
+     * Set the value of the expandOnServer attribute.  If the attribute is <code>true</code>
+     * and <code>runAtClient</code> is also true, then an expansion on this node will cause that
+     * to happen on the server.  When runAtClient is false, all expansions will happen on the server.
+     * @param expandOnServer boolean value indicating if the node should be expanded on the server.
+     * @netui:attribute required="false"
+     */
+    public void setExpandOnServer(boolean expandOnServer)
+    {
+        _expandOnServer = expandOnServer;
+    }
+
+    /**
+     * Sets the TreeItem's href.
+     * @param href - the href
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"
+     */
+    public void setHref(String href)
+    {
+        _href = href;
+    }
+
+    /**
+     * Sets the TreeItems title.
+     * @param title
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setTitle(String title)
+    {
+        _title = title;
+    }
+
+    /**
+     * Set the target scope for this tree node's URI.  Any page flow that handles the URI will be made active within the
+     * given scope.  Scopes allow multiple page flows to be active within the same user session; page flows in different
+     * scopes do not in general interact with each other.  This attribute is commonly used in conjunction with the
+     * <code>target</code> attribute ({@link #setTarget}) to invoke a new page flow in a separate window.
+     * @param scope a String that identifies the scope in which the target page flow will be made active.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute language="netuiexpression"
+     */
+    public void setScope(String scope)
+    {
+        _scope = scope;
+    }
+
+    /**
+     * Sets the TreeItem icon URI.
+     * @param icon - the icon URI
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"
+     */
+    public void setIcon(String icon)
+    {
+        _icon = icon;
+    }
+
+    //**********************************  METHODS CALLED BY CHILD TAGS TO SET STATE **********************************
+
+    /**
+     * This method is called by children tags of the TreeItem.  If there is a <code>TreeLabel</code>
+     * it will set the text of the label.  A child <code>TreeLabel</code> will override the <code>label</code>
+     * attribute.
+     * @param label The text of the Label to be displayed for this TreeItem.
+     */
+    public void setItemLabel(String label)
+    {
+        _child = true;
+        _childLabel = label;
+    }
+
+    /**
+     * @param content
+     */
+    public void setItemContent(String content)
+    {
+        _child = true;
+        _childContent = content;
+    }
+
+    /**
+     * This method is called by the children tags of the TreeItem.  If there is a <code>TreeHtmlAttribute</code>
+     * it will set the attribute name and value.
+     * @param attr
+     */
+    public void setItemAttribute(TreeHtmlAttributeInfo attr)
+    {
+        _child = true;
+        if (_attributes == null)
+            _attributes = new ArrayList();
+        _attributes.add(attr);
+    }
+
+    public void setItemInheritableState(InheritableState state)
+    {
+        _child = true;
+        _state = state;
+    }
+
+    /**
+     * @return
+     */
+    public TreeElement getNode()
+    {
+        return _treeElement;
+    }
+
+    /**
+     * @netui:attribute required="false"
+     */
+    // @TODO: this should be added back with an expression
+    //public void setNode(TreeElement node)
+    //{
+    //    _treeElement = node;
+    //}
+
+    /**
+     * Sets the window target.
+     * @param target - the window target.
+     * @netui:attribute required="false"
+     */
+    public void setTarget(String target)
+    {
+        _target = target;
+    }
+
+    //************************************* TAG METHODS ****************************************************************
+
+    /**
+     * Instantiate a new TreeElement.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        // It is only legal to set either an action or an href, this will verify we have exactly one.
+        // report an error when there is more than one specified.
+        int have = 0;
+        if (_href != null) have++;
+        if (_action != null) have++;
+        if (have > 1) {
+            String s = Bundle.getString("Tags_Node_InvalidNode", new Object[]{"href, action"});
+            registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        // If we have specified an action, then we need to verify that the action is a valid action
+        if (_action != null) {
+            HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+            HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
+            boolean isAction = PageflowTagUtils.isAction(request, response, pageContext.getServletContext(), _action);
+            if (!isAction) {
+                registerTagError(Bundle.getString("Tags_BadAction", _action), null);
+                return SKIP_BODY;
+            }
+        }
+
+        // create the tree node
+        Tag parentTag = getParent();
+        if (parentTag instanceof Tree) {
+            _treeElement = new TreeRootElement();
+        }
+        else {
+            _treeElement = new TreeElement();
+        }
+
+        // the the values
+        _treeElement.setIcon(_icon);
+        _treeElement.setClientAction(_clientAction);
+        _treeElement.setScope(_scope);
+        _treeElement.setTitle(_title);
+        _treeElement.setTagId(_tagId);
+        _treeElement.setExpandOnServer(_expandOnServer);
+        _treeElement.setExpanded(_expanded);
+        _treeElement.setDisabled(_disabled);
+        _treeElement.setTarget(_target);
+        _treeElement.setHref(_href);
+        _treeElement.setAction(_action);
+
+        // insert the node into the parent node or into the tree itself.
+        if (parentTag instanceof Tree) {
+            Tree parentTree = (Tree) parentTag;
+            if (parentTree.getRootNode() != null) {
+                String s = Bundle.getString("Tags_TreeMultipleRootNodes");
+                parentTree.registerTagError(s, null);
+                return SKIP_BODY;
+
+            }
+            parentTree.setRootNode(_treeElement);
+        }
+        else if (parentTag instanceof TreeItem) {
+            TreeItem parentNode = (TreeItem) parentTag;
+            parentNode.getNode().addChild(_treeElement);
+        }
+        else {
+            // The parent is neither a Tree or a TreeItem so we must report an error
+            String s = Bundle.getString("Tags_InvalidNodeParent");
+            registerTagError(s, null);
+            return SKIP_BODY;
+        }
+
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content into the label.  This will only occur if the there was not call to set the content
+     * from a child <code>TreeLabel</code> or <code>TreeItemContent</code>.  If the content is set then we
+     * will trim the content.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (bodyContent != null) {
+            // verify that there were no children tags.  If there were children tags then we
+            // ignore all body content produced by the tag.
+            if (!_child) {
+                String value = bodyContent.getString().trim();
+                if (value.length() > 0)
+                    _childLabel = value;
+            }
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Add this node to the parent.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        if (hasErrors()) {
+            reportErrors();
+            Tree t = getParentTree();
+            if (t != null) {
+                ((Tree) t).setError();
+            }
+        }
+        // if there was a childLabel set then we need to update the label value for the tag.
+        if (_childLabel != null) {
+            _treeElement.setLabel(_childLabel);
+        }
+
+        // if there was content defined for the node then we will set it on the node...
+        if (_childContent != null) {
+            _treeElement.setContent(_childContent);
+        }
+
+        // if there was inherited state set it now...
+        if (_state != null) {
+            _treeElement.setInheritableState(_state);
+        }
+
+        // if there is attribute then we should insert that into the TreeElement
+        if (_attributes != null && _attributes.size() > 0) {
+            Iterator it = _attributes.iterator();
+            while (it.hasNext()) {
+                TreeHtmlAttributeInfo jsi = (TreeHtmlAttributeInfo) it.next();
+                _treeElement.setAttribute(jsi);
+            }
+        }
+
+        // reset the tag state and continue.
+        localRelease();
+        return EVAL_PAGE;
+
+    }
+
+    /**
+     * Release any acquired resources.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        if (_attributes != null)
+            _attributes.clear();
+
+        _expanded = false;
+        _disabled = false;
+        _expandOnServer = false;
+        _state = null;
+
+        _action = null;
+        _clientAction = null;
+        _href = null;
+        _icon = null;
+        _treeElement = null;
+        _target = null;
+        _scope = null;
+        _tagId = null;
+
+        _child = false;
+        _childLabel = null;
+        _childContent = null;
+    }
+
+    /**
+     * Return the Tree that should be the parent of this Node.
+     * @return
+     */
+    private Tree getParentTree()
+    {
+        Tag parentTag = getParent();
+        while (parentTag != null) {
+            if (parentTag instanceof Tree) {
+                return (Tree) parentTag;
+            }
+            parentTag = parentTag.getParent();
+        }
+
+        return null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeLabel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeLabel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,102 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * @netui:tag name="treeLabel" description="Set the label for the parent TreeItem."
+ * @netui.tldx:tag requiredparent="treeItem"
+ * renderer="workshop.netui.jspdesigner.tldx.TreeLabelRenderer"
+ * whitespace="indent"
+ * @see org.apache.beehive.netui.tags.tree.Tree
+ * @see org.apache.beehive.netui.tags.tree.TreeElement
+ */
+public class TreeLabel extends AbstractBaseTag
+{
+    private String _text;
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "TreeLabel";
+    }
+
+    /**
+     * Instantiate a new TreeElement.
+     * @throws javax.servlet.jsp.JspException if a JSP exception has occurred
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Save the body content into the label.  This will only occur if the there was not call to set the content
+     * from a child <code>TreeLabel</code> or <code>TreeItemContent</code>.  If the content is set then we
+     * will trim the content.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doAfterBody() throws JspException
+    {
+        if (bodyContent != null) {
+            String value = bodyContent.getString().trim();
+            if (value.length() > 0) {
+                _text = value;
+            }
+            bodyContent.clearBody();
+        }
+        return SKIP_BODY;
+    }
+
+    /**
+     * Add this node to the parent.
+     * @throws JspException if a JSP exception has occurred
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        Object o = getParent();
+        assert (o != null);
+        if (!(o instanceof TreeItem)) {
+            System.err.println("Invalid Parent:" + o.getClass().getName());
+            return EVAL_PAGE;
+        }
+
+        // assign the value to the parent's label value
+        TreeItem ti = (TreeItem) o;
+        ti.setItemLabel(_text);
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Release all state information set by this tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+
+        _text = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreePropertyOverride.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreePropertyOverride.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,200 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * @netui:tag name="treePropertyOverride" description="Overrides the tree properties"
+ * @netui.tldx:tag whitespace="indent"
+ */
+public class TreePropertyOverride extends AbstractBaseTag
+{
+    private InheritableState _iState = new InheritableState();
+
+    /**
+     * Return the name of the Tag.
+     */
+    public String getTagName()
+    {
+        return "TreePropertyOverride";
+    }
+
+    /**
+     * Sets the action used for expanding and contracting tree nodes.
+     * @param action - the action
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="general" reftype="netui-action-url"
+     */
+    public void setSelectionAction(String action)
+    {
+        _iState.setSelectionAction(action);
+    }
+
+    /**
+     * Sets the action used for expanding and contracting tree nodes.
+     * @param action - the action
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="general" reftype="netui-action-url"
+     */
+    public void setExpansionAction(String action)
+    {
+        _iState.setExpansionAction(action);
+    }
+
+    /**
+     * Sets the image name for an open non-leaf node with no
+     * line below it.  (Defaults to "handledownlast.gif").
+     * @param imageHandleDownLast - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageHandleDownLast(String imageHandleDownLast)
+    {
+        _iState.setImageHandleDownLast(imageHandleDownLast);
+    }
+
+    /**
+     * Sets the image name for an open non-leaf node with a
+     * line below it.  (Defaults to "handledownmiddle.gif").
+     * @param imageHandleDownMiddle - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageHandleDownMiddle(String imageHandleDownMiddle)
+    {
+        _iState.setImageHandleDownMiddle(imageHandleDownMiddle);
+    }
+
+    /**
+     * Sets the image name for a closed non-leaf node with no
+     * line below it.  (Defaults to "handlerightlast.gif").
+     * @param imageHandleRightLast - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageHandleRightLast(String imageHandleRightLast)
+    {
+        _iState.setImageHandleRightLast(imageHandleRightLast);
+    }
+
+    /**
+     * Sets the image name for a closed non-leaf node with a
+     * line below it.  (Defaults to "handlerightmiddle.gif").
+     * @param imageHandleRightMiddle - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageHandleRightMiddle(String imageHandleRightMiddle)
+    {
+        _iState.setImageHandleRightMiddle(imageHandleRightMiddle);
+    }
+
+    /**
+     * Sets the image name for a blank area of the tree.
+     * (Defaults to "linelastnode.gif").
+     * @param imageLineLast - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageLineLast(String imageLineLast)
+    {
+        _iState.setImageLineLast(imageLineLast);
+    }
+
+    /**
+     * Sets the default icon for TreeElements for a blank area of the tree.
+     * (Defaults to "linelastnode.gif").
+     * @param defaultIcon - the image name of the defaultIcon
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setDefaultIcon(String defaultIcon)
+    {
+        _iState.setDefaultIcon(defaultIcon);
+    }
+
+    /**
+     * Sets the image name for an area with a line through it.
+     * (Defaults to "linemiddlenode.gif").
+     * @param imageLineMiddle - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageLineMiddle(String imageLineMiddle)
+    {
+        _iState.setImageLineMiddle(imageLineMiddle);
+    }
+
+    /**
+     * Sets the image name for an area with a line through it.
+     * (Defaults to "linevertical.gif").
+     * @param imageLineVertical - the image name (including extension)
+     * @netui:attribute required="false"
+     * @netui.tldx:attribute category="images" reftype="img-url"
+     */
+    public void setImageLineVertical(String imageLineVertical)
+    {
+        _iState.setImageLineVertical(imageLineVertical);
+    }
+
+    /**
+     * Sets the name of the directory containing the images for our icons,
+     * relative to the page including this tag.
+     * @param imageRoot - the directory name
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute category="images"
+     */
+    public void setImageRoot(String imageRoot)
+    {
+        _iState.setImageRoot(imageRoot);
+    }
+
+    /**
+     * Prepare the Tree for rendering.
+     * @throws javax.servlet.jsp.JspException if a JSP exception has occurred
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        return SKIP_BODY;
+    }
+
+    /**
+     * Render this Tree control.
+     * @throws JspException if a processing error occurs
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        Object o = getParent();
+        assert (o != null);
+        if (!(o instanceof TreeItem)) {
+            System.err.println("Invalid Parent:" + o.getClass().getName());
+            return EVAL_PAGE;
+        }
+
+        // assign the value to the parent's label value
+        TreeItem ti = (TreeItem) o;
+        ti.setItemInheritableState(_iState);
+        return EVAL_PAGE;
+    }
+}

Added: incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-html/org/apache/beehive/netui/tags/tree/TreeRootElement.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2004-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.tree;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+/**
+ *
+ */
+public class TreeRootElement extends TreeElement
+{
+    private TreeElement _selectedNode;
+
+    private static final Logger logger = Logger.getInstance(TreeRootElement.class);
+
+    /**
+     * Default constructor for creating a simple tree.
+     */
+    public TreeRootElement()
+    {
+        super();
+    }
+
+    /**
+     * Construct a new TreeElement with the specified parameters.
+     * @param expanded Should this node be expanded?
+     */
+    public TreeRootElement(String label, boolean expanded)
+    {
+        super(label, expanded);
+    }
+
+    public void changeSelected(String selectNode)
+    {
+        // if there is a selectedNode then we need to raise the onSelect
+        // event on that node indicating it will soon not be selected
+        TreeElement n = findNode(selectNode);
+        if (n == null) {
+            logger.warn("The tree element '" + selectNode + "' was not found.  Selection failed");
+            return;
+        }
+
+        // change the node that was selected so it is no longer selected
+        if (_selectedNode != null) {
+            _selectedNode.onSelect();
+            _selectedNode.setSelected(false);
+        }
+
+        // change the node that is to be selected
+        n.onSelect();
+        n.setSelected(true);
+        _selectedNode = n;
+        return;
+    }
+}

Added: incubator/beehive/netui/src/tags-template/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="Beehive/NetUI/Tags-Template" default="compile" basedir=".">
+
+    <property name="module.classpath"
+              value="${servlet24.jar};${jsp20.jar};${struts.jar};${util.jar};${tags.html.jar};${tags.databinding.jar};${pageflow.jar};${log4j.jar};${commons-logging.jar}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source}"
+               >
+            <include name="**/*.java"/>
+        </javac>
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+        </copy>
+
+        <echo>Generate TLD and TLDx</echo>
+        <echo>tools.xdoclet.run.classpath=${tools.xdoclet.run.classpath}</echo>
+        <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpath="${tools.xdoclet.run.classpath}"/>
+        <webdoclet
+                destdir="${build.lib.dir}"
+                excludedtags="@version,@author,@todo"
+                force="true"
+                verbose="true">
+
+            <fileset dir="${src.dir}/tags-template">
+                <include name="**/*.java"/>
+            </fileset>
+            <fileset dir="${src.dir}/tags-html">
+                <include name="**/*.java"/>
+            </fileset>
+
+            <netuitldgen 
+                 xmlencoding="UTF-8"
+                 taglibversion="1.0"
+                 jspversion="1.2" 
+                 shortname="netui-template" 
+                 uri="http://beehive.apache.org/netui/tags-template-1.0"
+                 description="NetUI Template controls taglibrary."
+                 filename="${netui-tags-template.tld.name}"
+                 destdir="${build.lib.dir}"
+                 validateXml="true"
+                 packageName="org.apache.beehive.netui.tags.template"
+            />
+ 
+            <netuitldxgen
+                     xmlencoding="UTF-8"
+		     paletteGenerator="workshop.netui.jspdesigner.generators.NetuiTemplatePaletteGenerator"
+                     uri="http://beehive.apache.org/netui/tags-template-1.0"
+                     tldxVersion="1.0"
+                     filename="${netui-tags-template.tldx.name}"
+                     packageName="org.apache.beehive.netui.tags.template"
+            />
+        </webdoclet>
+
+        <jar jarfile="${build.lib.dir}/${tags-template.jar.name}" basedir="${classes.dir}/${module.name}" excludes="**/*.properties"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete dir="${build.lib.dir}/${tags-template.jar.name}"/>
+        <delete dir="${build.lib.dir}/${netui-tags-template.tld.name}"/>
+        <delete dir="${build.lib.dir}/${netui-tags-template.tldx.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Template Tags"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Attribute.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Attribute.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,179 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.template;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.HashMap;
+
+/**
+ * The Attribute tag defines an attribute within a template that may be set
+ * from a content page. For example, the page's title may be defined as an
+ * attribute in the template and then provided by each content page using the
+ * template.  The attribute has a name and default value.  If the content
+ * page specifies a value for the attribute it will be used, otherwise
+ * the default value is used.
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ *       <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">defaultValue</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A default value used for the Attribute if
+ *   the content page does not provide a value.</td></tr>
+ *
+ * <tr><th rowspan="2">name</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The name identifying the Attribute.  Any named
+ *	attribute may be used more than once within a template page.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example
+ * <p>In this sample, a &lt;netui-template:attribute&gt; tag is shown within the
+ * HTML &lt;title&gt; portion of a template page. The tag defines an attribute
+ * named 'title'. This attribute allows a content page to provide the title of the
+ * page for the template.</p>
+ * <pre>
+ * &lt;title&gt;
+ *     &lt;netui-template:attribute name="title"/&gt;
+ * &lt;/title&gt;</pre>
+ *
+ * @see IncludeSection
+ * @see Section
+ * @see SetAttribute
+ * @see Template
+ * @see Visible
+ *
+ * @netui:tag name="attribute"
+ *          description="Place this tag in a template file, and then set its value with the netui-template:setAttribute tag."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.AttributeRenderer"
+ */
+public class
+        Attribute extends TagSupport
+        implements TemplateConstants
+{
+    /**
+     * The name of the attribute.
+     */
+    private String _name;
+
+    /**
+     * Default value
+     */
+    private String _defaultValue;
+
+    /**
+     * Sets the <code>name</code> for the <code>Attribute</code>.  An
+     * attribute may be used more than once in a template page.
+     * @param name The name of the attribute.  The name does
+     *	not need to be unique because it may be used more than once
+     *  on the page.
+     *
+     * @netui:attribute required="true"  rtexprvalue="true"
+     */
+    public void setName(String name) {
+        _name = name;
+    }
+
+    /**
+     * Returns the <code>name</code> of the <code>Attribute</code>.
+     * @return the name of the <code>Attribute</code>
+     *
+     */
+    //public String getName() {
+    //    return _name;
+    //}
+
+    /**
+     * Sets the <code>defaultValue</code> for the <code>Attribute</code>.
+     * If the content page does not define a value for this attribute
+     * through the <code>SetAttribute</code> tag, then the
+     * <code>defaultValue</code> will be used.
+     * If neither a value nor <code>defaultValue</code> is set, then the
+     * empty String "" will be output.
+     * @param defaultValue The value to set the defaultValue property.
+     *
+     * @netui:attribute required="false"  rtexprvalue="true"
+     */
+    public void setDefaultValue(String defaultValue) {
+        _defaultValue = defaultValue;
+    }
+
+    /**
+     * Returns the <code>defaultValue</code> of the <code>Attribute</code>.
+     * @return a <code>String</code> value representing the default value.
+     */
+    //public String getDefaultValue() {
+    //    return _defaultValue;
+    //}
+
+    /**
+     * Renders the content of the attribute.
+     * @return EVAL_PAGE to continue evaluation of the page.
+     * @throws JspException If there is any failure in the tag.
+     */
+    public int doStartTag()
+            throws JspException {
+        //System.err.println("inside Attribute.doStartTag");
+        ServletRequest req = pageContext.getRequest();
+        HashMap atts = (HashMap) req.getAttribute(TEMPLATE_ATTRIBUTES);
+        try {
+            if (atts != null) {
+                String val = (String) atts.get(_name);
+                if (val != null) {
+                    Writer out = pageContext.getOut();
+                    out.write(val);
+                }
+                else {
+                    Writer out = pageContext.getOut();
+                    if (_defaultValue != null)
+                        out.write(_defaultValue);
+                    else
+                        out.write("");
+                }
+            }
+            else {
+                Writer out = pageContext.getOut();
+                if (_defaultValue != null)
+                    out.write(_defaultValue);
+                else
+                    out.write("");
+            }
+        }
+        catch (IOException e) {
+            //@TODO: this needs to be caught and cleaned up
+            e.printStackTrace();
+        }
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Resets all of the fields of the tag.
+     */
+    // this is the root because this tag doesn't extend AbstractBaseTag
+    protected void localRelease() {
+        _name = null;
+        _defaultValue = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/DivPanel.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/DivPanel.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,215 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.template;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.ScriptReporter;
+import org.apache.struts.util.ResponseUtils;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletRequest;
+
+/**
+ * A DivPanel creates an HTML <div> tag that may contain additional <div> tags.  There will only
+ * be a single div that is visible at a time.
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">tagId</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A DivPane requires a TagId so that a proper id attribute is created.</td></tr>
+ * </table>
+ * </p>
+ * @netui:tag name="divPanel"
+ * description="A divPanel is an placeholder which may contain multiple sections.  Only a single section will be visible at a time."
+ * @netui.tldx:tag whitespace="indent"
+ */
+public class DivPanel extends AbstractBaseTag
+        implements TemplateConstants
+{
+    private String _tagId;
+    private String _firstPage;
+
+    private final String JAVASCRIPT_CLASS = "NetUIDivPanel";
+
+    public static final String DIVPANEL_JAVASCRIPT_ATTR = "netui-div-panel";
+    public static final String DIVPANEL_FIRST_PAGE = "netui-div-panel-first";
+
+    public static final String DIVPANEL_DIV_ID = "netui_divpanel_";
+
+    public static String getCurrentPage(ServletRequest req, String tagId) {
+        String reqId = DIVPANEL_DIV_ID + tagId;
+        String page = req.getParameter(reqId);
+        return page;
+    }
+
+    // renderer="workshop.netui.jspdesigner.tldx.DivPanelRenderer"
+    /**
+     * Returns the name of the Tag.  This is used to
+     * identify the type of tag reporting errors.
+     * @return a constant string representing the name of the tag.
+     */
+    public String getTagName()
+    {
+        return "DivPanel";
+    }
+
+    /**
+     * Return the ID of the tag.  The id may be rewritten by the container (such
+     * as a portal) to make sure it is unique.  JavaScript my lookup the actual id
+     * of the element by looking it up in the <code>netui_names</code> table written
+     * into the HTML.
+     * @return the tagId.
+     */
+    //public String getTagId()
+    //{
+    //    return _tagId;
+    //}
+
+    /**
+     * Set the ID of the tag.
+     * @param tagId - the tagId.
+     * @netui:attribute required="true" rtexprvalue="true"
+     * @netui.tldx:attribute category="general"
+     */
+    public void setTagId(String tagId)
+    {
+        _tagId = tagId;
+    }
+
+    /**
+     * This method will return the first page that was set.  This value will be used
+     * to set the first page that the divPanel should display.  If a value is set in the
+     * request, it will override this value.
+     * @return
+     */
+    //public String getFirstPage() {
+    //    return _firstPage;
+    //}
+
+    /**
+    * Set the ID of the tag.
+    * @param firstPage - the name of the first page.
+    * @netui:attribute rtexprvalue="true"
+    * @netui.tldx:attribute category="general"
+    */
+    public void setFirstPage(String firstPage)
+    {
+        _firstPage = firstPage;
+
+    }
+
+    /**
+     * Causes the content of the section to be rendered into a buffer.
+     * @return SKIP_BODY if the visible state is <code>false</code>,
+     *         otherwise EVAL_BODY_BUFFERED to cause the body content to be buffered.
+     * @throws javax.servlet.jsp.JspException if there are errors.
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
+
+        ScriptReporter sr = getScriptReporter();
+        if (!sr.isRunAtClient()) {
+            System.err.println("Script Reporter Not Run At Client");
+            // @Todo: this needs to verify it is inside a script container that is run at client enabled.
+        }
+        sr.addInitMethod(JAVASCRIPT_CLASS);
+        sr.addAnchorPostRewriter(JAVASCRIPT_CLASS);
+
+        StringBuilder results = new StringBuilder(128);
+        results.append("<div ");
+        renderTagId(results);
+        renderAttribute(results, DIVPANEL_JAVASCRIPT_ATTR, "true");
+
+        // see if we have a page identified in the panel
+        // @todo: need to url rewriter version of this id
+        String reqId = DIVPANEL_DIV_ID + _tagId;
+        String page = req.getParameter(reqId);
+        if (page == null && _firstPage != null) {
+            if (containsExpression(_firstPage)) {
+                Object val = evaluateExpression(_firstPage, "firstPage");
+                if (val!=null)
+                    page = val.toString();
+            }
+        }
+        if (page != null) {
+            renderAttribute(results, DIVPANEL_FIRST_PAGE, page);
+        }
+        results.append(">");
+
+        if (hasErrors()) {
+            reportErrors();
+            return EVAL_BODY_INCLUDE;
+        }
+
+        // Render the remainder to the output stream
+        ResponseUtils.write(pageContext, results.toString());
+        return EVAL_BODY_INCLUDE;
+    }
+
+    /**
+     * Stores the buffered body content into the <code>TEMPLATE_SECTIONS
+     * HashMap</code>.  The buffered body is
+     * accessed by the template page to obtain
+     * the content for <code>IncludeSection</code> tags.
+     * @return EVAL_PAGE to continue evaluating the page.
+     * @throws JspException on error.
+     */
+    public int doEndTag()
+            throws JspException
+    {
+        if (!hasErrors())
+            ResponseUtils.write(pageContext, "</div>");
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    protected void localRelease()
+    {
+        super.localRelease();
+        _tagId = null;
+    }
+
+    // @TODO: this code is duplicated between section and divPanel
+    /**
+     * This method will handle creating the tagId attribute.  The tagId attribute indentifies the
+     * tag in the generated HTML.  There is a lookup table created in JavaScript mapping the <coe>tagId</code>
+     * to the actual name.  The tagId is also run through the naming service so it can be scoped.  Some tags will
+     * write that <code>tagid</code> out as the <code>id</code> attribute of the HTML tag being generated.
+     * @param buffer
+     * @return
+     */
+    protected final String renderTagId(StringBuilder buffer)
+    {
+        assert(_tagId != null);
+
+        String realName = rewriteName(_tagId);
+        String idScript = addTagIdMapping(_tagId, realName);
+
+        // some tags will output the id attribute themselves so they don't write this out
+        renderAttribute(buffer, "id", realName);
+        return idScript;
+    }
+
+}

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/IncludeSection.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/IncludeSection.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,308 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.template;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Used within a template JSP page to define a placeholder for section content.
+ * Within a template, one or more sections are defined within the overall
+ * structure of the page.  Each section has a unique name identifying it.
+ * The content page, through the <code>Section</code> tag, provides content
+ * that is included into the defined sections.
+ * <p>
+ * All content found within the body of the <code>IncludeSection</code>
+ * is ignored.
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ *       <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">name</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The name of the section placeholder. The
+ *	name must be unique within a template.</td></tr>
+ *
+ * <tr><th rowspan="2">defaultPage</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A URL identifying a default JSP or HTML page to
+ *	provide content if the content page does not.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example
+ * This sample shows how a template defines a section to be included.  The
+ * section has a name of 'content' and specifies a default JSP page, which will be
+ * used if the content page does not provide content for the section.
+ * <pre>&lt;netui-template:includeSection name="content"
+ *         defaultPage="/samples/template/noContent.jsp"/&gt;</pre>
+ *
+ * @see Attribute
+ * @see Section
+ * @see SetAttribute
+ * @see Template
+ * @see Visible
+ *
+ * @netui:tag name="includeSection"
+ *          description="Include this tag in a template file to mark out content that will be used in another JSP page."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.IncludeSectionRenderer" whitespace="indent"
+ */
+public class IncludeSection extends AbstractBaseTag
+        implements TemplateConstants
+{
+    private static final Logger logger = Logger.getInstance(IncludeSection.class);
+
+    /**
+     * The name of the section.
+     */
+    private String _name;
+
+    /**
+     * The name of a JSP that will act as a default page
+     */
+    private String _default;
+
+    /**
+     * Returns the name of the Tag.  This is used to
+     * identify the type of tag reporting errors.
+     */
+    public String getTagName() {
+        return "IncludeSection";
+    }
+
+    /**
+     * Sets the name of the section.  This name must be unique within
+     * the template page.
+     * @param name The name of the defined section within the template.
+     *	This name must be unique within the template.
+     *
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setName(String name) {
+        _name = name;
+    }
+
+    /**
+     * Returns the <code>name</code> of the defined section within
+     *	the template file.
+     * @return the name of the <code>IncludeSection</code> being defined.
+     */
+    //public String getName() {
+    //    return _name;
+    //}
+
+    /**
+     * Sets a default JSP page to provide content for the section if
+     * the content page does not define the content.
+     * @param defaultPage a URL identifying a JSP or HTML page
+     *	providing default content to the defined section.
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setDefaultPage(String defaultPage) {
+        _default = defaultPage;
+    }
+
+    /**
+     * Returns the URL of the JSP or HTML page providing default
+     * content to the defined section.
+     * @return the URL of the default content.
+     */
+    //public String getDefaultPage() {
+    //    return _default;
+    //}
+
+    /**
+     * Renders the content of the section into the template.  Errors
+     * are reported inline within the template in development
+     * mode.  If no sections are defined an error is reported.  If
+     * a section is not defined and no default URL is provided an
+     * error is reported.
+     * @return SKIP_BODY to skip any content found in the tag.
+     * @throws JspException on Errors.
+     */
+    public int doStartTag()
+            throws JspException {
+        ServletRequest req = pageContext.getRequest();
+        Template.TemplateContext tc = (Template.TemplateContext)
+                req.getAttribute(TEMPLATE_SECTIONS);
+        if (tc == null) {
+
+            String s = Bundle.getString("Tags_TemplateContextMissing");
+            // report the error.  If this returns a value then we throw an
+            // exception
+            logger.warn(stripBold(s));
+            registerTagError(s,null);
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+        if (tc.secs == null) {
+            if (_default != null) {
+                return callDefault(req);
+            }
+            String s = Bundle.getString("Tags_TemplateSectionMissing",
+                    new Object[]{_name});
+            // report the error.  If this returns a value then we throw an
+            // exception
+            logger.warn(stripBold(s));
+            registerTagError(s,null);
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        String val = (String) tc.secs.get(_name);
+        if (val == null) {
+
+            if (_default == null) {
+                String s = Bundle.getString("Tags_TemplateSectionMissing",
+                        new Object[]{_name});
+                logger.warn(stripBold(s));
+
+                // report the error.  If this returns a value then we throw an
+                // exception
+                registerTagError(s,null);
+                reportErrors();
+                localRelease();
+                return SKIP_BODY;
+            }
+            return callDefault(req);
+
+        }
+
+        try {
+            Writer out = pageContext.getOut();
+            out.write(val);
+        }
+        catch (IOException e) {
+            String reason = Bundle.getString("TempExcp_WritingContent");
+            String s = Bundle.getString("TempExcp_Except",
+                    new Object[]{"IOException",
+                                 reason});
+            logger.error(s);
+            throw new JspException(s,e);
+        }
+        // continue to evalue the page...(This should be a template)
+        localRelease();
+        return SKIP_BODY;
+    }
+
+    private int callDefault(ServletRequest req)
+            throws JspException {
+        if (!defaultExists()) {
+            String s = Bundle.getString("TempExcp_MissingDefaultPage",
+                    new Object[]{_default});
+            logger.error(s);
+            registerTagError(s,null);
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        try {
+            HttpServletResponse resp = (HttpServletResponse)
+                    pageContext.getResponse();
+
+            RequestDispatcher rd = req.getRequestDispatcher(_default);
+            // This is now causing an IOException in Weblogic.  This code was added because Tomcat didn't work
+            // without it.  I'm going to catch and ignore the IOException because this really should affect
+            // things.
+            try {
+                JspWriter out = pageContext.getOut();
+                out.flush();
+            }
+            catch (IOException ignore) {}
+            rd.include(req,resp);
+            localRelease();
+            return SKIP_BODY;
+        }
+        catch (IOException e) {
+            String s = Bundle.getString("TempExcp_ExceptIncludeDefault",
+                    new Object[]{"IOException",
+                                 _default});
+            logger.error(s,e);
+            throw new JspException(s,e);
+        }
+        catch (ServletException se) {
+            String s = Bundle.getString("TempExcp_ExceptIncludeDefault",
+                    new Object[]{"ServletException",
+                                 _default});
+            logger.error(s,se);
+            throw new JspException(s,se);
+        }
+    }
+
+    private boolean defaultExists() {
+        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
+        String realURI = Template.getRealURI(req,_default);
+        try {
+            URL uri = pageContext.getServletContext().getResource(realURI);
+            return (uri != null);
+        }
+        catch (MalformedURLException e) {
+            // @TODO: We need to log an error here...
+            System.err.println("Malformed URI");
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    /**
+     * Resets all of the fields of the tag.
+     */
+    protected void localRelease() {
+        super.localRelease();
+        _name = null;
+        _default = null;
+    }
+
+    /**
+     * This will strip any html out of a warning
+     */
+    static String stripBold(String in) {
+        String boldStart = "<b>";
+        String boldEnd = "</b>";
+        int pos = in.indexOf(boldStart);
+        if (pos == -1)
+            return in;
+        StringBuilder sb = new StringBuilder(in.substring(0,pos));
+        int fill = pos+boldStart.length();
+        pos = in.indexOf(boldEnd,fill);
+        if (pos == -1)
+            return in;
+        sb.append(in.substring(fill,pos));
+        pos += boldEnd.length();
+        sb.append(in.substring(pos));
+        return sb.toString();
+    }
+}

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Section.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Section.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,307 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.template;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.databinding.repeater.Repeater;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.BodyContent;
+import javax.servlet.jsp.tagext.Tag;
+import java.util.HashMap;
+
+import org.apache.struts.util.ResponseUtils;
+
+/**
+ * Used within a content page to provide content for a placeholder
+ * section defined within a template.  The body content of the tag
+ * is passed to the <code>IncludeSection</code> tag in the template
+ * providing the content for that section.
+ * If the <code>name</code> attribute matches a
+ * <code>name</code> attribute on a
+ * <code>IncludeSection</code> tag in the template, the body
+ * content of this tag will be rendered.
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ *       <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">name</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The name of the <code>IncludeSection</code>
+ *	tag in the template that the tags provides content for.</td></tr>
+ *
+ * <tr><th rowspan="2">visible</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean property indicating if the content
+ *	is visible or not.</td></tr>
+ *
+ * <tr><th rowspan="2">visibility</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Sets the visible property through an
+ *	expression.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example
+ * This sample shows a section defined on a content page. Here, simple HTML content
+ * is provided to a section placeholder named 'content', which should be found in the
+ * template page.
+ * <pre>
+ * &lt;netui-template:section name="content"&gt;
+ *     &lt;h4&gt;Section Content&lt;/h4&gt;
+ * &lt;/netui-template:section&gt;
+ * </pre>
+ *
+ * @see Attribute
+ * @see IncludeSection
+ * @see SetAttribute
+ * @see Template
+ * @see Visible
+ *
+ * @netui:tag name="section"
+ *          description="Use this tag to mark out content to replace a netui-template:includeSection within a template file."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.SectionRenderer" requiredparent="template divPanel repeater"
+ */
+public class Section extends AbstractBaseTag
+        implements TemplateConstants
+{
+    /**
+     * The name of the section.
+     */
+    private String _name;
+
+    /**
+     * Is the section visible
+     */
+    private boolean _visible = true;
+
+    /**
+     * The expression version of visibility
+     */
+    private String _visExpr;
+
+    /**
+     * Returns the name of the Tag.  This is used to
+     * identify the type of tag reporting errors.
+     * @return a constant string representing the name of the tag.
+     */
+    public String getTagName() {
+        return "Section";
+    }
+
+    /**
+     * Sets the name of the placeholder section defined in
+     * the template that this tag is providing content for.
+     * This name is matched against the <code>IncludeSection</code>
+     * name.  If the names match, the content of this tag will be
+     * rendered within the template's section.
+     * @param name The name of an <code>IncludeSection<code> the
+     * this tag is providing content for.
+     *
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setName(String name) {
+        _name = name;
+    }
+
+    /**
+     * Get the name of the <code>IncludeSection</code>.
+     * @return the <code>IncludeSection</code> name.
+     */
+    //public String getName() {
+    //    return _name;
+    //}
+
+    /**
+     * Returns the visible state of the tag.
+     * @return <code>true</code> if the section is visible, <code>false</code>
+     *	otherwise.
+     */
+   // public boolean isVisible() {
+    //    return _visible;
+    //}
+
+    /**
+     * Sets the visible state of the tag.
+     * @param visible <code>Boolean</code> value representing the visible state.
+     *
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setVisible(boolean visible) {
+        _visible = visible;
+    }
+
+    /**
+     * Causes the content of the section to be rendered into a buffer.
+     * @return SKIP_BODY if the visible state is <code>false</code>,
+     *	otherwise EVAL_BODY_BUFFERED to cause the body content to be buffered.
+     * @throws JspException if there are errors.
+     */
+    public int doStartTag()
+            throws JspException {
+
+        if (!_visible)
+            return SKIP_BODY;
+
+        // If the parent is a DivPanel then this section will be inlined.
+        Tag parentTag = getParent();
+        // If the parent tag is a repeater then we must insure that the parent of that is a DivPanel
+        if (parentTag instanceof Repeater) {
+            parentTag = parentTag.getParent();
+            //@todo: if this is not a DivPanel then we report an error
+            if (!(parentTag instanceof DivPanel)) {
+                System.err.println("Sections inside of a Repeater must be inside a div panel");
+            }
+        }
+        if (parentTag instanceof DivPanel) {
+            StringBuilder results = new StringBuilder(128);
+            results.append("<div ");
+            renderTagId(results);
+            if (hasErrors()) {
+                reportErrors();
+                localRelease();
+                return EVAL_PAGE;
+            }
+            results.append(">");
+            ResponseUtils.write(pageContext,results.toString());
+            return EVAL_BODY_BUFFERED;
+        }
+
+        return EVAL_BODY_BUFFERED;
+    }
+
+    /**
+     * Stores the buffered body content into the <code>TEMPLATE_SECTIONS
+     * HashMap</code>.  The buffered body is
+     * accessed by the template page to obtain
+     * the content for <code>IncludeSection</code> tags.
+     * @return EVAL_PAGE to continue evaluating the page.
+     * @throws JspException on error.
+     */
+    public int doEndTag()
+            throws JspException {
+
+        // If the parent is a DivPanel then this section will be inlined.
+        Tag parentTag = getParent();
+        if (parentTag instanceof Repeater) {
+             parentTag = parentTag.getParent();
+        }
+         if (parentTag instanceof DivPanel) {
+            return processDivPanel();
+        }
+        assert(parentTag instanceof Template);
+        return processTemplate();
+    }
+
+    /**
+     * Resets all of the fields of the tag.
+     */
+    protected void localRelease() {
+        super.localRelease();
+        _name = null;
+        _visible = true;
+    }
+
+    /**
+     * This method will process the section in the context of a DivPanel
+     * @return returns the integer code doEndTag() will return.
+     */
+    private int processDivPanel()
+            throws JspException {
+
+        if (!_visible)
+            return EVAL_PAGE;
+
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        BodyContent bc = getBodyContent();
+        String content = (bc != null) ? bc.getString() : "";
+        ResponseUtils.write(pageContext,content);
+        ResponseUtils.write(pageContext,"</div>");
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * THis method will process the section in the context of the Template
+     * @return returns the integer code doEndTag() will return.
+     */
+    private int processTemplate()
+    {
+        ServletRequest req = pageContext.getRequest();
+        Template.TemplateContext tc = (Template.TemplateContext)
+                req.getAttribute(TEMPLATE_SECTIONS);
+
+        if (tc.secs == null) {
+            tc.secs = new HashMap();
+        }
+
+        assert (tc.secs != null);
+
+        if (!_visible) {
+            // set the section so that it doesn't contain anything
+            tc.secs.put(_name,"");
+            localRelease();
+            return EVAL_PAGE;
+        }
+        if (hasErrors()) {
+            String s = getErrorsReport();
+            tc.secs.put(_name,s);
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        BodyContent bc = getBodyContent();
+        String content = (bc != null) ? bc.getString() : "";
+        tc.secs.put(_name,content);
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    // @TODO: this code is duplicated between section and divPanel
+    /**
+     * This method will handle creating the tagId attribute.  The tagId attribute indentifies the
+     * tag in the generated HTML.  There is a lookup table created in JavaScript mapping the <coe>tagId</code>
+     * to the actual name.  The tagId is also run through the naming service so it can be scoped.  Some tags will
+     * write that <code>tagid</code> out as the <code>id</code> attribute of the HTML tag being generated.
+     * @param buffer
+     * @return
+     */
+    protected final String renderTagId(StringBuilder buffer)
+        throws JspException {
+        assert(_name != null);
+
+        if (containsExpression(_name)) {
+            Object val = evaluateExpression(_name,"name");
+            if (val != null) {
+                _name = val.toString();
+            }
+        }
+        String realName = rewriteName(_name);
+        String idScript = addTagIdMapping(_name, realName);
+
+        // some tags will output the id attribute themselves so they don't write this out
+        renderAttribute(buffer, "id", realName);
+        return idScript;
+    }
+}

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/SetAttribute.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/SetAttribute.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,175 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.template;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.jsp.JspException;
+import java.util.HashMap;
+
+/**
+ * Set an <code>Attribute</code> value defined in a template.  This tag is
+ * used in content pages to set the value of attributes defined in a template.
+ * The attribute value will override any default value defined on the
+ * <code>Attribute</code>.
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ *       <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">name</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The name of the Attribute in the template for
+ *      which this tag sets a value for.
+ *
+ * <tr><th rowspan="2">value</th><td>Yes</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">The value of the Attribute.
+ *      This may be either a String value or an expression.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example
+ * This sample show how the content page sets the value of an attribute.  The template
+ * attribute 'title' will have the value 'Page Title' everywhere it appears in the template.
+ * <pre>&lt;netui-template:setAttribute name="title" value="Page Title"/></pre>
+ *
+ * @see Attribute
+ * @see IncludeSection
+ * @see Section
+ * @see Template
+ * @see Visible
+ *
+ * @netui:tag name="setAttribute"
+ *          description="Use this tag to set the value of an netui-template:attribute element in a template file."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.SetAttributeRenderer" requiredparent="template"
+ */
+public class SetAttribute extends AbstractBaseTag
+        implements TemplateConstants
+{
+    /**
+     * The name of the attribute.
+     */
+    private String _name;
+
+    /**
+     * The value of the attribute.
+     */
+    private String _value;
+
+    /**
+     * Return the name of the tag.  This is used by error reporting
+     * in the base class <code>AbstractBaseTag</code>.
+     */
+    public String getTagName() {
+        return "SetAttribute";
+    }
+
+    /**
+     * Set the <code>name</code> of the attribute.
+     * @param name The name of the <code>Attribute</code> in the
+     *  template for which this tags sets the value.
+     *
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setName(String name) {
+        _name = name;
+    }
+
+    /**
+     * Return the name of the <code>Attribute</code> we are setting an value
+     *  for.
+     * @return A <code>String</code> value representing the name of the
+     *  Attribute.
+     */
+    //public String getName() {
+    //    return _name;
+    //}
+
+    /**
+     * Set the value of the <code>Attribute</code>.  This attribute
+     * may be assigned a read only expression.
+     * @param value The value to use for the <code>Attribute</code>
+     *  in the template.
+     *
+     * @netui:attribute required="true" rtexprvalue="true"
+     * @netui.tldx:attribute 
+     */
+    public void setValue(String value)
+        throws JspException {
+        if (containsExpression(value)) {
+            Object val = evaluateExpression(value,"value");
+            if (val != null)
+                _value = val.toString();
+            else
+                _value = "";
+        }
+        else
+            _value = value;
+    }
+
+    /**
+     * Return the <code>value</code> value.  If the value is an
+     * expression, the expression will be returned, not the value referred
+     * to by the expression.
+     * @return a <code>String</code> value representing the
+     *  <code>Attribute</code> value.
+     */
+    //public String getValue() {
+    //    return _value;
+    //}
+
+    /**
+     * Tag Lifecycle method called when the tag is first seen.  This method
+     * will add the <code>Attribute</code> value to a <code>HashMap</code>
+     * stored in the request allowing the template to access the value.  If
+     * there are errors, the error text will be placed into the attribute
+     * value.  Nothing is written into the <code>ServletResponse</code>
+     * @return EVAL_PAGE to continue processing the page.
+     * @throws JspException on error
+     */
+    public int doStartTag()
+            throws JspException {
+        ServletRequest req = pageContext.getRequest();
+        HashMap atts = (HashMap) req.getAttribute(TEMPLATE_ATTRIBUTES);
+        if (atts == null) {
+            atts = new HashMap();
+            req.setAttribute(TEMPLATE_ATTRIBUTES,atts);
+        }
+        if (hasErrors()) {
+            String s = getErrorsReport();
+            atts.put(_name,s);
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        atts.put(_name,_value);
+        localRelease();
+        return EVAL_PAGE;
+    }
+
+    /**
+     * Reset all of the fields of the tag.
+     */
+    protected void localRelease() {
+        super.localRelease();
+        _name = null;
+        _value = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Template.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Template.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,474 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.template;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+import org.apache.beehive.netui.tags.AbstractPageError;
+import org.apache.beehive.netui.tags.ErrorReporter;
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.tagext.Tag;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * This tags defines the template to use within a content page.  The
+ * content page interacts with the template page through children tags
+ * of the
+ * <code>Template</code> tag.  The legal children are as follows:
+ * <ul>
+ * <li> <code>setAttribute</code> -- A Tag that will set an Attribute on the
+ *      template.
+ * <li> <code>section</code> -- A tag that defines the content of a section
+ *      defined in the template.
+ * </ul>
+ * The URL of the template file is set as the <code>templatePage</code>
+ *      attribute on the
+ *      <code>Template</code> tag.  The Template file is included from
+ *      the <code>Template</code> tag and will include sections defined
+ *      in the content page.  The content is contained in one or more
+ *      <code>Section</code> tags, which are children of the
+ *      <code>Template</code> tag.  In addition, the content page can set
+ *      attributes of the template page.
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ *       <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">templatePage</th><td>Yes</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">The URL of the template JSP.  This is a URL
+ *      that locates the template JSP page.</td></tr>
+ *
+ * <tr><th rowspan="2">reportErrors</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Does the template contain a &lt;netui:html&gt; tag
+ *      that should report tag errors?</td></tr>
+ * </table>
+ * </p>
+ * @example
+ * This first sample shows a full content page. The content page provides
+ * content for the 'Template.jsp' template.  The template contains children,
+ * defining an attribute and a section.  These will show up as content in the
+ * page.
+ * <pre>
+ * &lt;netui-template:template templatePage="Template.jsp"&gt;
+ *   &lt;netui-template:setAttribute name="title" value="Template Example"/&gt;
+ *   &lt;netui-template:section name="content"&gt;
+ *     &lt;h4&gt;Section Content&lt;/h4&gt;
+ *   &lt;/netui-template:section&gt;
+ * &lt;/netui-template:template&gt;
+ * </pre>
+ * This next sample shows a simple template providing the look and
+ * feel for the content.
+ * <pre>
+ * &lt;html&gt;
+ * &lt;head&gt;
+ * &lt;title&gt;&lt;netui-template:attribute name="title"/&gt;&lt;/title&gt;
+ * &lt;netui:base /&gt;
+ * &lt;/head&gt;
+ * &lt;body style="color: red"&gt;
+ *     &lt;netui:anchor href="index.jsp"&gt;Home&lt;/netui:anchor&gt;&lt;br /&gt;
+ *     &lt;hr /&gt;
+ *     &lt;netui-template:includeSection name="content" defaultPage="/samples/template/noContent.jsp"/&gt;
+ * &lt;/body&gt;
+ * &lt;/html>
+ * </pre>
+ *
+ * @see Attribute
+ * @see IncludeSection
+ * @see Section
+ * @see SetAttribute
+ * @see Visible
+ *
+ * @netui:tag name="template"
+ *          description="Use this tag to associate a JSP page with a particular template file."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.TemplateRenderer" requiredchild="section setAttribute" whitespace="indent"
+ */
+public class Template extends AbstractBaseTag
+        implements TemplateConstants,ErrorReporter
+{
+    private static final Logger logger = Logger.getInstance(Template.class);
+
+    public static class TemplateContext
+    {
+        HashMap secs = null;
+    }
+
+    /**
+     * Saved context for the nested case
+     */
+    private TemplateContext _savedContext = null;
+
+    private boolean _fatalError = false;
+
+    /**
+     * Inner class that is exposed to handle errors
+     */
+    private ErrorReporter _innerErrors;
+
+    /**
+     * Returns the name of the Tag.  This is used to
+     * identify the type of tag reporting errors.
+     */
+    public String getTagName() {
+        return "Template";
+    }
+
+    /**
+     * The URL of the template file...
+     */
+    private String _templatePage;
+
+    /**
+     * boolean indicating the error reporting.
+     */
+    private boolean _reportErrors = false;
+
+    /**
+     * Set the boolean indicating that the template should report errors.  The
+     * errors will be reported through a HTML tag that must be found
+     * in the template JSP.
+     * @param reportErrors boolean indicating that errors should be reported
+     *
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setReportErrors(boolean reportErrors) {
+        _reportErrors = reportErrors;
+    }
+
+    /**
+     * Return a boolean indicating that the template expects the
+     * template file to report errors
+     */
+    //public boolean getReportErrors() {
+    //    return _reportErrors;
+    //}
+
+    /**
+     * Set the URL of the template to use.  The <code>templatePage</code>
+     * is an URL which
+     * identifies the JSP template page.
+     * @param templatePage - a URL pointing to a JSP page that represents the
+     *  template.
+     *
+     * @netui:attribute required="true" rtexprvalue="true"
+     */
+    public void setTemplatePage(String templatePage) {
+        _templatePage = templatePage;
+    }
+
+    /**
+     * Return the URL of the template JSP page.
+     * @return a String representing the URL of the JSP template.
+     */
+   // public String getTemplatePage() {
+   //     return _templatePage;
+    //}
+
+    /**
+     * the tag extension lifecycle method called when the tag is first
+     * encountered.  This will cause the body of
+     * the tag to be evaluated.
+     * @return int indicating that the body should be evaluated.
+     * @throws JspException on errors.
+     */
+    public int doStartTag()
+            throws JspException {
+
+        Tag parent = getParent();
+        if (parent != null) {
+            String s = Bundle.getString("TempExcp_ContainedTemplate");
+            registerTagError(s,null);
+            reportErrors();
+            _fatalError = true;
+            return SKIP_BODY;
+        }
+
+        ServletRequest req = pageContext.getRequest();
+        _savedContext = (TemplateContext) req.getAttribute(TEMPLATE_SECTIONS);
+        TemplateContext ctxt = new TemplateContext();
+        req.setAttribute(TEMPLATE_SECTIONS,ctxt);
+
+        return EVAL_BODY_INCLUDE;
+    }
+
+    /**
+     * The tag extension lifecycle method called after the tag has
+     * processed the body.  This method will include the template
+     * JSP page specified by the <code>templatePage</code> attribute.  The
+     * contents of the template are made available to the template page.
+     * @return SKIP_PAGE to skip all processing after the template.
+     * @throws JspException on all errors.  The most common error is
+     *  an error indicating that the JSP page representing the Template
+     *  isn't found.
+     */
+    public int doEndTag()
+            throws JspException {
+
+        // if there was an error, exit
+        if (_fatalError) {
+            localRelease();
+            return EVAL_PAGE;
+        }
+
+        // get the request and response
+        ServletRequest req = pageContext.getRequest();
+        ServletResponse resp = pageContext.getResponse();
+
+        if (_innerErrors != null) {
+            req.setAttribute(CONTAINER_ERRORS,_innerErrors);
+        }
+
+        String realURI = getRealURI((HttpServletRequest) req,_templatePage);
+        if (!templateExists(realURI)) {
+            String s = Bundle.getString("TempExcp_MissingTemplate",
+                    new Object[]{_templatePage});
+            registerTagError(s,null);
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        RequestDispatcher rd = req.getRequestDispatcher(realURI);
+        if (rd == null) {
+            // @todo: report an error here.
+            System.err.println("The request dispatch just returned a null");
+        }
+        try {
+            // dispatch to the template itself...
+            JspWriter out = pageContext.getOut();
+            out.flush();
+            rd.include(req,resp);
+        }
+        catch (IOException e) {
+            String s = Bundle.getString("TempExcp_ExceptIncludeTemplate",
+                    new Object[]{"IOException",
+                                 _templatePage});
+            registerTagError(s,null);
+            reportErrors();
+            localRelease();
+            return SKIP_PAGE;
+        }
+        catch (ServletException se) {
+
+            // Report the servlet exception
+            String s = Bundle.getString("TempLog_ServletException",
+                    new Object[]{se.getMessage()});
+            registerTagError(s,null);
+
+            // walk the servlet hierarchy
+            Throwable t = se.getRootCause();
+            if (t == null) {
+                s = Bundle.getString("TempLog_ServletError",
+                        new Object[]
+                        {_templatePage,
+                         se.getMessage()
+                        });
+                registerTagError(s,null);
+                reportErrors();
+                localRelease();
+                return SKIP_PAGE;
+            }
+
+            // Walk all of the errors
+            while (t != null && (t instanceof ServletException ||
+                    t instanceof JspException)) {
+
+                s = Bundle.getString("TempLog_Cause",
+                        new Object[]
+                        {t.getClass().getName(),
+                         t.getMessage()
+                        });
+                logger.error(s);
+
+                if (t.getMessage() == null) {
+// @TODO: Need a logger message here
+                    t.printStackTrace();
+                }
+                if (t instanceof ServletException)
+                    t = ((ServletException) t).getRootCause();
+                else
+                    t = ((JspException) t).getRootCause();
+            }
+            if (t == null) {
+                s = Bundle.getString("TempLog_ServletError",
+                        new Object[]
+                        {_templatePage,
+                         se.getMessage()
+                        });
+                registerTagError(s,null);
+                reportErrors();
+                logger.error(s);
+                localRelease();
+                return SKIP_PAGE;
+            }
+            if (t instanceof AssertionError) {
+                s = Bundle.getString("TempLog_AssertCause",
+                        new Object[]
+                        {t.getStackTrace().toString(),
+                        });
+                registerTagError(s,null);
+            }
+            else {
+                s = Bundle.getString("TempLog_Cause",
+                        new Object[]
+                        {t.getClass().getName(),
+                         t.getMessage()
+                        });
+                registerTagError(s,null);
+            }
+            s = Bundle.getString("TempExcp_ExceptIncludeTemplate",
+                    new Object[]{"ServletException",
+                                 _templatePage});
+            registerTagError(s,null);
+            reportErrors();
+            localRelease();
+            return SKIP_PAGE;
+        }
+
+        // skip the page because on this pass we forwarded to the template
+        // for rendering...
+        req.setAttribute(TEMPLATE_SECTIONS,_savedContext);
+        localRelease();
+        return SKIP_PAGE;
+    }
+
+    private boolean templateExists(String realURI) {
+        try {
+            URL uri = pageContext.getServletContext().getResource(realURI);
+            return (uri != null);
+        }
+        catch (MalformedURLException e) {
+            // @TODO: We need to log an error here...
+            System.err.println("Malformed URI");
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    static String getRealURI(HttpServletRequest req,String uri) {
+        if (uri.charAt(0) == '/') {
+            return uri;
+        }
+        String path = req.getServletPath();
+        int pos = path.lastIndexOf('/');
+        if (pos != -1) {
+            path = path.substring(0,pos+1);
+        }
+        return path+uri;
+    }
+
+    /**
+     * Reset all of the fields of the tag.
+     */
+    protected void localRelease() {
+        super.localRelease();
+        _fatalError = false;
+        _templatePage = null;
+        _innerErrors = null;
+        _reportErrors = false;
+        _savedContext = null;
+    }
+
+    /**
+     * Add an error to the errors being reported by this tag.
+     * @param ape - The AbstractPageError to add
+     */
+    public void addError(AbstractPageError ape) {
+        if (_innerErrors == null) {
+            _innerErrors = new InnerErrorReporter();
+        }
+        _innerErrors.addError(ape);
+    }
+
+    /**
+     * Return an ArrayList of the errors
+     * @return an <code>ArrayList</code> of all errors.
+     */
+    public ArrayList returnErrors() {
+        if (_innerErrors == null) {
+            _innerErrors = new InnerErrorReporter();
+        }
+        return _innerErrors.returnErrors();
+    }
+
+    /**
+     * This boolean indicates if an ErrorReporter is reporting errors
+     * or not.  The caller should check this before calling addError
+     * because the ErrorReporter may be off for some reason.
+     * @return a boolean indicating if the tag is reporting errors or not.
+     */
+    public boolean isReporting() {
+        return _reportErrors;
+    }
+
+    static class InnerErrorReporter implements ErrorReporter
+    {
+        /**
+         * The errors reported by contained tags
+         */
+        private ArrayList _errors;
+
+        /**
+         * Add an error to the errors being reported by this tag.
+         * @param ape - The AbstractPageError to add
+         */
+        public void addError(AbstractPageError ape) {
+            assert (ape != null);
+            if (_errors == null) {
+                _errors = new ArrayList();
+            }
+
+            // add the error and update it
+            _errors.add(ape);
+            ape.errorNo = _errors.size();
+        }
+
+        /**
+         * This boolean indicates if an ErrorReporter is reporting errors
+         * or not.  The caller should check this before calling addError
+         * because the ErrorReporter may be off for some reason.
+         * @return a boolean indicating if the tag is reporting errors or not.
+         */
+        public boolean isReporting() {
+            return true;
+        }
+
+        /**
+         * Return an ArrayList of the errors
+         * @return an <code>ArrayList</code> of all errors.
+         */
+        public ArrayList returnErrors() {
+            ArrayList ret = _errors;
+            _errors = null;
+            return ret;
+        }
+    }
+}

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/TemplateConstants.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/TemplateConstants.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.template;
+
+/**
+ * Define the constants used by the template tags.  Mostly these are the
+ * names used to store objects into the <code>ServletRequest</code>.  These
+ * objects are used during the process of generating a page with a template.
+ */
+public interface TemplateConstants
+{
+    /**
+     * This is the name of a <code>HashMap</code> containing all of the
+     * attributes. The <code>HashMap</code> will be stored in the
+     * <code>ServletRequest</code>.
+     */
+    final String TEMPLATE_ATTRIBUTES = "_netui.template.attributes";
+
+    /**
+     * This is the name of a <code>HashMap</code> containing all of the
+     * sections.  The <code>HashMap</code> will be stored in the
+     * <code>ServletRequest</code>.
+     */
+    final String TEMPLATE_SECTIONS = "_netui.template.sections";
+
+}

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Visible.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/Visible.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,214 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tags.template;
+
+import org.apache.beehive.netui.tags.AbstractBaseTag;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * Tag that turns on or off display of the body content based upon
+ * the visible state of the tag.
+ * <p>
+ * <table border="1" cellspacing="0" cellpadding="5" width="75%">
+ * <tr><th colspan="4">Attribute Descriptions</th></tr>
+ * <tr><th>Attribute</th><th>Required</th><th>Runtime Expression Evaluation</th>
+ * <th>Data Bindable</th></tr>
+ *
+ * <tr><th rowspan="2">visible</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">A boolean property indicating if the content
+ * is visible or not.</td></tr>
+ *
+ * <tr><th rowspan="2">visibility</th><td>No</td><td>No</td><td>Read Only</td></tr>
+ * <tr><td colspan="3">Sets the visible property through an
+ * expression.</td></tr>
+ * <tr><th rowspan="2">negate</th><td>No</td><td>No</td><td>No</td></tr>
+ * <tr><td colspan="3">Sets the negate property which will negate the
+ * visible state.</td></tr>
+ *
+ * </table>
+ * </p>
+ * @example This first sample shows how to use the visible tag around some content.  The
+ * visible state is bound to a property 'visible' on the pageFlow, which
+ * determines whether the body content is visible.
+ * <pre>
+ * &lt;netui-template:visible visibility="{pageFlow.visible}"&gt;
+ *      ... Some Content ...
+ * &lt;netui-template:visible&gt;
+ * </pre>
+ * In this next example, the content will be displayed if the previous example
+ * does not display.  This allows two <code>visible<code> tags to act as an
+ * <code>if / else</code> combination.
+ * <pre>&lt;netui-template:visible visibility="{pageFlow.visible}" negate="true"&gt;
+ *      ... Some Content ...
+ * &lt;netui-template:visible&gt;
+ * </pre>
+ *
+ * @see Attribute
+ * @see IncludeSection
+ * @see Section
+ * @see SetAttribute
+ * @see Template
+ *
+ * @netui:tag name="visible"
+ * description="Use this tag to turn on/off the display of the body content."
+ * @netui.tldx:tag renderer="workshop.netui.jspdesigner.tldx.VisibleRenderer"
+ */
+public class Visible extends AbstractBaseTag
+        implements TemplateConstants
+{
+    /**
+     * Is the section visible
+     */
+    private boolean _visible = true;
+    private boolean _negate = false;
+    private String _nonNullExpression = null;
+
+    /**
+     * The expression version of visibility
+     */
+    private String _visExpr;
+
+    /**
+     * Returns the name of the Tag.  This is used to
+     * identify the type of tag reporting errors.
+     * @return a constant string representing the name of the tag.
+     */
+    public String getTagName()
+    {
+        return "Visible";
+    }
+
+    /**
+     * Returns the visible state of the tag.
+     * @return <code>true</code> if the body content is visible,
+     *         <code>false</code> otherwise.
+     */
+    //public boolean isVisible()
+    //{
+    //    return _visible;
+    //}
+
+    /**
+     * Sets the visible state of the tag.
+     * @param visible <code>Boolean</code> value representing the visible state.
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setVisible(boolean visible)
+    {
+        _visible = visible;
+    }
+
+    /**
+     * Returns the negate state of the tag.
+     * @return <code>true</code> if the isVisible should be negated,
+     *         <code>false</code> otherwise.
+     */
+    //public boolean isNegate()
+    //{
+    //    return _negate;
+    //}
+
+    /**
+     * Sets the negate state of the tag.  If negate is <code>true</code>
+     * this will negate the meaning of the visible state.
+     * @param negate <code>Boolean</code> value representing the negate state.
+     * @netui:attribute required="false" rtexprvalue="true" type="boolean"
+     */
+    public void setNegate(boolean negate)
+    {
+        _negate = negate;
+    }
+
+    /**
+     * Sets the visible state of the tag through an expression.
+     * @param expr an expression will be checked to see if the
+     *             body content is visible or not.
+     * @netui:attribute required="false" rtexprvalue="true"
+     * @netui.tldx:attribute
+     */
+    public void setNonNullExpression(String expr)
+            throws JspException
+    {
+        _nonNullExpression = expr;
+    }
+
+    /**
+     * Returns the expression used to set the visibility state.
+     * @return a String expression
+     */
+    //public String getNonNullExpression()
+    //{
+    //    return _nonNullExpression;
+    //}
+
+    /**
+     * Renders the body content if the visible state is <code>
+     * true</code>.  Otherwise nothing is rendered.
+     * @return SKIP_BODY if the visible state is <code>false</code>,
+     *         otherwise EVAL_BODY_INCLUDE to evaluate the body content.
+     * @throws JspException if there are errors.
+     */
+    public int doStartTag()
+            throws JspException
+    {
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        // If we are processing a nonNullExpression, which overrides all else, then
+        // handle it here.
+        if (_nonNullExpression != null) {
+            // this will totally ignore any errors that may come about
+
+            Object val = evaluateExpression(_nonNullExpression, "NonNullExpression");
+            localRelease();
+            if (!_negate)
+                return (val != null) ? EVAL_BODY_INCLUDE : SKIP_BODY;
+            return (val != null) ? SKIP_BODY : EVAL_BODY_INCLUDE;
+        }
+
+        // check for negating
+        boolean vis = _visible;
+        if (_negate)
+            vis = !vis;
+
+        if (!vis) {
+            localRelease();
+            return SKIP_BODY;
+        }
+
+        localRelease();
+        return EVAL_BODY_INCLUDE;
+    }
+
+    /**
+     * Resets all of the fields of the tag.
+     */
+    protected void localRelease()
+    {
+        super.localRelease();
+        _visible = true;
+        _negate = false;
+        _nonNullExpression = null;
+        _visExpr = null;
+    }
+}

Added: incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/package.html
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tags-template/org/apache/beehive/netui/tags/template/package.html	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+<html>
+  <body>
+    <p>
+    This package defines a set of JSP tag extensions providing a simple
+    templating mechanism.  A template page is a JSP page defining the overall
+    look and feel of a set of pages.  It does this by providing an overall
+    layout structure, style and design of
+    the page and defines placeholders for content.  These placeholders
+    are called sections.  A content page is a JSP page containing the
+    content.  The content page provides the sections of content plugged
+    into the template.  Combining the content page and the template page
+    creates the overall look and feel of the content.   The big advantage
+    of templates is the ability to change the look and feel of a set of pages
+    without being forced to modify each page. 
+    </p>
+    <p>
+    The NetUI Template tags define two sets of tag extensions.
+    The first set is used by within a JSP template page to define placeholder
+    where content page provides content.  The second set of tags is
+    used within a content page to indicate the template to use and to
+    define the content that will be presented within the template.  
+    </p>
+    <p>
+    The tags used by a template page are:
+    <ul>
+    <li><b>IncludeSection</b> -- This tag defines a placeholder for
+	content.
+    <li><b>Attribute</b> -- This tag defines an attribute that may
+	be set within the content page.
+    </ul>
+    </p>
+    <p>
+    The tags used by a content page are:
+    <ul>
+    <li><b>Section</b> -- This tag contains the content included
+	within a section defined in the template.
+    <li><b>SetAttribute</b> -- This tag defines the value of an
+	attribute used by a template.
+    <li><b>Template</b> -- This tag specifies which template page
+	is being used for the content.
+    </ul>
+    </p>
+    <p>
+    One additional tag is included in the package.  The <b>Visible</b>
+    tag defines
+    a section that may be visible or not depending upon a boolean value.
+    The tag may be used either within content or within a template.
+    </p>
+  </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/src/tomcat-common/4x/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-common/4x/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Tomcat Common" default="compile" basedir=".">
+
+    <property name="module.classpath" location="${servlet23.jar}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+        </copy>
+
+        <jar jarfile="${build.lib.dir}/${netui-tomcat-common.4x.jar.name}" basedir="${classes.dir}/${module.name}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete dir="${build.lib.dir}/${netui-tomcat-common.4x.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Tomcat 4.x Common"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tomcat-common/4x/org/apache/beehive/netui/tomcat/PageflowHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-common/4x/org/apache/beehive/netui/tomcat/PageflowHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,78 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tomcat;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import javax.security.auth.login.LoginException;
+
+public interface PageflowHelper
+{
+    public static final String PAGEFLOW_HELPER_KEY = "PAGEFLOW_HELPER";
+
+    public void login( String username, String password, HttpServletRequest request )
+            throws LoginException;
+
+    public void logout( boolean invalidateSessions, HttpServletRequest request );
+
+    /**
+     * Causes the server to do a security check for the given URI.  If required, it does a redirect to
+     * change the scheme (http/https).
+     *
+     * @param uri
+     * @param request
+     * @param response
+     * @return <code>true</code> if a redirect occurred.
+     */
+    public boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response,
+                                  ServletContext servletContext );
+
+    /**
+     * Tell whether a web application resource requires a secure transport protocol.  This is
+     * determined from web.xml; for example, the following block specifies that all resources under
+     * /login require a secure transport protocol.
+     * <pre>
+     *    &lt;security-constraint&gt;
+     *        &lt;web-resource-collection&gt;
+     *          &lt;web-resource-name&gt;Secure PageFlow - begin&lt;/web-resource-name&gt;
+     *          &lt;url-pattern&gt;/login/*&lt;/url-pattern&gt;
+     *        &lt;/web-resource-collection&gt;
+     *        &lt;user-data-constraint&gt;
+     *           &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;
+     *        &lt;/user-data-constraint&gt;
+     *    &lt;/security-constraint&gt;
+     * </pre>
+     *
+     * @param uri a webapp-relative URI for a resource.  There must not be query parameters or a scheme
+     *            on the URI.
+     * @param request the current Request
+     * @return <code>Boolean.TRUE</code> if a transport-guarantee of <code>CONFIDENTIAL</code> or
+     *         <code>INTEGRAL</code> is associated with the given resource; <code>Boolean.FALSE</code>
+     *         a transport-guarantee of <code>NONE</code> is associated with the given resource; or
+     *         <code>null</code> if there is no transport-guarantee associated with the given resource.
+     */
+    public Boolean isSecureResource( String uri, HttpServletRequest request );
+
+    public int getListenPort( HttpServletRequest request );
+
+    public int getSecureListenPort( HttpServletRequest request );
+
+
+}

Added: incubator/beehive/netui/src/tomcat-common/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-common/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/Tomcat Common" default="compile" basedir=".">
+
+    <target name="compile">
+        <ant antfile="build.xml" target="compile" dir="4x" />
+    </target>
+
+    <target name="clean">
+        <ant antfile="build.xml" target="clean" dir="4x" />
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="build.xml" target="javadoc" dir="4x" />
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="build.xml" target="clean.javadoc" dir="4x" />
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tomcat-server/4x/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-server/4x/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/Tomcat Server" default="compile" basedir=".">
+
+    <property name="module.classpath" location="${servlet23.jar};${netui-tomcat-common.4x.jar};${log4j.jar};${commons-logging.jar};${catalina.4x.jar};${coyote.4x.jar}"/>
+
+    <target name="compile">
+        <echo>dompile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+            <fileset dir="." includes="**/mbeans-descriptors.xml"/>
+        </copy>
+
+        <jar jarfile="${build.lib.dir}/${netui-tomcat-server.4x.jar.name}" basedir="${classes.dir}/${module.name}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete dir="${build.lib.dir}/${netui-tomcat-server.4x.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Tomcat 4.x Common"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/PageflowHelperImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/PageflowHelperImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,281 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tomcat;
+
+import org.apache.catalina.*;
+import org.apache.catalina.deploy.SecurityConstraint;
+import org.apache.catalina.deploy.SecurityCollection;
+import org.apache.catalina.authenticator.Constants;
+import org.apache.coyote.tomcat4.CoyoteConnector;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import javax.security.auth.login.LoginException;
+import java.io.IOException;
+
+public class PageflowHelperImpl implements PageflowHelper
+{
+
+    private HttpRequest _request = null;
+    private HttpResponse _response = null;
+    private PageflowValve _valve = null;
+
+    public void login( String username, String password, HttpServletRequest request )
+            throws LoginException
+    {
+        _valve.login( username, password, _request, _response );
+    }
+
+    public void logout(boolean invalidateSessions, HttpServletRequest request)
+    {
+        _valve.logout( invalidateSessions, _request, _response );
+    }
+
+    /**
+     * Causes the server to do a security check for the given URI.  If required, it does a redirect to
+     * change the scheme (http/https).
+     *
+     * @param uri
+     * @param request
+     * @param response
+     * @return <code>true</code> if a redirect occurred.
+     */
+    public boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response,
+                                  ServletContext servletContext )
+    {
+        SecurityConstraint constraint = findBestMatchSecurityConstraint( uri, _valve.getContext() );
+
+        if ( constraint == null )
+            return false;
+
+        try
+        {
+            return _valve.checkSecurity(_request, _response, constraint);
+        }
+        catch ( IOException e )
+        {
+            e.printStackTrace(); // TODO?
+            return false;
+        }
+    }
+
+    /**
+     * Tell whether a web application resource requires a secure transport protocol.  This is
+     * determined from web.xml; for example, the following block specifies that all resources under
+     * /login require a secure transport protocol.
+     * <pre>
+     *    &lt;security-constraint&gt;
+     *        &lt;web-resource-collection&gt;
+     *          &lt;web-resource-name&gt;Secure PageFlow - begin&lt;/web-resource-name&gt;
+     *          &lt;url-pattern&gt;/login/*&lt;/url-pattern&gt;
+     *        &lt;/web-resource-collection&gt;
+     *        &lt;user-data-constraint&gt;
+     *           &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;
+     *        &lt;/user-data-constraint&gt;
+     *    &lt;/security-constraint&gt;
+     * </pre>
+     *
+     * @param uri a webapp-relative URI for a resource.  There must not be query parameters or a scheme
+     *            on the URI.
+     * @param request the current request.
+     * @return <code>Boolean.TRUE</code> if a transport-guarantee of <code>CONFIDENTIAL</code> or
+     *         <code>INTEGRAL</code> is associated with the given resource; <code>Boolean.FALSE</code>
+     *         a transport-guarantee of <code>NONE</code> is associated with the given resource; or
+     *         <code>null</code> if there is no transport-guarantee associated with the given resource.
+     */
+    public Boolean isSecureResource( String uri, HttpServletRequest request )
+    {
+        Boolean result = null;
+        Context ctx = _valve.getContext();
+
+        SecurityConstraint constraint = findBestMatchSecurityConstraint( uri, ctx );
+        if ( constraint != null )
+        {
+            String userDataConstraint = constraint.getUserConstraint();
+            if ( userDataConstraint != null )
+            {
+                String transportGuarantee = userDataConstraint;
+                if ( transportGuarantee.equalsIgnoreCase( Constants.CONFIDENTIAL_TRANSPORT )
+                     || transportGuarantee.equalsIgnoreCase( Constants.INTEGRAL_TRANSPORT ) )
+                {
+//                    cache.put( uri, PROTOCOL_SECURE );
+                    return Boolean.TRUE;
+                }
+                else if ( transportGuarantee.equalsIgnoreCase( Constants.NONE_TRANSPORT ) )
+                {
+//                    cache.put( uri, PROTOCOL_UNSECURE );
+                    return Boolean.FALSE;
+                }
+            }
+        }
+
+        return result;
+    }
+
+    public int getListenPort( HttpServletRequest request )
+    {
+        int port = -1;
+        Connector conn = _request.getConnector();
+        if ( conn instanceof CoyoteConnector )
+        {
+            CoyoteConnector cc = (CoyoteConnector)conn;
+            if ( !cc.getSecure() )
+            {
+                // this is the regular connector, so use it's port
+                port = cc.getPort();
+            }
+            else
+            {
+                // look for a non-secure connector on this service with our port as the redirectPort
+                Service svc = cc.getService();
+                Connector[] connectors = svc.findConnectors();
+                for ( int i=0; i<connectors.length; i++ )
+                {
+                    if ( connectors[i] != cc && connectors[i] instanceof CoyoteConnector &&
+                            !connectors[i].getSecure() && connectors[i].getRedirectPort() == cc.getPort() )
+                    {
+                        port = ((CoyoteConnector)connectors[i]).getPort();
+                        break;
+                    }
+                }
+                
+                if ( port == -1 )
+                {
+                    // last resort, just use the first non-secure connector we find 
+                    for ( int i=0; i<connectors.length; i++ )
+                    {
+                        if ( connectors[i] != cc && connectors[i] instanceof CoyoteConnector &&
+                                !connectors[i].getSecure() )
+                        {
+                            port = ((CoyoteConnector)connectors[i]).getPort();
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return port;
+    }
+
+    public int getSecureListenPort( HttpServletRequest request )
+    {
+        int port = -1;
+        Connector conn = _request.getConnector();
+        if ( conn instanceof CoyoteConnector )
+        {
+            CoyoteConnector cc = (CoyoteConnector)conn;
+            if ( cc.getSecure() )
+            {
+                // this is the secure connector, so use it's port
+                port = cc.getPort();
+            }
+            else
+            {
+                // use the redirect port specified in the connector configuration
+                port = cc.getRedirectPort();
+            }
+        }
+        else
+        {
+            // use the redirect port specified in the connector configuration, even if not a coyote connector
+            port = conn.getRedirectPort();
+        }
+        return port;
+    }
+
+
+    /**
+     * Determine the best matching security constraint. An exact url pattern match will always win; followed
+     * by the longest matching path pattern (i.e. /foo/bar/*); followed by a file extension match.
+     * @param uri
+     * @param ctx
+     * @return
+     */
+    private SecurityConstraint findBestMatchSecurityConstraint( String uri, Context ctx )
+    {
+        // NOTE: this logic copied from WeblogicServerAdapter, modified to use catalina classes instead of WLS mbeans
+        // org.apache.catalina.authenticator.AuthenticatorBase.findConstraint() has a similar method but it only
+        // finds the first SecurityConstraint that matches, not necessarily the best match
+
+        SecurityConstraint[] securityConstraints = ctx.findConstraints();
+
+        if ( securityConstraints == null || securityConstraints.length == 0 )
+        {
+            return null;
+        }
+
+        String fileExtension = getFileExtension( uri );
+        SecurityConstraint matchingConstraint = null;
+        int matchingPathLen = -1;
+        boolean foundExact = false;
+
+        for ( int i = 0; i < securityConstraints.length && ! foundExact; ++i )
+        {
+            SecurityConstraint securityConstraint = securityConstraints[i];
+            SecurityCollection[] wrcs = securityConstraint.findCollections();
+
+            for ( int j = 0; j < wrcs.length && ! foundExact; ++j )
+            {
+                String[] urlPatterns = wrcs[j].findPatterns();
+
+                for ( int k = 0; k < urlPatterns.length; ++k )
+                {
+                    String pattern = urlPatterns[k];
+
+                    if ( pattern.length() > matchingPathLen && pattern.endsWith( "/*" ) )
+                    {
+                        if ( uri.startsWith( pattern.substring( 0, pattern.length() - 1 ) ) )
+                        {
+                            matchingConstraint = securityConstraint;
+                            matchingPathLen = pattern.length();
+                        }
+                    }
+                    else if ( matchingConstraint == null && pattern.equals( "*." + fileExtension ) )
+                    {
+                        matchingConstraint = securityConstraint;
+                    }
+                    else if ( pattern.equals( uri ) )
+                    {
+                        matchingConstraint = securityConstraint;
+                        foundExact = true;
+                        break;
+                    }
+                }
+            }
+        }
+
+        return matchingConstraint;
+    }
+
+    public static String getFileExtension( String filename )
+    {
+        int lastDot = filename.lastIndexOf( '.' );
+
+        return ( lastDot != -1 ? filename.substring( lastDot + 1 ) : "" );
+    }
+
+    void initRequest( HttpRequest request, HttpResponse response, PageflowValve valve )
+    {
+        _request = request;
+        _response = response;
+        _valve = valve;
+    }
+
+}

Added: incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/PageflowValve.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/PageflowValve.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tomcat;
+
+import org.apache.catalina.*;
+import org.apache.catalina.deploy.SecurityConstraint;
+import org.apache.catalina.authenticator.BasicAuthenticator;
+import org.apache.catalina.authenticator.Constants;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.login.FailedLoginException;
+import java.io.IOException;
+import java.security.Principal;
+
+/**
+ * Tomcat valve implementation to give the netui pageflow infrastructure access to tomcat
+ * internal functionality. When this valve is configured in a context, an instance of
+ * org.apache.beehive.netui.tomcat.PageflowHelper will be placed in the session, which can
+ * be used by the TomcatServerAdapter implementation of org.apache.beehive.netui.pageflow.ServletAdapter.
+ */
+public class PageflowValve extends BasicAuthenticator
+{
+
+    public void invoke(Request request, Response response, ValveContext valveContext)
+            throws IOException, ServletException
+    {
+        // If this is not an HTTP request and response, just pass them on
+        if (!(request instanceof HttpRequest) ||
+            !(response instanceof HttpResponse)) {
+            valveContext.invokeNext(request, response);
+            return;
+        }
+
+        // NOTE: this code copied from org.apache.catalina.authenticator.AuthenticatorBase.invoke()
+        // Have we got a cached authenticated Principal to put in the request?
+        if (cache) {
+            Principal principal =
+                ((HttpServletRequest) request.getRequest()).getUserPrincipal();
+            if (principal == null) {
+                Session session = getSession((HttpRequest)request);
+                if (session != null) {
+                    principal = session.getPrincipal();
+                    if (principal != null) {
+                        if (debug >= 1)
+                            log("We have cached auth type " +
+                                session.getAuthType() +
+                                " for principal " +
+                                session.getPrincipal());
+                        ((HttpRequest)request).setAuthType(session.getAuthType());
+                        ((HttpRequest)request).setUserPrincipal(principal);
+                    }
+                }
+            }
+        }
+
+        // initialize pageflow helper
+        HttpServletRequest hreq =
+            (HttpServletRequest) request.getRequest();
+        PageflowHelper helper = new PageflowHelperImpl();
+        ((PageflowHelperImpl)helper).initRequest( (HttpRequest)request, (HttpResponse)response, this );
+        hreq.setAttribute( PageflowHelper.PAGEFLOW_HELPER_KEY, helper );
+
+        valveContext.invokeNext(request, response);
+    }
+
+    void login( String username, String password, HttpRequest request, HttpResponse response )
+        throws LoginException
+    {
+        // note: if the login is not successful, we don't reset the current principal (if there is one),
+        // this is to match the behavior of the internal weblogic classes used in the default pageflow runtime.
+        Principal principal = context.getRealm().authenticate(username, password);
+        if (principal != null)
+        {
+            register(request, response, principal, Constants.BASIC_METHOD,
+                     username, password);
+            return;
+        }
+
+        throw new FailedLoginException( "Pageflow login failed: " + username ); // TODO: I18N
+    }
+
+    void logout( boolean invalidateSessions, HttpRequest request, HttpResponse response )
+    {
+        if ( invalidateSessions )
+        {
+            // invalidate the session - this will also nuke the request, so save the pageflow helper
+            // and put it back when we're done
+            HttpServletRequest hreq =
+                (HttpServletRequest) request.getRequest();
+            PageflowHelper pfh = (PageflowHelper)hreq.getAttribute( PageflowHelper.PAGEFLOW_HELPER_KEY );
+            HttpSession session = hreq.getSession(false);
+            if ( session != null )
+                session.invalidate();
+            if ( pfh != null )
+                hreq.setAttribute( PageflowHelper.PAGEFLOW_HELPER_KEY, pfh );
+        }
+        register( request, response, null, null, null, null );
+    }
+
+    /**
+     * Causes the server to do a security check for the given URI.  If required, it does a redirect to
+     * change the scheme (http/https).
+     *
+     * @param request
+     * @param response
+     * @param constraint The SecurityConstraint to check against
+     * @return <code>true</code> if a redirect occurred.
+     */
+    public boolean checkSecurity( HttpRequest request, HttpResponse response, SecurityConstraint constraint )
+        throws IOException
+    {
+        // the tomcat version of this returns false if the user was redirected, so we want the opposite of that
+        return !checkUserData( request, response, constraint );
+    }
+
+
+    Context getContext()
+    {
+        return context;
+    }
+}

Added: incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/mbeans-descriptors.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-server/4x/org/apache/beehive/netui/tomcat/mbeans-descriptors.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE mbeans-descriptors PUBLIC
+ "-//Apache Software Foundation//DTD Model MBeans Configuration File"
+ "http://jakarta.apache.org/commons/dtds/mbeans-descriptors.dtd">
+
+<!--
+     Descriptions of JMX MBeans for pageflows
+ -->
+
+<mbeans-descriptors>
+
+
+  <mbean         name="PageflowValve"
+            className="org.apache.catalina.mbeans.ClassNameMBean"
+          description="Helper valve to enable pageflows in tomcat"
+               domain="Catalina"
+                group="Valve"
+                 type="org.apache.beehive.netui.tomcat.PageflowValve">
+
+    <attribute   name="className"
+          description="Fully qualified class name of the managed object"
+                 type="java.lang.String"
+            writeable="false"/>
+
+    <attribute   name="debug"
+          description="The debugging detail level for this component"
+                 type="int"/>
+
+  </mbean>
+
+</mbeans-descriptors>

Added: incubator/beehive/netui/src/tomcat-server/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-server/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/Tomcat Server" default="compile" basedir=".">
+
+    <target name="compile">
+        <ant antfile="build.xml" target="compile" dir="4x"/>
+    </target>
+
+    <target name="clean">
+        <ant antfile="build.xml" target="clean" dir="4x" />
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="build.xml" target="javadoc" dir="4x" />
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="build.xml" target="clean.javadoc" dir="4x" />
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tomcat-webapp/4x/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-webapp/4x/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/Tomcat Webapp" default="compile" basedir=".">
+
+    <property name="module.classpath" location="${servlet23.jar};${netui-tomcat-common.4x.jar};${scoping.jar};${pageflow.jar}"/>
+
+    <target name="compile">
+        <echo>Compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+        </copy>
+
+        <jar jarfile="${build.lib.dir}/${netui-tomcat-webapp.4x.jar.name}" basedir="${classes.dir}/${module.name}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete dir="${build.lib.dir}/${netui-tomcat-webapp.4x.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Tomcat 4.x Webapp"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/tomcat-webapp/4x/org/apache/beehive/netui/tomcat/TomcatServerAdapter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-webapp/4x/org/apache/beehive/netui/tomcat/TomcatServerAdapter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tomcat;
+
+import org.apache.beehive.netui.tomcat.PageflowHelper;
+import org.apache.beehive.netui.pageflow.internal.DefaultServerAdapter;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import javax.security.auth.login.LoginException;
+
+public class TomcatServerAdapter extends DefaultServerAdapter
+{
+    /**
+     * Tell whether a web application resource requires a secure transport protocol.  This is
+     * determined from web.xml; for example, the following block specifies that all resources under
+     * /login require a secure transport protocol.
+     * <pre>
+     *    &lt;security-constraint&gt;
+     *        &lt;web-resource-collection&gt;
+     *          &lt;web-resource-name&gt;Secure PageFlow - begin&lt;/web-resource-name&gt;
+     *          &lt;url-pattern&gt;/login/*&lt;/url-pattern&gt;
+     *        &lt;/web-resource-collection&gt;
+     *        &lt;user-data-constraint&gt;
+     *           &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;
+     *        &lt;/user-data-constraint&gt;
+     *    &lt;/security-constraint&gt;
+     * </pre>
+     *
+     * @param uri a webapp-relative URI for a resource.  There must not be query parameters or a scheme
+     *            on the URI.
+     * @param request the current request.
+     * @return <code>Boolean.TRUE</code> if a transport-guarantee of <code>CONFIDENTIAL</code> or
+     *         <code>INTEGRAL</code> is associated with the given resource; <code>Boolean.FALSE</code>
+     *         a transport-guarantee of <code>NONE</code> is associated with the given resource; or
+     *         <code>null</code> if there is no transport-guarantee associated with the given resource.
+     */
+    public Boolean isSecureResource( String uri, HttpServletRequest request, ServletContext servletContext )
+    {
+        if ( request == null )
+            throw new IllegalArgumentException( "ServletAdapter.isSecureResource requires a non-null HttpServletRequest in a portable environment" );//NOI18N
+        return getHelper( request ).isSecureResource( uri, request );
+    }
+
+    public boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response,
+                                  ServletContext servletContext )
+    {
+        return getHelper( request ).checkSecurity( uri, request, response, servletContext );
+    }
+
+    public int getListenPort( HttpServletRequest request )
+    {
+        return getHelper( request ).getListenPort( request );
+    }
+
+    public int getSecureListenPort( HttpServletRequest request )
+    {
+        return getHelper( request ).getSecureListenPort( request );
+    }
+
+    public void login( String username, String password, HttpServletRequest request, HttpServletResponse response )
+            throws LoginException
+    {
+        getHelper( request ).login( username, password, request );
+    }
+
+    public void logout( boolean invalidateSessions, HttpServletRequest request, HttpServletResponse response )
+    {
+        getHelper( request ).logout( invalidateSessions, request );
+    }
+
+    private PageflowHelper getHelper( HttpServletRequest request )
+    {
+        try
+        {
+            HttpServletRequest outerRequest = ScopedServletUtils.getOuterRequest( request ); 
+            PageflowHelper helper = (PageflowHelper)outerRequest.getAttribute( PageflowHelper.PAGEFLOW_HELPER_KEY );
+            if ( helper == null )
+                throw new UnsupportedOperationException( "Pageflow helper not found in session. Make sure PageflowValve is installed in this context" );
+            return helper;
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace();
+            throw new UnsupportedOperationException( "Error loading pageflow tomcat helper." );
+        }
+    }
+
+}

Added: incubator/beehive/netui/src/tomcat-webapp/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/tomcat-webapp/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/Tomcat Webapp" default="compile" basedir=".">
+
+    <target name="compile">
+        <ant antfile="build.xml" target="compile" dir="4x" />
+    </target>
+
+    <target name="clean">
+        <ant antfile="build.xml" target="clean" dir="4x" />
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="build.xml" target="javadoc" dir="4x" />
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="build.xml" target="clean.javadoc" dir="4x" />
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/util/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/Util" default="compile" basedir=".">
+
+    <property name="module.classpath" location="${servlet24.jar};${struts.jar};${log4j.jar};${commons-logging.jar};${xbean.jar}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+
+        <mkdir dir="${classes.dir}/${module.name}"/>
+
+        <!-- run the XMLBean compiler for the webapp schema -->
+        <ant antfile="${netui.ant.dir}/xmlBean.xml">
+            <property name="xsd.root.dir" value="schema/"/>
+            <property name="class.output.dir" value="${classes.dir}/${module.name}"/>
+            <property name="xbean.inputs" value="schema/*.xsd*"/>
+            <property name="xbean.output" value="${build.lib.dir}/${util.jar.name}"/>
+        </ant>
+
+        <javac srcdir="."
+               destdir="${classes.dir}/${module.name}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source.1.5}">
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${classes.dir}/${module.name}">
+            <fileset dir="." includes="**/*.properties"/>
+            <fileset dir="." includes="**/*.xml"/>
+        </copy>
+
+        <!-- copy the default config file used when one isn't found in /WEB-INF/netui-config.xml -->
+        <copy todir="${classes.dir}/${module.name}/org/apache/beehive/netui/util/config" file="${defaultnetuiconfig.xml}"/>
+
+        <jar jarfile="${build.lib.dir}/${util.jar.name}" basedir="${classes.dir}/${module.name}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${classes.dir}/${module.name}"/>
+        <delete file="${build.lib.dir}/${util.jar.name}"/>
+    </target>
+
+    <target name="javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="javadoc.callback">
+            <property name="window.title" value="NetUI Utilities"/>
+        </ant>
+    </target>
+
+    <target name="clean.javadoc">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="cleanjavadoc.callback"/>
+    </target>
+
+</project>

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/Bundle.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/Bundle.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,103 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.text.MessageFormat;
+import java.net.URL;
+
+/**
+ * Convenience class for dealing with resource bundles.
+ */
+public class Bundle
+{
+
+    private static final String BUNDLE_NAME = "org.apache.beehive.netui.util.netui";
+
+    /** No need, it's all static */
+    private Bundle(){}
+
+    /**
+     * Returns the resource bundle named Bundle[].properties in the
+     * package of the specified class.
+     */
+    private static ResourceBundle getBundle()
+    {
+        return ResourceBundle.getBundle(BUNDLE_NAME);
+    }
+
+
+    /**
+     * Returns the string specified by aKey from the errors.properties bundle.
+     */
+    public static String getString(String aKey)
+    {
+        try
+        {
+            return getBundle().getString(aKey);
+        }
+        catch(Exception e)
+        {
+            return getString("System_StringNotFound",new Object[]{aKey});
+        }
+    }
+
+    /**
+     * Returns the string specified by aKey from the errors.properties bundle.
+     *
+     * @param aKey The key for the message pattern in the bundle.
+     * @param arg The arg to use in the message format.
+     */
+    public static String getString(String aKey, Object arg)
+    {
+        return getString(aKey,new Object[]{arg});
+    }
+
+    /**
+     * Returns the string specified by aKey from the errors.properties bundle.
+     *
+     * @param aKey The key for the message pattern in the bundle.
+     * @param args The args to use in the message format.
+     */
+    public static String getString(String aKey, Object[] args)
+    {
+        String pattern = getBundle().getString(aKey);
+        MessageFormat format = new MessageFormat(pattern);
+        
+        return format.format(args).toString();
+    }
+    
+    /**
+     *
+     */
+    public static String getErrorString(String aKey, Object[] args)
+    {
+        String pattern = getBundle().getString(aKey);
+        MessageFormat format = new MessageFormat(pattern);
+        
+        return format.format(args);
+    }
+
+    public static String getErrorString(String aKey)
+    {
+        return getBundle().getString(aKey);
+    }
+
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/FileUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/FileUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,158 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util;
+
+import java.io.File;
+
+public class FileUtils
+{
+    private static final boolean OS_CASE_SENSITIVE = ! new File( "x" ).equals( new File( "X" ) );
+
+
+    /**
+     * Tell whether a given URI is absolute, i.e., whether it contains a scheme-part (e.g., "http:").
+     * 
+     * @param uri the URI to test.
+     * @return <code>true</code> if the given URI is absolute.
+     */ 
+    public static boolean isAbsoluteURI( String uri )
+    {
+        //
+        // This method needs to be fast, so it can't use java.net.URI.
+        //
+        if ( uri.startsWith( "/" ) )
+        {
+            return false;
+        }
+        
+        for ( int i = 0, len = uri.length(); i < len; ++i )
+        {
+            char c = uri.charAt( i );
+            
+            if ( c == ':' )
+            {
+                return true;
+            }
+            else if ( c == '/' )
+            {
+                return false;
+            }
+        }
+        
+        return false;
+    }
+    
+    /**
+     * Tell whether a URI ends in a given String.
+     */ 
+    public static boolean uriEndsWith( String uri, String ending )
+    {
+        int queryStart = uri.indexOf( '?' );
+        
+        if ( queryStart == -1 )
+        {
+            return uri.endsWith( ending );
+        }
+        else
+        {
+            return uri.length() - queryStart >= ending.length()
+                   && uri.substring( queryStart - ending.length(), queryStart ).equals( ending );
+        }
+    }
+    
+    /**
+     * Get the file extension from a file name.
+     * @param filename the file name.
+     * @return the file extension (everything after the last '.'), or the empty string if there is no
+     *         file extension.
+     */ 
+    public static String getFileExtension( String filename )
+    {
+        int lastDot = filename.lastIndexOf( '.' );
+        
+        return ( lastDot != -1 ? filename.substring( lastDot + 1 ) : "" );
+    }    
+
+    /**
+     * Tell whether the current operating system is case-sensitive with regard to file names.
+     */ 
+    public static boolean isOSCaseSensitive()
+    {
+        return OS_CASE_SENSITIVE;
+    }
+    
+    /**
+     * Compare two strings, with case sensitivity determined by the operating system.
+     * 
+     * @param s1 the first String to compare.
+     * @param s2 the second String to compare.
+     * @return <code>true</code> when:
+     *     <ul>
+     *         <li>the strings match exactly (including case), or,</li>
+     *         <li>the operating system is not case-sensitive with regard to file names, and the strings match,
+     *             ignoring case.</li>
+     *     </ul>
+     * @see #isOSCaseSensitive()
+     */ 
+    public static boolean osSensitiveEquals( String s1, String s2 )
+    {
+        if ( OS_CASE_SENSITIVE )
+        {
+            return s1.equals( s2 );
+        }
+        else
+        {
+            return s1.equalsIgnoreCase( s2 ); 
+        }
+    }
+    
+    /**
+     * Tell whether a string ends with a particular suffix, with case sensitivity determined by the operating system.
+     * 
+     * @param str the String to test.
+     * @param suffix the suffix to look for.
+     * @return <code>true</code> when:
+     *     <ul>
+     *         <li><code>str</code> ends with <code>suffix</code>, or,</li>
+     *         <li>the operating system is not case-sensitive with regard to file names, and <code>str</code> ends with
+     *             <code>suffix</code>, ignoring case.</li>
+     *     </ul>
+     * @see #isOSCaseSensitive()
+     */ 
+    public static boolean osSensitiveEndsWith( String str, String suffix )
+    {
+        if ( OS_CASE_SENSITIVE )
+        {
+            return str.endsWith( suffix );
+        }
+        else
+        {
+            int strLen = str.length();
+            int suffixLen = suffix.length();
+            
+            if ( strLen < suffixLen )
+            {
+                return false;
+            }
+            
+            return ( str.substring( strLen - suffixLen ).equalsIgnoreCase( suffix ) );
+        }
+    }
+}
+

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/HtmlExceptionFormatter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/HtmlExceptionFormatter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,94 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util;
+
+// java imports
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+// internal imports
+
+// external imports
+
+/**
+ * Format a Throwable object so that it displays well in HTML.
+ */ 
+public class HtmlExceptionFormatter
+{
+    /** An XHTML line break */
+    private static final String HTML_LINE_BREAK = "<br/>";
+
+    /** The end of line character to replace with an HTML line break */
+    /* @TODO: is the formatting of Throwable.printStackTrace() dependent on the platform? */
+    private static final String LINE_BREAK = "\n";
+    
+    private static final String CAUSED_BY = "caused by: ";
+
+    /**
+     * Format an exception into XHTML.  Optionally include a message and the stack trace.
+     */
+    /* Note, this is not a valid replacement for real logging. */
+    public static String format(String message, Throwable t, boolean stackTrace)
+    {
+        StringBuilder buf = new StringBuilder();
+
+        if (message != null)
+        {
+            buf.append(message);
+            if (t.getCause() != null)
+            {
+                buf.append(HTML_LINE_BREAK);
+                buf.append(CAUSED_BY);
+                buf.append(": ");
+                buf.append(t.getCause().toString());
+            }
+        }
+
+
+        if (stackTrace)
+        {
+            if (message != null)
+                buf.append(HTML_LINE_BREAK);
+
+            StringWriter sw = new StringWriter();
+            PrintWriter pw = new PrintWriter(sw);
+            t.printStackTrace(pw);
+            pw.flush();
+            pw.close();
+
+            // put a style around the first line
+            String error = sw.toString();
+            int pos = error.indexOf(LINE_BREAK);
+            if (pos != -1) {
+                String lineOne = error.substring(0,pos);
+                String rest = error.substring(pos);
+
+                buf.append("<span class='pfErrorLineOne'>");
+                buf.append(lineOne);
+                buf.append("</span>");
+                buf.append(rest);
+            }
+            else {
+                buf.append(sw.toString());
+            }
+        }
+        
+        return buf.toString().replaceAll(LINE_BREAK, HTML_LINE_BREAK);
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/ParamHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/ParamHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,154 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util;
+
+import java.util.Map;
+import java.util.List;
+import java.lang.reflect.Array;
+import org.apache.beehive.netui.util.logging.Logger;
+
+/**
+ *
+ */
+public class ParamHelper
+{
+    private static final Logger logger = Logger.getInstance(ParamHelper.class);
+    public static void addParam(Map params, String name, Object value)
+    {
+
+
+        if (params == null)
+            throw new IllegalArgumentException("Parameter map cannot be null");
+        if (name == null)
+            throw new IllegalArgumentException("Parameter name cannot be null");
+
+        if (value instanceof Map) {
+            logger.warn(Bundle.getString("Tags_BadParameterType", name));
+            return;
+        }
+
+        if (value == null)
+            value = "";
+
+        // check to see if we are adding a new element
+        //      or if this is an existing element
+        Object o = params.get(name);
+        int length = 0;
+
+        if (o != null) {
+            assert (o instanceof String ||
+                    o instanceof String[]);
+
+            if (o.getClass().isArray()) {
+                length = Array.getLength(o);
+            }
+            else {
+                length++;
+            }
+        }
+
+        // check how much size the output needs to be
+        if (value.getClass().isArray()) {
+            length += Array.getLength(value);
+        }
+        else if (value instanceof List) {
+            length += ((List) value).size();
+        }
+        else {
+            length++;
+        }
+
+        if (length == 0)
+            return;
+
+        //System.err.println("Number of vaues:" + length);
+        // if there is only a single value push it to the parameter table
+        if (length == 1) {
+            if (value.getClass().isArray()) {
+                Object val = Array.get(value, 0);
+                if (val != null)
+                    params.put(name,val.toString());
+                else
+                    params.put(name,"");
+            }
+            else if (value instanceof List) {
+                List list = (List) value;
+                Object val = list.get(0);
+                if (val != null)
+                    params.put(name,val.toString());
+                else
+                    params.put(name,"");
+            }
+            else 
+                params.put(name,value.toString());
+            return;
+        }
+
+        // allocate the string for the multiple values
+        String[] values = new String[length];
+        int offset = 0;
+
+        // if we had old values, push them to the new array
+        if (o != null) {
+            if (o.getClass().isArray()) {
+                String[] obs = (String[]) o;
+                for (;offset<obs.length;offset++) {
+                    values[offset] = obs[offset];
+                }
+            }
+            else {
+                values[0] = o.toString();
+                offset = 1;
+            }
+        }
+
+        // now move the new values to the array starting at the offset
+        // position
+        if (value.getClass().isArray())
+        {
+            //need to convert this array into a String[]
+            int size = Array.getLength(value);
+            for (int i=0; i < size; i++)
+            {
+                Object val = Array.get(value, i);
+                if (val != null)
+                    values[i+offset] = val.toString();
+                else
+                   values[i+offset] = "";
+            }
+        }
+        else if (value instanceof List)
+        {
+            List list = (List) value;
+            int size = list.size();
+            for (int i=0; i < size; i++)
+            {
+                if (list.get(i) != null)
+                    values[i+offset] = list.get(i).toString();
+                else
+                    values[i+offset] = "";
+            }
+        }
+        else {
+            values[offset] = value.toString();
+        }
+        // store the new values array
+        params.put(name, values);
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/ServletUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/ServletUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,115 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import java.io.PrintStream;
+import java.util.Enumeration;
+
+public class ServletUtils
+{
+    /**
+     * Print parameters and attributes in the given request.
+     * 
+     * @param request the current HttpServletRequest.
+     * @param output a PrintStream to which to output request parameters and request/session
+     *            attributes; if <code>null</null>, <code>System.err</code> is used.
+     * 
+     */
+    public static void dumpRequest( HttpServletRequest request, PrintStream output )
+    {
+        if ( output == null )
+        {
+            output = System.err;
+        }
+
+        output.println( "*** HttpServletRequest " + request );
+        output.println( "        uri = " + request.getRequestURI() );
+
+        for ( Enumeration e = request.getParameterNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            output.println( "            parameter " + name + " = " + request.getParameter( name ) );
+        }
+
+        for ( Enumeration e = request.getAttributeNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            output.println( "            attribute " + name + " = " + request.getAttribute( name ) );
+        }
+
+        for ( Enumeration e = request.getSession().getAttributeNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            output.println( "            session attribute " + name + " = " + request.getSession().getAttribute( name ) );
+        }
+    }
+
+    /**
+     * Print attributes in the given ServletContext.
+     * 
+     * @param context the current ServletContext.
+     * @param output a PrintStream to which to output ServletContext attributes; if <code>null</null>,
+                     <code>System.err</code> is used.
+     * 
+     */
+    public static void dumpServletContext( ServletContext context, PrintStream output )
+    {
+        if ( output == null )
+        {
+            output = System.err;
+        }
+
+        output.println( "*** ServletContext " + context );
+
+        for ( Enumeration e = context.getAttributeNames(); e.hasMoreElements(); )
+        {
+            String name = ( String ) e.nextElement();
+            output.println( "            attribute " + name + " = " + context.getAttribute( name ) );
+        }
+    }
+    
+    /**
+     * Set response headers to prevent caching of the response by the browser.
+     * 
+     * @param response the current HttpServletResponse
+     */ 
+    public static void preventCache( HttpServletResponse response )
+    {
+        response.setHeader( "Pragma", "No-cache" );
+        response.setDateHeader( "Expires", 0 );
+        response.setHeader( "Cache-Control", "no-cache" );
+    }
+    
+    /**
+     * Get the base filename of the given URI.
+     *
+     * @param uri the URI from which to get the base filename.
+     * @return a String containing everything after the last slash of the given URI.
+     */
+    public static String getBaseName( String uri )
+    {
+        int lastSlash = uri.lastIndexOf( '/' );
+        assert lastSlash != -1 : uri;
+        assert lastSlash < uri.length() - 1 : "URI must not end with a slash: " + uri;
+        return uri.substring( lastSlash + 1 );
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/TemplateHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/TemplateHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util;
+
+/**
+ * @deprecated Use {@link org.apache.beehive.netui.pageflow.util.TemplateHelper} instead.
+ */
+public class TemplateHelper implements Cloneable
+{
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/ClassLevelCache.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/ClassLevelCache.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.cache;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+/**
+ * Thread-safe cache that is stored statically per-Class.
+ */ 
+public final class ClassLevelCache
+{
+    private static ConcurrentHashMap _classCaches = new ConcurrentHashMap();
+    private ConcurrentHashMap _caches = new ConcurrentHashMap();
+    
+    
+    public static ClassLevelCache getCache( Class c )
+    {
+        String className = c.getName();
+        ClassLevelCache cache = ( ClassLevelCache ) _classCaches.get( className );
+        
+        if ( cache == null )
+        {
+            cache = new ClassLevelCache();
+            _classCaches.put( className, cache );
+        }
+        
+        return cache;
+    }
+    
+    protected ClassLevelCache()
+    {
+    }
+    
+    public Object get( String majorKey, String minorKey )
+    {
+        ConcurrentHashMap cache = ( ConcurrentHashMap ) _caches.get( majorKey );
+        return cache != null ? cache.get( minorKey ) : null;
+    }
+    
+    public Object getCacheObject( String cacheID )
+    {
+        return _caches.get( cacheID );
+    }
+    
+    public void setCacheObject( String cacheID, Object object )
+    {
+        _caches.put( cacheID, object );
+    }
+    
+    public Map getCacheMap( String cacheID )
+    {
+        return getCacheMap( cacheID, true );
+    }
+    
+    public Map getCacheMap( String cacheID, boolean createIfMissing )
+    {
+        ConcurrentHashMap cache = ( ConcurrentHashMap ) _caches.get( cacheID );
+        
+        if ( cache == null && createIfMissing )
+        {
+            cache = new ConcurrentHashMap();
+            _caches.put( cacheID, cache );
+        }
+        
+        return cache;
+    }
+    
+    public void put( String cacheID, String minorKey, Object value )
+    {
+        //
+        // ConcurrentHashMap can't accept null.  For now we'll just assert; if it becomes necessary to add null,
+        // then we can use a marker value.
+        //
+        assert value != null;
+        getCacheMap( cacheID ).put( minorKey, value );
+    }
+    
+    public static void clearAll()
+    {
+        _classCaches.clear();
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/MethodCache.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/MethodCache.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,148 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.cache;
+
+// java imports
+import java.lang.reflect.Method;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+// internal imports
+
+// external imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+/**
+ * @exclude
+ */
+public class MethodCache
+{
+    private static final Logger _logger = Logger.getInstance(MethodCache.class);
+
+    private final ConcurrentHashMap _methodCache;
+    
+    /**
+     *
+     */
+    public MethodCache()
+    {
+        _methodCache = new ConcurrentHashMap();
+    }
+
+    /**
+     *
+     */
+    public final Method[] getMethods(Class type)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("type: " + type + " hash code: " + type.hashCode());
+
+        Object obj = _methodCache.get(type);
+        
+        if(obj == null)
+        {
+            obj = type.getMethods();
+            _methodCache.put(type, obj);
+        }
+
+        return (Method[])obj;
+    }
+    
+    /**
+     *
+     */
+    public final Method getMethod(Class type, String methodName, int argCount)
+    {
+        if(_logger.isDebugEnabled()) _logger.debug("Get method \"" + methodName + "\" from type \"" + type + "\" with " + argCount + " params");
+
+        if(methodName == null)
+            return null;
+
+        Method[] methods = getMethods(type);
+
+        for(int i = 0; i < methods.length; i++)
+        {
+            if(methods[i].getName().equals(methodName) && (argCount == methods[i].getParameterTypes().length))
+                return methods[i];
+        }
+        
+        return null;
+    }
+
+    /**
+     *
+     */
+    public final Method getMethod(Class type, String methodName, String[] argTypes)
+    {
+        if(methodName == null)
+            return null;
+
+        Method[] methods = getMethods(type);
+        Class[] parameterTypes = null;
+
+        for(int i = 0; i < methods.length; i++)
+        {
+            // method names don't match
+            if(!methods[i].getName().equals(methodName))
+                continue;
+
+            // never null...
+            parameterTypes = methods[i].getParameterTypes();
+            
+            // zero arg method
+            if((argTypes == null || argTypes.length == 0) && parameterTypes.length == 0)
+                return methods[i];
+            // looking for zero arg method; found multi arg method
+            else if((argTypes == null || argTypes.length == 0) && !(parameterTypes.length == 0))
+                continue;
+            // method matching arg count; check argument types
+            else if(parameterTypes != null && parameterTypes.length == argTypes.length)
+            {
+                boolean match = true;
+                for(int j = 0; j < parameterTypes.length; j++)
+                {
+                    if(!parameterTypes[j].getName().equals(argTypes[j]))
+                    {
+                        match = false;
+                        break;
+                    }
+                }
+                if(match) return methods[i];
+            }
+        }
+
+        return null;
+    }
+    
+    /**
+     *
+     */
+    public final Method getMethod(Class type, String methodName, Class[] argTypes)
+    {
+        if(argTypes == null)
+            return getMethod(type, methodName, (String[])null);
+        
+        String[] typeStrs = new String[argTypes.length];
+        for(int i = 0; i < argTypes.length; i++)
+        {
+            typeStrs[i] = argTypes[i].getName();
+        }
+
+        return getMethod(type, methodName, typeStrs);
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/PropertyCache.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/PropertyCache.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,282 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.cache;
+
+// java imports
+import java.beans.Introspector;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * The PropertyCache is used to track the JavaBean properties and public
+ * fields of a set of classes that are stored in the cache.  This implementation
+ * provides a significant speed-up when looking-up reflected metadata 
+ * of Java classes.  It is primarily used in the NetUI expression engine
+ * to provide fast access to the properties and fields of classes 
+ * against which expressions are being evaluated.
+ *
+ * @exclude
+ */
+public class PropertyCache
+{
+    private static final Logger _logger = Logger.getInstance(PropertyCache.class);
+
+    private final ConcurrentHashMap _classCache;
+
+    public PropertyCache()
+    {
+        _classCache = new ConcurrentHashMap();
+    }
+
+    /**
+     * Get an array of {@link java.beans.PropertyDescriptor} objects that 
+     * describe JavaBean properties of the given <code>type</code>.  This
+     * array <b>should not</b> be modified.
+     * 
+     * @param type the {@link java.lang.Class} whose JavaBean properties to find
+     * @return an array of {@link java.beans.PropertyDescriptor} objects that describe the JavaBean properties
+     */
+    public final PropertyDescriptor[] getPropertyDescriptors(Class type)
+    {
+        CachedClass cc = getCachedClass(type);
+        return (cc != null ? cc.getPropertyDescriptors() : null);
+    }
+
+    public final Method getPropertyGetter(Class type, String property)
+    {
+        CachedClass cc = getCachedClass(type);
+        if(cc == null) return null;
+        CachedProperty cp = cc.getProperty(property);
+        return (cp != null ? cp.getReadMethod() : null);
+    }
+
+    public final Method getPropertySetter(Class type, String property)
+    {
+        CachedClass cc = getCachedClass(type);
+        if(cc == null) return null;
+        CachedProperty cp = cc.getProperty(property);
+        return (cp != null ? cp.getWriteMethod() : null);
+    }
+
+    public final Class getPropertyType(Class type, String property)
+    {
+        CachedClass cc = getCachedClass(type);
+        if(cc == null) return null;
+        CachedProperty cp = cc.getProperty(property);
+        return (cp != null ? cp.getType() : null);
+    }
+
+    public final Field getField(Class type, String field)
+    {
+        CachedClass cc = getCachedClass(type);
+        return (cc != null ? cc.getField(field) : null);
+    }
+
+    private final CachedClass getCachedClass(Class type)
+    {
+        Object obj = _classCache.get(type);
+        if(obj == null)
+        {
+            try
+            {
+                obj = new CachedClass(type);
+                _classCache.put(type, obj);
+            }                
+            catch(Exception e)
+            {
+                if(_logger.isErrorEnabled()) 
+                    _logger.error("Error introspecting a class of type \"" + type + "\" when determining its JavaBean property info", e);
+                return null;
+            }
+        }
+
+        return (CachedClass)obj;
+    }
+
+    /**
+     * @exclude
+     */
+    private class CachedClass
+    {
+        private Class type = null;
+        private HashMap props = null;
+        private HashMap fields = null;
+        private PropertyDescriptor[] pds = null;
+        
+        CachedClass(Class type)
+            throws IntrospectionException
+        {
+            this.type = type;
+            init(type);
+        }
+        
+        private void init(Class type)
+            throws IntrospectionException
+        {
+            props = new HashMap();
+            
+            if(Modifier.isPublic(type.getModifiers()))
+            {
+                PropertyDescriptor[] pds = Introspector.getBeanInfo(type).getPropertyDescriptors();
+                for(int i = 0;  i < pds.length; i++)
+                {
+                    props.put(pds[i].getName(), new CachedProperty(pds[i]));
+                }
+                
+                fields = new HashMap();
+                Field[] fs = type.getFields();
+                for(int i = 0; i < fs.length; i++)
+                {
+                    if(Modifier.isPublic(fs[i].getModifiers()) &&
+                       !Modifier.isStatic(fs[i].getModifiers()))
+                        fields.put(fs[i].getName(), new CachedField(fs[i]));
+                }
+            }
+            else // not looking at a public class, get all of the JavaBean PDs off of its interfaces
+            {
+                // look on the public interfaces on this class and all superclasses
+                for (Class c = type; c != null; c = c.getSuperclass())
+                {
+                    Class[] interfaces = c.getInterfaces();
+                    for(int i = 0; i < interfaces.length; i++)
+                    {
+                        Class iface = interfaces[i];
+                        if(Modifier.isPublic(iface.getModifiers()))
+                        {
+                            PropertyDescriptor[] pds = Introspector.getBeanInfo(iface).getPropertyDescriptors();
+                            for(int j = 0; j < pds.length; j++)
+                            {
+                                if(!props.containsKey(pds[j].getName()))
+                                    props.put(pds[j].getName(), new CachedProperty(pds[j]));
+                            }
+                        }
+                    }
+                }
+                
+                // look on the nearest public base class
+                Class baseClass = type.getSuperclass();
+                while(!Modifier.isPublic(baseClass.getModifiers()))
+                {
+                    baseClass = baseClass.getSuperclass();
+                }
+
+                PropertyDescriptor[] pds = Introspector.getBeanInfo(baseClass).getPropertyDescriptors();
+                for(int j = 0; j < pds.length; j++)
+                {
+                    if(!props.containsKey(pds[j].getName()))
+                        props.put(pds[j].getName(), new CachedProperty(pds[j]));
+                }
+
+                // look for the public fields on this base class
+                fields = new HashMap();
+                Field[] fs = baseClass.getFields();
+                for(int i = 0; i < fs.length; i++)
+                {
+                    if(Modifier.isPublic(fs[i].getModifiers()) && !Modifier.isStatic(fs[i].getModifiers()))
+                        fields.put(fs[i].getName(), new CachedField(fs[i]));
+                }
+            }
+
+            if(props.size() > 0)
+            {
+                pds = new PropertyDescriptor[props.size()];
+                Iterator iterator = props.values().iterator();
+                for(int i = 0; iterator.hasNext(); i++)
+                {
+                    pds[i] = ((CachedProperty)iterator.next()).getPropertyDescriptor();
+                }
+            }
+        }
+        
+        PropertyDescriptor[] getPropertyDescriptors()
+        {
+            return pds;
+        }
+
+        Field getField(String name)
+        {
+            CachedField cf = (CachedField)fields.get(name);
+            return (cf != null ? cf.getField() : null);
+        }
+
+        CachedProperty getProperty(String name)
+        {
+            return (CachedProperty)props.get(name);
+        }
+    }
+
+    /**
+     * @exclude
+     */
+    private class CachedProperty
+    {
+        private Method readMethod = null;
+        private Method writeMethod = null;
+        private String name = null;
+        private PropertyDescriptor pd = null;
+        private Class type = null;
+
+        CachedProperty(PropertyDescriptor pd)
+        {
+            this.pd = pd;
+            this.name = pd.getName();
+            this.readMethod = pd.getReadMethod();
+            this.writeMethod = pd.getWriteMethod();
+            this.type = pd.getPropertyType();
+        }
+
+        PropertyDescriptor getPropertyDescriptor() {return pd;}
+        Method getReadMethod() {return readMethod;}
+        Method getWriteMethod() {return writeMethod;}
+        String getName() {return name;}
+        Class getType() {return type;}
+    }
+
+    /**
+     * @exclude
+     */
+    private class CachedField
+    {
+        private Field field = null;
+        private String name = null;
+
+        CachedField(Field field)
+        {
+            this.name = field.getName();
+            this.field = field;
+        }
+
+        Field getField() {return field;}
+        String getName() {return name;}
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/ServletContextCache.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/cache/ServletContextCache.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.cache;
+
+import javax.servlet.ServletContext;
+
+public abstract class ServletContextCache
+{
+    protected void initInternal( ServletContext servletContext )
+    {
+        servletContext.setAttribute( getKey(), this );
+    }
+    
+    protected static ServletContextCache get( ServletContext servletContext, String key )
+    {
+        ServletContextCache cache = ( ServletContextCache ) servletContext.getAttribute( key );
+        
+        if ( cache == null )
+        {
+            throw new IllegalStateException( "Cache " + key + " was not initialized in the ServletContext." );
+        }
+        
+        return cache;
+    }
+    
+    protected abstract String getKey();
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/classloader/BouncyClassLoader.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/classloader/BouncyClassLoader.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,122 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.classloader;
+
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.Map;
+import java.lang.reflect.Method;
+import java.security.SecureClassLoader;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+
+/**
+ * ClassLoader that takes precendence over its parent for loading classes, and which is aware of timestamps on its
+ * binaries (and thus knows when it needs to be bounced.
+ */
+public class BouncyClassLoader
+        extends SecureClassLoader
+{
+    private static final Logger _log = Logger.getInstance( BouncyClassLoader.class );
+    
+    private ConcurrentHashMap< File, Long > _timestamps = new ConcurrentHashMap< File, Long >();
+    private File[] _classDirs;
+    
+    
+    public BouncyClassLoader( File[] classDirs, ClassLoader parent )
+    {
+        super( parent );
+        _classDirs = classDirs;
+    }
+    
+    public Class loadClass( String name ) throws ClassNotFoundException
+    {
+        Class ret = findLoadedClass( name );
+        if ( ret != null ) return ret;
+        
+        String baseName = File.separatorChar + name.replace( '.', File.separatorChar ).concat( ".class" );
+        
+        for ( int i = 0; i < _classDirs.length; ++i )
+        {
+            File file = new File( _classDirs[i].getPath() + baseName );
+            
+            if ( file.exists() )
+            {
+                _timestamps.put( file, new Long( file.lastModified() ) );
+                byte[] bytes = getBytes( file );
+                if ( bytes != null ) return super.defineClass( name, bytes, 0, bytes.length );
+            }
+        }
+        
+        return super.loadClass( name );
+    }
+    
+    byte[] getBytes( File file )
+    {
+        try
+        {
+            BufferedInputStream in = new BufferedInputStream( new FileInputStream( file ) );
+            
+            try
+            {
+                ByteArrayOutputStream out = new ByteArrayOutputStream();
+                int c;
+                
+                while ( ( c = in.read() ) != -1 )
+                {
+                    out.write( c );
+                }
+                
+                return out.toByteArray();
+            }
+            finally
+            {
+                in.close();
+            }
+        }
+        catch ( FileNotFoundException e )
+        {
+            _log.error( "Could not read class file " + file, e );
+        }
+        catch ( IOException e )
+        {
+            _log.error( "Error while reading class file " + file, e );
+        }
+        
+        return null;
+    }
+
+    public boolean isStale()
+    {
+        for ( Map.Entry< File, Long > entry : _timestamps.entrySet() )
+        {
+            if ( entry.getKey().lastModified() > entry.getValue() ) return true;
+        }
+        
+        return false;
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/config/ConfigInitializationException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/config/ConfigInitializationException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.config;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * <p>
+ * Exception thrown when an error occurs loading the NetUI configuration file
+ * into a web appication.
+ * </p>
+ */
+public class ConfigInitializationException
+    extends Exception
+{
+    /** 
+     * Default constructor.
+     */ 
+    public ConfigInitializationException()
+    {
+        super();
+    }
+
+    /** 
+     * @param message 
+     */ 
+    public ConfigInitializationException(String message)
+    {
+        super(message);
+    }
+
+    /** 
+     * @param cause 
+     */ 
+    public ConfigInitializationException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    /** 
+     * @param message 
+     * @param cause 
+     */ 
+    public ConfigInitializationException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/config/ConfigUtil.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/config/ConfigUtil.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,169 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.config;
+
+// java imports
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+// internal imports
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlOptions;
+import org.apache.xmlbeans.XmlError;
+
+/**
+ * <p>
+ * Utility class for reading properties from the NetUI configuration file.
+ * <br/>
+ * <br/>
+ * The webapp runtime is read from the InputStream passed to the {@link init} method.
+ * The configuration should be initialized with this method and a valid {@link java.io.InputStream}
+ * before the first time the {@link getConfig} method is called.  If the configuration
+ * has not been initialized, {@link getConfig} will initialize a bare bones runtime 
+ * configuration.  Depending on the web application, this default configuration
+ * may lead to runtime errors.  
+ * <br/>
+ * <br/> 
+ * </p>
+ */
+public final class ConfigUtil
+{
+    // @todo: need to change NetuiConfigDocument.NetuiConfig to NetUIConfig
+    // @todo: need to provide a read-only implementation so that users can't edit
+    // the config file on the fly
+
+    private static final Logger _logger = Logger.getInstance(ConfigUtil.class);
+
+    private static final String DEFAULT_CONFIG = "org/apache/beehive/netui/util/config/netui-config-default.xml";
+    
+    private static NetuiConfigDocument _config = null;
+
+    /**
+     * <p>
+     * Initialize the NetUI configuration data.
+     * <br/>
+     * <br/>
+     * This method can be called exactly once in a J2EE web application.  The
+     * {@link java.io.InputStream} parameter should reference a 
+     * netui-config.xml file.  If an error occurs loading the configuration
+     * file, a {@link ConfigInitializationException} will be thrown.
+     * </p>
+     * 
+     * @param is the {@link java.io.InputStream} from which to read the configuration file
+     * @throws ConfigInitializationException thrown when an error occurs loading the configuration file
+     * or when the configuration is reinitialized.
+     */
+    public static final void init(InputStream is)
+        throws ConfigInitializationException
+    {
+        // when initialized with a null InputStream, revert to using a default, barebones config file
+        if(is == null) 
+        {
+            ClassLoader cl = Thread.currentThread().getContextClassLoader();
+            is = cl.getResourceAsStream(DEFAULT_CONFIG);
+
+            if(is == null)
+                throw new ConfigInitializationException("The NetUI runtime could not find the default config file.  " + 
+                                                        "The webapp may not function properly.");
+
+            if(_logger.isInfoEnabled()) _logger.info("Loading the default NetUI config file.  The runtime will be configured " + 
+                                                     "with a set of minimum parameters.");
+        }
+
+        if(_config == null)
+        {
+            try
+            {
+                XmlOptions loadOptions = new XmlOptions();
+                loadOptions.setLoadLineNumbers();
+                _config = NetuiConfigDocument.Factory.parse(is, loadOptions);
+            }
+            // XmlException | IOException
+            catch(Exception ex)
+            {
+                assert ex instanceof XmlException || ex instanceof IOException;
+
+                throw new ConfigInitializationException("Unable load the NetUI config file.  Cause: " + ex, ex);
+            }
+        }
+        else throw new ConfigInitializationException("Config initialization already completed; unable to reload the NetUI config file.");
+        
+        assert _config != null;
+
+        // Validate the document.
+        XmlOptions validateOptions = new XmlOptions();
+        ArrayList errorList = new ArrayList();
+        validateOptions.setErrorListener(errorList);
+        boolean isValid = _config.validate(validateOptions);
+                
+        // Throw an exception if the XML is invalid.
+        if (!isValid)
+        {
+            StringBuilder msg = new StringBuilder("Invalid NetUI configuration file.");
+
+            for (int i = 0; i < errorList.size(); i++)
+            {
+                XmlError error = (XmlError) errorList.get(i);
+                msg.append("\n    line ");
+                msg.append(error.getLine());
+                msg.append(": ");
+                msg.append(error.getMessage());
+                msg.append(" (");
+                msg.append(error.getCursorLocation().toString());
+                msg.append(")");
+            }
+
+            throw new ConfigInitializationException(msg.toString());
+        }        
+    }
+
+    /**
+     * <p>
+     * Get the NetUI configuration object.  
+     * <br/>
+     * <br/>
+     * </p>
+     *
+     * @return a configuration bean that contains data
+     * parsed from the netui-config.xml file.
+     */
+    public static NetuiConfig getConfig()
+    {
+        if(_config != null)
+            return _config.getNetuiConfig();
+        // If the config file wasn't initialized, attempt to initialize a configuration
+        // from the default config file contained in the utility JAR.
+        else 
+        {
+            // This hopefully never happens and would only occur if the default config file isn't
+            // found in the util JAR.
+            if(_logger.isErrorEnabled()) _logger.error("An error occurred parsing the default config file.  " + 
+                                                       "The NetUI runtime is not properly configured.");
+
+            throw new IllegalStateException("The NetUI runtime could not find the default config file.  The webapp may not function properly.");
+        }
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedIllegalArgumentException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedIllegalArgumentException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.exception;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * @exclude
+ */
+public class LocalizedIllegalArgumentException
+    extends IllegalArgumentException
+{
+    private String _localizedMessage = null;
+
+    public LocalizedIllegalArgumentException()
+    {
+        super();
+    }
+
+    public LocalizedIllegalArgumentException(String message)
+    {
+        super(message);
+    }
+
+    public void setLocalizedMessage(String localizedMessage)
+    {
+        _localizedMessage = localizedMessage;
+    }
+
+    public String getLocalizedMessage()
+    {
+        return (_localizedMessage != null ? _localizedMessage : getMessage());
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedIllegalStateException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedIllegalStateException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.exception;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * @exclude
+ */
+public class LocalizedIllegalStateException
+    extends IllegalStateException
+{
+    private String _localizedMessage = null;
+
+    public LocalizedIllegalStateException()
+    {
+        super();
+    }
+
+    public LocalizedIllegalStateException(String message)
+    {
+        super(message);
+    }
+
+    public void setLocalizedMessage(String localizedMessage)
+    {
+        _localizedMessage = localizedMessage;
+    }
+
+    public String getLocalizedMessage()
+    {
+        return (_localizedMessage != null ? _localizedMessage : getMessage());
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedUnsupportedOperationException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/exception/LocalizedUnsupportedOperationException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.exception;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * @exclude
+ */
+public class LocalizedUnsupportedOperationException
+    extends UnsupportedOperationException
+{
+    private String _localizedMessage = null;
+
+    public LocalizedUnsupportedOperationException()
+    {
+        super();
+    }
+
+    public LocalizedUnsupportedOperationException(String message)
+    {
+        super(message);
+    }
+
+    public void setLocalizedMessage(String localizedMessage)
+    {
+        _localizedMessage = localizedMessage;
+    }
+
+    public String getLocalizedMessage()
+    {
+        return (_localizedMessage != null ? _localizedMessage : getMessage());
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/ArrayIterator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/ArrayIterator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,115 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.iterator;
+
+// java imports
+import java.lang.reflect.Array;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+// internal imports
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * <code>ArrayIterator</code> provides an <code>Iterator</code> over a Java
+ * array. <code>ArrayIterator</code> will return each element in the array
+ * in the order they are stored in the array. Multidimensional arrays are
+ * handled by returning a sequence of sub-arrays. So a three dimensional array
+ * of integers will return a sequence of two dimensional arrays of integers.
+ * This <code>Iterator</code> does not support the <code>remove()</code>
+ * method.
+ */
+public class ArrayIterator
+    implements Iterator
+{
+    private static final Logger logger = Logger.getInstance(ArrayIterator.class);
+
+    /** The array object supplied to the iterator */
+    private Object _array;
+
+    /** The total number of elements in the array */
+    private int _totalElements;
+
+    /** The current element being accessed */
+    private int _currentElement;
+
+    public ArrayIterator(Object array)
+    {
+        if(array != null)
+        {
+            if (!array.getClass().isArray())
+                // throw new IllegalStateException("Can not create an array iterator from an object that is not an array");
+                throw new IllegalStateException(Bundle.getErrorString("ArrayIterator_notAnArray"));
+            
+            _array = array;
+            _totalElements = Array.getLength(_array);
+        }
+    }
+
+    public boolean hasNext()
+    {
+        if(_array == null)
+            return false;
+        else
+        {
+            if (_currentElement < _totalElements)
+                return true;
+            else return false;
+        }
+    }
+
+    public Object next()
+    {
+        if (logger.isDebugEnabled())
+        {
+            logger.debug("Current element: " + _currentElement);
+            logger.debug("Total elements: " + _totalElements);
+        }
+
+        if (_currentElement >= _totalElements)
+            throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+
+        Object nextElement = null;
+
+        try
+        {
+            nextElement = Array.get(_array, _currentElement);
+        }
+        catch (Exception e)
+        {
+            if (logger.isDebugEnabled())
+                logger.debug("Caught exception: " + e.getClass().getName());
+
+            throw new NoSuchElementException(Bundle.getErrorString("ArrayIterator_arrayError", new Object[] {_array.getClass().getName()}));
+        }
+
+        _currentElement++;
+
+        return nextElement;
+    }
+
+    public void remove()
+    {
+        throw new UnsupportedOperationException(Bundle.getErrorString("IteratorFactory_Iterator_removeUnsupported", new Object[] {this.getClass().getName()}));
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/AtomicObjectIterator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/AtomicObjectIterator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.iterator;
+
+// java imports
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+// internal imports
+import org.apache.beehive.netui.util.Bundle;
+
+// external imports
+
+/**
+ */
+public class AtomicObjectIterator
+    implements Iterator
+{
+    /** The object that should be wrapped in the iterator */
+    private Object _object;
+
+    /** A boolean to track if the single object in this iterator has been returned */
+    private boolean _nextCalled = false;
+
+    AtomicObjectIterator(Object object)
+    {
+        _object = object;
+    }
+
+    public boolean hasNext()
+    {
+        if(_nextCalled || _object == null)
+            return false;
+        else return true;
+    }
+
+    public Object next()
+    {
+        if(!_nextCalled && _object != null)
+        {
+            _nextCalled = true;
+            return _object;
+        }
+        else throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+    }
+
+    public void remove()
+    {
+        throw new UnsupportedOperationException(Bundle.getErrorString("IteratorFactory_Iterator_removeUnsupported", new Object[] {this.getClass().getName()}));
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/EmptyIterator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/EmptyIterator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.iterator;
+
+// java imports
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+// internal imports
+import org.apache.beehive.netui.util.Bundle;
+
+// external imports
+
+/**
+ *
+ */
+public class EmptyIterator
+    implements Iterator
+{
+    EmptyIterator() {}
+
+    public boolean hasNext() {return false;}
+
+    public Object next()
+    {
+        throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+    }
+
+    public void remove()
+    {
+        throw new UnsupportedOperationException(Bundle.getErrorString("IteratorFactory_Iterator_removeUnsupported", new Object[] {this.getClass().getName()}));
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.iterator;
+
+// java imports
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+// internal imports
+import org.apache.beehive.netui.util.Bundle;
+
+// external imports
+
+/**
+ * An {@link java.util.Iterator} implementation for rendering data
+ * from an {@link java.util.Enumeration}.
+ */
+public class EnumerationIterator
+    implements Iterator
+{
+    private Enumeration _enum = null;
+
+    public EnumerationIterator(Enumeration e)
+    {
+        _enum = e;
+    }
+
+    public boolean hasNext()
+    {
+        if(_enum == null)
+            return false;
+        else return _enum.hasMoreElements();
+    }
+
+    public Object next()
+    {
+        if(_enum == null || hasNext() == false)
+            throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+        else return _enum.nextElement();
+    }
+
+    public void remove()
+    {
+        throw new UnsupportedOperationException(Bundle.getErrorString("IteratorFactory_Iterator_removeUnsupported", 
+                                                                      new Object[] {this.getClass().getName()}));
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,242 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.iterator;
+
+// java imports
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import java.sql.ResultSet;
+import javax.sql.RowSet;
+
+// internal imports
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig;
+import org.apache.beehive.netui.util.config.bean.IteratorFactories;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ * <code>IteratorFactory</code> provides a way to create an 
+ * <code>Iterator</code> for different kinds of objects. The supported types
+ * are:
+ * <ul>
+ *   <li><code>java.util.Iterator</code></li>
+ *   <li><code>java.util.Collection</code></li>
+ *   <li><code>java.util.Map</code></li>
+ *   <li><code>javax.sql.RowSet</code></li>
+ *   <li><code>java.util.Enumeration</code></li>
+ *   <li>Any Java Object array</li>
+ * </ul>
+ * <p>
+ * If a <code>java.util.Iterator</code> is supplied, the 
+ * <code>Iterator</code> will simply be returned to the caller.
+ * <p>
+ * If an object type not listed above is supplied the object will be wrapped in 
+ * an iterator that has a single item, the provided object.
+ */
+public class IteratorFactory
+{
+    private static final Logger _logger = Logger.getInstance(IteratorFactory.class);
+    public static final Iterator EMPTY_ITERATOR = new EmptyIterator();
+    private static final Map _plantMap;
+
+    static
+    {
+        _plantMap = new LinkedHashMap();
+
+        initialize();
+    }
+
+    /**
+     * Create a new <code>Iterator</code> for the supplied object.  If the
+     * passed object is null, this method will return null;
+     *
+     * @param object the object to build an iterator from
+     * @return an iterator for the supplied object or <code>null</code>
+     *
+     * @deprecated
+     */
+    public static Iterator makeIterator(Object object)
+        throws IteratorFactoryException
+    {
+        try
+        {
+            return createIterator(object);
+        }
+        // throw an IteratorFactoryException if anything goes 
+        // wrong creating an Iterator
+        catch(Exception e)
+        {
+            Class objectType = object != null ? object.getClass() : null;
+            String message = "An error occurred creating an iterator for type \"" + objectType + "\"";
+            throw new IteratorFactoryException(message, e, objectType);
+        }
+    }
+    
+    /**
+     * Create a new <code>Iterator</code> for the supplied object.  If the
+     * passed object is null, this method will return null;
+     *
+     * @param object the object to build an iterator from
+     * @return an iterator for the supplied object or <code>null</code>
+     */
+    public static final Iterator createIterator(Object object)
+    {
+        if (_logger.isDebugEnabled())
+            _logger.debug("Trying to make an iterator for class: " + (object == null ? "null" : object.getClass().getName()));
+        
+        if(object == null)
+        {
+            // if the object is null we will return a null.  The caller will
+            // have to grab the EMPTY_ITERATOR if it wants to handle this.
+            return null;
+        }
+
+        if(object instanceof Iterator)
+        {
+            return (Iterator)object;
+        }
+        else if(object instanceof Collection)
+        {
+            Collection collection = (Collection)object;
+            return collection.iterator();
+        }
+        else if(object instanceof Map)
+        {
+            return new MapIterator((Map)object);
+        }
+        else if(object.getClass().isArray())
+        {
+            return new ArrayIterator(object);
+        }
+        else if(object instanceof Enumeration)
+            return new EnumerationIterator((Enumeration)object);
+        else if(object instanceof ResultSet && !(object instanceof RowSet))
+            return new ResultSetIterator((ResultSet)object);
+
+        // check to see if there is a registered IteratorPlant that can handle this type
+        Iterator ret = null;
+        Iterator factories = _plantMap.keySet().iterator();
+        while(factories.hasNext())
+        {
+            IteratorPlant plant = (IteratorPlant)_plantMap.get(factories.next());
+            ret = plant.createIterator(object);
+
+            if(ret != null) return ret;
+        }
+        
+        return new AtomicObjectIterator(object);
+    }
+    
+    /**
+     * Initialize the configuration parameters used to build Iterator objects
+     * for custom types.
+     */ 
+    private static final void initialize()
+    {
+        Map map = readFromConfig();
+        if(map != null)
+            loadFactories(map);
+    }
+
+    private static final Map readFromConfig()
+    {
+        NetuiConfig config = ConfigUtil.getConfig();
+        if(config == null) return null;
+
+        IteratorFactories factories  = config.getIteratorFactories();
+        if(factories == null) return null;
+
+        org.apache.beehive.netui.util.config.bean.IteratorFactories.IteratorFactory[] factoryArray = 
+            factories.getIteratorFactoryArray();
+        if(factoryArray == null) return null;
+        
+        LinkedHashMap map = new LinkedHashMap();
+        for(int i = 0; i < factoryArray.length; i++)
+        {
+            map.put(factoryArray[i].getName(), factoryArray[i].getFactoryClass());
+        }
+        
+        return map;
+    }
+
+    private static final void loadFactories(Map factories)
+    {
+        Iterator iterator = factories.keySet().iterator();
+        while(iterator.hasNext())
+        {
+            String name = (String)iterator.next();
+            String className = (String)factories.get(name);
+            IteratorPlant plant = null;
+
+            try
+            {
+                Class type = Class.forName(className);
+                plant = (IteratorPlant)type.newInstance();
+            }
+            catch(ClassNotFoundException cnf)
+            {
+                if(_logger.isWarnEnabled()) 
+                    _logger.warn("Could not create an IteratorPlant for type \"" + className + "\" because the implementation class could not be found.");
+                
+                continue;
+            }
+            catch(Exception e)
+            {
+                assert e instanceof InstantiationException || e instanceof IllegalAccessException;
+
+                if(_logger.isWarnEnabled()) 
+                    _logger.warn("Could not create an IteratorPlant for type \"" + className + "\" because an error occurred creating the plant.  Cause: " + e, e);
+                continue;
+            }
+
+            if(_plantMap.containsKey(name))
+            {
+                if(_logger.isWarnEnabled())
+                    _logger.warn("Overwriting a previously defined IteratorPlant named \"" + name + 
+                                "\" with a new IteratorPlant of type \"" + className + "\"");
+            }
+            else if(_logger.isInfoEnabled()) 
+                _logger.info("Adding an IteratorPlant named \"" + name + "\" with implementation \"" + className + "\"");
+            
+            _plantMap.put(name, plant);
+        }
+    }
+
+    /**
+     * @exclude
+     */
+    public abstract static class IteratorPlant 
+    {
+        /**
+         * If it is possible to create an iterator for this type, do so.  
+         * Otherwise return null.
+         */
+        public abstract Iterator createIterator(Object value);
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactoryException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/IteratorFactoryException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.iterator;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * An exception that is thrown when the IteratorFactory can
+ * not create an iterator for the given type.  The illegal type
+ * will be available from the <code>getType</code> call.
+ */
+public class IteratorFactoryException
+    extends Exception
+{
+    private Class _type = null;
+
+    public IteratorFactoryException()
+    {
+        super();
+    }
+
+    public IteratorFactoryException(String message)
+    {
+        super(message);
+    }
+
+    public IteratorFactoryException(String message, Throwable t, Class type)
+    {
+        super(message, t);
+        _type = type;
+    }
+
+    public IteratorFactoryException(String message, Class type)
+    {
+        this(message);
+        _type = type;
+    }
+
+    public Class getType()
+    {
+        return _type;
+    }
+
+    public String getTypeName()
+    {
+        return (_type != null ? _type.getName() : null);
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/MapIterator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/MapIterator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.iterator;
+
+// java imports
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+// internal imports
+import org.apache.beehive.netui.util.Bundle;
+
+// external imports
+
+/**
+ * <code>MapIterator</code> provides an <code>Iterator</code> over map values.
+ * <code>MapIterator</code> iterates over the sequence of values stored in the
+ * map.
+ */
+public class MapIterator
+    implements Iterator
+{
+    /** An iterator over the map's values */
+    private Iterator _mapIterator = null;
+
+    public MapIterator(Map map)
+    {
+        if(map != null)
+            _mapIterator = map.values().iterator();
+    }
+
+    public boolean hasNext()
+    {
+        if(_mapIterator == null)
+            return false;
+        else return _mapIterator.hasNext();
+    }
+
+    public Object next()
+    {
+        if(_mapIterator == null)
+            throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+        else return _mapIterator.next();
+    }
+
+    public void remove()
+    {
+        if(_mapIterator == null)
+            throw new UnsupportedOperationException(Bundle.getErrorString("IteratorFactory_Iterator_removeUnsupported", new Object[] {this.getClass().getName()}));
+        else _mapIterator.remove();
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/ResultSetIterator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/iterator/ResultSetIterator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,153 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.iterator;
+
+// java imports
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+// internal imports
+import org.apache.beehive.netui.util.Bundle;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ */
+public class ResultSetIterator
+    implements Iterator
+{
+    private static final Logger _logger = Logger.getInstance(ResultSetIterator.class);
+
+    private ResultSet _rs = null;
+    private boolean _calledHasNext = false;
+    private boolean _hasNext = false;
+    private String[] _columnNames = null;
+
+    public ResultSetIterator(ResultSet rs)
+    {
+        assert rs != null;
+        _rs = rs;
+
+        try
+        {
+            // handle RSMD here to build a template map that can contain the data for each row
+            ResultSetMetaData _rsmd = _rs.getMetaData();
+            assert _rsmd != null;
+            
+            int cols = _rsmd.getColumnCount();
+            _columnNames = new String[cols];
+            for(int i = 1; i <= cols; i++)
+            {
+                String col = _rsmd.getColumnName(i);
+                if(_logger.isDebugEnabled()) _logger.debug("found column: " + col);
+                _columnNames[i-1] = col;
+            }
+        }
+        catch(SQLException sql)
+        {
+            if(_logger.isErrorEnabled()) _logger.error("An exception occurred reading ResultSetMetaData from a ResultSet.  Cause: " + sql, sql);
+            throw new RuntimeException("An exception occurred reading ResultSetMetaData from a ResultSet.  Cause: " + sql, sql);
+        }
+    }
+
+    /**
+     * @throws SQLException if an exception occurs calling methods on the ResultSet
+     */
+    public boolean hasNext()
+    {
+        if(!_calledHasNext)
+        {
+            _calledHasNext = true;
+            try
+            {
+                _hasNext = _rs.next();
+            }
+            catch(SQLException sql)
+            {
+                if(_logger.isErrorEnabled()) _logger.error("An exception occurred reading from a ResultSet.  Cause: " + sql, sql);                
+                throw new RuntimeException("An exception occurred reading from a ResultSet.  Cause: " + sql, sql);
+            }
+        }
+
+        if(_logger.isDebugEnabled()) _logger.debug("hasNext: " + _hasNext);
+
+        return _hasNext;
+    }
+
+    /**
+     * @throws SQLException if an exception occurs calling methods on the ResultSet
+     */
+    public Object next()
+    {
+        if(_hasNext == false)
+            throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+
+        // when next() is called several times in succession, the ResultSet needs to be advanced
+        if(!_calledHasNext)
+        {
+            try
+            {
+                _hasNext = _rs.next();
+            }
+            catch(SQLException sql)
+            {
+                if(_logger.isErrorEnabled()) _logger.error("An exception occurred reading from a ResultSet.  Cause: " + sql, sql);
+                throw new RuntimeException("An exception occurred reading from a ResultSet.  Cause: " + sql, sql);
+            }
+
+            if(!_hasNext)
+                throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+        }
+
+        // called hasNext() next().  reset the flag
+        _calledHasNext = false;
+
+        HashMap row = new HashMap();
+        assert _columnNames != null;
+        for(int i = 0; i < _columnNames.length; i++)
+        {
+            String key = (String)_columnNames[i];
+
+            try
+            {
+                Object value = _rs.getObject(key);
+                row.put(key, value);
+            }
+            catch(SQLException sql)
+            {
+                if(_logger.isErrorEnabled()) _logger.error("An exception occurred reading from a ResultSet.  Cause: " + sql, sql);
+                throw new RuntimeException("An exception occurred reading from a ResultSet.  Cause: " + sql, sql);
+            }
+        }
+        
+        return row;
+    }
+
+    public void remove()
+    {
+        throw new UnsupportedOperationException(Bundle.getErrorString("IteratorFactory_Iterator_removeUnsupported", new Object[] {this.getClass().getName()}));
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/Logger.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/Logger.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,172 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.logging;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.apache.log4j.Category;
+import org.apache.log4j.Level;
+import org.apache.commons.logging.Log;
+
+public class Logger 
+    implements Log
+{
+    private static final String STRUTS_APPENDER = "commons-logging";
+
+    static
+    {
+        // Need to get rid of the appender that Struts adds so
+        // that we don't spam the console with all messages
+        Category root = Category.getRoot();
+
+        if (root.getAppender(STRUTS_APPENDER) != null)
+            root.removeAppender(STRUTS_APPENDER);
+    }
+
+    private org.apache.log4j.Logger _logInstance;
+
+    public static Logger getInstance(Class clazz)
+    {
+        return new Logger(clazz);
+    }
+
+    public Logger(Class clazz)
+    {
+        _logInstance = org.apache.log4j.Logger.getLogger(clazz.getName());
+    }
+
+    public Logger(String className)
+    {
+        _logInstance = org.apache.log4j.Logger.getLogger(className);
+    }
+
+    public boolean isDebugEnabled()
+    {
+        return _logInstance.isEnabledFor(Level.DEBUG);
+    }
+
+    public boolean isErrorEnabled()
+    {
+        return _logInstance.isEnabledFor(Level.ERROR);
+    }
+
+    public boolean isFatalEnabled()
+    {
+        return _logInstance.isEnabledFor(Level.FATAL);
+    }
+
+    public boolean isInfoEnabled()
+    {
+        return _logInstance.isEnabledFor(Level.INFO);
+    }
+
+    public boolean isTraceEnabled()
+    {
+        return _logInstance.isEnabledFor(Level.DEBUG);
+    }
+
+    public boolean isWarnEnabled()
+    {
+        return _logInstance.isEnabledFor(Level.WARN);
+    }
+
+    public void debug(Object message)
+    {
+        if (_logInstance.isEnabledFor(Level.DEBUG))
+            _logInstance.debug(message);
+    }
+
+    public void debug(Object message, Throwable t)
+    {
+        if (_logInstance.isEnabledFor(Level.DEBUG))
+            _logInstance.debug(format(message, t));
+    }
+
+    public void trace(Object message)
+    {
+        if (_logInstance.isEnabledFor(Level.DEBUG))
+            _logInstance.debug(message);
+    }
+
+    public void trace(Object message, Throwable t)
+    {
+        if (_logInstance.isEnabledFor(Level.DEBUG))
+            _logInstance.debug(format(message, t));
+    }
+
+    public void info(Object message)
+    {
+        if (_logInstance.isEnabledFor(Level.INFO))
+            _logInstance.info(message);
+    }
+
+    public void info(Object message, Throwable t)
+    {
+        if (_logInstance.isEnabledFor(Level.INFO))
+            _logInstance.info(format(message, t));
+    }
+
+    public void warn(Object message)
+    {
+        if (_logInstance.isEnabledFor(Level.WARN))
+            _logInstance.warn(message);
+    }
+
+    public void warn(Object message, Throwable t)
+    {
+        if (_logInstance.isEnabledFor(Level.WARN))
+            _logInstance.warn(format(message, t));
+    }
+
+    public void error(Object message)
+    {
+        if (_logInstance.isEnabledFor(Level.ERROR))
+            _logInstance.error(message);
+    }
+
+    public void error(Object message, Throwable t)
+    {
+        if (_logInstance.isEnabledFor(Level.ERROR))
+            _logInstance.error(format(message, t));
+    }
+
+    public void fatal(Object message)
+    {
+        if (_logInstance.isEnabledFor(Level.FATAL))
+            _logInstance.fatal(message);
+    }
+
+    public void fatal(Object message, Throwable t)
+    {
+        if (_logInstance.isEnabledFor(Level.FATAL))
+            _logInstance.fatal(format(message, t));
+    }
+
+    private String format(Object m, Throwable t)
+    {
+        if(t == null)
+            return m.toString();
+
+        StringWriter sw = new StringWriter();
+        t.printStackTrace(new PrintWriter(sw));
+
+        return m + "\n\n" + "Throwable: " + t.toString() + "\nStack Trace:\n" + sw.toString();
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/StrutsLogFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/StrutsLogFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.logging;
+
+//java imports
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogConfigurationException;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+
+public class StrutsLogFactory extends LogFactory
+{
+
+    // ----------------------------------------------------------- Constructors
+
+
+    public StrutsLogFactory() {
+        super();
+    }
+
+    // ----------------------------------------------------- Instance Variables
+
+    protected Hashtable attributes = new Hashtable();
+
+    protected Hashtable instances = new Hashtable();
+
+
+    // --------------------------------------------------------- Public Methods
+
+    public Object getAttribute(String name) {
+        return (attributes.get(name));
+
+    }
+
+    public String[] getAttributeNames() {
+
+        Vector names = new Vector();
+        Enumeration keys = attributes.keys();
+        while (keys.hasMoreElements()) {
+            names.addElement(keys.nextElement());
+        }
+        String results[] = new String[names.size()];
+        for (int i = 0; i < results.length; i++) {
+            results[i] = (String) names.elementAt(i);
+        }
+        return (results);
+
+    }
+
+    public Log getInstance(Class clazz)
+        throws LogConfigurationException
+    {
+
+        return (getInstance(clazz.getName()));
+
+    }
+
+    public Log getInstance(String name)
+        throws LogConfigurationException
+    {
+
+        Log instance = (Log) instances.get(name);
+        if (instance == null) {
+            instance = newInstance(name);
+            instances.put(name, instance);
+        }
+        return (instance);
+
+    }
+
+    public void release() {
+
+        instances.clear();
+
+    }
+
+    public void removeAttribute(String name) {
+
+        attributes.remove(name);
+    }
+
+    public void setAttribute(String name, Object value) {
+
+        if (value == null) {
+            attributes.remove(name);
+        } else {
+            attributes.put(name, value);
+        }
+
+    }
+
+
+    // ------------------------------------------------------ Protected Methods
+
+    protected Log newInstance(String name)
+        throws LogConfigurationException {
+        return new StrutsLogger(name);
+
+    }
+}
+

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/StrutsLogger.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/logging/StrutsLogger.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.logging;
+
+//java imports
+import java.util.Enumeration;
+
+//internal imports
+
+//external imports
+import org.apache.log4j.*;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogConfigurationException;
+
+
+
+public class StrutsLogger extends Logger
+{
+    public StrutsLogger(Class clazz)
+    {
+        super(clazz);
+    }
+
+    public StrutsLogger(String className)
+    {
+        super(className);
+    }
+    //Put any struts-specific code here
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/netui.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/netui.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,589 @@
+System_StringNotFound=Unable to find string with name {0}.
+
+Tags_Exception=Exception: {0}
+Tags_WriteException=JspException writting to the response.
+Tags_NotURLRewriter={0} is not a URLRewriter.
+Tags_BadAction=Action ''{0}'' is not a valid action.
+Tags_NullBadAction=Action was resolved as "", this is probably the result of an expression bound to a null Object.
+Tags_NullAction=The expression {0} results in a null action.
+Tags_SelectBadTagValue=Could not set Select with given value {0}.
+Tags_RadioButtonGroupBadTagValue=Could not set RadioButtonGroup with given value {0}.
+Tags_CheckBoxGroupBadTagValue=Could not set CheckBoxGroup with given value {0}.
+Tags_FormNoFormBean=Could not find a form bean for this Form tag.
+Tags_FormParentForm=A Form cannot be enclosed by another Form.
+Tags_TextAreaNoFormBean=Could not find a form bean for this TextArea tag.
+Tags_RadioButtonGroupNoFormBean=Could not find a form bean for this RadioButtonGroup tag.
+Tags_RadioButtonNoRadioButtonGroup=Could not find RadioButtonGroup for the RadioButton.
+Tags_SelectNoFormBean=Could not find a form bean for this Select tag.
+Tags_FormBeanNoBeanAccess=Could not access form bean property {0}.
+Tags_FormBeanTargetError=Target invocation error trying to access form bean property {0}.
+Tags_FormBeanNoMethodError=Could not find a bean method to access form bean property {0}.
+Tags_TreeInvalidScope=Invalid scope: {0} for tree.
+Tags_TreeAutoExpandTagId=Tree supporting autoExpand require a tagId.
+Tags_TreeMultipleRootNodes=There cannot be more than one root Node for a Tree.
+Tags_TreeNoAttribute=The variable referenced by ''{0}'' was <b>null</b>.  No TreeNode was found.
+Tags_TreeEncodingError=An IOException occured in URLEncoder.
+Tags_TreeStructureError=The structure of the Tree is invalid.  The following properties are requires on all nodes <b>{0}</b>.
+Tags_UnableToWriteTree=Unable to create the tree instance identified by the expression ''{0}''. Error:<br>{1}
+Tags_TreeInvalidAttribute=Invalid tree control attribute ''{0}''.
+Tags_TreeDataNodeNotUnique=Tree node named ''{0}'' already belongs to this tree.
+Tags_InvalidParameterParent=Parameter tag's parent must implement URLParams.
+Tags_InvalidParameterMapParent=ParameterMap tag's parent must implement URLParams.
+Tags_ParameterMapNotAMap=Map expression for ParameterMap does not resolve to a java.util.Map.
+Tags_ParameterMapNotAnException=Map attribute of ParameterMap must be an expression.
+Tags_InvalidNodeParent=Node's parent must be a Tree or another TreeItem.
+Tags_CannotFindInput=Could not find the page input at key {0} and scope {1}.
+Tags_CheckBoxGroupChildError=The CheckBox tag cannot be the child of a CheckBoxGroup.
+Tags_CheckBoxOptionNoCheckBoxGroup=Could not find the CheckBoxGroup parent tag for the CheckBoxOption.
+Tags_SelectOptionNoSelect=Could not find the Select parent tag for the SelectOption.
+Tags_RadioButtonOptionNoRadioButtonGroup=Could not find the RadioButtonGroup parent tag for the RadioButtonOption.
+Tags_CheckBoxOptionNoCheckBoxGroup=Could not find the CheckBoxGroup parent tag for the CheckBoxOption.
+Tags_OptionsMismatchError=Options cannot be mixed with an OptionsDataSource.
+Tags_SelectOptionParentHasOptionsDataSource=The Select cannot both have SelectOptions and an OptionsDataSource.
+Tags_SelectRepeatingOptionType=A SelectOption must set the repeatingType property when appearing in the body of a repeating Select.
+Tags_OptionsDSIteratorError=Unable to create an Iterator on the optionsDataSource
+Tags_RadioOptionParentHasOptionsDataSource=The RadioButtonGroup cannot both have RadioButtonOptions and an OptionsDataSource.
+Tags_CheckBoxOptionParentHasOptionsDataSource=The CheckBoxGroup cannot both have CheckBoxOptions and an OptionsDataSource.
+Tags_NumberFormatWrongType=The NumberFormat type must be "number", "currency", or "percent".
+Tags_NoFormatPattern=The pattern of the Format must not be null or an empty string.
+Tags_FormatException=FormatError while formatting: {0}.
+Tags_EmptyStringFormatException=The value to be formatted by the FormatNumber cannot be an empty string or null.
+Tags_BadParameterType=Parameter {0} cannot be a Map.
+Tags_MalformedURLException=MalformedURLException occured.
+Tags_ExpressionEvaluationFailure=Expression evaluation failed for ''{0}''.
+Tags_IsExpressionFailure=The string ''{0}'' is not an expression : {1}
+Tags_ExpressionEvaluationException=Caught exception evaluating expression ''{0}'': {1}.
+Tags_ExpressionQualifyingFailure=Expression qualifying failed for text ''{0}''.
+Tags_LabelExpressionNull=Label: expression {0} resolved to null, using empty string.
+Tags_ContentExpressionNull=Content: expression {0} resolved to null, using empty string.
+Tags_Node_InvalidNode=Invalid treeItem; it must have exactly one of {1}.
+Tags_FormNoApplicationConfig=Could not locate the Form's application module configuration information.
+Tags_FormNameNoType=The Form must have a type attribute if it has a name attribute.
+Tags_FormNameBadType=The specified type of the Form was not a legal type.
+Tags_BindingUpdateError=Binding Update Failed for ''{0}'', cause: {1}
+Tags_BindingUpdateExpressionError=The expression ''{0}'' does not contains a valid expression and cannot be used for update.
+Tags_NoInPageErrorReporting=In-page error reporting is turned off, the following error occurred: {1}
+Tags_ClientReqScriptHeader=Setting runAtClient on the &lt;netui:html> tag requires a &lt;netui:scriptHeader> in the HTML &lt;head>.
+Tags_AttributeMayNotBeSet=The attribute "<b>{0}</b>" may not be set through the Attribute tag.
+Tags_AttributeNameNotSet=The paramater "<b>name</b>" may not be null or the empty string.
+Tags_AttributeFacetNotSupported=The facet "<b>{0}</b>" is not supported by this tag.
+Tags_AttributeInvalidParent=The parent tag of this "<b>attribute</b>" does not support dynamic attributes.
+
+Tags_ButtonText=Click
+
+Tags_CaptionTableParent=A TableCaption must have a Table as parent.
+Tags_RowTableParent=A TableRow must have a Table or TableBody as parent.
+
+
+Tags_Image_Page_and_URL=Image tag with both a Page and URL specified, \
+page "{0}", url "{1}"
+Tags_Iteration_Error=Unable to create iterator for attribute <b>optionDataSource</b> of type "<b>{0}</b>"
+Tags_Anchor_URLException=URL Exception: {0}
+Tags_Anchor_ForwardError=URL Exception: {0}.  This may be caused because an ActionMapping cannot be found (the page was not accessed through an Action).
+Tags_Form_URLException=The action ''{0}'' for the Form is malformed: {1}
+Tags_Anchor_InvalidAnchorURI=The Anchor URI is invalid; it must be exactly one of {0}
+Tags_HRefEvalNull=The href expression "{0}" resolved to null.
+Tags_formatDate_String_Error=The String "{0}" is not in an understood date format.
+Tags_formatDate_StringPatternError=The stringInputPattern "{0}" is invalid.  IllegalArgumentException: {1}
+Tags_formatDate_Type_Error=The type "{0}" may not be formatted by a formatDate tag.
+Tags_LocaleRequiresLanguage=If you set a country, you must also set a language when specifying a local, defaulting to Locale of Request.  The country set was "{0}"
+Tags_ErrorsException=An error occurred accessing the message bundle.  This may be because the message-resource is not defined within the page flow.  The error: {0}
+Tags_ParameterRenderError=The parameter type [{0}] was not recognized as a valid type.
+Tags_ParameterAccessError=The parameter type [{0}] was not recognized as a valid type, attempting to access argument ''{1}''.
+Tags_DataSourceExpressionError=An error occurred converting the data source "{0}" into an expression; {1}
+
+DataSourceError=The expression "<b>{0}</b>" is an invalid expression for a <b>dataSource</b>.  Expressions in a dataSource must bind to a single property.
+TreeRootError=The expression "<b>{0}</b>" is invalid. Cause: {1}
+OptionsDataSourceError=The expression "<b>{0}</b>" is an invalid expression for an <b>optionsDataSource</b>.  Expressions in a dataSource must bind to a single property.
+OptionsDataSourceEvalError=The expression "<b>{0}</b>" is an invalid expression for an <b>optionsDataSource</b> and could not be evaluated.  Cause: {1}
+DefaultValueError=The expression "<b>{0}</b>" could not be evaluated for the defaultValue attribute.  Cause: {1}
+OptionsDataAttributesError=The expression "<b>{0}</b>" is an invalid expression for an <b>optionsDataAttributes</b>.  Expressions in a optionsDataAttributes must bind to a single property.
+OptionsDataAttributesEvalError=The expression "<b>{0}</b>" is an invalid expression for an <b>optionsDataAttributes</b> and could not be evaluated.  Cause: {1}
+
+Tags_RepeaterStructure=A repeater component must be immediately nested within a Repeater tag.
+
+Tags_TreeAltText=Tree Node
+
+Tags_TemplateSectionMissing=No Sections defined, ''<b>{0}</b>'' not included in template.
+Tags_IteratorError=Unable to create Iterator for tag ''{0}'', attribute ''{1}'', expression ''{2}''.  The source may be null.
+Tags_TemplateContextMissing=No Template Context was found.  This may be because the template file was directly accessed.
+
+Expression_Error = Expression Error
+Tag_Error = Tag Error
+
+Tag_Header = \
+<span> \
+<table border="1" cellspacing="0" style="color:red;background-color:white">\n \
+<tr><th colspan="5">Tag Error</th></tr>\n \
+<tr><th>Tag</th><td>{0}</td>\n \
+    <th>Errors</th><td colspan="2">{1}</td></tr>\n \
+
+Tag_Footer = \
+</table></span>\n
+
+Expression_Error_Line = \
+<tr><th>{0}</th><th>Attribute</th><td>{1}</td>\n \
+    <th>Expression</th><td>{2}</td></tr>\n \
+<tr><th valign="top">Message</th><td colspan="4">{3}</td></tr>\n
+
+Tag_Error_Line = \
+<tr><th>{0}</th><th>Message</th><td colspan="3">{1}</td></tr>\n
+
+Inline_error = <span style="color:red;background-color:white">\n \
+[<b>{0}:{1}</b>, Found in tag <b>{2}</b>]</span>
+
+
+Footer_Error_Header = \
+<div> <hr />\
+<table border="1" cellspacing="0" style="color:red;background-color:white">\n \
+<tr><th colspan="6">Page Errors</th></tr>\n \
+<tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>\n
+
+Footer_Error_Footer = \
+</table></div>\n
+
+Footer_Error_Expr_Body = \
+<tr><th rowspan="2">{0}</th><th rowspan="2">{1}</th><th>Attribute</th><td>{2}</td>\n \
+    <th>Expression</th><td>{3}</td></tr>\n \
+<tr><th valign="top">Message</th><td colspan="3">{4}</td></tr>\n
+
+Footer_Error_Tag_Body = \
+<tr><th>{0}</th><th>{1}</th><th>Message</th><td>{2}</td></tr>\n
+
+
+PageFlow_UnresolvableForwardException_Page= \
+<html><head><title>Page Flow Error - Unresolvable Forward</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Unresolvable Forward</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Unable to find a forward named <b>{0}</b> on action <b>{1}</b>.</span>\n \
+</body></html>\n
+
+PageFlow_UnresolvableForwardException_Message= \
+Unable to find a forward named \"{0}\" on action {1} in page flow {2}.
+
+PageFlow_IllegalActionOutputException_Page= \
+<html><head><title>Page Flow Error - Illegal Action Output</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Illegal Action Output</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+    The forward <b>{0}</b> has at least one action output (<b>{3}</b>), but is set to redirect="true".  \n \
+    Page inputs may not be used on redirect forwards.\n \
+</span>\n \
+</body></html>\n
+
+PageFlow_IllegalActionOutputException_Message= \
+The forward "{0}" on action {1} in page flow {2} has at least one action output ("{3}"), but is \
+set to redirect="true".  Page inputs may not be used on redirect forwards.
+
+PageFlow_MissingActionOutputException_Page= \
+<html><head><title>Page Flow Error - Missing Action Output</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Missing Action Output</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{3}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action Output:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+    The required action output <b>{0}</b> was not present on forward <b>{1}</b>.\n \
+</span>\n \
+</body></html>\n
+
+PageFlow_MissingActionOutputException_Message= \
+The required action output "{0}" was not present on forward "{1}" (action {2} in Page Flow {3}).
+                             
+PageFlow_MismatchedActionOutputException_Page= \
+<html><head><title>Page Flow Error - Mismatched Action Output</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Mismatched Action Output</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{3}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action Output:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+    The action output <b>{0}</b> is of type <b>{4}</b>, but was declared to expect type <b>{5}</b>.\n \
+</span>\n \
+</body></html>\n
+
+PageFlow_MismatchedActionOutputException_Message= \
+The action output "{0}" on forward "{1}" (action {2} in Page Flow {3}) is of type {4}, but was declared to expect type {5}.
+
+PageFlow_IllegalRedirectOutputFormException_Page= \
+<html><head><title>Page Flow Error - Illegal Output Form on Redirect</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Illegal Output Form on Redirect</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+The forward "{0}" on action {1} in page flow {2} has at least one output form (type {3}), but is\n \
+set to redirect="true".  Output forms may not be used on redirect forwards.\n \
+</span>\n \
+</body></html>\n
+
+PageFlow_IllegalRedirectOutputFormException_Message= \
+The forward "{0}" on action {1} in page flow {2} has at least one output form (type {3}), but is \
+set to redirect="true".  Output forms may not be used on redirect forwards.
+
+PageFlow_IllegalOutputFormTypeException_Page= \
+<html><head><title>Page Flow Error - Illegal Output Form Type</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Illegal Output Form Type</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+    The forward "{0}" on action {1} in page flow {2} has a first output form of type {3}, but is\n \
+    declared to require type {4}.
+</span>\n \
+</body></html>\n
+
+PageFlow_IllegalOutputFormTypeException_Message= \
+The forward "{0}" on action {1} in page flow {2} has a first output form of type {3}, but is\n \
+declared to require type {4}.
+
+PageFlow_NotLoggedInException_Page= \
+<html><head><title>Page Flow Error - Not Logged In</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Not Logged In</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Action <b>{0}</b> requires a current user, but there is no logged-in user.</span>\n \
+</body></html>\n
+
+PageFlow_NotLoggedInException_Message= \
+Action {0} in page flow {1} requires a current user, but there is no logged-in user.
+
+PageFlow_LoginExpiredException_Page= \
+<html><head><title>Page Flow Error - Login Expired</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Login Expired</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Action <b>{0}</b> requires a current user, but there is no logged-in user. \n \
+   This may be due to an expired session.</span>\n \
+</body></html>\n
+
+PageFlow_LoginExpiredException_Message= \
+Action {0} in page flow {1} requires a current user, but there is no logged-in user. \
+This may be due to an expired session.
+
+PageFlow_UnfulfilledRolesException_Page= \
+<html><head><title>Page Flow Error - Unsatisfied Role Restriction</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Unsatisfied Role Restriction</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Action <b>{0}</b> requires the user to be in one of the following roles: {2}.</span>\n \
+</body></html>\n
+
+PageFlow_UnfulfilledRolesException_Message= \
+Action {0} in page flow {1} requires the user to be in one of the following roles: {2}.
+
+PageFlow_NoMatchingActionMethodException_Page= \
+<html><head><title>Page Flow Error - No Matching Action Method</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - No Matching Action Method</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+<tr><td><b>Form:</b></td><td>{1}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Could not find matching action method for action=<b>{0}</b>, form=<b>{1}</b>.</span>\n \
+</body></html>\n
+
+PageFlow_NoMatchingActionMethodException_Message= \
+Could not find matching action method for action={0}, form={1} in page flow {2}.
+
+PageFlow_NoFormString = [none]
+
+PageFlow_NoCurrentPageFlowException_Page= \
+<html><head><title>Page Flow Error - No Current Page Flow</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - No Current Page Flow</h1>\n \
+<span style="color:red">You have tried to return to a recent page or action in the current page flow \
+through return-to=\"{0}\" from action <b>{1}</b>, but there is no current page flow.  This can happen \
+when you have modified files and caused the web application to be redeployed, or when the session \
+expires.  Please restart the sequence again.</span>\n \
+</body></html>\n
+
+PageFlow_NoCurrentPageFlowException_Message = No current page flow for return-to=\"{0}\" on action {1}.
+
+PageFlow_NoPreviousPageException_Page= \
+<html><head><title>Page Flow Error - No Relevant Page</title></head>\n \
+<body>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+</table><br />\n \
+<h1>Page Flow Error - No Relevant Page</h1>\n \
+<span style="color:red">You have tried to return to a recent page in the current page flow \
+through return-to=\"{0}\", but there is no appropriate page.</span>\n \
+</body></html>\n
+
+PageFlow_NoPreviousPageException_Message = No relevant page for return-to=\"{0}\" on action {1} in page flow {2}.
+
+PageFlow_NoPreviousActionException_Page= \
+<html><head><title>Page Flow Error - No Previous Action</title></head>\n \
+<body>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+</table><br />\n \
+<h1>Page Flow Error - No Previous Action</h1>\n \
+<span style="color:red">You have tried to return to a recent action in the current page flow \
+through return-to=\"{0}\", but there is no appropriate action.</span>\n \
+</body></html>\n
+
+PageFlow_NoPreviousActionException_Message = No previous action for return-to=\"{0}\" on action {1} in page flow {2}.
+
+PageFlow_InfiniteReturnToActionException_Page= \
+<html><head><title>Page Flow Error - Return to Same Action</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Return to Same Action</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">You have tried to return to the most recent action (<b>{0}</b>) in the current \
+page flow through return-to=\"action\", but the current action is the same as the previous action.  The flow \
+has been terminated to avoid an infinite loop.</span>\n \
+</body></html>\n
+
+PageFlow_InfiniteReturnToActionException_Message= \
+Infinite loop of return-to=\"action\" for action {0} in page flow {1}.
+
+PageFlow_EmptyNestingStackException_Page= \
+<html><head><title>Page Flow Error - No Nesting Page Flow</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - No Nesting Page Flow</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Nested Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Returned Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">You have returned from a nested page flow, but there is no current page flow \
+on the stack.  This can happen in iterative development mode when you have modified files and caused \
+the web application to be redeployed, or when the session expires.  Please restart the nesting sequence \
+again.</span>\n \
+</body></html>\n
+
+PageFlow_EmptyNestingStackException_Message = Empty nesting stack for returned action {0} from page flow {1}.
+
+PageFlow_ActionNotFoundException_Page= \
+<html><head><title>Page Flow Error - Action Not Found</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Action Not Found</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+<tr><td><b>Form:</b></td><td>{2}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Unable to find matching action <b>{0}</b>.</span>\n \
+</body></html>\n
+
+PageFlow_ActionNotFoundException_Message= \
+Unable to find matching action {0} in page flow {1}.
+
+PageFlow_UnhandledException_Page = \
+<html><head><title>Page Flow Unhandled Exception</title></head>\n \
+<body>\n \
+<h1>Page Flow Unhandled Exception</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Exception:</b></td><td>{0}</td></tr>\n \
+<tr><td><b>Message:</b></td><td>{1}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">A <b>{0}</b> exception was thrown and not handled by any page flow. See the log for the exception stack trace.</span>\n \
+</body></html>\n
+
+PageFlow_UnhandledException_Message = A {0} exception was thrown and not handled by any page flow.
+
+PageFlow_CompileErrorHeader= \
+<html><head><title>Page Flow Compile Error</title></head>\n \
+<body>\n \
+<h1>Page Flow Compile Error</h1>\n \
+<span style="color:red">Compilation of {0} failed.</span>\n \
+<p />\n \
+<table border="1" cellspacing="0" cellpadding="15">\n
+
+PageFlow_CompileErrorItem= \
+<tr><td>{7} at line {0} column {1}, file <i>{2}</i>:<pre>{3}\n{4}</pre>Description: <b>{5}</b><br /><i>{6}</i></td></tr>\n \
+
+PageFlow_CompileErrorFooter= \
+</table><br />\n \
+</body></html>\n
+
+PageFlow_CompileErrorHeaderConsole= \
+--------------------------------------------------------------------------------\n\
+Page Flow Compile Warnings for file {0}\n\n
+
+PageFlow_CompileErrorItemConsole= \
+{7} at line {0} column {1}, file {2}:\n{3}\n{4}\nDescription: {5}\n{6}\n
+
+PageFlow_CompileErrorFooterConsole= \
+--------------------------------------------------------------------------------
+
+PageFlow_Error=Error
+PageFlow_Warning=Warning
+PageFlow_Info=Info
+
+PageFlow_OverlappingError_1 = PageFlows {0}
+PageFlow_OverlappingError_2 = , {0}
+PageFlow_OverlappingError_3 = and {0} may not coexist in directory {1}.
+PageFlow_IllegalStateGet = {0} was called outside of a valid context.
+
+PageFlow_WrongPath_Page= \
+<html><head><title>Page Flow - Wrong Path</title></head>\n \
+<body>\n \
+<h1>Page Flow - Wrong Path</h1>\n \
+Page Flow <b>{0}</b> was requested, but the page flow for the directory is <b>{1}</b>.\n \
+</body></html>\n
+
+PageFlow_WrongPath_Message = Page Flow {0} was requested, but the page flow for the directory is {1}.
+
+PageFlow_NoModuleConf_Page= \
+<html><head><title>Page Flow - Missing Module Configuration</title></head>\n \
+<body>\n \
+<h1>Page Flow - Missing Module Configuration</h1>\n \
+There is no Struts module configuration registered for path <b>{1}</b>.\n \
+This may be due to a compilation error in <b>{0}</b>.\n \
+</body></html>\n
+
+PageFlow_NoModuleConf_Message= \
+There is no Struts module configuration registered for path {1}. \ 
+This may be due to a compilation error in {0}.
+
+PageFlow_LoginFailed=Login failed for user {0}.
+
+PageFlow_MissingExceptionHandler=Could not find exception handler method <b>{0}</b>.
+PageFlow_MissingExceptionHandlerWithForm= \
+Could not find exception handler method <b>{0}</b> that accepts a form of type <b>{1}</b>.
+
+PageFlow_Custom_Error_Page = <html><title>PageFlow Error</title><body>PageFlow <b>{0}</b>: {1}</body></html>\n
+PageFlow_Custom_Error_Message = Error in PageFlow {0}: {1}
+
+PageFlow_Forward_Overflow_Page = \
+<html><head><title>Forward Overflow</title></head>\n \
+<body>\n \
+<h1>PageFlow - Forward Overflow</h1>\n \
+<span style="color:red">More than {0} server forwards have been executed during the given request, and \
+the flow has been terminated to avoid an infinite loop.  The URI of the most recent forward was {1}. \
+</body></html>\n
+
+PageFlow_Forward_Overflow_Message = \
+More than {0} server forwards have been executed during the given request, and \
+the flow has been terminated to avoid an infinite loop.  The URI of the most recent forward was {1}.
+
+PageFlow_Nesting_Overflow_Page = \
+<html><head><title>Forward Overflow</title></head>\n \
+<body>\n \
+<h1>PageFlow - Forward Overflow</h1>\n \
+<span style="color:red">{0} page flows have been nested, and this number exceeds the nesting \
+maximum of {1}.  The nesting stack has been cleared. \
+</body></html>\n
+
+PageFlow_Nesting_Overflow_Message = \
+{0} page flows have been nested, and this number exceeds the nesting maximum of {1}.  \
+The nesting stack has been cleared.
+
+PageFlow_Struts_MissingModuleConfig = Could not load Struts module configuration for {0}.
+PageFlow_Struts_ModuleParseError = Error parsing Struts module configuration for {0}.
+
+#template servlet exception
+TempLog_ServletError=Servlet Exception occured include template: {0}, message: {1}
+
+# Template Logging Strings
+TempLog_ServletException=Servlet Exception occured including template: {0}
+TempLog_Cause=Cause: Exception [{0}] Message [{1}]
+TempLog_AssertCause: Assert\n{0}
+
+# Template Exception Strings
+TempExcp_ExceptIncludeTemplate=Exception [{0}] including template [{1}]
+TempExcp_ExceptIncludeDefault=Exception [{0}] including the template default [{1}]
+TempExcp_Except=Exception [{0}] {1}
+TempExcp_WritingContent=Writing Section content
+
+TempExcp_MissingTemplate=Template file [{0}] was not found.
+TempExcp_MissingDefaultPage=The defaultPage file [{0}] was not found.
+TempExcp_ContainedTemplate=The Template tag may not be nested within another tag.  It should be the top level tag, without content before or after it.
+
+# Error messages for ProcessPopulate
+ExprUpdateError=NetUI Warning: Unable to update expression "{0}".  The typical cause is that the object represented by the expression is not available or is the wrong type for updating.  Cause: {1}
+
+#
+# NetUI Databinding Tag Strings
+#
+Tags_AbstractCallMethod_noSuchObjectException=An exception occurred finding the object named \"{0}\" on which to invoke the method \"{1}\".  Cause: {2}
+Tags_AbstractCallMethod_objectIsNull=The object named \"{0}\" on which to invoke the method \"{1}\" was not found.
+Tags_AbstractCallMethod_noSuchMethod=Could not find operation \"{0}\" with {1} parameter(s) on the {2}.
+Tags_AbstractCallMethod_noSuchMethodWithTypes=Could not find operation \"{0}\" with {1} parameter(s) of type(s) {2} on the {3}.
+Tags_AbstractCallMethod_invocationError=Could not invoke method \"{0}\" on the object named \"{1}\" because: {2}
+Tags_AbstractCallMethod_parameterError=The argument of type \"{0}\" in position \"{1}\" with value \"{2}\" could not be created with the error: {3}
+Tags_CellRepeater_intTooSmall=Can not use a value of \"{0}\" for the field \"{1}\"; the value must be greater than zero.
+Tags_CellRepeater_missingRowOrColumn=Both the rows and columns attributes must be greater than zero.
+Tags_CellRepeater_invalidRowOrColumn=At least one of the 'rows' and 'columns' attributes must be set to a valid number
+Tags_CellRepeater_invalidRowValue=The 'rows' attribute for the {0} is ''{1}'' and must be greater than zero.
+Tags_CellRepeater_invalidColumnValue=The 'columns' attribute for the {0} is ''{1}'' and must be greater than zero.
+Tags_CallMethod_defaultObjectName=referenced object
+Tags_CallPageFlow_defaultObjectName=current page flow
+Tags_CallMethod_objectNotFoundException=Could not find a control with the name \"{0}\".  Reason: {1}
+Tags_CallPageFlow_noPageFlow=Could not find a current page flow.
+Tags_DeclareBundle_invalidName=The name attribute is \"{0}\" and must be a String with length greater than zero.
+Tags_DeclareBundle_invalidResourcePath=The resourcePath attribute is \"{0}\" and must be a String that references a Java properties file.
+Tags_DeclareBundle_wrongContextType=The PageContext contains an attribute under the BundleContex key of the wrong type \"{0}\".  This object must be removed before the bundle binding context can be enabled.
+Tags_DeclareBundle_invalidLocaleOverride=The locale override specification is not valid; check the language, country, and variant attributes.  In order to declare a variant, a variant requires boty language and country; a country requires a language.  Current values language={0} country={1} variant={2}.
+Tags_DeclareBundle_defaultIsReservedWord=The name \"default\" is not a valid name for a declared bundle; it is reserved for reference to the default message-resources file for the current page flow.
+Tags_DataAccessProvider_metadataUnsupported=The {0} does not export metadata for its iterated items.
+Tags_DeclarePageInput_EmptyName=The name attribute of the declarePageInput tag can not be an empty string.
+Tags_DeclarePageInput_EmptyType=The type attribute of the declarePageInput tag can not be an empty string.
+Tags_DeclarePageInput_Required=The page input "{0}" is required for this page and was not found.
+Tags_GetData_valueExpressionError=The expression "<b>{0}</b>" is an invalid expression for the <b>value</b> attribute.  Expressions in the value attribute must bind to a single object.
+Tags_MethodParameter_invalidParent=The MethodParamter tag must be directly contained inside of a CallControl, CallPageFlow, or ChoiceMethod tag.
+Tags_MethodParameter_undefinedValue=The MethodParameter tag must have either the isNull attribute set to true or the value attribute set to a valid value.";
+Tags_Pad_intTooSmall=Can not use a value of \"{0}\" for the field \"{1}\"; the value must be greater than zero.
+Tags_Pad_minRepeatIntTooSmall=Can not use a value of \"{0}\" for the field \"{1}\"; the value must be greater than or equal to zero.
+Tags_Pad_minGreaterThanMax=The value of maxRepeat ({0}) must be greater than the value of minRepeat ({1}).
+Tags_Repeater_nullIterator=The data structure from which to create an iterator is null.
+Tags_RepeaterItem_invalidChoiceTags=The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItem's body.
+Tags_RepeaterItem_invalidChoiceMethod=The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.
+Tags_StructuredBaseTag_startTagError=An exception occurred when rendering the startTag of the tag \"{0}\" because: {1}
+Tags_StructuredBaseTag_endTagError=An exception occurred when rendering the endTag of the tag \"{0}\" because: {1}
+Tags_StructuredBaseTag_invalidParent=A tag of type \"{0}\" must be nested within a tag of type \"{1}\"
+
+#
+# NetUI Utility Strings
+#
+ArrayIterator_notAnArray=Can not create an array iterator from an object that is not an array
+ArrayIteator_arrayError=An error occurred while getting the next element from an array of type {0}
+IteratorFactory_Iterator_noSuchElement=No more elements in the Iterator.
+IteratorFactory_Iterator_removeUnsupported=Type {0} does not support the remove() operation.
+ProcessPopulate_handler_nonAtomicExpression=The expression \"{0}\" is not an atomic expression.
+ProcessPopulate_handler_notRegistered=A handler with the name \"{0}\" has not been registered.
+ProcessPopulate_exprUpdateError=Caught exception processing request parameter \"{0}\" during expression update.  Cause: {1}TypeUtils_nullType=Can not convert an object into a null type.
+TypeUtils_noConverterForType=Could not find a TypeConverter for converting a String to an object of type \"{0}\"
+TypeUtils_javaUtilDateConvertError=Caugnt an error converting a String to a DateFormat.SHORT formatted Date: {0}
+TypeUtils_javaSqlDateConvertError=Caught an error converting a String to a java.sql.Date: {0}
+TypeUtils_javaSqlTimestampConvertError=Caught an error converting a String to a java.sql.Timestamp: {0}
+TypeUtils_javaSqlTimeConvertError=Caught an error converting a String to a java.sql.Time: {0}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/tags/GroupOption.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/tags/GroupOption.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.tags;
+
+/**
+ * GroupOption is a simple JavaBean that can be used to fully specify
+ * the name, value, alt text and accesskey of either a <code>CheckBoxGroup</code>
+ * or a <code>RadioButtonGroup</code>.  The name will appear in the HTML after 
+ * the checkbox or radio button.  The name attribute is required for outpu
+ * by the tags.  The value can either be set separately or  will default to
+ * the name.  Optionally and alt text attribute and accesskey value can be
+ * provided.
+ */
+public class GroupOption
+    implements java.io.Serializable
+{
+    private String _name;
+    private String _value;
+    private String _alt;
+    private String _accessKey;
+
+
+    /**
+     * Default Constructor.
+     */
+    public GroupOption() {}
+
+    /**
+     * Construct a GroupOption setting the name.
+     */
+    public GroupOption(String name)
+    {
+        _name = name;
+    }
+
+    /**
+     * Construct a GroupOption setting the name and value.
+     */
+    public GroupOption(String name,String value)
+    {
+        _name = name;
+        _value = value;
+    }
+
+    /**
+     * Construct a GroupOption setting all the values.
+     */
+    public GroupOption(String name,String value,String alt, String accessKey)
+    {
+        _name = name;
+        _value = value;
+        _alt = alt;
+        _accessKey = accessKey;
+    }
+
+    /**
+     * Set the name of the option which will appear next to the option.
+     * @param name The name of the created option.
+     */
+    public void setName(String name) {
+        _name = name;
+    }
+
+    /**
+     * Get the name of the option.
+     * @return The name of the option that was set.
+     */
+    public String getName() {
+        return _name;
+    }
+
+    /**
+     * Set the value of the option.  Thie value will be written out as
+     * the <code>value</code> attribute.
+     * @param value The name of the created option.
+     */
+    public void setValue(String value) {
+        _value = value;
+    }
+
+    /**
+     * Get the value of the option.  If no value has been set
+     * this method will return value assigned to the <code>name</code>
+     * property.
+     * @return The value of the option.
+     */
+    public String getValue() {
+        return (_value != null) ? _value : _name;
+    }
+
+
+    /**
+     * Set the alt text of the option.
+     * @param alt The text that will be set for the <code>alt</code> attribute.
+     */
+    public void setAlt(String alt) {
+        _alt = alt;
+    }
+
+    /**
+     * Get the alt text of the option.
+     * @return The alt text of the option.
+     */
+    public String getAlt() {
+        return _alt;
+    }
+
+    /**
+     * Set the alt text of the option.
+     * @param accessKey The value that will be set for the
+     * <code>accesskey</code> attribute.
+     */
+    public void setAccessKey(String accessKey) {
+        _accessKey = accessKey;
+    }
+
+    /**
+     * Get the accesskey of the option.
+     * @return The accessKey of the option.
+     */
+    public String getAccessKey() {
+        return _accessKey;
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConversionException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConversionException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.type;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * A TypeConversionException is thrown when an error has occurred performing
+ * a type conversion in the {@link TypeUtils} class.
+ */
+public class TypeConversionException
+    extends RuntimeException
+{
+    private String _localizedMessage = null;
+
+    /** 
+     * Construct a TypeConversionException.
+     *  
+     */ 
+    public TypeConversionException()
+    {
+        super();
+    }
+
+    /** 
+     * Construct a TypeConversionException.
+     * 
+     * @param message message describing the error
+     */ 
+    public TypeConversionException(String message)
+    {
+        super(message);
+    }
+
+    /** 
+     * Construct a TypeConversionException.
+     * 
+     * @param cause Throwable related to the cause of this exception
+     */ 
+    public TypeConversionException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    /** 
+     * Construct a TypeConversionException.
+     *
+     * @param message message describing the error
+     * @param cause Throwable related to the cause of this exception
+     */ 
+    public TypeConversionException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+
+    /**
+     * Set a localized message describing the cause of this exception.
+     * 
+     * @param localizedMessage a localized message
+     */
+    public void setLocalizedMessage(String localizedMessage)
+    {
+        _localizedMessage = localizedMessage;
+    }
+
+    /**
+     * Get a localized message describing the cause of this exception.
+     *
+     * @return a localized message string
+     */
+    public String getLocalizedMessage()
+    {
+        return (_localizedMessage != null ? _localizedMessage : getMessage());
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConverter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConverter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.type;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public interface TypeConverter
+{
+    public Object convertToObject(String value);
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConverterNotFoundException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeConverterNotFoundException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.type;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class TypeConverterNotFoundException
+    extends RuntimeException
+{
+    private String _localizedMessage = null;
+
+    public TypeConverterNotFoundException() 
+    {
+        super();
+    }
+
+    public TypeConverterNotFoundException(String message)
+    {
+        super(message);
+    }
+
+    public TypeConverterNotFoundException(String message, Throwable t)
+    {
+        super(message, t);
+    }
+
+    public TypeConverterNotFoundException(Throwable t)
+    {
+        super(t);
+    }
+
+    public void setLocalizedMessage(String localizedMessage)
+    {
+        _localizedMessage = localizedMessage;
+    }
+
+    public String getLocalizedMessage()
+    {
+        return _localizedMessage != null ? _localizedMessage : getMessage();
+    }
+}

Added: incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/org/apache/beehive/netui/util/type/TypeUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,623 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.type;
+
+// java imports
+import java.io.InputStream;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import java.text.DateFormat;
+
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+
+// internal imports
+import org.apache.beehive.netui.util.Bundle;
+
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig;
+import org.apache.beehive.netui.util.config.bean.TypeConverters;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+
+/**
+ *
+ *
+ */
+public final class TypeUtils
+{
+    private static final Logger logger = Logger.getInstance(TypeUtils.class);
+
+    private static final String TYPE_CONVERTER_PROPERTIES = "/properties/netui-typeconverter.properties";
+    private static final String EMPTY_STRING = "";
+    private static final HashMap _converters = new HashMap();
+    private static String _toString = null;
+
+    static
+    {
+        // initialize the default type converters
+        initialize();
+
+        // read webapp converters
+        loadConverters();
+        
+        if(logger.isInfoEnabled()) logger.info(registeredConvertersToString());
+    }
+
+    // do not construct
+    private TypeUtils() {}
+
+    /**
+     * Convert an object from a String to the given type.  
+     * 
+     * @throws TypeConverterNotFoundException if a TypeConverter for the target type can not be found.
+     * @return the Object result of converting the String to the type.
+     */
+    public static final Object convertToObject(String value, Class type)
+    {
+        TypeConverter converter = (TypeConverter)_converters.get(type);
+        if(converter == null)
+        {
+            String msg = "Could not find a TypeConverter for converting a String to an object of type \"" + 
+                                                   (type != null ? type.getName() : null) + "\"";
+            TypeConverterNotFoundException tcn = new TypeConverterNotFoundException(msg);
+
+            if(type == null)
+                msg = Bundle.getErrorString("TypeUtils_nullType");
+            else msg = Bundle.getErrorString("TypeUtils_noConverterForType", new Object[] {type.getName()});
+            tcn.setLocalizedMessage(msg);
+            if(logger.isInfoEnabled()) logger.info(msg);
+
+            throw tcn;
+        }
+        
+        return converter.convertToObject(value);
+    }
+
+    public static final byte convertToByte(String value) 
+    {return ((Byte)convertToObject(value, byte.class)).byteValue();}
+
+    public static final boolean convertToBoolean(String value) 
+    {return ((Boolean)convertToObject(value, boolean.class)).booleanValue();}
+
+    public static final char convertToChar(String value) 
+    {return ((Character)convertToObject(value, char.class)).charValue();}
+
+    public static final double convertToDouble(String value) 
+    {return ((Double)convertToObject(value, double.class)).doubleValue();}
+
+    public static final float convertToFloat(String value) 
+    {return ((Float)convertToObject(value, float.class)).floatValue();}
+
+    public static final int convertToInt(String value) 
+    {return ((Integer)convertToObject(value, int.class)).intValue();}
+
+    public static final long convertToLong(String value) 
+    {return ((Long)convertToObject(value, long.class)).longValue();}
+
+    public static final short convertToShort(String value) 
+    {return ((Short)convertToObject(value, short.class)).shortValue();}
+
+    public static final Byte convertToByteObject(String value) 
+    {return (Byte)convertToObject(value, Byte.class);}
+
+    public static final Boolean convertToBooleanObject(String value) 
+    {return (Boolean)convertToObject(value, Boolean.class);}
+
+    public static final Character convertToCharacterObject(String value) 
+    {return (Character)convertToObject(value, Character.class);}
+
+    public static final Double convertToDoubleObject(String value) 
+    {return (Double)convertToObject(value, Double.class);}
+
+    public static final Float convertToFloatObject(String value) 
+    {return (Float)convertToObject(value, Float.class);}
+
+    public static final Integer convertToIntegerObject(String value) 
+    {return (Integer)convertToObject(value, Integer.class);}
+
+    public static final Long convertToLongObject(String value) 
+    {return (Long)convertToObject(value, Long.class);}
+
+    public static final Short convertToShortObject(String value) 
+    {return (Short)convertToObject(value, Short.class);}
+
+    private static String registeredConvertersToString()
+    {
+        if(_toString != null)
+            return _toString;
+        
+        StringBuilder buf = new StringBuilder();
+        buf.append(TypeUtils.class.getName() + " regestered converters (class name, TypeConverter implementation):\n");
+        buf.append(":::::\n");
+        Iterator iterator = _converters.keySet().iterator();
+        while(iterator.hasNext())
+        {
+            Class key = (Class)iterator.next();
+            String keyName = key.getName();
+            String value = (_converters.get(key) != null ? _converters.get(key).getClass().getName() : "null");
+            buf.append(keyName);
+            buf.append(", ");
+            buf.append(value);
+            buf.append("\n");
+        }
+        buf.append(":::::\n");
+        _toString = buf.toString();
+
+        return _toString;
+    }
+
+    private static void loadConverters()
+    {
+        Map map = readFromConfig();
+        if(map != null)
+        {
+            load(map);
+            map.clear();
+        }
+        
+        map = readFromProperties();
+        if(map != null)
+            load(map);
+    }
+    
+    private static Map readFromProperties()
+    {
+        Properties props = null;
+        InputStream is = null;
+        try
+        {
+            is = (TypeUtils.class).getClassLoader().getResourceAsStream(TYPE_CONVERTER_PROPERTIES);
+
+            if(logger.isDebugEnabled()) logger.debug("InputStream: " + is);
+
+            if(is == null) return null;
+
+            props = new Properties();
+            props.load(is);
+        }
+        catch(Exception e)
+        {
+            if(logger.isWarnEnabled()) logger.warn("Error occurred reading type converter properties file", e);
+        }
+        finally
+        {
+            try{if(is != null) is.close();}catch(Exception ignore) {}
+        }
+        
+        LinkedHashMap map = new LinkedHashMap();
+        Enumeration e = props.propertyNames();
+        while(e.hasMoreElements())
+        {
+            String key = (String)e.nextElement();
+            map.put(key, props.getProperty(key));
+        }
+        
+        return map;
+    }
+
+    private static final Map readFromConfig()
+    {
+        NetuiConfig config = ConfigUtil.getConfig();
+        if(config == null) return null;
+
+        TypeConverters converters  = config.getTypeConverters();
+        if(converters == null) return null;
+
+        org.apache.beehive.netui.util.config.bean.TypeConverters.TypeConverter[] converterArray = 
+            converters.getTypeConverterArray();
+        if(converterArray == null) return null;
+        
+        LinkedHashMap map = new LinkedHashMap();
+        for(int i = 0; i < converterArray.length; i++)
+        {
+            map.put(converterArray[i].getType(), converterArray[i].getConverterClass());
+        }
+        
+        return map;
+    }
+
+    private static void load(Map map)
+    {
+        // load the properties and continue to populate the map
+        Iterator iterator = map.keySet().iterator();
+        while(iterator.hasNext())
+        {
+            String key = (String)iterator.next();
+            String className = (String)map.get(key);
+
+            if((key == null || key.equals(EMPTY_STRING)) || (className == null || className.equals(EMPTY_STRING)))
+            {
+                String msg = "Could not create a TypeConverter for type \"" + key + "\" and TypeConverter \"" + className + "\"";
+                if(logger.isWarnEnabled()) logger.warn(msg);
+
+                continue;
+            }
+
+            Class targetClazz = null;
+            Class tcClazz = null;
+            TypeConverter tc = null;
+
+            // try to find the "convert-to" class
+            try
+            {
+                targetClazz = Class.forName(key);
+            }
+            catch(ClassNotFoundException cnf)
+            {
+                String msg = "Could not create a TypeConverter for type \"" + key + "\" because the target type could not be found.";
+                if(logger.isWarnEnabled()) logger.warn(msg);
+
+                continue;
+            }
+
+            // try to find the TypeConverter implementation
+            try
+            {
+                tcClazz = Class.forName(className);
+                tc = (TypeConverter)tcClazz.newInstance();
+            }
+            catch(ClassNotFoundException cnf)
+            {
+                if(logger.isWarnEnabled()) logger.warn("Could not create a TypeConverter for type \"" + key + "\" because the TypeConverter implementation class \"" + 
+                                                       (tcClazz != null ? tcClazz.getName() : null) + "\" could not be found.");
+                
+                continue;
+            }
+            catch(Exception e)
+            {
+                if(logger.isWarnEnabled()) logger.warn("Could not create a TypeConverter for type \"" + key + "\" because the implementation class \"" + 
+                                                       (tcClazz != null ? tcClazz.getName() : null) + "\" could not be instantiated.");
+                continue;
+            }
+            
+            // found both classes, warn if overwriting a previous converter.  right now, there is no way to get these back
+            if(_converters.containsKey(targetClazz))
+                if(logger.isWarnEnabled()) logger.warn("Overwriting a previously defined TypeConverter named \"" + targetClazz + 
+                                                       "\" with a new TypeConverter implementation of type \"" + className + "\"");
+
+            if(logger.isInfoEnabled()) logger.info("Adding a type converter; target type=\"" + targetClazz.getName() + 
+                                                   "\" TypeConverter implementation=\"" + tc.getClass().getName() + "\"");
+            
+            _converters.put(targetClazz, tc);
+        }
+    }
+
+    /**
+     * Create converters that take an Object representing a value and convert
+     * that value, based on its type, to a String.  Includes all primitive types,
+     * primitive wrappers, String, and BigDecimal.  Types like BigDecimal are included
+     * because JDBC uses these complex types to map SQL types to Java objects.
+     */
+    private static void initialize()
+    {
+        _converters.put(byte.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    return (value == null || value.equals(EMPTY_STRING) ? new Byte((byte)0) : new Byte(value.trim()));
+                }
+
+            });
+        _converters.put(Byte.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+                    else return TypeUtils.convertToObject(value, byte.class);
+                }
+            });
+
+        _converters.put(boolean.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return Boolean.FALSE;
+
+                    value = value.toLowerCase().trim();
+                    if(value.equals("on") || value.equals("true"))
+                        return Boolean.TRUE;
+                    else return Boolean.FALSE;
+                }
+            });
+        _converters.put(Boolean.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+                    else return TypeUtils.convertToObject(value, boolean.class);
+                }
+            });
+
+        _converters.put(char.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return new Character('\u0000');
+                    else return new Character(value.charAt(0));
+                }
+            });
+        _converters.put(Character.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+                    else return TypeUtils.convertToObject(value, char.class);
+                }
+            });
+
+        _converters.put(double.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return new Double(0.0);
+                    else return new Double(value.trim());
+                }
+            });
+        _converters.put(Double.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+                    else return TypeUtils.convertToObject(value, double.class);
+                }
+            });
+
+        _converters.put(float.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return new Float(0.0);
+                    else return new Float(value.trim());
+                }
+            });
+        _converters.put(Float.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+                    else return TypeUtils.convertToObject(value, float.class);
+                }
+            });
+
+        _converters.put(int.class, new TypeConverter() 
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return new Integer(0);
+                    else return new Integer(value.trim());
+                }
+            });
+        _converters.put(Integer.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+                    else return TypeUtils.convertToObject(value, int.class);
+                }
+            });
+
+        _converters.put(long.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return new Long(0);
+                    else return new Long(value.trim());
+                }
+            });
+        _converters.put(Long.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+                    else return TypeUtils.convertToObject(value, long.class);
+                }
+            });
+
+        _converters.put(short.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return new Short((short)0);
+                    else return new Short(value.trim());
+                }
+            });
+        _converters.put(Short.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+                    else return TypeUtils.convertToObject(value, short.class);
+                }
+            });
+
+        _converters.put(String.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null)
+                        return null;
+                    else return value;
+                }
+            });
+
+        _converters.put(java.math.BigDecimal.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return null;
+                    else return new BigDecimal(value.trim());
+                }
+            });
+
+        _converters.put(java.math.BigInteger.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return null;
+                    else return new BigInteger(value.trim());
+                }
+            });
+
+        _converters.put(byte[].class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return null;
+                    else return value.getBytes();
+                }
+            });
+
+        _converters.put(Byte[].class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING))
+                        return null;
+                    else
+                    {
+                        TypeConverter primByte = (TypeConverter)_converters.get(byte.class);
+                        byte[] bytes = value.getBytes();
+                        Byte[] wBytes = new Byte[bytes.length];
+
+                        for(int i = 0; i < bytes.length; i++)
+                            wBytes[i] = new Byte(bytes[i]);
+
+                        return wBytes;
+                    }
+                }
+            });
+        
+        _converters.put(Date.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+
+                    try
+                    {
+                        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
+                        return df.parse(value);
+                    }
+                    catch(java.text.ParseException pe)
+                    {
+                        String msg = "Caugnt an error converting a String to a DateFormat.SHORT formatted Date";
+                        if(logger.isWarnEnabled()) logger.warn(msg, pe);
+                        System.err.println(msg);
+                        
+                        TypeConversionException tce = new TypeConversionException(msg, pe);
+                        tce.setLocalizedMessage(Bundle.getString("TypeUtils_javaUtilDateConvertError", new Object[] {pe.getMessage()}));
+                        
+                        throw tce;
+                    }
+                }
+            });
+
+        // http://java.sun.com/j2se/1.4.1/docs/api/java/sql/Date.html
+        _converters.put(java.sql.Date.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+
+                    try
+                    {
+                        return java.sql.Date.valueOf(value);
+                    }
+                    catch(Exception e)
+                    {
+                        String msg = "Caught an error converting a String to a java.sql.Date";
+                        if(logger.isWarnEnabled()) logger.warn(msg, e);
+                        System.err.println(msg);
+                        
+                        TypeConversionException tce = new TypeConversionException(msg, e);
+                        tce.setLocalizedMessage(Bundle.getString("TypeUtils_javaSqlDateConvertError", new Object[] {e.getMessage()}));
+                        throw tce;
+                    }
+                }
+            });
+
+        // http://java.sun.com/j2se/1.4.1/docs/api/java/sql/Timestamp.html
+        _converters.put(java.sql.Timestamp.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+
+                    try
+                    {
+                        return java.sql.Timestamp.valueOf(value);
+                    }
+                    catch(Exception e)
+                    {
+                        String msg = "Caught an error converting a String to a java.sql.Timestamp";
+                        if(logger.isWarnEnabled()) logger.warn(msg, e);
+                        System.err.println(msg);
+                        
+                        TypeConversionException tce = new TypeConversionException(msg, e);
+                        tce.setLocalizedMessage(Bundle.getString("TypeUtils_javaSqlTimestampConvertError", new Object[] {e.getMessage()}));
+                        throw tce;
+                    }
+                }
+            });
+
+        // http://java.sun.com/j2se/1.4.1/docs/api/java/sql/Time.html
+        _converters.put(java.sql.Time.class, new TypeConverter()
+            {
+                public Object convertToObject(String value)
+                {
+                    if(value == null || value.equals(EMPTY_STRING)) return null;
+
+                    try
+                    {
+                        return java.sql.Time.valueOf(value);
+                    }
+                    catch(Exception e)
+                    {
+                        String msg = "Caught an error converting a String to a java.sql.Time";
+                        if(logger.isWarnEnabled()) logger.warn(msg, e);
+                        System.err.println(msg);
+                        
+                        TypeConversionException tce = new TypeConversionException(msg, e);
+                        tce.setLocalizedMessage(Bundle.getString("TypeUtils_javaSqlTimeConvertError", new Object[] {e.getMessage()}));
+                        throw tce;
+                    }
+                }
+            });
+    }
+}

Added: incubator/beehive/netui/src/util/schema/config.xsdconfig
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/schema/config.xsdconfig	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xb:config 
+    xmlns:pkg="http://beehive.apache.org/netui/2004/server/config"
+    xmlns:xb="http://www.bea.com/2002/09/xbean/config">
+    
+    <xb:namespace uri="http://beehive.apache.org/netui/2004/server/config">
+        <xb:package>org.apache.beehive.netui.util.config.bean</xb:package>
+    </xb:namespace>
+<!--    <xb:qname name="pkg:netui-config" javaname="NetUIConfig"/> -->
+
+</xb:config>
+

Added: incubator/beehive/netui/src/util/schema/netui-config.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/util/schema/netui-config.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://beehive.apache.org/netui/2004/server/config"
+            xmlns:netui="http://beehive.apache.org/netui/2004/server/config"
+            elementFormDefault="qualified">
+
+    <xsd:element name="netui-config">
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="legacy-tag-support" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false"/>
+                <xsd:element name="expression-languages" type="netui:expression-languages" minOccurs="1" maxOccurs="1"/>
+                <xsd:element name="pageflow-action-interceptors" type="netui:pageflow-action-interceptors" minOccurs="0" maxOccurs="1"/>
+                <xsd:element name="pageflow-handlers" type="netui:pageflow-handlers" minOccurs="0" maxOccurs="1"/>
+                <xsd:element name="type-converters" type="netui:type-converters" minOccurs="0" maxOccurs="1"/>
+                <xsd:element name="iterator-factories" type="netui:iterator-factories" minOccurs="0" maxOccurs="1"/>
+            </xsd:sequence>
+        </xsd:complexType>
+    </xsd:element>
+
+    <xsd:complexType name="action-interceptor">
+        <xsd:sequence>
+            <xsd:element name="interceptor-class" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="pageflow-action-interceptors">
+        <xsd:sequence>
+            <xsd:element name="global" minOccurs="0" maxOccurs="1">
+                <xsd:complexType>
+                    <xsd:sequence>
+                        <xsd:element name="before-action" minOccurs="0" maxOccurs="1">
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="action-interceptor" type="netui:action-interceptor" minOccurs="1" maxOccurs="unbounded"/>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>            
+                        <xsd:element name="after-action" minOccurs="0" maxOccurs="1">
+                            <xsd:complexType>
+                                <xsd:sequence>
+                                    <xsd:element name="action-interceptor" type="netui:action-interceptor" minOccurs="1" maxOccurs="unbounded"/>
+                                </xsd:sequence>
+                            </xsd:complexType>
+                        </xsd:element>
+                    </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+        </xsd:sequence>
+    </xsd:complexType>
+	
+    <xsd:complexType name="pageflow-handlers">
+        <xsd:sequence>
+            <xsd:element name="login-handler-class" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+            <xsd:element name="forward-redirect-handler-class" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+            <xsd:element name="reloadable-class-handler-class" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+            <xsd:element name="exceptions-handler-class" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+        </xsd:sequence>
+    </xsd:complexType>
+	
+    <xsd:complexType name="type-converters">
+        <xsd:sequence>
+            <xsd:element name="type-converter" minOccurs="0" maxOccurs="unbounded">
+                <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="type" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                    <xsd:element name="converter-class" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="iterator-factories">
+        <xsd:sequence>
+            <xsd:element name="iterator-factory" minOccurs="0" maxOccurs="unbounded">
+                <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                    <xsd:element name="factory-class" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="expression-languages">
+        <xsd:sequence>
+            <xsd:element name="default-language" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+            <xsd:element name="expression-language" minOccurs="1" maxOccurs="unbounded">
+                <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                    <xsd:element name="factory-class" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                    <xsd:element name="binding-contexts" type="netui:binding-contexts" minOccurs="0" maxOccurs="1"/>
+                </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="binding-contexts">
+        <xsd:sequence>
+            <xsd:element name="binding-context" minOccurs="0" maxOccurs="unbounded">
+                <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                    <xsd:element name="factory-class" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+        </xsd:sequence>
+    </xsd:complexType>
+
+</xsd:schema>
+
+	

Added: incubator/beehive/netui/src/webapp-template/config/netui-config-default.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/config/netui-config-default.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<netui-config xmlns="http://beehive.apache.org/netui/2004/server/config">
+
+    <legacy-tag-support>false</legacy-tag-support>
+
+    <expression-languages>
+        <default-language>netuiel</default-language>
+        <expression-language>
+            <name>netuiel</name>
+            <factory-class>org.apache.beehive.netui.script.el.ExpressionEvaluatorImpl$NetUIELEngineFactory</factory-class>
+            <binding-contexts>
+                <binding-context>
+                    <name>bundle</name>
+                    <factory-class>org.apache.beehive.netui.databinding.script.el.BundleVariableResolver$BundleContextFactory</factory-class>
+                </binding-context>
+                <binding-context>
+                    <name>container</name>
+                    <factory-class>org.apache.beehive.netui.databinding.script.el.ContainerVariableResolver$ContainerContextFactory</factory-class>
+                </binding-context>
+            </binding-contexts>
+        </expression-language>
+    </expression-languages>
+
+</netui-config>

Added: incubator/beehive/netui/src/webapp-template/config/netui-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/config/netui-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<netui-config xmlns="http://beehive.apache.org/netui/2004/server/config">
+
+    <legacy-tag-support>false</legacy-tag-support>
+
+    <expression-languages>
+        <default-language>netuiel</default-language>
+        <expression-language>
+            <name>netuiel</name>
+            <factory-class>org.apache.beehive.netui.script.el.ExpressionEvaluatorImpl$NetUIELEngineFactory</factory-class>
+            <binding-contexts>
+                <binding-context>
+                    <name>bundle</name>
+                    <factory-class>org.apache.beehive.netui.databinding.script.el.BundleVariableResolver$BundleContextFactory</factory-class>
+                </binding-context>
+                <binding-context>
+                    <name>container</name>
+                    <factory-class>org.apache.beehive.netui.databinding.script.el.ContainerVariableResolver$ContainerContextFactory</factory-class>
+                </binding-context>
+            </binding-contexts>
+        </expression-language>
+    </expression-languages>
+
+    <iterator-factories>
+    </iterator-factories>
+
+</netui-config>

Added: incubator/beehive/netui/src/webapp-template/datagrid/_filter.js
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/datagrid/_filter.js	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+/*
+ * This JavaScript file is an integral part of the filtering mechanism
+ * and the NetUI Grid tag set.  
+ * 
+ * This file should not be modified.
+ */
+
+var nTimeout = 0;
+
+function CheckFocus(focus)
+{
+  /*
+  if (!focus)
+    {
+      if (nTimeout == 0)
+	nTimeout = window.setTimeout("window.close()", 300);
+    }
+  else if (nTimeout)
+    {
+      window.clearTimeout(nTimeout);
+      nTimeout = 0;
+    }
+  */
+}
+
+function ChangeFilter(sel, inp)
+{
+  if (null == sel || null == inp)
+    return;
+  var f = selValue(sel);
+  if (f == "~isempty" || f == "~isnotempty")
+    inp.disabled = true;
+  else
+    inp.disabled = false;
+}
+
+/*
+opener -- the window that opened the filter window
+search -- the opener's previous search string
+column -- the current column's name
+filter -- an array of the current filters [op1, val1, op2, val2]
+gridName -- the current grid's name
+filterAction -- the PageFlow Action to perform if this is a valid filter
+*/
+function ApplyFilter(opener,search,column,filter,gridName,filterAction)
+{
+  if (null == opener)
+    return false;
+
+  numOPs = 0;
+  for (i=0 ; i<filter.length ; i+=2)
+    {
+      if (filter[i] != null && filter[i] != "" && filter[i] != "*") {
+	numOPs++;
+      }
+    }
+
+  numNOPs = 0;
+  for (i=0 ; i<filter.length ; i+=2)
+    {
+      if ((filter[i] == null || filter[i] == "" || filter[i] == "*") && filter[i] != savedFilter[i])
+	{
+	  numNOPs++;
+	  filter[i] = "";
+	  if (numOPs != 0 || numNOPs > 1)
+	    continue;
+	  else
+	    filter[i+1] = "*";
+	}
+      else if (filter[i] == "~isempty" || filter[i] == "~isnotempty")
+	filter[i+1] = "1";
+      
+      var colPrefix = (gridName != null ? gridName + "~" + column : column);
+      search = AppendSearch(search, colPrefix + filter[i], filter[i+1]);
+    }
+
+  if(search == '?') 
+    search = "";
+  else if(filterAction.indexOf('?') > -1)
+    search = search.charAt(0) == '?' ? search.substring(1) : search;
+  else if(search.charAt(0) != '?')
+    search = '?' + search;
+  
+  if(filterAction.indexOf('http') == 0)
+    opener.location.href = filterAction + search;
+  else 
+    opener.location.href = opener.location.protocol + '//' + opener.location.host + filterAction + search;
+  
+  window.close();
+  return false;
+}
+
+function SizeToFit()
+{
+  var Nav4 = ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) >= 4));
+  if (Nav4)
+    {
+      window.innerWidth = document.width;
+      window.innerHeight = document.height;
+    }
+  else
+    {
+      window.resizeBy(document.body.scrollWidth-document.body.clientWidth, document.body.scrollHeight-document.body.clientHeight);
+    }
+}
+function selValue(sel)
+{
+  var index = sel.selectedIndex;
+  var value = sel.options[index].value;
+  return value;
+}
+
+function PlaceCursor() 
+{
+  var frm = document.forms[0];
+  if (null == frm) return;
+  
+  var n = 2;
+  while ( --n >= 0 )
+    {
+      var e = frm.elements[n];
+      if (null == e || e.disabled || e.type == "hidden")
+	continue;
+      e.focus();
+      if ( e.type == "text" )
+	e.select();
+      return;
+    }
+}
+

Added: incubator/beehive/netui/src/webapp-template/datagrid/_grid.js
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/datagrid/_grid.js	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+/*
+ * This JavaScript file is an integral part of the filtering mechanism
+ * and the NetUI Grid tag set.  
+ * 
+ * This file should not be modified.
+ */
+
+/*
+ * Open the filter window.
+ * 
+ * Request parameters attached to the query string of the filter window opened here
+ * are guaranteed to have been encoded in Java before being passed to the ShowFilterWindow
+ * JavaScript method.
+ *
+ * column -- the name of the current column
+ * elem -- the grid's window
+ * strfilter -- the current request's query
+ * gridName -- the name of the current grid
+ * strPath -- filter window path
+ * jdbcColumnType -- the JDBC type index of the current column
+ * filterAction -- the PageFlow Action that will be executed if this filter is selected
+ * prefix -- the prefix to append to any filter parameter added to the URL for a grid
+ */
+function ShowFilterWindow(column,elem,strfilter,gridName,strPath,jdbcColumnType,filterAction,prefix)
+{
+  var ie4 = navigator.appName.indexOf("Microsoft") != -1 && parseInt(navigator.appVersion) >= 4;
+  var posStr;
+  if (ie4)
+    {
+      var offset = ScreenPosIE(elem);
+      posStr = "top="+offset.top.toString() + ",left="+(offset.left-250).toString();
+      posStr += ",width=300";
+    }
+  else
+    {
+      posStr = "screenY="+(window.screenY+100).toString() + ",screenX="+(window.screenX+200).toString();
+      posStr += ",width=550,resizable=yes";
+    }
+
+  var search = strfilter;
+  search = encodeURIComponent(search);
+  search = "?" + 
+    "&_column=" + column + 
+    "&_search=" + search + 
+    "&_jdbcColumnType=" + jdbcColumnType + 
+    "&_filterAction=" + filterAction + 
+    "&_prefix=" + prefix +
+    "&_grid=" + gridName;
+
+  var w = window.open(strPath + search, "filter", posStr+",height=400,scrollbars=yes");
+
+  if (null != w) w.focus();
+
+  return false;
+}
+
+function ScreenPosIE(elem)
+{
+  var top = window.screenTop + elem.clientTop + elem.offsetHeight;
+  var left = window.screenLeft + elem.clientLeft + elem.offsetWidth;
+  var last = elem;
+  while (elem != null)
+    {
+      top  += elem.offsetTop  - elem.scrollTop;
+      left += elem.offsetLeft - elem.scrollLeft;
+      last = elem;
+      elem = elem.offsetParent;
+    }
+  var pos = new Object;
+  pos.top = top - last.scrollTop;
+  pos.left = left - last.scrollLeft;
+  return pos;
+}

Added: incubator/beehive/netui/src/webapp-template/datagrid/arrow_down.png
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/webapp-template/datagrid/arrow_off.png
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/webapp-template/datagrid/arrow_up.png
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/webapp-template/datagrid/filter.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/webapp-template/datagrid/filter.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/datagrid/filter.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,317 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ page import="org.apache.beehive.netui.datagrid.services.FilterService" %>
+<%@ page import="org.apache.beehive.netui.datagrid.model.IFilter" %>
+<netui:html>
+<%
+String filterExpr = request.getParameter("_column");
+pageContext.setAttribute("filterExpr", filterExpr);
+String gridName = request.getParameter("_grid");
+FilterService filterSvc = FilterService.getInstance(pageContext.getRequest(), gridName, request.getParameter("_search"));
+String qpOmitFilter = null;
+String qpOmitAllFilters = null;
+String search = request.getParameter("_search");
+String filterAction = request.getParameter("_filterAction");
+String prefix = request.getParameter("_prefix");
+String queryStringOmitCurrentColumn = null;
+IFilter[] filters = filterSvc.getFilters(filterExpr);
+IFilter filter1 = (filters != null && filters.length >= 1 ? filters[0] : null);
+IFilter filter2 = (filters != null && filters.length >= 2 ? filters[1] : null);
+
+try
+{
+pageContext.setAttribute("filters", filters);
+
+qpOmitFilter = filterSvc.getFilterQueryStringOmitFilter(filterExpr);
+pageContext.setAttribute("qpOmitFilter", qpOmitFilter);
+
+qpOmitAllFilters = filterSvc.getFilterQueryStringOmitAllFilters();
+pageContext.setAttribute("qpOmitAllFilters", qpOmitAllFilters);
+
+queryStringOmitCurrentColumn = filterSvc.getFilterQueryStringOmitFilter(filterExpr);
+}
+catch(Exception e) {e.printStackTrace();}
+%>
+  <head>
+    <title>Filter</title>
+    <script language="javascript" TYPE="text/javascript" src="_filter.js"></script>
+    <script language="javascript" type="text/javascript">
+var filterAction = "<%= filterAction %>";
+var search = "<%= search %>";
+var gridName = "<%= gridName %>";
+var filterExpr = "<%= filterExpr %>";
+var prefix = "<%= prefix %>";
+var paramKey = "netui_filter";
+var clearAllQuery = "<%= qpOmitFilter %>";
+var clearFilterExprQuery = "<%= qpOmitAllFilters %>";
+var savedFilter;
+var queryStringOmitCurrentColumn = "<%= queryStringOmitCurrentColumn %>";
+
+function doLoad()
+{
+  alert("do load");
+  initFilter();
+  alert("end init filter");
+  //PlaceCursor();
+  //alert("end place cursor");
+  //SizeToFit();
+  //alert("end size to fit");
+}
+
+function initFilter()
+{
+  var filterForm = document.forms[0];
+  alert("filterForm: " + filterForm);
+
+  savedFilter = [selValue(filterForm.filterOp1), filterForm.filterValue1.value, selValue(filterForm.filterOp2), filterForm.filterValue2.value];
+  alert(debugFilterArray("saved filter: ", savedFilter));
+}
+
+function selValue(sel)
+{
+  var index = sel.selectedIndex;
+  var value = sel.options[index].value;
+  return value;
+}
+
+function doCancel()
+{
+  window.close();
+  return false;
+}
+
+function doClear(clearAll)
+{
+    var w = window.opener != null ? window.opener : window
+    var url = buildURL(w, filterAction, (clearAll == true ? clearAllQuery : clearFilterExprQuery));
+    navigate(url);
+    return false;
+}
+
+function debugFilterArray(msg, ary)
+{
+    var filterData = msg;
+    if(ary == null) return filterData + " empty";
+
+    for(var i = 0; i < ary.length; i++)
+    {
+        filterData += i + ": " + ary[i] + " ";
+    }
+    return filterData;
+}
+
+function doFilter()
+{
+    alert("do filter");
+    //var filterAry = ["eq", "foo"];
+    var filterForm = document.forms[0];
+
+    alert("filterForm: " + filterForm);
+
+    var filterAry = [selValue(filterForm.filterOp1), filterForm.filterValue1.value, selValue(filterForm.filterOp2), filterForm.filterValue2.value];
+
+    alert(debugFilterArray("current filter: ", filterAry));
+
+    var queryParam = buildFilterQueryParam(prefix, filterExpr, filterAry, gridName);
+    alert("doFilter.queryParam: " + queryParam);
+    var currQueryString = queryStringOmitCurrentColumn; //query string with filters for current column omitted
+    var queryString = appendQueryParam(currQueryString, queryParam);
+
+    alert("doFilter.queryString: " + queryString);
+
+    var w = window.opener != null ? window.opener : window
+    var url = buildURL(w, filterAction, queryString);
+    return navigate(w, url);
+}
+
+function navigate(w, url)
+{
+    alert("navigate window: " + w + " to url: " + url);
+
+    w.location.href = url;
+    window.close();
+    return false;
+}
+
+function buildFilterQueryParam(prefix, filterExpr, filter, gridName) //search,column,filter,gridName)
+{
+  var queryParam = "";
+  numOPs = 0;
+  for (i=0 ; i<filter.length ; i+=2)
+  {
+      if (filter[i] != null && filter[i] != "" && filter[i] != "*") {
+	numOPs++;
+      }
+  }
+
+  //alert("numOPs: " + numOPs);
+  numNOPs = 0;
+  for (i=0 ; i<filter.length ; i+=2)
+  {
+      if ((filter[i] == null || filter[i] == "" || filter[i] == "*") && filter[i] != savedFilter[i])
+	{
+	  numNOPs++;
+	  filter[i] = "";
+	  if (numOPs != 0 || numNOPs > 1)
+	    continue;
+	  else
+	    filter[i+1] = "*";
+	}
+      else if (filter[i] == "~isempty" || filter[i] == "~isnotempty")
+	filter[i+1] = "1";
+
+      var op = filter[i];
+      var value = filter[i+1];
+
+      alert("op: " + op + " value: " + value);
+
+      if (op == null || op == "" || value == null || value == "")
+      {
+          alert("buildFilterQueryParam.queryParam (no second query): " + queryParam);
+          return queryParam;
+      }
+
+      if(i > 0) queryParam += "&";
+
+      queryParam = queryParam + paramKey + "=" + encodeURIComponent(gridName + "~" + filterExpr + "~" + op + "~" + value);
+
+      alert("queryParam: " + queryParam);
+  }
+
+  return queryParam;
+}
+
+function appendQueryParam(queryParams,query)
+{
+  alert("appendQueryParam: queryParams: " + queryParams + " query: " + query);
+  if(queryParams == null || queryParams == "" || queryParams == "?")
+    queryParams = "?" + query;
+  else if(queryParams.indexOf('?') > -1)
+    queryParams = queryParams + "&" + query;
+  else queryParams = "?" + queryParams + "&" + query;
+
+  return queryParams;
+}
+
+function buildURL(opener, filterAction, queryParams)
+{
+  var url = "";
+  if(filterAction.indexOf("http") == 0)
+    url = filterAction + queryParams;
+  else url = opener.location.protocol + "//" + opener.location.host + filterAction + queryParams;
+
+  return url;
+}
+
+function testBuildQueryParam()
+{
+  // @todo: build the filter array from the values in the form input fields
+  var filterAry = ["eq", "foo"];
+  var queryParam = buildFilterQueryParam("", "symbol", filterAry, "portfolio");
+
+  var debugDiv = document.getElementById("debugOutput");
+  var textNode = document.createTextNode("queryParam: " + queryParam);
+  debugDiv.appendChild(textNode);
+
+  alert("here");
+  var search = "?";
+  var queryString = appendQueryParam(search, queryParam);
+  alert("queryString: " + queryString);
+  textNode = document.createTextNode("search: " + queryString);
+  debugDiv.appendChild(textNode);
+
+  alert("queryString: " + queryString);
+
+  var w = window.opener != null ? window.opener : window
+  var url = buildURL(w, "/dataWeb/basic/filter.do", queryString);
+  alert("url: " + url);
+
+  var navigate = true;
+  if(navigate)
+  {
+    w.location.href = url;
+    window.close();
+  }
+}
+    </script>
+  </head>
+  <body onLoad="doLoad();">
+<b>Filter Page</b>
+<hr/>
+<br/>
+<form id="frmFilter" onSubmit="return doFilter();">
+<table>
+<tr><td>Show Records Where</td></tr>
+<tr><td><b><netui:label value="{pageContext.filterExpr}"/></b></td></tr>
+<tr><td>
+  <select name="filterOp1">
+    <option value="eq">Equals</option>
+    <option value="ne">Does not equal</option>
+  </select>
+</td></tr>
+<tr><td>
+    <input type="text" name="filterValue1" value="<%= filter1 != null ? filter1.getValue() : "" %>"/>
+</td></tr>
+<tr><td>and <b><netui:label value="{pageContext.filterExpr}"/></b></td></tr>
+<tr><td>
+  <select name="filterOp2">
+    <option value="eq">Equals</option>
+    <option value="ne">Does not equal</option>
+  </select>
+</td></tr>
+<tr><td>
+    <input type="text" name="filterValue2" value="<%= filter2 != null ? filter2.getValue() : "" %>"/>
+</td></tr>
+<tr>
+  <td>
+    <input type="submit" name="btnFilter" value="Filter" onfocus="CheckFocus(true);" onblur="CheckFocus(false);"/>
+    <input type="submit" name="btnClear" value="Clear" onclick="return doClear();" onfocus="CheckFocus(true);" onblur="CheckFocus(false);"/>
+    <input type="submit" name="cmdClearAll" value="Clear All" onclick="return doClear(true);" onfocus="CheckFocus(true);" onblur="CheckFocus(false);"/>
+    <input type="submit" name="cmdCancel" value="Cancel" onclick="return doCancel();" onfocus="CheckFocus(true);" onblur="CheckFocus(false);"/>
+  </td>
+</tr>
+</table>
+</form>
+<br/>
+<hr/>
+<b>Operations</b>
+<br/>
+<ul>
+<li><a href="javascript:testBuildQueryParam();">Add filter</a></li>
+<li>Remove current column filters</li>
+<li>Remove all filters</li>
+</ul>
+<div id="debugOutput">
+  Debug output here
+</div>
+<br/>
+<hr/>
+<b>Filter Debug</b>
+<br/>
+Filter expression: <netui:label value="{url._column}"/>
+<br/>
+Grid namespace: <netui:label value="{url._grid}"/>
+<br/>
+Query String omit current column filters: <netui:label value="{pageContext.qpOmitFilter}" defaultValue="empty"/>
+<br/>
+Query String omit all filters: <netui:label value="{pageContext.qpOmitAllFilters}" defaultValue="empty"/>
+<br/>
+<netui-data:repeater dataSource="{pageContext.filters}" defaultText="No filters">
+    <netui-data:repeaterHeader>
+        <table>
+        <tr><td>Index</td><td>Op</td><td>Expression</td><td>Value</td></tr>
+    </netui-data:repeaterHeader>
+    <netui-data:repeaterItem>
+        <tr>
+        <td><netui:label value="{container.index}"/></td>
+        <td><netui:label value="{container.item.operation}"/></td>
+        <td><netui:label value="{container.item.filterExpression}"/></td>
+        <td><netui:label value="{container.item.value}"/></td>
+        </tr>
+    </netui-data:repeaterItem>
+    <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+</netui-data:repeater>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/src/webapp-template/datagrid/noFilter.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/src/webapp-template/dd/generic/web.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/dd/generic/web.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+    version="2.4">
+
+    <display-name>Beehive Web Application</display-name>
+
+    <filter>
+        <filter-name>PageFlowJspFilter</filter-name>
+        <filter-class>org.apache.beehive.netui.pageflow.PageFlowJspFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>PageFlowJspFilter</filter-name>
+        <url-pattern>*.jsp</url-pattern>
+        <dispatcher>FORWARD</dispatcher>
+    </filter-mapping>
+
+    <!-- Action Servlet Configuration (with debugging) -->
+    <servlet>
+        <servlet-name>action</servlet-name>
+        <servlet-class>org.apache.beehive.netui.pageflow.PageFlowActionServlet</servlet-class>
+        <init-param>
+            <param-name>config</param-name>
+            <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/-global</param-name>
+            <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config--global.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>debug</param-name>
+            <param-value>2</param-value>
+        </init-param>
+        <init-param>
+            <param-name>detail</param-name>
+            <param-value>2</param-value>
+        </init-param>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+
+    <!-- Struts Action Servlet Mappings -->
+    <!-- Note that because Struts takes the *last* mapping here as the extension to add to
+         actions posted from forms, we must have *.do come after *.jpf. -->
+    <servlet-mapping>
+        <servlet-name>action</servlet-name>
+        <url-pattern>*.jpf</url-pattern>
+    </servlet-mapping>
+
+    <servlet-mapping>
+        <servlet-name>action</servlet-name>
+        <url-pattern>*.do</url-pattern>
+    </servlet-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+
+    <error-page>
+        <error-code>500</error-code>
+        <location>/error.jsp</location>
+    </error-page>
+
+    <jsp-config>
+        <!-- Define the NetUI tag library TLDs -->
+        <taglib>
+            <taglib-uri>beehive-netui-tags-html.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-html.tld</taglib-location>
+        </taglib>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-databinding.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-databinding.tld</taglib-location>
+        </taglib>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-template.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-template.tld</taglib-location>
+        </taglib>
+    </jsp-config>
+</web-app>

Added: incubator/beehive/netui/src/webapp-template/default/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/default/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+        value = { 
+            "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+            "<view-properties>", 
+            "<pageflow-object id='action:begin.do'>", 
+            "  <property value='60' name='x'/>", 
+            "  <property value='80' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+            "  <property value='96,130,130,164' name='elbowsX'/>", 
+            "  <property value='72,72,72,72' name='elbowsY'/>", 
+            "  <property value='East_1' name='fromPort'/>", 
+            "  <property value='West_1' name='toPort'/>", 
+            "  <property value='index' name='label'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='page:index.jsp'>", 
+            "  <property value='200' name='x'/>", 
+            "  <property value='80' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='page:error.jsp'>", 
+            "  <property value='60' name='x'/>", 
+            "  <property value='180' name='y'/>", 
+            "</pageflow-object>", 
+            "</view-properties>"
+        }
+    )
+public class Controller 
+    extends PageFlowController
+{
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="success", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/src/webapp-template/default/Global.app
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/default/Global.app	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+package global;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * The Global page flow is used to define actions which can be invoked by any other
+ * page flow in a webapp. The "jpf:catch" annotation provides a global way to catch
+ * unhandled exceptions by forwarding to an error page.
+ */
+@Jpf.Controller(
+    catches={
+       @Jpf.Catch(type=java.lang.Exception.class, method="handleException"),
+       @Jpf.Catch(type=PageFlowException.class, method="handlePageFlowException")
+    }
+)
+public class Global extends GlobalApp
+{
+   /**
+    * Sample global action that will return to the default Controller.jpf in
+    * the webapp root.
+    */
+    @Jpf.Action(
+       forwards={
+          @Jpf.Forward(name="home", path="/Controller.jpf")
+       }
+    )
+    public Forward home()
+    {
+        return new Forward("home");
+    }
+
+    @Jpf.ExceptionHandler(
+        forwards={
+            @Jpf.Forward(name="errorPage", path="/error.jsp")
+        }
+    )
+    protected Forward handleException(Exception ex, String actionName, String message, Object form)
+    {
+        System.err.print("[" + getRequest().getContextPath() + "] ");
+        System.err.println("Unhandled exception caught in Global.app:");
+        ex.printStackTrace();
+        return new Forward("errorPage");
+    }
+
+    /** 
+     * Handler for native page flow exceptions (e.g., ActionNotFoundException,
+     * which is thrown when an unknown page flow action is requested). This handler
+     * allows PageFlowExceptions to write informative error pages to the response.
+     * To use the standard exception-handler for these exceptions, simply remove
+     * this method and the "jpf:catch" annotation for PageFlowException.
+     */
+    @Jpf.ExceptionHandler
+    public Forward handlePageFlowException(PageFlowException ex, String actionName, String message, Object form) 
+        throws java.io.IOException
+    { 
+        ex.sendError(getRequest(), getResponse()); 
+        return null; 
+    } 
+}

Added: incubator/beehive/netui/src/webapp-template/default/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/default/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8" isErrorPage="true"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>Error</title>
+  </head>
+  <body>
+    <p>
+      An error has occurred:
+    </p>
+    <blockquote>
+      <netui:label value="{request.errorMessage}" defaultValue="" />
+      <br/>
+      <netui:exceptions showMessage="true" />
+    </blockquote>
+  </body>
+</netui:html>
+
+<!-- Some browsers will not display this page unless the response status code is 200. -->
+<% response.setStatus(200); %>

Added: incubator/beehive/netui/src/webapp-template/default/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/src/webapp-template/default/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+    <p>
+      New Web Application Page
+    </p>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/ant/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Test" default="drt" basedir=".">
+    
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/bootstrap.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/common.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/test/ant/test.properties"/>
+
+    <!-- ============================================= -->
+    <!-- Tomcat Start/Stop Targets                     -->
+    <!-- ============================================= -->
+    <target name="start" description="Start Tomcat.">
+        <ant antfile="${runTomcat.ant}" target="start" inheritAll="false"/>
+    </target>
+
+    <target name="stop" description="Stop Tomcat.">
+        <ant antfile="${runTomcat.ant}" target="stop" inheritAll="false"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!-- Test Suite Targets                            -->
+    <!-- ============================================= -->
+    <target name="drt" depends="prepare" description="">
+        <antcall target="junit.drt"/>
+    </target>
+
+    <target name="junit.drt" depends="prepare" description="Runs the JUnit DRTs.">
+        <ant antfile="junit.xml" target="drt" inheritAll="false"/>
+    </target>
+
+    <target name="run.test" depends="prepare" description="Run a single test with the name specified as -Dtest.name on the command line.">
+        <fail unless="test.name" message="No test specified, set the -Dtest.name=&lt;name&gt; property"/>
+        <ant antfile="junit.xml" target="run.test" inheritAll="false">
+            <property name="test.name" value="${test.name}"/>
+        </ant>
+    </target>
+
+    <target name="prepare">
+        <mkdir dir="${qa.lib.dir}"/>
+    </target>
+
+    <!-- ============================================= -->
+    <!-- Build Targets                                 -->
+    <!-- ============================================= -->
+    <target name="test.build" depends="prepare" description="Build the QA modules">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="build.modules">
+            <property name="source.root" location="${qa.src.dir}"/>
+            <property name="module.list" value="${qa.modules}"/>
+        </ant>
+    </target>
+
+    <target name="test.clean" description="Clean the QA modules">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="clean.modules">
+            <property name="source.root" location="${qa.src.dir}"/>
+            <property name="module.list" value="${qa.modules}"/>
+        </ant>
+    </target>
+
+    <target name="test.build.module" depends="prepare">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="build.module">
+            <property name="source.root" location="${qa.src.dir}"/>
+        </ant>
+    </target>
+
+    <target name="test.clean.module">
+        <ant antfile="${netui.ant.dir}/buildModules.xml" target="clean.module">
+            <property name="source.root" location="${qa.src.dir}"/>
+        </ant>
+    </target>
+
+    <target name="test.rebuild.module" description="Clean and build a single NetUI module">
+        <antcall target="test.clean.module"/>
+        <antcall target="test.build.module"/>
+    </target>
+
+    <target name="rebuild.all" description="Clean and build the dev and QA code">
+        <antcall target="test.clean"/>
+        <antcall target="test.build"/>
+    </target>
+    
+    <target name="test.deploy" description="">
+        <!-- todo: need to deploy the test infrastructure to the build/webappTemplate/test directory -->
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/ant/buildWebapp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/buildWebapp.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Webapp Build" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="test.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/bootstrap.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/common.properties"/>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for deploying the NetUI runtime into a web application   -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <!-- params (location webapp.dir, [value include.testrecorder, value testRecorder.config.name]) -->
+    <target name="deploy.netui" description="Deploy the NetUI runtime into a webapp rooted at ${webapp.dir}">
+        <ant antfile="${buildWebapp.ant}" target="deploy.netui" inheritAll="false"/>
+        <antcall target="deploy.testrecorder"/>
+    </target>
+
+    <!-- params (location webapp.dir, [value include.testrecorder]) -->
+    <target name="undeploy.netui" description="Clean the NetUI runtime from a webapp rooted at ${webapp.dir}">
+        <ant antfile="${buildWebapp.ant}" target="undeploy.netui" inheritAll="false"/>
+        <antcall target="undeploy.testrecorder"/>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for deploying the test recorder into a test webapp       -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <!-- params (location webapp.dir, value testRecorder.config.name) -->
+    <target name="deploy.testrecorder" if="include.testrecorder" description="Deploy the test recorder to a webapp">
+        <echo>Deploying the test recorder to webapp at root: ${webapp.dir}</echo>
+
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="build.config.jar" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="webapp.dir" location="${webapp.dir}"/>
+            <property name="test.file" location="${test.file}"/>
+            <property name="config.file" location="${config.file}"/>
+            <property name="webapp.file" location="${webapp.file}"/>
+        </ant>
+
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="deployTestRecorder" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="webapp.dir" location="${webapp.dir}"/>
+        </ant>
+    </target>
+
+    <!-- params (location webapp.dir) -->
+    <target name="undeploy.testrecorder" if="include.testrecorder" description="Undeploy the test recorder from a webapp">
+        <echo>Clean the test recorder to webapp at root: ${webapp.dir}</echo>
+
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="undeploy" inheritAll="false">
+            <property name="webapp.dir" location="${webapp.dir}"/>
+        </ant>
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/ant/junit.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/junit.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/JUnit" default="drt" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/bootstrap.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/common.properties"/>
+    <property file="test.properties"/>
+
+    <property name="junit-tests.path" location="${junit-tests.jar}"/>
+    <property name="junitdrt.properties" location="./junitDrt.properties"/>
+    <property name="testRecorderDrt.properties" location="./testRecorderJunit.properties"/>
+
+    <!-- Internal target used to clean and build the QA modules -->
+    <target name="test.rebuild">
+        <ant target="test.clean" inheritAll="false"/>
+        <ant target="test.build" inheritAll="false"/>
+    </target>
+
+    <!-- Run the NetUI DRTs -->
+    <target name="drt" depends="test.rebuild,run.drt" description="Run the NetUI JUnit DRTs"/>
+
+    <target name="run.drt">
+        <delete dir="${drt.testResults.dir}"/>
+
+        <antcall target="run.junit">
+            <param name="test.report.dir" location="${drt.testResults.dir}"/>
+            <param name="file.filter" location="${junitdrt.properties}"/>
+            <param name="halt.on.error" value="true"/>
+            <param name="halt.on.failure" value="true"/>
+            <param name="show.output" value="true"/>
+            <param name="tests.jar" location="${junit-tests.path}"/>
+            <param name="junit.test.classpath" value="${junit.classpath}"/>
+        </antcall>
+        <antcall target="make.report">
+            <param name="test.report.dir" location="${drt.testResults.dir}"/>
+        </antcall>
+    </target>
+
+    <!-- Run the NetUI BVTs -->
+    <target name="bvt" depends="test.rebuild" description="Run the NetUI JUnit BVTs">
+        <property name="bvt.junit.dir" location="${bvt.testResults.dir}/junit"/>
+        <delete dir="${bvt.testResults.dir}"/>
+        <delete dir="${bvt.junit.dir}"/>
+
+        <antcall target="run.junit">
+            <param name="test.report.dir" location="${bvt.junit.dir}"/>
+            <param name="file.filter" value=""/>
+            <param name="halt.on.error" value="false"/>
+            <param name="halt.on.failure" value="false"/>
+            <param name="show.output" value="false"/>
+            <param name="tests.jar" location="${junit-tests.path}"/>
+            <param name="junit.test.classpath" value="${junit.classpath}"/>
+        </antcall>
+        <antcall target="make.report">
+            <param name="test.report.dir" location="${bvt.junit.dir}"/>
+        </antcall>
+    </target>
+
+    <target name="run.dir"
+        description="Run some Netui JUnit tests; using a classes dir (include/exclude patterns) to build the test jar.">
+        <!-- In order to use the existing infrastructure, this assumes test.rebuild will compile your classes. -->
+        <property name="run.dir.properties" location="run.dir.properties"/>
+        <property file="${run.dir.properties}"/>
+
+        <!-- BEGIN - At least set these propeties. -->
+        <property name="run.dir.testJar.name" value=""/>
+        <property name="run.dir.classes.dir" location="${qa.classes.dir}/junitTests"/>
+        <!-- END   - At least set these propeties. -->
+        <property name="run.dir.include" value="**/*"/>
+        <property name="run.dir.exclude" value=""/>
+
+        <antcall target="run.fileset">
+            <param name="run.fileset.testJar.name" value="${run.dir.testJar.name}"/>
+            <param name="run.fileset.classes.dir" location="${run.dir.classes.dir}"/>
+            <param name="run.fileset.include" value="${run.dir.include}"/>
+            <param name="run.fileset.exclude" value="${run.dir.exclude}"/>
+        </antcall>
+    </target>
+
+    <target name="run.fileset" depends="test.rebuild"
+        description="Run some Netui JUnit tests; using a fileset to build the test jar.">
+        <!-- In order to use the existing infrastructure, this assumes test.rebuild will compile your classes. -->
+        <property name="run.fileset.testJar.name" value="JunitTests"/>
+
+        <!-- overrid run.fileset.refid to pass in your own fileset. -->
+        <property name="run.fileset.refid" value="run.fileset.fileset"/>
+
+        <property name="run.fileset.testResults.dir" location="${bvt.testResults.dir}/${run.fileset.testJar.name}"/>
+        <property name="run.fileset.testJar.dir" location="${run.fileset.testResults.dir}"/>
+        <property name="run.fileset.testJar.jar" location="${run.fileset.testJar.dir}/${run.fileset.testJar.name}.jar"/>
+
+        <property name="run.fileset.testclasspath" value="${junit.classpath}"/>
+        <property name="run.fileset.haltonerror" value="false"/>
+        <property name="run.fileset.haltonfailure" value="false"/>
+        <property name="run.fileset.showoutput" value="false"/>
+        <property name="run.fileset.file.filter" value=""/>
+
+        <property name="run.fileset.classes.dir" location="${qa.classes.dir}/junitTests"/>
+        <property name="run.fileset.include" value="**/*"/>
+        <property name="run.fileset.exclude" value=""/>
+        <fileset id="run.fileset.fileset" dir="${run.fileset.classes.dir}">
+            <include name="${run.fileset.include}"/>
+            <exclude name="${run.fileset.exclude}"/>
+        </fileset>
+
+        <delete dir="${run.fileset.testResults.dir}"/>
+        <mkdir dir="${run.fileset.testResults.dir}"/>
+
+        <jar destfile="${run.fileset.testJar.jar}">
+            <fileset refid="${run.fileset.refid}"/>
+        </jar>
+
+        <antcall target="run.junit">
+            <param name="tests.jar" location="${run.fileset.testJar.jar}"/>
+            <param name="test.report.dir" location="${run.fileset.testResults.dir}"/>
+            <param name="file.filter" value="${run.fileset.file.filter}"/>
+            <param name="halt.on.error" value="${run.fileset.haltonerror}"/>
+            <param name="halt.on.failure" value="${run.fileset.haltonfailure}"/>
+            <param name="show.output" value="${run.fileset.showoutput}"/>
+            <param name="junit.test.classpath" value="${run.fileset.testclasspath}"/>
+        </antcall>
+        <antcall target="make.report">
+            <param name="test.report.dir" location="${run.fileset.testResults.dir}"/>
+        </antcall>
+    </target>
+
+    <!-- Run the test recorder junit tests -->
+    <target name="testRecorder"
+        description="run the test recorder junit tests" >
+        <property name="tr.results.dir" value="${build.dir}/testRecorderQA"/>
+        <delete dir="${tr.results.dir}"/>
+
+        <antcall target="run.junit">
+            <param name="test.report.dir" location="${tr.results.dir}"/>
+            <param name="file.filter" location="${testRecorderDrt.properties}"/>
+            <param name="halt.on.error" value="false"/>
+            <param name="halt.on.failure" value="false"/>
+            <param name="show.output" value="true"/>
+            <param name="tests.jar" location="${test.recorder.qa.jar}"/>
+            <param name="junit.test.classpath" value="${test.recorder.QA.classpath};${junit.classpath}"/>
+        </antcall>
+        <antcall target="make.report">
+            <param name="test.report.dir" location="${tr.results.dir}"/>
+            <param name="type" value="junit"/>
+        </antcall>
+    </target>
+
+    <!--
+       Run JUnit tests
+
+       Param:
+           test.report.dir == the directory into which to generate a test report
+           file.filter == a list of files used to filter the class list
+     -->
+    <target name="run.junit">
+        <echo>enable.jrockit: ${enable.jrockit}</echo>
+        <echo>tests.jar: ${tests.jar}</echo>
+        <echo>test.report.dir: ${test.report.dir}</echo>
+        <echo>file.filter: ${file.filter}</echo>
+
+        <!-- The JUnit test JAR needs to remain at the head of the classpath so that it can override any necessary classes -->
+        <property name="jrockit.vm.location" location="${jrockit.vm}"/>
+
+        <condition property="_jvm" value="">
+          <not><isset property="enable.jrockit"/></not>
+        </condition>
+        <condition property="_jvm" value="${jrockit.vm.location}">
+           <and><isset property="enable.jrockit"/></and>
+        </condition>
+
+        <condition property="log4j.config" value="${log4jconfig.verbose.junit}">
+            <not><isset property="log4j.quiet"/></not>
+        </condition>
+        <condition property="log4j.config" value="${log4jconfig.junit}">
+            <and><isset property="log4j.quiet"/></and>
+        </condition>
+        <echo>log4j.config: ${log4j.config}</echo>
+
+        <mkdir dir="${test.report.dir}"/>
+
+        <taskdef name="netui-junit" classname="org.apache.beehive.netui.tools.ant.junit.JUnitTask" classpath="${test-tools.jar};${junit.jar}"/>
+
+        <netui-junit
+           testJars="${tests.jar}"
+           showOutput="${show.output}"
+           haltOnError="${halt.on.error}"
+           haltOnFailure="${halt.on.failure}"
+           toDir="${test.report.dir}"
+           printSummary="on"
+           fileFilter="${file.filter}"
+           jvm="${_jvm}">
+            <formatter type="xml" usefile="true"/>
+            <!-- The Ant properties below paramterize the Java environment used to launch each individual JUnit test case -->
+            <jvmarg value="-ea"/>
+            <classpath>
+                <pathelement path="${tests.jar}"/>
+                <pathelement path="${junit.test.classpath}"/>
+                <pathelement path="${junit.jar}"/>
+            </classpath>
+            <!-- shared system properties -->
+            <sysproperty key="log4j.configuration" value="file:${log4j.config}"/>
+            <sysproperty key="netuidrt.logdir" path="${test.report.dir}"/>
+
+            <!-- compiler test properties -->
+            <sysproperty key="test.home.dir" path="${junit.test.home.dir}"/>
+            <sysproperty key="test.output.dir" value="${test.report.dir}"/>
+            <sysproperty key="build.base.dir" path="${build.dir}"/>
+            <!-- from common.properties, just junit.jar -->
+            <sysproperty key="junit.classpath" path="${junit.classpath}"/>
+            <sysproperty key="java.class.path" path="${test.classpath}"/>
+            <sysproperty key="webui.home" path="${webui.home}"/>
+
+            <!-- test recorder system properties -->
+            <sysproperty key="data.dir" path="${qa.src.dir}/testRecorderQA/data"/>
+            <sysproperty key="app.dir" path="${app.dir}"/>
+        </netui-junit>
+    </target>
+
+    <!--
+        Produce a JUnit test repoort from the XML results of a test run.
+
+        Params:
+            test.report.dir == the directory in which the XML test run results exist
+                               the HTML for the repots will be produced in ${test.report.dir}/html
+     -->
+    <target name="make.report">
+        <echo>test.report.dir: ${test.report.dir}</echo>
+
+        <mkdir dir="${test.report.dir}/html"/>
+
+        <!-- launch Ant directly since we've got to add onto the classpath to pickup Xalan -->
+       <ant antfile="junitReport.xml" target="run" inheritAll="false">
+           <property name="test.report.dir" location="${test.report.dir}"/>
+           <property name="type" value="junit"/>
+       </ant>
+    </target>
+
+    <!--
+        Execute a single JUnit Test.  The Test must have a main method as:
+
+            public static void main(String[] args)
+
+        that calls the JUnit test runner.  Results from this test are not included in a report; this
+        task is meant to execute a single test.
+
+        Params:
+            test.name == the fully qualified class name of the test to execute.  It must be in the
+                         present in the JUnit test JAR.
+     -->
+    <target name="run.test" description="Run a single NetUI DRT that is specified on the command line as '-Dtest.name'.">
+        <fail unless="test.name" message="No test specified; set the -Dtest.name property"/>
+
+        <property name="_junit.test.classpath" value="${junit-tests.path};${junit.classpath}"/>
+        <property name="_netuidrt.logdir" location="${build.dir}/tmp"/>
+        <property name="_jrockit.vm.location" location="${jrockit.vm}"/>
+
+        <condition property="_jvm" value="">
+          <not><isset property="enable.jrockit"/></not>
+        </condition>
+        <condition property="_jvm" value="${_jrockit.vm.location}">
+           <and><isset property="enable.jrockit"/></and>
+        </condition>
+
+        <echo>Execute single TestCase: ${test.name}</echo>
+        <echo>Log4J directory: ${_netuidrt.logdir}</echo>
+        <echo>Test classpath: ${_test.classpath}</echo>
+        <echo>JVM: ${_jvm}</echo>
+
+        <mkdir dir="${_netuidrt.logdir}"/>
+
+        <java classname="${test.name}" fork="true" jvm="${_jvm}">
+            <jvmarg value="-ea"/>
+            <classpath>
+                <pathelement path="${_junit.test.classpath}"/>
+            </classpath>
+            <sysproperty key="test.home.dir" path="${junit.test.home.dir}"/>
+            <sysproperty key="build.base.dir" path="${build.dir}"/>
+            <sysproperty key="java.class.path" path="${_junit.test.classpath}"/>
+            <sysproperty key="log4j.configuration" value="file:${log4jconfig.verbose.junit}"/>
+            <sysproperty key="netuidrt.logdir" path="${_netuidrt.logdir}"/>
+            <sysproperty key="webui.home" path="${webui.home}"/>
+        </java>
+    </target>
+
+    <target name="xbean.junit.test">
+        <echo>junit.jar: ${junit.jar}</echo>
+        <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
+            <classpath>
+                <pathelement path="${junit.jar}"/>
+                <pathelement path="${ant-junit.jar}"/>
+                <pathelement path="${apache-xbean.jar}"/>
+            </classpath>
+        </taskdef>
+
+        <junit dir="." showoutput="true" fork="true">
+            <classpath>
+                <pathelement path="c:\java\sandbox\"/>
+                <pathelement path="${java.class.path}"/>
+                <pathelement path="${apache-xbean.jar}"/>
+                <pathelement path="${jsr173.jar}"/>
+                <pathelement path="${junit.jar}"/>
+                <pathelement path="${ant-junit.jar}"/>
+                <pathelement path="${test-recorder.jar}"/>
+                <pathelement path="${test.recorder.classpath}"/>
+                <pathelement path="c:\dev\src\wlw\beehive\netui\build\testRecorder\scratch\netui-server-drt-config"/>
+            </classpath>
+            <formatter type="plain" usefile="false"/>
+<!--            <test name="org.apache.beehive.netui.tools.testrecorder.client.MasterTestRecorderJUnitTest"/>-->
+            <test name="foo.AnXMLBeanTest"/>
+        </junit>
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/ant/junitDrt.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/junitDrt.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+#
+# JUnit DRT properties file
+#
+# This file contains the list of classnames that should be run as
+# DRTs for the NetUI server.  To enter a DRT, simply specify
+# the fully qualified class name; the property file filter
+# looks for keys _only_ when deciding whether or not
+# to run a particular DRT.
+#
+# October 15, 2002
+#
+
+# Utility Tests
+org.apache.beehive.netui.test.util.type.TypeUtilsTest
+org.apache.beehive.netui.test.util.config.ConfigTest
+
+# NetUI EL Tests
+org.apache.beehive.netui.test.script.el.NetUIELAccessTest
+org.apache.beehive.netui.test.script.el.NetUIELExpressionTest
+org.apache.beehive.netui.test.script.el.NetUIELExpressionUpdateTest
+org.apache.beehive.netui.test.script.el.NetUIELBundleScriptTest
+org.apache.beehive.netui.test.script.el.NetUIELParsedExpressionTest
+org.apache.beehive.netui.test.script.el.NetUIELPageInputTest
+
+# This is broken after the move to JSP 2.0 EL -- ekoneil
+#org.apache.beehive.netui.test.script.el.NetUIELCustomBindingContextTest
+
+# Expression rewriting tests
+org.apache.beehive.netui.test.databinding.expression.IndexedNameTest

Added: incubator/beehive/netui/test/ant/junitReport.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/junitReport.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/JUnitReportGenerator" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="../../../beehive.properties"/>
+    <property file="../../ant/bootstrap.properties"/>
+    <property file="../../ant/common.properties"/>
+    <property file="test.properties"/>
+
+    <property name="ant-launch.jar" location="${ant.home}/lib/ant-launcher.jar"/>
+    
+    <!--
+        test.report.dir == the directory in which the test results are stored
+      -->
+    <target name="create.report.junit">
+        <mkdir dir="${test.report.dir}/html"/>
+
+       <!-- build a report -->
+       <junitreport todir="${test.report.dir}/">
+           <fileset dir="${test.report.dir}/">
+               <include name="TEST-*.xml"/>
+           </fileset>
+           <report format="noframes" todir="${test.report.dir}/html" styledir="${webui.home}/test/ant/junitStyles"/>
+       </junitreport>
+    </target>
+
+    <!-- 
+        Params:
+          test.report.dir ==
+          type == 
+      -->
+    <target name="run">
+        <!-- launch Ant directly since we've got to add onto the classpath to pickup Xalan -->
+        <java classname="org.apache.tools.ant.Main" fork="true" 
+              classpath="${ant.jar};${ant-junit.jar};${ant-launch.jar};${junit.jar};${deployed.xalan.jar}">
+            <arg line="-f junitReport.xml create.report.${type} -Dtest.report.dir=${test.report.dir}"/>
+        </java>
+    </target>
+
+    <target name="usage">
+        <echo>
+Build file used to launch the "junitreport" task under JDK 1.5.  Because "junitreport" does
+not take advantage of JAXP to find an XSLT engine, it fails since Xalan has been 
+namespaced into the com.sun package in rt.jar.  So, without putting Xalan on the 
+classpath used to launch Ant, this file is used to launch Ant with Xalan in the
+classpath.
+
+This is not a file to take a dependency on as we'd like for it to go away at some point.  :)
+
+ekoneil@bea.com
+3/12/2004
+        </echo>    
+    </target>
+
+    <!-- @todo: patrick, this needs to go away -->
+    <target name="create.report.testrecorder">
+        <property name="html.report.dir" location="${test.report.dir}/html"/>
+
+        <junitreport todir="${test.report.dir}" tofile="testRecorderResults.xml">
+            <fileset dir=".">
+                <include name="TEST-org.apache.beehive.netui.tools.testrecorder.client.MasterTestRecorderJUnitTest.xml"/>
+            </fileset>
+            <report format="noframes" todir="${html.report.dir}" styledir="${webui.home}/test/ant/junitStyles"/>
+        </junitreport>
+    </target>
+    
+</project>

Added: incubator/beehive/netui/test/ant/junitStyles/junit-noframes.xsl
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/junitStyles/junit-noframes.xsl	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,461 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+	xmlns:lxslt="http://xml.apache.org/xslt"
+	xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"
+  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+   Copyright 2001-2004 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+ 
+<!--
+ 
+ Sample stylesheet to be used with An JUnitReport output.
+ 
+ It creates a non-framed report that can be useful to send via
+ e-mail or such.
+ 
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+ @author Erik Hatcher <a href="mailto:ehatcher@apache.org"/>
+ 
+-->
+<xsl:template match="testsuites">
+    <html>
+        <head>
+            <title>Unit Test Results</title>
+    <style type="text/css">
+      body {
+        font:normal 68% verdana,arial,helvetica;
+        color:#000000;
+      }
+      table tr td, table tr th {
+          font-size: 68%;
+      }
+      table.details tr th{
+        font-weight: bold;
+        text-align:left;
+        background:#a6caf0;
+      }
+      table.details tr td{
+        background:#eeeee0;
+      }
+      
+      p {
+        line-height:1.5em;
+        margin-top:0.5em; margin-bottom:1.0em;
+      }
+      h1 {
+        margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+      }
+      h2 {
+        margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+      }
+      h3 {
+        margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+      }
+      h4 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h5 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h6 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      .Error {
+        font-weight:bold; color:red;
+      }
+      .Failure {
+        font-weight:bold; color:purple;
+      }
+      .Properties {
+        text-align:right;
+      }
+      </style>
+      <script type="text/javascript" language="JavaScript">
+        var TestCases = new Array();
+        var cur;
+        <xsl:for-each select="./testsuite">      
+            <xsl:apply-templates select="properties"/>
+        </xsl:for-each>
+
+       </script>
+       <script type="text/javascript" language="JavaScript"><![CDATA[
+        function displayProperties (name) {
+          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+          var doc = win.document.open();
+          doc.write("<html><head><title>Properties of " + name + "</title>");
+          doc.write("<style>")
+          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+          doc.write("table tr td, table tr th { font-size: 68%; }");
+          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+          doc.write("</style>");
+          doc.write("</head><body>");
+          doc.write("<h3>Properties of " + name + "</h3>");
+          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+          doc.write("<table class='properties'>");
+          doc.write("<tr><th>Name</th><th>Value</th></tr>");
+          for (prop in TestCases[name]) {
+            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+          }
+          doc.write("</table>");
+          doc.write("</body></html>");
+          doc.close();
+          win.focus();
+        }
+      ]]>  
+      </script>
+        </head>
+        <body>
+            <a name="top"></a>
+            <xsl:call-template name="pageHeader"/>  
+            
+            <!-- Summary part -->
+            <xsl:call-template name="summary"/>
+            <hr size="1" width="95%" align="left"/>
+            
+            <!-- Package List part -->
+            <xsl:call-template name="packagelist"/>
+            <hr size="1" width="95%" align="left"/>
+            
+            <!-- For each package create its part -->
+            <xsl:call-template name="packages"/>
+            <hr size="1" width="95%" align="left"/>
+            
+            <!-- For each class create the  part -->
+            <xsl:call-template name="classes"/>
+            
+        </body>
+    </html>
+</xsl:template>
+    
+    
+    
+    <!-- ================================================================== -->
+    <!-- Write a list of all packages with an hyperlink to the anchor of    -->
+    <!-- of the package name.                                               -->
+    <!-- ================================================================== -->
+    <xsl:template name="packagelist">   
+        <h2>Packages</h2>
+        Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+            <xsl:call-template name="testsuite.test.header"/>
+            <!-- list all packages recursively -->
+            <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+                <xsl:sort select="@package"/>
+                <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
+                <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
+                <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
+                <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
+                <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
+                
+                <!-- write a summary for the package -->
+                <tr valign="top">
+                    <!-- set a nice color depending if there is an error/failure -->
+                    <xsl:attribute name="class">
+                        <xsl:choose>
+                            <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+                            <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+                        </xsl:choose>
+                    </xsl:attribute>
+                    <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
+                    <td><xsl:value-of select="$testCount"/></td>
+                    <td><xsl:value-of select="$errorCount"/></td>
+                    <td><xsl:value-of select="$failureCount"/></td>
+                    <td>
+                    <xsl:call-template name="display-time">
+                        <xsl:with-param name="value" select="$timeCount"/>
+                    </xsl:call-template>
+                    </td>
+                </tr>
+            </xsl:for-each>
+        </table>        
+    </xsl:template>
+    
+    
+    <!-- ================================================================== -->
+    <!-- Write a package level report                                       -->
+    <!-- It creates a table with values from the document:                  -->
+    <!-- Name | Tests | Errors | Failures | Time                            -->
+    <!-- ================================================================== -->
+    <xsl:template name="packages">
+        <!-- create an anchor to this package name -->
+        <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+            <xsl:sort select="@package"/>
+                <a name="{@package}"></a>
+                <h3>Package <xsl:value-of select="@package"/></h3>
+                
+                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                    <xsl:call-template name="testsuite.test.header"/>
+            
+                    <!-- match the testsuites of this package -->
+                    <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
+                </table>
+                <a href="#top">Back to top</a>
+                <p/>
+                <p/>
+        </xsl:for-each>
+    </xsl:template>
+    
+    <xsl:template name="classes">
+        <xsl:for-each select="testsuite">
+            <xsl:sort select="@name"/>
+            <!-- create an anchor to this class name -->
+            <a name="{@name}"></a>
+            <h3>TestCase <xsl:value-of select="@name"/></h3>
+            
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+              <xsl:call-template name="testcase.test.header"/>
+              <!--
+              test can even not be started at all (failure to load the class)
+              so report the error directly
+              -->
+                <xsl:if test="./error">
+                    <tr class="Error">
+                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
+                    </tr>
+                </xsl:if>
+                <xsl:apply-templates select="./testcase" mode="print.test"/>
+            </table>
+            <div class="Properties">
+                <a>
+                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+                    Properties &#187;
+                </a>
+            </div>
+            <p/>
+            
+            <a href="#top">Back to top</a>
+        </xsl:for-each>
+    </xsl:template>
+    
+    <xsl:template name="summary">
+        <h2>Summary</h2>
+        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <tr valign="top">
+            <th>Tests</th>
+            <th>Failures</th>
+            <th>Errors</th>
+            <th>Success rate</th>
+            <th>Time</th>
+        </tr>
+        <tr valign="top">
+            <xsl:attribute name="class">
+                <xsl:choose>
+                    <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+                    <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+                </xsl:choose>
+            </xsl:attribute>
+            <td><xsl:value-of select="$testCount"/></td>
+            <td><xsl:value-of select="$failureCount"/></td>
+            <td><xsl:value-of select="$errorCount"/></td>
+            <td>
+                <xsl:call-template name="display-percent">
+                    <xsl:with-param name="value" select="$successRate"/>
+                </xsl:call-template>
+            </td>
+            <td>
+                <xsl:call-template name="display-time">
+                    <xsl:with-param name="value" select="$timeCount"/>
+                </xsl:call-template>
+            </td>
+
+        </tr>
+        </table>
+        <table border="0" width="95%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
+        </td>
+        </tr>
+        </table>
+    </xsl:template>
+    
+  <!--
+   Write properties into a JavaScript data structure.
+   This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+   -->
+  <xsl:template match="properties">
+    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+    <xsl:for-each select="property">
+    <xsl:sort select="@name"/>
+        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+    </xsl:for-each>
+  </xsl:template>
+    
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+    <h1>Unit Test Results</h1>
+    <table width="100%">
+    <tr>
+        <td align="left"></td>
+        <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://jakarta.apache.org/ant'>Ant</a>.</td>
+    </tr>
+    </table>
+    <hr size="1"/>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+    <tr valign="top">
+        <th>Name</th>
+        <th>Status</th>
+        <th width="80%">Type</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+    <tr valign="top">
+        <!-- set a nice color depending if there is an error/failure -->
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
+                <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
+            </xsl:choose>
+        </xsl:attribute>
+    
+        <!-- print testsuite information -->
+        <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:value-of select="@tests"/></td>
+        <td><xsl:value-of select="@errors"/></td>
+        <td><xsl:value-of select="@failures"/></td>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="failure | error">Error</xsl:when>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><xsl:value-of select="@name"/></td>
+        <xsl:choose>
+            <xsl:when test="failure">
+                <td>Failure</td>
+                <td><xsl:apply-templates select="failure"/></td>
+            </xsl:when>
+            <xsl:when test="error">
+                <td>Error</td>
+                <td><xsl:apply-templates select="error"/></td>
+            </xsl:when>
+            <xsl:otherwise>
+                <td>Success</td>
+                <td></td>
+            </xsl:otherwise>
+        </xsl:choose>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="failure">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the tescase template -->
+<xsl:template name="display-failures">
+    <xsl:choose>
+        <xsl:when test="not(@message)">N/A</xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="@message"/>
+        </xsl:otherwise>
+    </xsl:choose>
+    <!-- display the stacktrace -->
+    <code>
+        <br/><br/>
+        <xsl:call-template name="br-replace">
+            <xsl:with-param name="word" select="."/>
+        </xsl:call-template>
+    </code>
+    <!-- the later is better but might be problematic for non-21" monitors... -->
+    <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+    <xsl:param name="string"/>
+    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
+    <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+    template that will convert a carriage return into a br tag
+    @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:param name="br"><br/></xsl:param>
+    <xsl:value-of select='stringutils:replace(string($word),"&#xA;",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+
+</xsl:stylesheet>
+

Added: incubator/beehive/netui/test/ant/test.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/test.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,105 @@
+# ---------------------------------------------------------------------------------
+#
+# Test Properties
+#
+# ---------------------------------------------------------------------------------
+
+# QA directories
+qa.lib.dir=${build.dir}/test-lib
+qa.classes.dir=${build.dir}/test-classes
+qa.src.dir=${webui.home}/test/src
+test.external.dir=${test.dir}/external
+
+#
+# External JAR dependencies
+#
+deployed.httpClient.jar=${test.external.dir}/commons-httpclient-2.0.jar
+deployed.xalan.jar=${test.external.dir}/xalan-241.jar
+ant-junit.jar=${ant.home}/lib/ant-junit.jar
+
+# ---------------------------------------------------------------------------------
+#
+# NetUI QA JARs.
+#
+# ---------------------------------------------------------------------------------
+test-tools.jar.name=beehive-netui-test-tools.jar
+test-recorder.jar.name=testRecorder.jar
+test.recorder.qa.jar.name=testRecorder-qa.jar
+junit-tests.jar.name=beehive-netui-junitTests.jar
+fauxServlet.jar.name=fauxServlet.jar
+testBeans.jar.name=testBeans.jar
+
+test-tools.jar=${qa.lib.dir}/${test-tools.jar.name}
+test-recorder.jar=${qa.lib.dir}/${test-recorder.jar.name}
+test.recorder.qa.jar=${qa.lib.dir}/${test.recorder.qa.jar.name}
+junit-tests.jar=${qa.lib.dir}/${junit-tests.jar.name}
+testBeans.jar=${qa.lib.dir}/${testBeans.jar.name}
+fauxServlet.jar=${qa.lib.dir}/${fauxServlet.jar.name}
+deployed.test-recorder.jar=${qa.lib.dir}/${test-recorder.jar.name}
+
+qa.modules=\
+tools,\
+fauxServlet,\
+testBeans,\
+junitTests,\
+testRecorder,\
+testRecorderQA
+
+# Test classpath is used to import QA classes directly into the module builds as
+# the modules are where the test cases are stored.
+test.classpath=${junit.jar}
+
+junit.classpath=\
+${deployed.commons-logging.jar};\
+${deployed.commons-beanutils.jar};\
+${deployed.commons-collections.jar};\
+${deployed.commons-validator.jar};\
+${deployed.tags.databinding.jar};\
+${deployed.tags.datagrid.jar};\
+${deployed.tags.html.jar};\
+${deployed.pageflow.jar};\
+${deployed.scoping.jar};\
+${deployed.util.jar};\
+${deployed.struts.jar};\
+${junit.jar};\
+${log4j.jar};\
+${testBeans.jar};\
+${fauxServlet.jar};\
+${xbean.jar};\
+${ant.jar};\
+${ant-junit.jar};\
+${jsr173.jar};\
+${servlet24.jar};\
+${jsp20.jar};\
+${controls.jar}
+
+test.recorder.classpath=\
+${junit.jar};\
+${deployed.httpClient.jar};\
+${deployed.test-recorder.jar};\
+${deployed.commons-logging.jar};\
+${deployed.util.jar};\
+${deployed.scoping.jar};\
+${servlet24.jar};\
+${log4j.jar};\
+${xbean.jar};\
+${jsr173.jar}
+
+test.recorder.QA.classpath=\
+${test.recorder.classpath};\
+${test.recorder.qa.jar}
+
+# DRT / BVT -- JUnit / client side properties.  These parameterize the time and URL used
+#              in waiting for the server to start
+drt.testResults.dir=${webui.home}/build/drt.testResults
+bvt.testResults.dir=${webui.home}/build/bvt.testResults
+
+drtbvt.jraRecordingSeconds=150
+drtbvt.maxWait=300
+
+# pass debugging options to tomcat
+tomcat.debug.opts=
+
+log4jconfig.verbose.junit=${test.dir}/conf/junitLogCfgVerbose.xml
+log4jconfig.junit=${test.dir}/conf/junitLogCfg.xml
+

Added: incubator/beehive/netui/test/ant/testRecorder.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/testRecorder.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,447 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/TestRecorder" default="" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/bootstrap.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/common.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/test/ant/test.properties"/>
+
+    <property name="_testRecorder.config.dir" location="${build.dir}/testRecorder/config"/>
+    <property name="_testRecorder.scratch.dir" location="${build.dir}/testRecorder/scratch"/>
+    <property name="_testRecorder.output" value="TEST-org.apache.beehive.netui.tools.testrecorder.client.MasterTestRecorderJUnitTest"/>
+
+    <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
+        <classpath>
+            <pathelement path="${ant-junit.jar}"/>
+        </classpath>
+    </taskdef>
+
+    <!-- Run a single suite of tests against a server -->
+    <target name="run.suite">
+        <echo message="--------------------------------------------------"/>
+        <echo message=" Test Recorder running test suite '${playback.categories}'"/>
+        <echo message="--------------------------------------------------"/>
+
+        <echo>drt.mode: ${drt.mode}</echo>
+        <echo>drt.cc.mode: ${drt.cc.mode}</echo>
+
+        <!-- set the output flags according to whether the tests are running in DRT mode -->
+        <condition property="formatter.type" value="plain">
+            <and>
+                 <istrue value="${drt.mode}"/>
+                 <isfalse value="${drt.cc.mode}"/>
+            </and>
+        </condition>
+        <condition property="formatter.usefile" value="false">
+            <and>
+                 <istrue value="${drt.mode}"/>
+                 <isfalse value="${drt.cc.mode}"/>
+            </and>
+        </condition>
+        <condition property="formatter.type" value="xml">
+            <not><isset property="${drt.mode}"/></not>
+        </condition>
+        <condition property="formatter.usefile" value="true">
+            <not><isset property="${drt.mode}"/></not>
+        </condition>
+
+        <echo>formatter.type: ${formatter.type}</echo>
+        <echo>formatter.usefile: ${formatter.usefile}</echo>
+
+        <echo>Server ready...start playback of tests</echo>
+
+        <antcall target="playback.tests">
+            <param name="playback.categories" value="${playback.categories}"/>
+            <param name="formatter.type" value="${formatter.type}"/>
+            <param name="formatter.usefile" value="${formatter.usefile}"/>
+        </antcall>
+
+        <echo message="--------------------------------------------------"/>
+        <echo message=" Test Recorder completed test suite '${playback.categories}'"/>
+        <echo message="--------------------------------------------------"/>
+    </target>
+
+    <!--
+        Server Test target.  Used for DRTs and BVTs.  Starts the server, waits for a response
+        from the server, and upon success starts the client-side test harneess.
+
+        Param:
+            waitfor.url == the URL at which to check to see if the server has started
+            formatter.type == type of formatter to use when writing reslts.
+            formatter.usefile == whether to write results to an output file.
+            drt.mode == flag describing whether running the tests in DRT mode.  
+                        In DRT mode, the server does not stop on failure.
+            app.build.file == the build file to use for cleaning and deploying the
+                              application and starting and stopping the server.
+     -->
+    <target name="server.test" description="Runs Test Recorder regression tests">
+
+        <ant target="clean" antfile="${app.build.file}"/>
+        <ant target="build" antfile="${app.build.file}"/>
+
+        <echo>testRecorder.config.name: ${testRecorder.config.name}</echo>
+        <property name="_config.jar" value="${_testRecorder.config.dir}/${testRecorder.config.name}.jar"/>
+        <echo>config.jar: ${_config.jar}</echo>
+        <available property="config.jar.available" file="${_config.jar}"/>
+        <fail unless="config.jar.available" message="Can't find a test recorder config JAR at ${_config.jar} to copy"/>
+
+        <echo>Start a NetUI test server</echo>
+
+        <parallel>
+            <ant target="start" antfile="${app.build.file}" inheritAll="false"/>
+
+            <sequential>
+                <echo>Wait for server to start at URL: ${waitfor.url}</echo>
+
+                <waitfor maxwait="${drtbvt.maxWait}" maxwaitunit="second"
+                    timeoutproperty="server.timedOut" checkevery="500">
+                    <http url="${waitfor.url}"/>
+                </waitfor>
+
+                <!-- 
+                     callback to the application build file to give the application an opportunity to 
+                     ensure that it has been deployed before starting to run tests against it 
+                  -->
+                <ant antfile="${app.build.file}" target="ensure.deployed" inheritAll="false"/>
+
+                <echo>Start Playback</echo>
+                <echo>playback.target: ${playback.target}</echo>
+                <antcall target="_default.callback"/>
+                <antcall target="_override.callback"/>
+
+                <echo>stopping server...</echo>
+                <ant target="stop" antfile="${app.build.file}" inheritAll="false"/>
+                <echo>...server stopped</echo>
+            </sequential>
+
+        </parallel>
+
+        <fail if="failedjUnitDRT">ERROR: JUnit tests FAILED</fail>
+        <fail if="playback.drt.failure">ERROR: regression tests FAILED</fail>
+    </target>
+
+    <!-- Stop the server and then fail because the DRTs failed -->
+    <target name="drt.errors" if="drt.errors.stop">
+        <echo>!!!!! Errors or failures occurred running test recorder tests !!!!!</echo>
+        <antcall target="stop.server"/>
+        <fail message="NetUI Server DRTs Failed"/>
+    </target>
+
+    <!-- 
+        When running the DRTs in CruiseControl mode, the server instance 
+        needs to be stopped whether or not the tests passed.
+      -->
+    <target name="stop.server" if="drt.cc.mode">
+        <echo>Stop the server with the 'stop' target in this build file: ${app.build.file}</echo>
+        <ant target="stop" antfile="${app.build.file}"/>
+    </target>
+
+    <target name="playback.tests" unless="server.timedOut" description="Plays back a list of pre-recorded tests.">
+
+        <condition property="_playback.fail" value="set">
+            <not>
+                <or>
+                    <isset property="playback.list"/>
+                    <isset property="playback.categories"/>
+                    <isset property="playback.webapps"/>
+                </or>
+            </not>
+        </condition>
+        <fail if="_playback.fail">
+ERROR: to run playback set any combination of the following properties:
+    'playback.list', 'playback.categories', 'playback.webapps'
+    to a list of tests, categories or webapps, respectively
+        </fail>
+
+        <!-- remove old junit output -->
+        <delete>
+            <fileset dir=".">
+                <include name="${_testRecorder.output}.*"/>
+            </fileset>
+        </delete>
+
+        <condition property="log4j.config" value="${log4jconfig.verbose.junit}">
+            <not>
+                <isset property="log4j.quiet"/>
+            </not>
+        </condition>
+        <condition property="log4j.config" value="${log4jconfig.junit}">
+            <and>
+                <isset property="log4j.quiet"/>
+            </and>
+        </condition>
+
+        <condition property="_list" value="">
+            <not>
+                <isset property="playback.list"/>
+            </not>
+        </condition>
+        <condition property="_list" value="${playback.list}">
+            <and>
+                <isset property="playback.list"/>
+            </and>
+        </condition>
+        <condition property="_categories" value="">
+            <not>
+                <isset property="playback.categories"/>
+            </not>
+        </condition>
+        <condition property="_categories" value="${playback.categories}">
+            <and>
+                <isset property="playback.categories"/>
+            </and>
+        </condition>
+        <condition property="_webapps" value="">
+            <not>
+                <isset property="playback.webapps"/>
+            </not>
+        </condition>
+        <condition property="_webapps" value="${playback.webapps}">
+            <and>
+                <isset property="playback.webapps"/>
+            </and>
+        </condition>
+
+        <echo>config.jar: ${_config.jar}</echo>
+        <echo>log4j.config: ${log4j.config}</echo>
+        <echo>playback list: ${_list}</echo>
+        <echo>playback categories: ${_categories}</echo>
+        <echo>playback webapps: ${_webapps}</echo>
+        <echo>playback config jar: ${_config.jar}</echo>
+        <echo>test.recorder.classpath: ${test.recorder.classpath}</echo>
+
+        <junit dir="${netui.ant.dir}" fork="true" errorproperty="playback.drt.error" failureproperty="playback.drt.failure" 
+               showoutput="true">
+            <classpath>
+                <pathelement path="${junit.jar}"/>
+                <pathelement path="${ant-junit.jar}"/>
+                <pathelement path="${test.recorder.classpath}"/>
+                <pathelement path="${_config.jar}"/>
+            </classpath>
+
+            <sysproperty key="test.recorder.run.tests" value="${_list}"/>
+            <sysproperty key="test.recorder.run.categories" value="${_categories}"/>
+            <sysproperty key="test.recorder.run.webapps" value="${_webapps}"/>
+            <sysproperty key="test.recorder.run.results.delete" value="true"/>
+            <sysproperty key="netuidrt.logdir" path="${build.dir}/testRecorder"/>
+            <sysproperty key="log4j.configuration" value="file:${log4j.config}"/>
+
+            <formatter type="${formatter.type}" usefile="${formatter.usefile}"/>
+
+            <test name="org.apache.beehive.netui.tools.testrecorder.client.MasterTestRecorderJUnitTest"/>
+        </junit>
+
+        <antcall target="make.report">
+            <param name="test.report.dir" value="${build.dir}/testRecorder/junit/${_categories}"/>
+        </antcall>
+
+        <!-- Determine if the tests have an error or failure -->
+        <condition property="drt.errors.found">
+            <or>
+                <isset property="playback.drt.error"/>
+                <isset property="playback.drt.failure"/>
+            </or>
+        </condition>
+
+        <!-- Determine if we had a failure and are in DRT mode -->
+        <condition property="drt.errors.stop">
+            <and>
+                <isset property="drt.mode"/>
+                <isset property="drt.errors.found"/>
+            </and>
+        </condition>
+
+        <!-- Run the DRT stop if we failed in DRT mode -->
+        <antcall target="drt.errors"/>
+    </target>
+
+    <target name="playback" 
+        description="Plays back a list of pre-recorded tests, set the 'playback.list' property to specify a list of tests.">
+
+        <fail unless="testRecorder.config.name" message="No test recorder config name (property: 'testRecorder.config.name') specified"/>
+        <echo>testRecorder.config.name: ${testRecorder.config.name}</echo>
+        <property name="_config.jar" location="${_testRecorder.config.dir}/${testRecorder.config.name}.jar"/>
+        <available property="config.jar.available" file="${_config.jar}"/>
+        <fail unless="config.jar.available" message="Can't find a test recorder config JAR at ${_config.jar} to copy"/>
+        <echo>_config.jar: ${_config.jar}</echo>
+
+        <antcall target="playback.tests">
+            <param name="formatter.type" value="plain"/>
+            <param name="formatter.usefile" value="false"/>
+        </antcall>
+    </target>
+
+    <!--
+        Param:
+            test.report.dir == the directory into which to generate the report
+     -->
+    <target name="make.report">
+        <property name="html.report.dir" location="${test.report.dir}/html"/>
+
+       <mkdir dir="${test.report.dir}" />
+       <mkdir dir="${html.report.dir}"/>
+
+       <ant dir="${test.dir}/ant" antfile="${test.dir}/ant/junitReport.xml" target="run">
+           <property name="test.report.dir" location="${test.report.dir}"/>
+           <property name="type" value="testrecorder"/>
+       </ant>
+
+       <delete>
+           <fileset dir=".">
+               <include name="${_testRecorder.output}.*"/>
+           </fileset>
+       </delete>
+
+    </target>
+
+    <!-- Deploy the Test Recorder to the specified web app
+
+         Params:
+             webapp.dir == the webapp into which to deploy the testRecorder
+       -->
+    <target name="deployTestRecorder" depends="build" description="Deploy the Test Recorder artifacts to the specified web app">
+        <echo>webapp.dir: ${webapp.dir}</echo>
+        <echo>testRecorder.config.name: ${testRecorder.config.name}</echo>
+
+        <fail unless="testRecorder.config.name" message="No test recorder config name specified"/>
+        <property name="_config.jar" location="${_testRecorder.config.dir}/${testRecorder.config.name}.jar"/>
+
+        <available property="config.jar.available" file="${_config.jar}"/>
+        <fail unless="config.jar.available" message="Can't find a test recorder config JAR at ${_config.jar} to copy"/>
+
+        <echo>config jar: ${_config.jar}</echo>
+
+        <copy file="${deployed.test-recorder.jar}" toDir="${webapp.dir}/WEB-INF/lib"/>
+        <copy file="${deployed.httpClient.jar}" toDir="${webapp.dir}/WEB-INF/lib"/>
+        <copy file="${junit.jar}" toDir="${webapp.dir}/WEB-INF/lib"/>
+        <copy file="${_config.jar}" toDir="${webapp.dir}/WEB-INF/lib"/>
+        <copy todir="${webapp.dir}/testRecorder" overwrite="true">
+            <fileset dir="${qa.src.dir}/testRecorder/jsp">
+                <include name="**/*.jsp"/>
+                <include name="**/*.inc"/>
+            </fileset>
+        </copy>
+  </target>
+
+    <!-- Undeploy the Test Recorder from the specified web app
+
+         Params:
+             webapp.dir == the webapp into which to deploy the testRecorder
+     -->
+    <target name="undeploy" description="Undeploy the Test Recorder artifacts from the specified webapp">
+        <echo>Undeploy testRecorder from: ${webapp.dir}</echo>
+
+        <property name="webapp.lib" location="${webapp.dir}/WEB-INF/lib"/>
+
+        <delete file="${webapp.lib}/${test-recorder.jar.name}"/>
+        <delete file="${webapp.lib}/${httpClient.jar.name}"/>
+        <delete file="${webapp.lib}/${junit.jar.name}"/>
+        <delete quiet="true">
+            <fileset dir="${webapp.dir}/testRecorder">
+                <include name="*.jsp"/>
+                <include name="*.inc"/>
+                <include name="testResults/*.*"/>
+            </fileset>
+        </delete>
+    </target>
+
+    <!-- Build the test recorder -->
+    <target name="build" description="build the Test Recorder module">
+        <ant dir="${test.dir}/ant" antfile="${test.dir}/ant/build.xml" target="test.build.module" inheritAll="false">
+            <property name="module.name" value="testRecorder"/>
+        </ant>
+    </target>
+
+    <!-- Clean the test recorder -->
+    <target name="clean" description="clean the Test Recorder module">
+        <ant dir="${test.dir}/ant" antfile="${test.dir}/ant/build.xml" target="test.clean.module" inheritAll="false">
+            <property name="module.name" value="testRecorder"/>
+        </ant>
+    </target>
+
+    <target name="build.config.jar">
+        <echo>build.dir: ${build.dir}</echo>
+        <echo>Build Test Recorder config JAR</echo>
+
+        <available property="test.file.available" file="${test.file}"/>
+        <fail unless="test.file.available" message="Can't build Test Recorder config JAR; the test file ${test.file} is not available"/>
+        <available property="config.file.available" file="${config.file}"/>
+        <fail unless="config.file.available" message="Can't build Test Recorder config JAR; the webapp file ${webapp.file} is not available"/>
+        <available property="webapp.file.available" file="${webapp.file}"/>
+        <fail unless="config.file.available" message="Can't build Test Recorder config JAR; the config file ${config.file} is not available"/>
+
+        <mkdir dir="${_testRecorder.config.dir}"/>
+        <delete dir="${_testRecorder.scratch.dir}"/>
+        <property name="this.scratch.dir" location="${_testRecorder.scratch.dir}/${testRecorder.config.name}"/>
+        <echo>scratch.dir: ${this.scratch.dir}</echo>
+        <mkdir dir="${this.scratch.dir}"/>
+
+        <copy todir="${this.scratch.dir}" overwrite="true">
+            <fileset file="${config.file}"/>
+            <fileset file="${test.file}"/>
+            <filterset>
+                <filter token="BASE_DIR" value="${build.dir}/testRecorder"/>
+            </filterset>
+        </copy>
+        <copy file="${webapp.file}" tofile="${this.scratch.dir}/testRecorder-webapp.xml" overwrite="true">
+            <filterset>
+                <filter token="DOMAIN_DIR" value="${app.dir}"/>
+            </filterset>
+        </copy>
+
+        <jar jarfile="${_testRecorder.config.dir}/${testRecorder.config.name}.jar">
+            <fileset dir="${_testRecorder.scratch.dir}/${testRecorder.config.name}"/>
+        </jar>
+    </target>
+
+    <!--
+        The default playback target for a test recorder suite.  This target simply
+        runs the "suite.callback" target with the provided parameters.  It runs
+        only the suite that was specified.
+      -->
+    <target name="_default.callback" unless="playback.target">
+        <antcall target="suite.callback"/>
+    </target>
+
+    <!--
+        A playback target that allows an application to provide a target to callback
+        when the tests should be executed.  This allows the application to 
+        override the default behavior of the test suite execution.  For example,
+        the application may compose many test suites into a single callback target.
+      -->
+    <target name="_override.callback" if="playback.target">
+        <echo>app.build.file: ${app.build.file}</echo>
+        <echo>playback.target: ${playback.target}</echo>
+        <ant antfile="${app.build.file}" target="${playback.target}"/>
+    </target>
+
+    <!-- 
+        The default callback to run a test suite.
+
+        This target expects to be passed a suite.name property which is the name of the 
+        suite of tests to execute.
+      -->
+    <target name="suite.callback" description="Run a Test Recorder test suite">
+        <fail unless="suite.name" message="No test suite name specified, set the -Dsuite.name=&lt;name&gt; property"/>
+
+        <!-- set the path to the config.jar file read by the test recorder -->
+        <condition property="_config.jar" value="${_testRecorder.config.dir}/${testRecorder.config.name}.jar">
+            <not><isset property="${_config.jar}"/></not>
+        </condition>
+
+        <!-- ensure that the application is running where it is supposed to be given the provided "waitfor.url" -->
+        <waitfor maxwait="5" maxwaitunit="second" timeoutproperty="unavailable">
+            <http url="${waitfor.url}"/>
+        </waitfor>
+        <fail if="unavailable" message="Could not reach webapp at ${waitfor.url} to run the suite ${suite.name}"/>
+
+        <echo>Running suite: ${suite.name}</echo>
+
+        <ant dir="${test.dir}/ant" antfile="${test.dir}/ant/testRecorder.xml" target="run.suite">
+            <property name="playback.categories" value="${suite.name}"/>
+        </ant>
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/ant/testRecorderJunit.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/ant/testRecorderJunit.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+#
+# JUnit properties file
+#
+# This file contains the list of classnames that should be run as
+# tests for the test recorder.  To add a test, simply specify
+# the fully qualified class name; the property file filter
+# looks for keys _only_ when deciding whether or not
+# to run a particular test.
+#
+
+org.apache.beehive.netui.tools.testrecorder.qa.SchemaTest
+org.apache.beehive.netui.tools.testrecorder.qa.SessionSchemaTest
+#org.apache.beehive.netui.tools.testrecorder.qa.HttpClientTest
\ No newline at end of file

Added: incubator/beehive/netui/test/conf/junitLogCfg.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/conf/junitLogCfg.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+  <!--Netui logfile -->
+  <appender name="NETUISYSLOGFILE" class="org.apache.log4j.RollingFileAppender">
+    <param name="File" value="${netuidrt.logdir}/netui.log"/>
+    <param name="Append" value="true"/>
+    <param name="MaxFileSize" value="500000KB"/>
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d{DATE} %-5p %-15c{1} [%x]: %m%n"/>
+    </layout>
+  </appender>
+
+  <!-- base for all netui server components -->
+  <category name="com.bea.wlw.netui">
+    <priority value="warn" />
+    <appender-ref ref="NETUISYSLOGFILE" />
+  </category>
+
+  <!-- base for all netui server components -->
+  <category name="com.bea.wlw.netui.qa">
+    <priority value="warn" />
+    <appender-ref ref="NETUISYSLOGFILE" />
+  </category>
+
+    <category name="org.apache.beehive.netui.tools.testrecorder">
+        <priority value="debug"/>
+        <appender-ref ref="NETUISYSLOGFILE"/>
+    </category>
+
+  <!-- category for struts messages -->
+  <category name="org.apache.struts">
+    <priority value="warn" />
+    <appender-ref ref="NETUISYSLOGFILE" />
+  </category>
+
+</log4j:configuration>

Added: incubator/beehive/netui/test/conf/junitLogCfgVerbose.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/conf/junitLogCfgVerbose.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+  <!--Netui logfile -->
+  <appender name="NETUISYSLOGFILE" class="org.apache.log4j.RollingFileAppender">
+    <param name="File" value="${netuidrt.logdir}/netui.log"/>
+    <param name="Append" value="false"/>
+    <param name="MaxFileSize" value="500000KB"/>
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d{DATE} %-5p %-15c{1} [%x]: %m%n"/>
+    </layout>
+  </appender>
+
+  <!-- base for all netui server components -->
+  <category name="com.bea.wlw.netui">
+    <priority value="debug" />
+    <appender-ref ref="NETUISYSLOGFILE" />
+  </category>
+
+  <!-- base for all netui server components -->
+  <category name="com.bea.wlw.netui.qa">
+    <priority value="debug" />
+    <appender-ref ref="NETUISYSLOGFILE" />
+  </category>
+
+    <category name="org.apache.beehive.netui.tools.testrecorder">
+        <priority value="debug"/>
+        <appender-ref ref="NETUISYSLOGFILE"/>
+    </category>
+
+  <!-- category for struts messages -->
+  <category name="org.apache.struts">
+    <priority value="debug" />
+    <appender-ref ref="NETUISYSLOGFILE" />
+  </category>
+
+    <category name="org.apache.commons.httpclient">
+        <priority value="info"/>
+        <appender-ref ref="NETUISYSLOGFILE"/>
+    </category>
+
+    <category name="httpclient.wire">
+        <priority value="info"/>
+        <appender-ref ref="NETUISYSLOGFILE"/>
+    </category>
+
+
+</log4j:configuration>

Added: incubator/beehive/netui/test/external/commons-httpclient-2.0.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/external/xalan-241.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/src/fauxServlet/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/fauxServlet/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/FauxServlet" default="compile" basedir=".">
+
+    <property name="module.classpath" location="${servlet24.jar};${jsp20.jar};${util.jar}"/>
+    <property name="module.classes.dir" location="${qa.classes.dir}/${module.name}"/>
+    <property name="module.jar.name" value="${fauxServlet.jar.name}"/>
+    <property name="module.jar" location="${qa.lib.dir}/${module.jar.name}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath:=${module.classpath}</echo>
+        <echo>debug=${compile.debug}</echo>
+
+        <mkdir dir="${module.classes.dir}"/>
+
+        <javac srcdir="."
+               destdir="${module.classes.dir}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+               source="1.4">
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${module.classes.dir}">
+          <fileset dir="./">
+                  <exclude name="./build.xml"/>
+                  <exclude name="**/*.java"/>
+              </fileset>
+        </copy>
+
+        <!-- todo: remove this once there is a test/build.xml file -->
+        <mkdir dir="${qa.lib.dir}"/>
+
+        <jar jarfile="${module.jar}" basedir="${module.classes.dir}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${module.classes.dir}"/>
+        <delete file="${module.jar}"/>
+    </target>
+
+</project>
+

Added: incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/FauxPageContext.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/FauxPageContext.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,238 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.servlet;
+
+// java imports
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.tagext.BodyContent;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class FauxPageContext
+    extends PageContext
+{
+    private Hashtable _attributes = null;
+    private HttpServletRequest _request = null;
+    private HttpServletResponse _response = null;
+    private HttpSession _session = null;
+    private ServletContext _servletContext = null;
+
+    public FauxPageContext(HttpServletRequest request,
+                           HttpServletResponse response,
+                           HttpSession session,
+                           ServletContext servletContext)
+    {
+        super();
+
+        _request = request;
+        _response = response;
+        _session = session;
+        _servletContext = servletContext;
+        _attributes = new Hashtable();
+    }
+
+    public Object findAttribute(String name)
+    {
+        Object ret = null;
+        ret = getAttribute(name);
+
+        if(ret == null)
+        {
+            ret = getAttribute(name, REQUEST_SCOPE);
+            if(ret == null)
+                ret = getAttribute(name, SESSION_SCOPE);
+            if(ret == null)
+                ret = getAttribute(name, APPLICATION_SCOPE);
+        }
+        
+        return ret;
+    }
+
+    public Object getAttribute(String name)
+    {
+        return _attributes.get(name);
+    }
+
+    public Enumeration getAttributeNamesInScope(int scope)
+    {
+        switch(scope) {
+        case PAGE_SCOPE: return _attributes.keys();
+        case REQUEST_SCOPE: return _request.getAttributeNames();
+        case SESSION_SCOPE: return _session.getAttributeNames();
+        case APPLICATION_SCOPE: return _servletContext.getAttributeNames();
+        default: throw new IllegalStateException("The scope specified by the index \"" + scope + "\" is not valid.");
+        }
+        
+    }
+
+    public Object getAttribute(String name, int scope)
+    {
+        switch(scope)
+        {
+        case PAGE_SCOPE: return _attributes.get(name);
+        case REQUEST_SCOPE: return _request.getAttribute(name);
+        case SESSION_SCOPE: return _session.getAttribute(name);
+        case APPLICATION_SCOPE: return _servletContext.getAttribute(name);
+        default: throw new IllegalStateException("The scope specified by the index \"" + scope + "\" is not valid.");
+        }
+    }
+
+    public void removeAttribute(String name)
+    {
+        _attributes.remove(name);
+    }
+
+    public void removeAttribute(String name, int scope)
+    {
+        switch(scope)
+        {
+        case PAGE_SCOPE: _attributes.remove(name); return;
+        case REQUEST_SCOPE: _request.removeAttribute(name); return;
+        case SESSION_SCOPE: _session.removeAttribute(name); return;
+        case APPLICATION_SCOPE: _servletContext.removeAttribute(name); return;
+        default: throw new IllegalStateException("The scope specified by the index \"" + scope + "\" is not valid.");
+        }
+    }
+
+    public void setAttribute(String name, Object attribute)
+    {
+        _attributes.put(name, attribute);
+    }
+
+    public void setAttribute(String name, Object o, int scope)
+    {
+        switch(scope)
+        {
+        case PAGE_SCOPE: _attributes.put(name, o); return;
+        case REQUEST_SCOPE: _request.setAttribute(name, o); return;
+        case SESSION_SCOPE: _session.setAttribute(name, o); return;
+        case APPLICATION_SCOPE: _servletContext.setAttribute(name, o); return;
+        default: throw new IllegalStateException("The scope specified by the index \"" + scope + "\" is not valid.");
+        }        
+    }
+
+    public ServletRequest getRequest()
+    {
+        return _request;
+    }
+
+    public ServletContext getServletContext()
+    {
+        return _servletContext;
+    }
+
+    public HttpSession getSession()
+    {
+        return _session;
+    }
+
+    /* ============================================ 
+     *
+     * PageContext methods
+     *
+     * ============================================ 
+     */
+    public void forward(String path)
+    {}
+
+    public int getAttributesScope(String name)
+    {return -1;}
+
+    public Exception getException()
+    {return null;}
+    
+    public JspWriter getOut()
+    {return null;}
+
+    public Object getPage()
+    {return null;}
+
+    public ServletResponse getResponse()
+    {
+        return _response;
+    }
+
+    public ServletConfig getServletConfig()
+    {
+        return null;
+    }
+
+    public void handlePageException(Exception e)
+    {}
+
+    public void handlePageException(Throwable e)
+    {}
+
+    public void include(String path)
+    {}
+
+    public void initialize(Servlet servlet, ServletRequest req, ServletResponse resp,
+                           String errorPageUrl, boolean needsSession, int bufferSize,
+                           boolean autoFlush)
+    {
+
+    }
+
+    public JspWriter popBody()
+    {
+        return null;
+    }
+
+    public BodyContent pushBody()
+    {
+        return null;
+    }
+
+    public void release() 
+    {}       
+
+    // Servlet 2.4 method implementation
+    public void include(String string, boolean bool)
+    {
+    }
+
+    // Servlet 2.4 method implementation
+    public javax.servlet.jsp.el.VariableResolver getVariableResolver()
+    {
+        return null;
+    }
+
+    // Servlet 2.4 method implementation
+    public javax.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator()
+    {
+        return null;
+    }
+}

Added: incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/HttpServletRequestHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/HttpServletRequestHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,192 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.servlet;
+
+// java imports
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class HttpServletRequestHandler
+    extends ServletHandler
+{
+    /* 
+     * this is a java.util.Hashtable because the HttpServletRequest returns an Enumeration, 
+     * and it's the only Map implementation that returns an Enumeration.  Fun, huh?
+     */
+    private Hashtable _params = null;
+
+    private String _queryString = null;
+    private HttpSession _session = null;
+
+    public HttpServletRequestHandler()
+    {
+        super();
+        _params = new Hashtable();
+    }
+
+    public void setSession(HttpSession session)
+    {
+        _session = session;
+    }
+
+    public void addParam(String key, Object value)
+    {
+        List list = (List)_params.get(key);
+        if(list == null)
+        {
+            list = new ArrayList();
+            list.add(value);
+            _params.put(key, list);
+        }
+        else list.add(value);
+    }
+
+    public void setQueryString(String queryString)
+    {
+        _queryString = queryString;
+
+        if(queryString == null)
+            return;
+
+        _params = new Hashtable();
+
+        String[] queryParams = queryString.split("&");
+        for(int i = 0; i < queryParams.length; i++)
+        {
+            String[] keyValue = queryParams[i].split("=");
+            
+            String key = keyValue[0];
+            String value = null;
+            
+            if(keyValue.length == 1 || keyValue[1] == null)
+                value = "";
+            else value = keyValue[1];
+
+            if(_params.containsKey(keyValue[0]))
+            {
+                ((List)_params.get(key)).add(value);
+            }
+            else
+            {
+                List list = new ArrayList();
+                list.add(value);
+                
+                _params.put(key, list);
+            }
+        }
+    }
+
+    public Object invoke(Object proxy, Method method, Object[] args)
+    {
+        if(method.getName().equals("getParameter"))
+        {
+            String key = (String)args[0];
+
+            Object o = _params.get(key);
+            
+            if(o == null)
+                return null;
+            else if(o instanceof List)
+            {
+                return ((List)o).get(0);
+            }
+            else
+            {
+                assert (o instanceof String[]);
+
+                return ((String[])o)[0];
+            }
+        }
+        else if(method.getName().equals("getParameterValues"))
+        {
+            String key = (String)args[0];
+
+            List list = (List)_params.get(key);
+            return listToStrAry(list);
+        }
+        else if(method.getName().equals("getParameterNames"))
+        {
+            return _params.keys();
+        }
+        else if(method.getName().equals("getQueryString"))
+            return _queryString;
+        else if(method.getName().equals("getParameter"))
+            return _params.get(args[0]);
+        else if(method.getName().equals("getSession"))
+            return _session;
+        else if(method.getName().equals("getContentType"))
+            return null;
+        else if(method.getName().equals("getMethod"))
+            return "POST";
+        else if(method.getName().equals("getParameterMap"))
+        {
+             HashMap map = new HashMap();
+             Enumeration e = _params.keys();
+             while(e.hasMoreElements())
+             {
+                 String key = (String)e.nextElement();
+                 String[] ary = listToStrAry((List)_params.get(key));
+
+                 map.put(key, ary);
+             }
+             return map;
+        }
+        else if(method.getName().equals("equals"))
+        {
+            Object eq = args[0];
+            if(eq == null) return Boolean.FALSE;
+            else if(!(eq instanceof HttpServletRequest)) return Boolean.FALSE;
+            // don't laugh; this works in this context
+            else if(Proxy.isProxyClass(eq.getClass()) && (System.identityHashCode(this) == System.identityHashCode(Proxy.getInvocationHandler(eq))))
+                return Boolean.TRUE;
+            else return Boolean.FALSE;
+        }
+        else return super.invoke(proxy, method, args);
+    }   
+
+    private String[] listToStrAry(List list)
+    {
+        if (list == null)
+            return null;
+
+        String[] ary = new String[list.size()];
+        for(int i = 0; i < ary.length; i++)
+        {
+            ary[i] = (String)list.get(i);
+        }
+        
+        return ary;
+    }
+}

Added: incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/HttpServletResponseHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/HttpServletResponseHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.servlet;
+
+// java imports
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationHandler;
+
+/**
+ *
+ */
+public class HttpServletResponseHandler
+    implements InvocationHandler    
+{
+    public HttpServletResponseHandler()
+    {
+    }
+
+    public Object invoke(Object proxy, Method method, Object[] args)
+    {
+        throw new UnsupportedOperationException("Can not invoke method (" + method + "); this proxy does not support the method.");
+    }   
+}

Added: incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/ServletFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/ServletFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,105 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.servlet;
+
+// java imports
+import java.lang.reflect.Proxy;
+import java.lang.reflect.InvocationHandler;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpServletResponse;
+
+import javax.servlet.jsp.PageContext;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class ServletFactory
+{
+    public static HttpSession getSession()
+    {
+        return (HttpSession)create(HttpSession.class);
+    }
+
+    public static HttpServletRequest getServletRequest()
+    {
+        ServletHandler handler = new HttpServletRequestHandler();
+        return (HttpServletRequest)Proxy.newProxyInstance(handler.getClass().getClassLoader(),
+                                                          new Class[] {HttpServletRequest.class},
+                                                          handler);
+    }
+
+    public static HttpServletRequest getServletRequest(String query)
+    {
+        HttpServletRequestHandler handler = new HttpServletRequestHandler();
+        handler.setQueryString(query);
+
+        return (HttpServletRequest)Proxy.newProxyInstance(handler.getClass().getClassLoader(),
+                                                          new Class[] {HttpServletRequest.class},
+                                                          handler);
+    }
+
+    public static HttpServletResponse getServletResponse()
+    {
+        InvocationHandler handler = new HttpServletResponseHandler();
+        return (HttpServletResponse)Proxy.newProxyInstance(handler.getClass().getClassLoader(),
+                                                           new Class[] {HttpServletResponse.class},
+                                                           handler);
+    }
+
+    public static ServletContext getServletContext()
+    {
+        return (ServletContext)create(ServletContext.class);
+    }
+
+    public static PageContext getPageContext(HttpServletRequest request, HttpServletResponse response,
+                                             HttpSession session, ServletContext application)
+    {
+        return new FauxPageContext(request, response, session, application);
+    }
+
+    public static PageContext getPageContext()
+    {
+        HttpServletRequest request = ServletFactory.getServletRequest();
+        HttpServletResponse response = ServletFactory.getServletResponse();
+        HttpSession session = ServletFactory.getSession();
+        ServletContext application = ServletFactory.getServletContext();
+
+        HttpServletRequestHandler h = (HttpServletRequestHandler)Proxy.getInvocationHandler(request);
+        h.setSession(session);
+
+        PageContext pageContext = getPageContext(request, response, session, application);
+        
+        return pageContext;
+    }
+
+    private static Object create(Class type)
+    {
+        ServletHandler handler = new ServletHandler();
+        return Proxy.newProxyInstance(type.getClassLoader(),
+                                      new Class[] {type},
+                                      handler);
+    }
+}

Added: incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/ServletHandler.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/fauxServlet/org/apache/beehive/netui/test/servlet/ServletHandler.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.servlet;
+
+// java imports
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationHandler;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class ServletHandler
+    implements InvocationHandler    
+{
+    private Map _attributes = null;
+
+    public ServletHandler()
+    {
+        _attributes = new HashMap();
+    }
+
+    public Object invoke(Object proxy, Method method, Object[] args)
+    {
+        if(method.getName().endsWith("getAttribute"))
+        {
+            String key = (String)args[0];
+            return _attributes.get(key);
+        }
+        else if(method.getName().endsWith("getAttributeNames"))
+        {
+            return Collections.enumeration(_attributes.keySet());
+        }
+        else if(method.getName().endsWith("setAttribute"))
+        {
+            String key = (String)args[0];
+            Object value = args[1];
+            _attributes.put(key, value);
+            return null;
+        }
+        else if(method.getName().endsWith("removeAttribute"))
+        {
+            String key = (String)args[0];
+            _attributes.remove(key);
+
+            return null;
+        }
+        else if(method.getName().equals("toString"))
+        {
+            return "";
+        }
+        else throw new UnsupportedOperationException("Can not invoke method (" + method + "); this proxy does not support the method.");
+    }   
+
+    
+}

Added: incubator/beehive/netui/test/src/junitTests/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/JUnitTests" default="compile" basedir=".">
+
+    <property name="module.classes.dir" location="${qa.classes.dir}/${module.name}"/>
+    <property name="module.classpath" location="${junit.classpath}"/>
+    <property name="module.jar.name" value="${junit-tests.jar.name}"/>
+    <property name="module.jar" location="${qa.lib.dir}/${module.jar.name}"/>
+
+    <target name="compile">
+        <echo>Compile module: ${module.name}</echo>
+        <echo>Classpath: ${module.classpath}</echo>
+        <echo>Output directory: ${qa.lib.dir}</echo>
+        <echo>Debug: ${compile.debug}</echo>
+
+        <mkdir dir="${module.classes.dir}"/>
+
+        <javac srcdir="."
+               destdir="${module.classes.dir}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+               source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${module.classes.dir}">
+          <fileset dir="./">
+                  <exclude name="./build.xml"/>
+                  <exclude name="**/*.java"/>
+              </fileset>
+        </copy>
+
+        <copy todir="${module.classes.dir}/WEB-INF/" file="${netuiconfig.xml}"/>
+
+        <jar jarfile="${module.jar}" basedir="${module.classes.dir}"/>
+    </target>
+
+    <target name="clean">
+        <echo>Clean JUnit Tests</echo>
+        <delete dir="${module.classes.dir}"/>
+        <delete file="${module.jar}"/>
+    </target>
+
+</project>
+

Added: incubator/beehive/netui/test/src/junitTests/com/bea/netuix/servlets/script/PortalVariableResolver.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/com/bea/netuix/servlets/script/PortalVariableResolver.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package com.bea.netuix.servlets.script;
+
+// java imports
+import javax.servlet.jsp.el.VariableResolver;
+
+// internal imports
+import org.apache.beehive.netui.script.common.ContextFactory;
+
+// external imports
+
+/**
+ * Variable resolver that exposes properties.  This
+ * object is returned by the ContextFactory.
+ */
+public class PortalVariableResolver 
+{
+    public PortalVariableResolver()
+    {
+        super();
+    }
+    
+    public SkinBean getSkin()
+    {
+        return new SkinBean();
+    }
+
+    /**
+     * Test JavaBean that returns a dummy String from a property accessor.
+     */
+    public static class SkinBean
+    {
+        public SkinBean() {}
+        
+        public String getStringProperty() {return "This is a String property.";}
+    }
+
+    /**
+     * ContextFactory that is bound to an implicit object name.  This
+     * returns an object that can be manipulated by the expression
+     * engine.
+     */
+    public static class PortalContextFactory 
+        extends ContextFactory
+    {
+        public Object getInstance(VariableResolver vr)
+        {
+            return new PortalVariableResolver();
+        }
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/expression/IndexedNameTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/expression/IndexedNameTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,504 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.databinding.expression;
+
+// java imports
+import javax.servlet.jsp.tagext.Tag;
+
+// internal imports
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+import org.apache.beehive.netui.script.common.IDataAccessProvider;
+import org.apache.beehive.netui.tags.naming.IndexedNameInterceptor;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * This TestCase tests the ability of the IndexedNameInterceptor to correctly
+ * rewrite and qualify "container.item" bound expressions into the correct
+ * binding contexts.  The test cases below simulate JSP tag hierarchies that
+ * could appear in JSP pages when data binding HTML <input> elements 
+ * to nested repeaters or grids.  
+ */
+public class IndexedNameTest
+    extends TestCase
+{
+    private static final Logger _logger = Logger.getInstance(IndexedNameTest.class);
+
+    private IndexedNameTestCase[] _cases = new IndexedNameTestCase[]
+    {
+        new IndexedNameTestCase("{actionForm.beans[42]}", new ILeafFactory()
+            {
+                public Leaf createLeaf(IExpressionQualifier qualifier)
+                {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans}", 42);
+                    return new Leaf(qualifier, root, "{container.item}");
+                }
+            }
+                                ),
+        new IndexedNameTestCase("{actionForm.beans[42].foo}", new ILeafFactory()
+            {
+                public Leaf createLeaf(IExpressionQualifier qualifier)
+                {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans}", 42);
+                    return new Leaf(qualifier, root, "{container.item.foo}");
+                }
+            }
+                                    ),
+        new IndexedNameTestCase("{actionForm.beans[42].beans2[43].foo}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans}", 42);
+                    SimpleDataAccessProvider branch = new SimpleDataAccessProvider(qualifier, root, "{container.item.beans2}", 43);
+                    return new Leaf(qualifier, branch, "{container.item.foo}");
+                }
+            }
+                                    ),
+        new IndexedNameTestCase("{pageFlow.beans2[44].foo}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{container.item}", 43);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{pageFlow.beans2}", 44);
+                    return new Leaf(qualifier, branch2, "{container.item.foo}");
+                }
+            }
+                                    ),
+        new IndexedNameTestCase("{pageFlow.beans3[45].foo}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{container.item}", 43);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item}", 44);
+                    SimpleDataAccessProvider branch3 = new SimpleDataAccessProvider(qualifier, branch2, "{pageFlow.beans3}", 45);
+                    return new Leaf(qualifier, branch3, "{container.item.foo}");
+                }
+            }
+                                    ),
+        new IndexedNameTestCase("{pageFlow.beans[43].values2[44].values3[45].foo}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{pageFlow.beans}", 43);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item.values2}", 44);
+                    SimpleDataAccessProvider branch3 = new SimpleDataAccessProvider(qualifier, branch2, "{container.item.values3}", 45);
+                    return new Leaf(qualifier, branch3, "{container.item.foo}");
+                }
+            }
+                                    ),
+        new IndexedNameTestCase("{actionForm.beans[42].values1[43].values2[44].values3[45].foo}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{container.item.values1}", 43);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item.values2}", 44);
+                    SimpleDataAccessProvider branch3 = new SimpleDataAccessProvider(qualifier, branch2, "{container.item.values3}", 45);
+                    return new Leaf(qualifier, branch3, "{container.item.foo}");
+                }
+            }
+                                ),
+        new IndexedNameTestCase("{actionForm.beans[42].foo}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans}", 42);
+                    SimpleDataAccessProvider branch = new SimpleDataAccessProvider(qualifier, root, "{container.item.beans2}", 43);
+                    return new Leaf(qualifier, branch, "{container.container.item.foo}");
+                }
+            }
+                                ),
+
+        new IndexedNameTestCase("{actionForm.beans1[42].foo}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans1}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{container.item.beans2}", 43);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item.beans3}", 43);
+                    return new Leaf(qualifier, branch2, "{container.container.container.item.foo}");
+                }
+            }
+                                ),
+        new IndexedNameTestCase("{pageFlow.beans1[42].foo}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans1}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{pageFlow.beans1}", 42);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item.beans2}", 43);
+                    SimpleDataAccessProvider branch3 = new SimpleDataAccessProvider(qualifier, branch2, "{container.item.beans3}", 43);
+                    return new Leaf(qualifier, branch3, "{container.container.container.item.foo}");
+                }
+            }
+                                ),
+        new IndexedNameTestCase("{pageFlow.beans1[42].foo.container.bar}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans1}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{pageFlow.beans1}", 42);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item.beans2}", 43);
+                    SimpleDataAccessProvider branch3 = new SimpleDataAccessProvider(qualifier, branch2, "{container.item.beans3}", 43);
+                    return new Leaf(qualifier, branch3, "{container.container.container.item.foo.container.bar}");
+                }
+            }
+                                ),
+        new IndexedNameTestCase("{pageFlow.beans1[42].foo.container.item}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans1}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{pageFlow.beans1}", 42);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item.beans2}", 43);
+                    SimpleDataAccessProvider branch3 = new SimpleDataAccessProvider(qualifier, branch2, "{container.item.beans3}", 43);
+                    return new Leaf(qualifier, branch3, "{container.container.container.item.foo.container.item}");
+                }
+            }
+                                ),
+        new IndexedNameTestCase("{pageFlow.item.foo.container.item}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans1}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{pageFlow.beans1}", 42);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item.beans2}", 43);
+                    SimpleDataAccessProvider branch3 = new SimpleDataAccessProvider(qualifier, branch2, "{container.item.beans3}", 43);
+                    return new Leaf(qualifier, branch3, "{pageFlow.item.foo.container.item}");
+                }
+            }
+                                ),
+        new IndexedNameTestCase("{pageFlow.container.item.foo.container.item}", new ILeafFactory()
+            {   
+                public Leaf createLeaf(IExpressionQualifier qualifier) {
+                    SimpleDataAccessProvider root = new SimpleDataAccessProvider(qualifier, null, "{actionForm.beans1}", 42);
+                    SimpleDataAccessProvider branch1 = new SimpleDataAccessProvider(qualifier, root, "{pageFlow.beans1}", 42);
+                    SimpleDataAccessProvider branch2 = new SimpleDataAccessProvider(qualifier, branch1, "{container.item.beans2}", 43);
+                    SimpleDataAccessProvider branch3 = new SimpleDataAccessProvider(qualifier, branch2, "{container.item.beans3}", 43);
+                    return new Leaf(qualifier, branch3, "{pageFlow.container.item.foo.container.item}");
+                }
+            }
+                                )
+    };
+    
+    public void testRewrite()
+        throws Throwable
+    {
+        runSuite(new NetUIELExpressionLanguage());
+    }
+
+    protected final void runSuite(ExpressionEngine qualifier)
+        throws Throwable
+    {
+        for(int i = 0; i < _cases.length; i++)
+        {
+            try
+            {
+                IndexedNameTestCase test = _cases[i];
+                test.setExpressionQualifier(qualifier);
+                String exp = test.getExpected();
+                ILeafFactory factory = test.getLeafFactory();
+                Leaf leaf = factory.createLeaf(qualifier);
+                
+                TestNameInterceptor interceptor = new TestNameInterceptor(leaf, qualifier.getEngineName());
+                
+                String act = interceptor.rewriteName(leaf.getName(),null);
+                
+                System.out.println("**** act: " + act);
+                System.out.println("**** exp: " + exp);
+                
+                if(!exp.equals(act))
+                    throw new IllegalStateException("The expected (" + exp + ") and actual (" + act + "} values do not match for test case [" + i + "]");
+            }
+            // this generally poor practice, but because multiple test cases are run for this method, 
+            // we need to catch AssertionError in order to know which test case failed.  
+            catch(Throwable t)
+            {
+                t.printStackTrace();
+                throw t;
+            }
+        }
+    }
+
+    /**
+     * Simple interface used to qualify an given expression into a
+     * a particular language.  The expectation is that 'expr' is of the
+     * form {...}
+     */
+    public interface IExpressionQualifier
+    {
+        public String qualify(String expr);
+    }
+    
+    /**
+     * Type that represents an expression language and expression
+     * syntax.  The engine name is used to get an expression evaluator
+     * for a particular engine type.  This type also implements
+     * the ExpressionQualifier interface, which qualifies an
+     * expression string into the syntax expected by the 
+     * engine.  
+     *
+     * Note, this makes the assumption that all expressions are
+     * of the same syntax between the ${...} or {...} tokens.
+     */
+    public static abstract class ExpressionEngine
+        implements IExpressionQualifier
+    {
+        private String _engine = null;
+        public ExpressionEngine(String engine) {_engine = engine;}
+        public String getEngineName() {return _engine;}
+    }
+
+    /**
+     * Implementation for the NetUIEL from 8.1.2
+     */
+    public static class NetUIELExpressionLanguage
+        extends ExpressionEngine
+    {
+        public NetUIELExpressionLanguage() {super("netuiel");}
+        public String qualify(String expr) {return expr;}
+    }
+
+    /**
+     * Implementation for WLW 8.1 GA, which only used XScript.
+     */
+    public static class XScriptExpressionLanguage
+        extends ExpressionEngine
+    {
+        public XScriptExpressionLanguage() {super("xscript");}
+        public String qualify(String expr) {return expr;}
+    }
+
+    /**
+     * Type that represents a test case for indexed name rewriting.
+     * This class contains an expected outcome String and a LeafFactory
+     * which is used to create a hierarchy of IDataAccessProviders.  
+     * The IDataAccessProvider hierarchy mimics that which the JSP
+     * tags create when there are nested repeaters / grids in a JSP page.
+     */
+    public static class IndexedNameTestCase
+        extends ExpressionQualifiable
+    {
+        private String _expected = null;
+        private ILeafFactory _factory = null;
+        
+        public IndexedNameTestCase(String expected, ILeafFactory factory)
+        {
+            _expected = expected;
+            _factory = factory;
+        }
+
+        public String getExpected()
+        {
+            return qualify(_expected);
+        }
+
+        public ILeafFactory getLeafFactory()
+        {
+            return _factory;
+        }
+    }
+
+    /**
+     * An extension to the {@link IndexedNameInterceptor} that 
+     * overrides the getCurrentProvider and getExpressionEvaluator
+     * methods.  This decopules the IndexedNameInterceptor from the 
+     * JSP tags and from the NetUI config file, which dictates the 
+     * expression language in use for a page.
+     */
+    public static class TestNameInterceptor
+        extends IndexedNameInterceptor
+    {
+        private Leaf _leaf = null;
+        private String _engine = null;
+
+        public TestNameInterceptor(Leaf leaf, String engine)
+        {
+            _leaf = leaf;
+            _engine = engine;
+        }
+
+        protected IDataAccessProvider getCurrentProvider(Tag currentTag)
+        {
+            return _leaf.getProvider();
+        }
+
+        protected ExpressionEvaluator getExpressionEvaluator()
+        {
+            if(_logger.isDebugEnabled()) _logger.debug("get expression evaluator named \"" + _engine + "\"");
+
+            return ExpressionEvaluatorFactory.getInstance(_engine);
+        }
+    }
+
+    /**
+     * Base type for a class that needs to be able
+     * to qualify an expression using an IExpressionQualifier.
+     */
+    public abstract static class ExpressionQualifiable
+    {
+        private IExpressionQualifier _qualifier = null;
+
+        public ExpressionQualifiable() {}
+
+        public ExpressionQualifiable(IExpressionQualifier qualifier)
+        {
+            _qualifier = qualifier;
+        }
+
+        public void setExpressionQualifier(IExpressionQualifier qualifier)
+        {
+            _qualifier = qualifier;
+        }
+
+        protected String qualify(String expression)
+        {
+            return _qualifier.qualify(expression);
+        }
+    }
+
+    /**
+     * Type that represents a leaf in a IDataAccessProvider hierarchy.
+     * In JSP tag parlance, this class is equivalent to the <netui:label> in this example:
+     *
+     * <netui-data:repeater dataSource="{actionForm.customers}">
+     *     <netui:label value="{container.item.name}"/>
+     * </netui-data:repeater>
+     *
+     * It is a root that may be parented by a IDataAccessProvider hierarchy.
+     */
+    public static class Leaf
+        extends ExpressionQualifiable
+    {
+        private IDataAccessProvider _provider = null;
+        private String _dataSource = null;
+        
+        public Leaf(IExpressionQualifier qualifier, IDataAccessProvider provider, String dataSource)
+        {
+            super(qualifier);
+
+            _provider = provider;
+            _dataSource = dataSource;
+        }
+        
+        public void setExpressionQualifier(IExpressionQualifier qualifier)
+        {
+            super.setExpressionQualifier(qualifier);
+            ((SimpleDataAccessProvider)_provider).setExpressionQualifier(qualifier);
+        }
+
+        public String getName()
+        {
+            return qualify(_dataSource);
+        }
+
+        public IDataAccessProvider getProvider()
+        {
+            return _provider;
+        }
+    }
+
+    /**
+     * Non-tag implementation of a data access provider that mimics a 
+     * hierarchy of IDataAccessProviders as would exist in a hierarchy 
+     * of repeaters.
+     */
+    public static class SimpleDataAccessProvider
+        extends ExpressionQualifiable
+        implements IDataAccessProvider
+    {
+        private IDataAccessProvider _parent = null;
+        private String _dataSource = null;
+        private int _currentIndex = 42;
+        
+        public SimpleDataAccessProvider(IExpressionQualifier qualifier, IDataAccessProvider parent, String dataSource, int currentIndex)
+        {
+            super(qualifier);
+
+            _parent = parent;
+            _dataSource = dataSource;
+            _currentIndex = currentIndex;
+        }
+
+        public int getCurrentIndex()
+        { 
+            return _currentIndex;
+        }
+        
+        public Object getCurrentItem()
+        { 
+            return new String("some current item");
+        }
+        
+        public String getDataSource()
+        { 
+            return qualify(_dataSource);
+        }
+        
+        public Object getCurrentMetadata()
+        { 
+            return null;
+        }
+        
+        public IDataAccessProvider getProviderParent()
+        { 
+            return _parent;
+        }
+        
+        /**
+         * This method indicates that the expression of the repeater is bound into a
+         * client based context.
+         * @return <code>true</code> if the expression of this is bound on the client.
+         */
+        public boolean isBindingOnClient()
+        {
+            return false;
+        }
+
+        public void setDataSource(String dataSource)
+        { 
+        }
+    }
+
+    /**
+     * Simple interface that is implemented with anonymous inner 
+     * classes in a test case.
+     */
+    public static interface ILeafFactory
+    {
+        public Leaf createLeaf(IExpressionQualifier qualifier);
+    }
+
+    public IndexedNameTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(IndexedNameTest.class);
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+
+    protected void setUp() {}
+    protected void tearDown() {}
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle1.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle1.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,3 @@
+simpleKey=This is a simple message.
+localHello=Hello from the USA.
+noi18nMessage=This message is never localized
\ No newline at end of file

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle1_de.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle1_de.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1 @@
+localHello=Hallo von Deutschland
\ No newline at end of file

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle2.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/databinding/testdata/bundle2.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+bundle2Message=bundle2MessageValue
+whereverYouAre=Hello from Colorado
\ No newline at end of file

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,156 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports 
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.PageContext;
+
+// internal imports
+import org.apache.beehive.netui.test.beans.SimpleTypeActionForm;
+import org.apache.beehive.netui.test.beans.ComplexTypeActionForm;
+import org.apache.beehive.netui.test.servlet.ServletFactory;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+import org.apache.beehive.netui.script.common.ImplicitObjectBean;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.taglib.html.Constants;
+
+/**
+ * Test hierarchy:
+ */
+public abstract class AbstractExpressionTest
+    extends TestCase
+{
+    protected PageContext _fauxPageContext = null;
+    protected ServletRequest _fauxRequest = null;
+    protected ServletResponse _fauxResponse = null;
+    protected ActionForm _fauxActionForm = null;
+    protected SimpleTypeActionForm _simpleActionForm = null;
+    protected ComplexTypeActionForm _complexActionForm = null;
+
+    protected abstract ExpressionEvaluator getExpressionEvaluator();
+
+    protected static ImplicitObjectBean initContexts(ServletRequest request, ServletResponse response, ActionForm form)
+    {
+        ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(request, response, form);
+        return bean;
+    }
+
+    protected static ImplicitObjectBean initContexts(PageContext pc)
+    {
+        ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(pc, null);
+        return bean;
+    }
+
+    protected Object evaluateExpression(String expression, PageContext pc)
+        throws Exception
+    {
+        ImplicitObjectBean bean = initContexts(pc);
+
+        return getExpressionEvaluator().evaluateStrict(expression, bean);
+    }
+
+    protected void evaluateUpdateExpression(String expression, Object value, ServletRequest request, ServletResponse response, ActionForm form)
+        throws Exception
+    {
+        evaluateUpdateExpression(expression, value, request, response, form, true);
+    }
+
+    protected void evaluateUpdateExpression(String expression, Object value, ServletRequest request, ServletResponse response, ActionForm form, boolean requestParameter)
+        throws Exception
+    {
+        ImplicitObjectBean bean = initContexts(request, response, form);
+        getExpressionEvaluator().update(expression, value, bean, requestParameter);
+    }
+
+    protected void setUp()
+    {
+        _fauxPageContext = ServletFactory.getPageContext();
+        _fauxRequest = _fauxPageContext.getRequest();
+        _fauxResponse = _fauxPageContext.getResponse();
+
+        _simpleActionForm = new SimpleTypeActionForm();
+        _complexActionForm = new ComplexTypeActionForm();
+        _fauxActionForm = _simpleActionForm;
+
+        _fauxPageContext.getRequest().setAttribute("simpleBean", _simpleActionForm);
+        _fauxPageContext.getRequest().setAttribute("complexBean", _complexActionForm);
+        
+        // put the simpleBean under the Constants.BEAN_KEY
+        useForm("simpleBean");
+
+        org.apache.beehive.netui.util.config.ConfigUtil.loadDefault();
+    }
+
+    protected void tearDown()
+    {
+        _fauxPageContext = null;
+        _fauxRequest = null;
+        _fauxResponse = null;
+    }
+
+    protected void useForm(String formName)
+    {
+        HttpServletRequest request = (HttpServletRequest)_fauxPageContext.getRequest();
+        Object form = request.getAttribute(formName);
+        assert form instanceof ActionForm;
+
+        useForm(request, (ActionForm)form);
+    }
+
+    protected void useForm(ServletRequest request, ActionForm actionForm)
+    {
+        request.setAttribute(Constants.BEAN_KEY, actionForm);
+    }
+
+    protected ActionForm getActionForm()
+    {
+        HttpServletRequest request = (HttpServletRequest)_fauxPageContext.getRequest();
+        return (ActionForm)request.getAttribute(Constants.BEAN_KEY);
+    }
+
+    public AbstractExpressionTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(AbstractExpressionTest.class);
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,78 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports
+import java.util.Iterator;
+import java.util.HashMap;
+import java.util.Map;
+
+// internal imports
+import org.apache.beehive.netui.test.beans.IProduct;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Unit tests for XScript expression parsing.
+ */
+public abstract class AccessTest
+    extends AbstractExpressionTest
+{
+    public void testAccess()
+        throws Exception
+    {
+        String productName = " Mountain Bike Frame";
+
+        _fauxPageContext.setAttribute("iproduct", IProduct.Factory.getInstance(productName, 2500.00));
+
+        Object result = evaluateExpression("{pageContext.iproduct.name}", _fauxPageContext);
+        assertEquals(productName, result);
+    }
+
+    public void testMapAccess()
+        throws Exception
+    {
+        Map map = new HashMap();
+        map.put("product1", IProduct.Factory.getInstance("Widget Crankset", 400.00));
+        map.put("product2", IProduct.Factory.getInstance("Widget Bottom Bracket", 60.00));
+
+        Iterator iterator = map.entrySet().iterator();
+        while(iterator.hasNext())
+        {
+            Object item = iterator.next();
+            System.out.println("item type: " + item.getClass().getName());
+
+            java.beans.PropertyDescriptor[] pds = java.beans.Introspector.getBeanInfo(item.getClass()).getPropertyDescriptors();
+
+            _fauxPageContext.setAttribute("currentItem", item);
+
+            Object key = evaluateExpression("{pageContext.currentItem.key}", _fauxPageContext);
+            Object value = evaluateExpression("{pageContext.currentItem.value}", _fauxPageContext);
+            System.out.println("key: " + key + " value: " + value);
+        }
+    }
+
+    public AccessTest(String name)
+    {
+        super(name);
+    }
+
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,91 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports
+import java.util.Locale;
+
+// internal imports
+import org.apache.beehive.netui.script.common.BundleContext;
+import org.apache.beehive.netui.script.common.BundleMap;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ *
+ */
+public abstract class BundleScriptTest
+    extends AbstractExpressionTest
+{
+
+    public void testSimple()
+        throws Exception
+    {
+        BundleContext bc = createBundleContext();
+        BundleMap bundleMap = new BundleMap((HttpServletRequest)_fauxPageContext.getRequest(), null, bc);
+        _fauxPageContext.setAttribute("bundle", bundleMap);
+
+        bc.addBundle("bundle1", "org/apache/beehive/netui/test/databinding/testdata/bundle1");
+        bc.addBundle("bundle2", "org/apache/beehive/netui/test/databinding/testdata/bundle2");
+
+        String val = (String)evaluateExpression("{bundle.bundle1.simpleKey}", _fauxPageContext);
+        assertEquals("This is a simple message.", val);
+
+        val = (String)evaluateExpression("{bundle.bundle2.bundle2Message}", _fauxPageContext);
+        assertEquals("bundle2MessageValue", val);
+    }
+
+    public void testLocaleSupport()
+        throws Exception
+    {
+        Locale germany = Locale.GERMAN;
+        BundleContext bc = createBundleContext();
+
+        bc.addBundle("bundle1", "org/apache/beehive/netui/test/databinding/testdata/bundle1", germany);
+        bc.addBundle("bundle2", "org/apache/beehive/netui/test/databinding/testdata/bundle2");
+
+        BundleMap bundleMap = new BundleMap((HttpServletRequest)_fauxPageContext.getRequest(), null, bc);
+        _fauxPageContext.setAttribute("bundle", bundleMap);
+
+        String val = (String)evaluateExpression("{bundle.bundle1.localHello}", _fauxPageContext);
+        assertEquals("Hallo von Deutschland", val);
+
+        val = (String)evaluateExpression("{bundle.bundle2.whereverYouAre}", _fauxPageContext);
+        assertEquals("Hello from Colorado", val);
+
+        val = (String)evaluateExpression("{bundle.bundle1.noi18nMessage}", _fauxPageContext);
+        assertEquals("This message is never localized", val);
+    }
+
+    private BundleContext createBundleContext()
+        throws Exception
+    {
+        return new BundleContext();
+    }
+
+    public BundleScriptTest(String name)
+    {
+        super(name);
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,355 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.test.beans.FooJavaBean;
+import org.apache.beehive.netui.test.beans.SimpleTypeActionForm;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Unit tests for XScript expression parsing.
+ */
+public abstract class ExpressionTest
+    extends AbstractExpressionTest
+{
+    private static final Logger _logger = Logger.getInstance(ExpressionTest.class);
+
+    // expression, shouldParse, isExpression, containsExpression, 
+    Object[][] isExprData = 
+    {
+        {"{pageContext.foo.bar.baz.property}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        {"{pageContext.foo.bar.baz[42].property.nextProperty}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        {"\\{pageContext.foo.bar.baz.property}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},
+        {"{pageContext.foo.bar.baz.property\\}", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {"{pageContext.foo.bar.baz['\\\"%$#@!']}", Boolean.FALSE, Boolean.TRUE, Boolean.TRUE},
+
+        {"{pageContext.foo.bar.baz[\"\\\"\\\"\\\"\\\"\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        {"{pageContext.foo.bar.baz[\"\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        {"{pageContext.foo.bar.baz[\"'\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE}, // Radar bug: 16763
+        {"{pageContext.foo.bar.baz['\"']}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE}, // Radar bug: 16763
+        {"{pageContext.foo.bar.baz[\"%$#@!\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+
+        {"{", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, "{"},
+        {"{{", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, "{{"},
+        {"\\{", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE, "\\{"},
+        {"\\}", Boolean.TRUE, Boolean.FALSE, Boolean.FALSE, "\\}"},
+        {"}", Boolean.TRUE, Boolean.FALSE, Boolean.FALSE, "}"},
+        {"}}", Boolean.TRUE, Boolean.FALSE, Boolean.FALSE, "}}"},
+        {"", Boolean.TRUE, Boolean.FALSE, Boolean.FALSE, ""},
+        {"{pageContext.bean._Property}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+
+        // Radar 30458
+        {"{ pageContext.bean}", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {"{pageContext. bean}", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {"{pageContext.bean }", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {"{pageContext.bean@}", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {"{pageflub.bean@}", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {"{}", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {"{@}", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {"{ }", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+
+        // contain expressions, !expressions
+        {" {pageContext.foo.bar.baz.property} ", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},
+        {" {pageContext.foo.bar.baz.property\\} ", Boolean.FALSE, Boolean.FALSE, Boolean.FALSE},
+        {" {actionForm} {pageContext.foo.bar.baz.property\\} {container} ", Boolean.FALSE, null, null},
+        {" {actionForm} \\{pageContext.foo.bar.baz.property\\} {container} ", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},
+        {" {container}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},
+        {"{container} ", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},
+        {"{container}{actionForm} ", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},
+
+        // nested exceptions
+        {"{pageContext.foo.bar.baz[{foo.bar.baz.nest}]}", Boolean.FALSE, null, null},
+        {"{pageContext.foo.bar.baz[\"{}\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        {"{pageContext.foo.bar.baz[\"{\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        {"{pageContext.foo.bar.baz[\"}\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        {"{pageContext.foo.bar.baz[\"'\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE}, // FAIL 1/4/2003 -- fixed in AttributeParser
+        {"{pageContext.foo.bar.baz[\"\\\"\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE}, // FAIL 1/4/2003 -- fixed in AttributeParser
+        {"{pageContext.foo.bar.baz[\"{foo.bar.baz}\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},        
+        {"{pageContext.foo.bar.baz[\"\\\\{foo.bar.{baz.nest}}\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        {"{pageContext.foo.bar.baz[\"\\\\{foo.bar.baz.nest}\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+
+        {"this = {pageContext.foo}'", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},
+        {"this = {pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},
+        {"this = /{pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = \\{pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = / {pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = \\ {pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = @{pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = *{pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = ({pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = [{pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = [{pageContext.foo}}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = [{pageContext.foo}\"", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"this = [{pageContext.foo}\'", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+        {"/{pageFlow.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, 
+
+        {"{pageContext.foo.bar.baz['\"']}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE}, // FAIL 1/4/2003 -- fixed 05/13-2003
+        {"this = '{pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, // FAIL 4/21/2003
+        {"this = \"{pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, // FAIL 4/21/2003
+        {"this = \'{pageContext.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE}, // FAIL 4/21/2003
+
+        {"{pageContext.files[\"/foo\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},  
+        {"{pageContext.files[\"{foo\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+
+        // ============================
+        // Broken test cases
+        // ============================
+
+        // @bug: xscript parser -- shouldn't accept {}
+        //{"{}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+        // @bug: netuiel / xscript?  accepted by the latter but not the former -- the string litreal doesn't handle \\{ but \\\\{ works
+        //{"{pageContext.foo.bar.baz[\"\\{foo.bar.baz.nest}\"]}", Boolean.TRUE, Boolean.TRUE, Boolean.TRUE},
+
+        // @bug: netuiel parser -- \\{ is broken in el
+        {"\\\\{pageFlow.foo}", Boolean.TRUE, Boolean.FALSE, Boolean.TRUE},  // FAIL 4/21/2003 -- fixed 05/13-2003
+    };
+
+    public void testIsContainsExpression()
+        throws Exception
+    {
+        Object[][] data = isExprData;
+
+        ExpressionEvaluator ee = getExpressionEvaluator();
+        for(int i = 0; i < data.length; i++)
+        {
+            String expr = (String)data[i][0];
+            boolean shouldParse = ((Boolean)data[i][1]).booleanValue();
+            boolean shouldBeExpr = false;
+            boolean shouldContainExpr = false;
+
+            if(shouldParse)
+            {
+                shouldBeExpr = ((Boolean)data[i][2]).booleanValue();
+                shouldContainExpr = ((Boolean)data[i][3]).booleanValue();
+            }
+
+            if(_logger.isDebugEnabled()) _logger.debug("Expression \"" + expr + "\" should parse \"" + shouldParse + "\"");
+
+            try
+            {
+                boolean isExpr = ee.isExpression(expr);
+
+                // should this have succeeded
+                assertTrue(true == shouldParse);
+
+                // should expr be an expression
+                assertTrue(isExpr == shouldBeExpr);
+
+                boolean containsExpr = ee.containsExpression(expr);
+
+                // should expr contain an expression
+                assertTrue(containsExpr == shouldContainExpr);
+            }
+            catch(Throwable t)
+            {
+                if(_logger.isDebugEnabled()) _logger.debug((shouldParse ? "Failure" : "Expected failure") + " on test [" + i + "] with expression \"" + expr + "\"", t);
+
+                // success!
+                if(!shouldParse) 
+                {
+                    if(_logger.isDebugEnabled()) _logger.debug("Caught expected failure for expression \"" + expr + "\"");
+                    continue;
+                }
+                else throw new ExpressionTestError("An error occurred parsing test [" + i + "] with expression \"" + expr + "\"", t);
+            }
+        }
+    }
+
+    /** Simple sanity check of the FauxPageContext that is used in the rest of these tests */
+    public void testPageContext()
+    {
+        FooJavaBean bean = new FooJavaBean("JunitTestJavaBean");
+        _fauxPageContext.setAttribute("foo", bean);
+        assertEquals(bean.getTextProperty(), ((FooJavaBean)_fauxPageContext.getAttribute("foo")).getTextProperty());
+    }
+
+    /** Test a simple String read */
+    public void testStringRead()
+        throws Exception
+    {
+        FooJavaBean bean = new FooJavaBean("JunitTestJavaBean");
+        _fauxPageContext.setAttribute("foo", bean);
+
+        Object result = evaluateExpression("{pageContext.foo.textProperty}", _fauxPageContext);
+        assertEquals(result, bean.getTextProperty());
+    }
+
+    public void testUnderbarStringRead()
+        throws Exception
+    {
+        Object result = null;
+
+        result = evaluateExpression("{request.simpleBean._StringProperty}", _fauxPageContext);
+        assertTrue(result.equals(((SimpleTypeActionForm)_fauxPageContext.getRequest().getAttribute("simpleBean")).get_StringProperty()));
+        result = null;
+
+        result = evaluateExpression("{request.simpleBean._stringProperty}", _fauxPageContext);
+        assertTrue(result.equals(((SimpleTypeActionForm)_fauxPageContext.getRequest().getAttribute("simpleBean")).get_stringProperty()));
+    }
+
+    public void testNullProperty()
+        throws Exception
+    {
+        Object result = evaluateExpression("{request.simpleBean.nullProperty}", _fauxPageContext);
+        assertNull(result);
+    }
+
+    public void testCharProperty()
+        throws Exception
+    {
+        Object result = evaluateExpression("{request.simpleBean.charProperty}", _fauxPageContext);
+        if(!(result instanceof String && ((String)result).equals("a")))
+            throw new ExpressionTestError("The Character value returned from XScript was not valid.", null);
+    }
+
+    public void testEmptyReadExpr()
+        throws Exception
+    {
+        Object result = evaluateExpression("{}", _fauxPageContext);
+        assertNull(result);
+    }
+
+    /** This is bad; this test passes w/o exception */
+    public void testNonexistentPropertyGet()
+        throws Exception
+    {
+         boolean exception = false;
+         try
+         {
+             evaluateExpression("{request.simpleBean.neverMoreProperty}", _fauxPageContext);
+         }
+         catch(Exception e)
+         {
+             exception = true;
+         }
+         assertTrue(exception);
+    }
+
+    // Bug 15430 -- make sure that the bean property naming convention is enforced
+    public void test15430()
+        throws Exception
+    {
+        Object result = null;
+        boolean pass = false;
+
+        try
+        {
+            result = evaluateExpression("{request.simpleBean.StringProperty}", _fauxPageContext);
+        }
+        catch(Exception e)
+        {
+            pass = true;
+        }
+        assertTrue(pass);
+
+        pass = true;
+        try
+        {
+            result = evaluateExpression("{request.simpleBean.stringProperty}", _fauxPageContext);
+        }
+        catch(Exception e)
+        {
+            pass = false;
+        }
+        assertTrue(pass);
+    }
+
+    public void testStrangeCharacters()
+        throws Exception
+    {
+        Object[][] data = 
+            {
+                {"{request.complexBean.map[\" \"]}", "space"},
+                {"{request.complexBean.map[\"*\"]}", "asterisk"},
+                {"{request.complexBean.map[\"%\"]}", "percent"},
+                {"{request.complexBean.map[\"'\"]}", "single quote"},
+                {"{request.complexBean.map[\"''\"]}", "double, single quote"},
+                {"{request.complexBean.map[' ']}", "space"},
+                {"{request.complexBean.map['*']}", "asterisk"},
+                {"{request.complexBean.map['%']}", "percent"},
+                
+                // @bug: netuiel -- these aren't handled
+                {"{request.complexBean.map['\\'']}", "single quote"}, // how do you do this in XScript? 
+                {"{request.complexBean.map['\\'\\'']}", "double, single quote"},
+                {"{request.complexBean.map['\\\"\\\"']}", "double, double quote"},
+                {"{request.complexBean.map['\\\"']}", "double quote"}, // Radar bug: 16763 -- XScript doesn't handle this case - 02/03/2003 fixed
+                {"{request.complexBean.map[\"\\\"\\\"\"]}", "double, double quote"},
+                {"{request.complexBean.map[\"\\\"\"]}", "double quote"}, // Radar bug: 16763 -- XScript doesn't handle this case - 02/03/2003 fixed
+
+                {"{request.complexBean.map[\"\"]}", "empty string"},
+                {"{request.complexBean.map['']}", "empty string"},
+            };
+
+        int i = 0;
+        String expr = null;
+        try
+        {
+            for(i = 0; i < data.length; i++)
+            {
+                expr = (String)data[i][0];
+                String value = (String)data[i][1];
+
+                Object result = null;
+                result = evaluateExpression(expr, _fauxPageContext);
+
+                if(_logger.isDebugEnabled()) _logger.debug("***** expr: " + expr + " result: " + result + " complex prop: " + _complexActionForm.getMap().get("\""));
+
+                assertTrue(value.equals(result));
+            }
+        }
+        catch(Throwable t)
+        {
+            t.printStackTrace();
+            throw new ExpressionTestError("An error occurred parsing test [" + i + "] with expression \"" + expr + "\"", t);
+        }
+    }
+
+    public void testQualify()
+        throws Exception
+    {
+        String[][] data = 
+            {
+                {"stuff", "actionForm", "{actionForm.stuff}"}
+            };
+
+        ExpressionEvaluator ee = ExpressionEvaluatorFactory.getInstance();
+        for(int i = 0; i < data.length; i++)
+        {
+            String result = ee.qualify(data[i][1], data[i][0]);
+            assertEquals(data[i][2], result);
+        }
+    }
+
+    public ExpressionTest(String name)
+    {
+        super(name);
+    }
+
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTestError.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTestError.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ * An exception that represents a failure executing an expression test.
+ * <br/>
+ * The JUnit <code>AssertionFailedError</code> class does not have a way to 
+ * set a cause, only a message.  This class gives the ability to wrap an 
+ * exception, error, etc in a single exception that contains the test case
+ * that failed with the <code>Throwable</code> cause.
+ */
+public class ExpressionTestError
+    extends Exception
+{
+    public ExpressionTestError(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1105 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports
+import java.math.BigDecimal;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+// internal imports
+import org.apache.beehive.netui.test.beans.SimpleTypeActionForm;
+import org.apache.beehive.netui.test.beans.ComplexTypeActionForm;
+import org.apache.beehive.netui.test.tools.AssertHelper;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+import org.apache.beehive.netui.script.IllegalExpressionException;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import junit.framework.AssertionFailedError;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.struts.action.ActionForm;
+
+/**
+ *
+ */
+public abstract class ExpressionUpdateTest 
+    extends AbstractExpressionTest
+{
+    private static final Logger _logger = Logger.getInstance(ExpressionUpdateTest.class);
+
+    private static final String[] EMPTY_ARRAY = {"", "", ""};
+
+    /* ==========================================================================
+     *
+     * Tests that verify that an update expression is created, executed, and 
+     * that the model reflects these changes correctly.
+     *
+     * ==========================================================================
+     */
+
+    public void testB43011()
+        throws Exception
+    {
+        String[] newValue = {"123", "456"};
+        
+        evaluateUpdateExpression("{actionForm.stringProperty}", newValue, _fauxPageContext.getRequest(), _fauxPageContext.getResponse(), getActionForm());
+        assertEquals(newValue[1], ((SimpleTypeActionForm)getActionForm()).getStringProperty());
+    }
+
+    public void testNonexistentPropertySet()
+        throws Exception
+    {
+        boolean exception = false;
+        try
+        {
+            // boolean array
+            String[] boolStrArray = {"true", "false", "false", "true"};
+            evaluateUpdateExpression("{actionForm.neverMoreProperty}", boolStrArray, _fauxPageContext.getRequest(),
+                                     _fauxPageContext.getResponse(), getActionForm());
+        }
+        catch(Exception e)
+        {
+            exception = true;
+        }
+        assertTrue(exception);
+    }
+
+    public void testComplexUpdateExpressionEvaluation()
+        throws Exception
+    {
+        Object[][] data = complexUpdateData;
+
+        executeComplexTest("complex update expressions", data);
+    }
+    
+    /** Test updates of String -> primitive types */
+    public void testPrimitiveUpdate()
+        throws Exception
+    {
+        Object[][] data = primitiveUpdateData;
+        executeSimpleTest("primitive update", data);
+    }
+
+    public void testPrimitiveWrapperUpdate()
+        throws Exception
+    {
+        Object[][] data = primitiveWrapperUpdateData;
+        executeSimpleTest("primitive wrapper update", data);
+    }
+
+    /** 
+        Test updates of String[] -> primitive[] 
+        Test updates of String[] -> primitiveWrapper[] 
+    */
+    public void testArrayUpdate()
+        throws Exception
+    {
+        Object[][] data = arrayUpdateData;
+        
+        executeSimpleTest("array update test", data);
+    }
+
+    /**
+     * Test for setting complex types into a WebScriptableObject.
+     */
+    public void testSettingComplexTypes()
+        throws Exception
+    {
+        useForm("complexBean");
+
+        ServletRequest request = _fauxPageContext.getRequest();
+        ServletResponse response = _fauxPageContext.getResponse();
+        Object[][] data = settingComplexTypeData;
+        for(int i = 0; i < data.length; i++)
+        {
+            String expr = (String)data[i][0];
+            Object act = (Object)data[i][1];
+            
+            System.out.println("=========================== ????????????? form: " + getActionForm());
+
+            ExpressionEvaluatorFactory.getInstance().update(expr, act, initContexts(request, response, getActionForm()), false);
+
+            Object foo = evaluateExpression(expr, _fauxPageContext);
+
+            assertTrue(act.equals(foo));
+
+            if(_logger.isDebugEnabled()) _logger.debug("returned value: " + evaluateExpression(expr, _fauxPageContext));
+        }
+
+
+        // primitive int test
+        String expr = "{actionForm.intProperty}";
+        evaluateUpdateExpression(expr, "42", request, response, getActionForm());
+        assertTrue(42 == ((Integer)evaluateExpression(expr, _fauxPageContext)).intValue());
+
+        // primitive int[] test
+        expr = "{actionForm.intArrayProperty}";
+        evaluateUpdateExpression(expr, "42", request, response, getActionForm());
+        assertTrue(42 == ((int[])evaluateExpression(expr, _fauxPageContext))[0]);
+
+        // primitive boolean[] test
+        expr = "{actionForm.boolArrayProperty}";
+        evaluateUpdateExpression(expr, new String[] {"true", "true", "false", "true", "true"}, request, response, getActionForm());
+        assertTrue(((boolean[])evaluateExpression(expr, _fauxPageContext))[0]);
+        assertTrue(((boolean[])evaluateExpression(expr, _fauxPageContext))[1]);
+        assertTrue(!((boolean[])evaluateExpression(expr, _fauxPageContext))[2]);
+        assertTrue(((boolean[])evaluateExpression(expr, _fauxPageContext))[3]);
+        assertTrue(((boolean[])evaluateExpression(expr, _fauxPageContext))[4]);
+    }
+
+    public void testWritableContexts()
+        throws Exception
+    {
+        Object[][] data = writableContextData;
+        
+        for(int i = 0; i < data.length; i++)
+        {
+            String expr = (String)data[i][0];
+            try
+            {
+                ExpressionEvaluatorFactory.getInstance().update(expr, null, initContexts(_fauxRequest, _fauxResponse, getActionForm()), true);
+            }
+            catch(Exception e)
+            {
+                e.printStackTrace();
+
+                if(e.getCause() instanceof IllegalExpressionException)
+                    continue;
+            }
+            
+            throw new ExpressionTestError("The expression \"" + expr + "\" did not throw an exception as expected.", null);
+        }
+    }
+
+    public void testDirectListUpdate()
+        throws Exception
+    {
+        useForm("complexBean");
+
+        executeComplexTest("list update", directListUpdate);
+    }
+
+    /** Test indexed property updates */
+    public void testIndexedUpdate()
+        throws Exception
+    {
+        // array initializations
+        ((SimpleTypeActionForm)getActionForm()).setIntWrapperArrayProperty
+            (new Integer[] {new Integer(1), new Integer(2), new Integer(3), new Integer(4), new Integer(5)});
+        
+        executeSimpleTest("indexed update", indexedUpdateData);
+    }
+
+    /* ==========================================================================
+     *
+     * Update test data
+     *
+     * ==========================================================================
+     */
+    private Object[][] writableContextData = 
+    {
+        {"{application.foo}", Boolean.FALSE},
+        {"{container.foo}", Boolean.FALSE},
+        {"{pageContext.foo}", Boolean.FALSE},
+        {"{request.foo}", Boolean.FALSE},
+        {"{session.foo}", Boolean.FALSE},
+        {"{url.foo}", Boolean.FALSE},
+    };
+
+    private Object[][] settingComplexTypeData = 
+    {
+        {"{request.myNewBean}", new SimpleTypeActionForm()},
+        {"{session.anotherBean}", new ComplexTypeActionForm()},
+
+        {"{actionForm.bigDecimal}", new BigDecimal("1234567890.98273835093245")},
+        {"{actionForm.date}", new Date()},
+        {"{actionForm.publicBigDecimal}", new BigDecimal("1234567890.98273835093245")},
+        {"{actionForm.publicDate}", new Date()},
+
+        {"{session.complexBean}", new ComplexTypeActionForm()}, // this must precede the next four tests
+
+        {"{session.complexBean.bigDecimal}", new BigDecimal("1234567890.98273835093245")},
+        {"{session.complexBean.date}", new Date()},
+        {"{session.complexBean.publicBigDecimal}", new BigDecimal("1234567890.98273835093245")},
+        {"{session.complexBean.publicDate}", new Date()},
+        {"{actionForm.array[2].intWrapperProperty}", new Integer(42)},
+        {"{actionForm.array[2].intWrapperArrayProperty}", new Integer[] {new Integer(42)}},
+        // {"{request.complexBean.array[2].intWrapperArrayProperty}", new Integer(42)} // should this work?
+    };
+
+    private Object[][] complexUpdateData = 
+    {
+        // expr, value, update expr, expected object result, comparator
+        {"{actionForm.pubMap.bean.shortProperty}", 
+         "4", 
+         new Short((short)4), 
+         new UpdateComparatorAdaptor()
+            {
+                public void compareComplex(Object expected, ComplexTypeActionForm complexBean) {
+                    assertEquals(((Short)expected).shortValue(),
+                                 ((SimpleTypeActionForm)complexBean.pubMap.get("bean")).getShortProperty());
+
+                }
+            }
+        },
+        {"{actionForm.pubArray[0].shortProperty}", 
+         "7",
+         new Short((short)7), 
+         new UpdateComparatorAdaptor()
+            {
+                public void compareComplex(Object expected, ComplexTypeActionForm complexBean) {
+                    assertEquals(((Short)expected).shortValue(),
+                                 ((SimpleTypeActionForm)complexBean.pubArray[0]).getShortProperty());
+
+                }
+            }
+        }
+    };
+
+    // expression, string update value, Object expected value, comparator
+    private Object[][] primitiveUpdateData = 
+    {
+//         // this test will fail and is used to make sure the harness is running correctly
+//         {"{actionForm.intProperty}", "1234321", new Integer(1234), new UpdateComparatorAdaptor()
+//             {
+//                 public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+//                     assertEquals(actualBean.getIntProperty(), 
+//                                  ((Integer)expected).intValue());
+//                 }
+//             }
+//         },
+        {"{actionForm.boolProperty}", "true", Boolean.TRUE, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getBoolProperty(), 
+                                 ((Boolean)expected).booleanValue());
+                }
+            }},
+        {"{actionForm.boolProperty}", "", Boolean.FALSE, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                        assertEquals(actualBean.getBoolProperty(), 
+                                     ((Boolean)expected).booleanValue());
+                }
+            }
+        },
+        {"{actionForm.byteProperty}", "8", new Byte("8"), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getByteProperty(), 
+                                 ((Byte)expected).byteValue());
+                }
+            }
+        },
+        {"{actionForm.byteProperty}", "", new Byte("0"), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                        assertEquals(actualBean.getByteProperty(), 
+                                     ((Byte)expected).byteValue());
+                }
+            }
+        },
+        {"{actionForm.charProperty}", "Z", new Character('Z'), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getCharProperty(), ((Character)expected).charValue());
+                }
+            },
+        },
+        {"{actionForm.charProperty}", "", new Character('\u0000'), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getCharProperty(), ((Character)expected).charValue());
+                }
+            },
+        },
+        {"{actionForm.doubleProperty}", "3.1415", new Double(3.1415), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    AssertHelper.assertEquals(actualBean.getDoubleProperty(), 
+                                              ((Double)expected).doubleValue());
+                }
+            }
+        },
+        {"{actionForm.doubleProperty}", "", new Double(0.0), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+                {
+                    AssertHelper.assertEquals(actualBean.getDoubleProperty(), 
+                                              ((Double)expected).doubleValue());
+                }
+            }
+        },
+        {"{actionForm.floatProperty}", "3.1415f", new Float(3.1415), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    AssertHelper.assertEquals(actualBean.getFloatProperty(), 
+                                              ((Float)expected).floatValue());
+                }
+            }
+        },
+        {"{actionForm.floatProperty}", "", new Float(0.0), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    AssertHelper.assertEquals(actualBean.getFloatProperty(), 
+                                              ((Float)expected).floatValue());
+                }
+            }
+        },
+        {"{actionForm.intProperty}", "1234321", new Integer(1234321), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getIntProperty(), 
+                                 ((Integer)expected).intValue());
+                }
+            }
+        },
+        {"{actionForm.intProperty}", "1234321 ", new Integer(1234321), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getIntProperty(), 
+                                 ((Integer)expected).intValue());
+                }
+            }
+        },
+        {"{actionForm.intProperty}", " 1234321 ", new Integer(1234321), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getIntProperty(), 
+                                 ((Integer)expected).intValue());
+                }
+            }
+        },
+        {"{actionForm.intProperty}", "    1234321     ", new Integer(1234321), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getIntProperty(), 
+                                 ((Integer)expected).intValue());
+                }
+            }
+        },
+        // @todo: this fails
+//         {"{actionForm.intProperty}", "     ", new Integer(0), new UpdateComparatorAdaptor()
+//             {
+//                 public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+//                     assertEquals(actualBean.getIntProperty(), ((Integer)expected).intValue());
+//                 }
+//             }
+//         },
+//         {"{actionForm.intProperty}", new Character('\t'), new Integer(0), new UpdateComparatorAdaptor()
+//             {
+//                 public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+//                     assertEquals(actualBean.getIntProperty(), ((Integer)expected).intValue());
+//                 }
+//             }
+//         },
+//         {"{actionForm.intProperty}", new Character('\n'), new Integer(0), new UpdateComparatorAdaptor()
+//             {
+//                 public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+//                     assertEquals(actualBean.getIntProperty(), 
+//                                  ((Integer)expected).intValue());
+//                 }
+//             }
+//         },
+//         {"{actionForm.intProperty}", new Character('\r'), new Integer(0), new UpdateComparatorAdaptor()
+//             {
+//                 public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+//                     assertEquals(actualBean.getIntProperty(), 
+//                                  ((Integer)expected).intValue());
+//                 }
+//             }
+//         },
+        {"{actionForm.intProperty}", "", new Integer(0), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getIntProperty(), 
+                                 ((Integer)expected).intValue());
+                }
+            }
+        },
+        {"{actionForm.intProperty}", null, new Integer(0), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getIntProperty(), ((Integer)expected).intValue());
+                }
+            }
+        },
+        // this test fails on jRockit because of precision differences in how the VMs execute
+//         {"{actionForm.longProperty}", "12345678987654321L", new Long(12345678987654321L), new UpdateComparatorAdaptor()
+//             {
+//                 public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+//                 {
+//                     assertEquals(actualBean.getLongProperty(), 
+//                                  ((Long)expected).longValue());
+//                 }
+//             }
+//         },
+        {"{actionForm.longProperty}", "", new Long(0L), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+                {
+                    assertEquals(actualBean.getLongProperty(), 
+                                 ((Long)expected).longValue());
+                }
+            }
+        },
+        {"{actionForm.shortProperty}", "32766", new Short((short)32766), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+                {
+                    assertEquals(actualBean.getShortProperty(), 
+                                 ((Short)expected).shortValue());
+                }
+            }
+        },
+        {"{actionForm.shortProperty}", "", new Short((short)0), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+                {
+                    assertEquals(actualBean.getShortProperty(), 
+                                 ((Short)expected).shortValue());
+                }
+            }
+        }
+    };
+    
+    private Object[][] primitiveWrapperUpdateData = 
+    {
+        {"{actionForm.stringProperty}", "aNewStringProperty", "aNewStringProperty", new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getStringProperty(), expected);
+                }
+            }
+        },
+        {"{actionForm.stringProperty}", "", "", new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getStringProperty(), expected);
+                }
+            }
+        },
+        {"{actionForm.stringProperty}", null, null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertNull(actualBean.getStringProperty());
+                }
+            }
+        },
+        {"{actionForm.booleanWrapperProperty}", "true", Boolean.TRUE, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getBooleanWrapperProperty().booleanValue(), 
+                                 ((Boolean)expected).booleanValue());
+                }
+            }
+        },
+        {"{actionForm.booleanWrapperProperty}", "false", Boolean.FALSE, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getBooleanWrapperProperty().booleanValue(), 
+                                 ((Boolean)expected).booleanValue());
+                }
+            }
+        },
+        {"{actionForm.booleanWrapperProperty}", "", null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+                {
+                    if(expected.equals("") && actualBean.getBooleanWrapperProperty() == null)
+                        return;
+                    else throw new AssertionFailedError("Expected null but found " + actualBean.getBooleanWrapperProperty());
+                }
+            }
+        },
+        {"{actionForm.byteWrapperProperty}", "8", new Byte("8"), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getByteWrapperProperty().byteValue(), 
+                                 ((Byte)expected).byteValue());
+                }
+            }
+        },
+        {"{actionForm.byteWrapperProperty}", "", null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+                {
+                    if(expected.equals("") && actualBean.getByteWrapperProperty() == null)
+                        return;
+                    else throw new AssertionFailedError("Expected null but found " + actualBean.getByteWrapperProperty());
+                }
+            }
+        },
+        {"{actionForm.charWrapperProperty}", "Z", new Character('Z'), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+                {
+                    assertEquals(actualBean.getCharWrapperProperty().charValue(), 
+                                 ((Character)expected).charValue());
+                }
+            }
+        },
+        {"{actionForm.charWrapperProperty}", "", null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    if(expected.equals("") && actualBean.getCharWrapperProperty() == null)
+                        return;
+                    else throw new AssertionFailedError("Expected null but found " + actualBean.getCharWrapperProperty());
+                }
+            }
+        },
+        {"{actionForm.doubleWrapperProperty}", "3.1415", new Double(3.1415), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    AssertHelper.assertEquals(actualBean.getDoubleWrapperProperty().doubleValue(), 
+                                              ((Double)expected).doubleValue());
+                }
+            }
+        },
+        {"{actionForm.doubleWrapperProperty}", "", null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    if(expected.equals("") && actualBean.getDoubleWrapperProperty() == null)
+                        return;
+                    else throw new AssertionFailedError("Expected null but found " + actualBean.getDoubleWrapperProperty());
+                }
+            }
+        },
+        {"{actionForm.floatWrapperProperty}", "3.1415f", new Float(3.1415), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    AssertHelper.assertEquals(actualBean.getFloatWrapperProperty().floatValue(), 
+                                              ((Float)expected).floatValue());
+                }
+            }
+        },
+        {"{actionForm.floatWrapperProperty}", "", null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    if(expected.equals("") && actualBean.getFloatWrapperProperty() == null)
+                        return;
+                    else throw new AssertionFailedError("Expected null but found " + actualBean.getFloatWrapperProperty());
+                }
+            }
+        },
+        {"{actionForm.intWrapperProperty}", "1234321", new Integer(1234321), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getIntWrapperProperty().intValue(), 
+                                 ((Integer)expected).intValue());
+                }
+            }
+        },
+        {"{actionForm.intWrapperProperty}", "", null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    if(expected.equals("") && actualBean.getIntWrapperProperty() == null)
+                        return;
+                    else throw new AssertionFailedError("Expected null but found " + actualBean.getIntWrapperProperty());
+                }
+            }
+        },
+        // this test fails on jRockit because of precision differences in how the VMs execute
+//        {"{actionForm.longWrapperProperty}", "12345678987654321L", new Long(12345678987654321L), new UpdateComparatorAdaptor()
+//              {
+//                  public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+//                 {
+//                     assertEquals(actualBean.getLongWrapperProperty().longValue(), 
+//                                  ((Long)expected).longValue());
+//                 }
+//             }
+//         },
+        {"{actionForm.longWrapperProperty}", "", null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    if(expected.equals("") && actualBean.getLongWrapperProperty() == null)
+                        return;
+                    else throw new AssertionFailedError("Expected null but found " + actualBean.getLongWrapperProperty());
+                }
+            }
+        },
+        {"{actionForm.shortWrapperProperty}", "32766", new Short((short)32766), new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    assertEquals(actualBean.getShortWrapperProperty().shortValue(), 
+                                 ((Short)expected).shortValue());
+                }
+            }
+        },
+        {"{actionForm.shortWrapperProperty}", "", null, new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+                {
+                    if(expected.equals("") && actualBean.getShortWrapperProperty() == null)
+                        return;
+                    else throw new AssertionFailedError("Expected null but found " + actualBean.getShortWrapperProperty());
+                }
+            }
+        }
+    };       
+
+    private Object[][] arrayUpdateData = 
+    {
+        {"{actionForm.stringArrayProperty}", 
+         new String[] {"One", "Two", "Three", "Four", "Five"},
+         null, 
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getStringArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.stringArrayProperty}", 
+         new String[0],
+         null, 
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getStringArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.stringArrayProperty}", 
+         null,
+         null, 
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 assertNull(actualBean.getStringArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.stringArrayProperty}", 
+         new String[] {""},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, ((SimpleTypeActionForm)getActionForm()).getStringArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.stringArrayProperty}", 
+         "singleString",
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 assertEquals("singleString", ((SimpleTypeActionForm)getActionForm()).getStringArrayProperty()[0]);
+             }
+         }
+        },
+        // expression, update values, compare values, 
+        {"{actionForm.boolArrayProperty}", 
+         new String[] {"true", "false", "false", "true"}, 
+         null,
+         new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) 
+                {
+                    AssertHelper.assertEquals((String[])expected, actualBean.getBoolArrayProperty());
+                }
+            }
+        },
+        {"{actionForm.boolArrayProperty}", 
+         EMPTY_ARRAY,
+         new String[] {"false", "false", "false"}, 
+         new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    AssertHelper.assertEquals((String[])expected, actualBean.getBoolArrayProperty());
+                }
+            }
+        },
+        {"{actionForm.byteArrayProperty}", 
+         new String[] {"-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5"}, 
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getByteArrayProperty());        
+             }
+         }
+        },
+        {"{actionForm.byteArrayProperty}", 
+         EMPTY_ARRAY,
+         new String[] {"0", "0", "0"}, 
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getByteArrayProperty());        
+             }
+         }
+        },
+        {"{actionForm.charArrayProperty}", 
+         new String[] {"a", "b", "c", "d"}, 
+         null, 
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getCharArrayProperty()); 
+             }
+         }
+        },
+        {"{actionForm.doubleArrayProperty}",
+         new String[] {"3.1415", "2.718281828"},
+         null, 
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getDoubleArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.floatArrayProperty}",
+         new String[] {"3.1415", "2.718281828"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getFloatArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.floatArrayProperty}",
+         // the f's in the below make a big difference in JavaScript; they're not supported.  :)
+         new String [] {"3.1415f", "2.718281828f"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getFloatArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.intArrayProperty}", 
+         new String[] {"123", "456", "789"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getIntArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.intArrayProperty}", 
+         null,
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 assertNull(actualBean.getIntArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.longArrayProperty}", 
+         new String[] {"-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getLongArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.shortArrayProperty}",
+         new String[] {"-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getShortArrayProperty());
+             }
+         }
+        },
+
+        //
+        // Primitive Wrapper Type Array updates
+        //
+
+        // expression, update values, compare values, 
+        {"{actionForm.boolWrapperArrayProperty}", 
+         new String[] {"true", "false", "false", "true"}, 
+         null,
+         new UpdateComparatorAdaptor()
+            {
+                public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                    AssertHelper.assertEquals((String[])expected, actualBean.getBoolWrapperArrayProperty());
+                }
+            }
+        },
+         {"{actionForm.boolWrapperArrayProperty}", 
+          EMPTY_ARRAY,
+          new String[] {null, null, null},
+          new UpdateComparatorAdaptor()
+             {
+                 public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                     AssertHelper.assertEquals((String[])expected, actualBean.getBoolWrapperArrayProperty());
+                 }
+             }
+         },
+        {"{actionForm.byteWrapperArrayProperty}", 
+         new String[] {"-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5"}, 
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getByteWrapperArrayProperty());        
+             }
+         }
+        },
+        {"{actionForm.byteWrapperArrayProperty}", 
+         EMPTY_ARRAY,
+         new String[] {null, null, null},
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getByteWrapperArrayProperty());        
+             }
+         }
+        },
+        {"{actionForm.charWrapperArrayProperty}", 
+         new String[] {"a", "b", "c", "d"}, 
+         null, 
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getCharWrapperArrayProperty()); 
+             }
+         }
+        },
+        {"{actionForm.doubleWrapperArrayProperty}",
+         new String[] {"3.1415", "2.718281828"},
+         null, 
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getDoubleWrapperArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.floatWrapperArrayProperty}",
+         new String[] {"3.1415", "2.718281828"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getFloatWrapperArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.floatWrapperArrayProperty}",
+         // the f's in the below make a big difference in JavaScript; they're not supported.  :)
+         new String [] {"3.1415f", "2.718281828f"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getFloatWrapperArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.intWrapperArrayProperty}", 
+         new String[] {"123", "456", "789"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getIntWrapperArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.longWrapperArrayProperty}", 
+         new String[] {"-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getLongWrapperArrayProperty());
+             }
+         }
+        },
+        {"{actionForm.shortWrapperArrayProperty}",
+         new String[] {"-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean) {
+                 AssertHelper.assertEquals((String[])expected, actualBean.getShortWrapperArrayProperty());
+             }
+         }
+        }
+    };
+    
+    Object[][] indexedUpdateData = 
+    {
+        {"{actionForm.intWrapperArrayProperty[4]}",
+         new Integer(123),
+         null,
+         new UpdateComparatorAdaptor() {
+             public void compareSimple(Object expected, SimpleTypeActionForm actualBean)
+             {
+                 if(123 == actualBean.getIntWrapperArrayProperty()[4].intValue())
+                     return;
+                 else throw new RuntimeException
+                          ("Error testing indexed updates; received value \"" + actualBean.getIntWrapperArrayProperty()[4] + "\"; expected value 123", null);
+             }
+         }
+        },
+    };
+
+    Object[][] directListUpdate = 
+    {
+        {"{actionForm.list}",
+         new String[] {"foo", "bar", "baz", "blee"},
+         null,
+         new UpdateComparatorAdaptor()
+         {
+             public void compareComplex(Object expected, ComplexTypeActionForm actualBean)
+             {
+                 List list = actualBean.getList();
+//                  System.out.println("list: " + list);
+//                  for(int i = 0; i < list.size(); i++)
+//                  {
+//                      System.out.println("list[" + i + "]: " + list.get(i));
+//                  }
+                 
+                 assertEquals("foo", list.get(list.size()-4));
+                 assertEquals("bar", list.get(list.size()-3));
+                 assertEquals("baz", list.get(list.size()-2));
+                 assertEquals("blee", list.get(list.size()-1));
+             }
+         }
+        }
+    };
+
+    /* ===============================================================
+     *
+     * End Test Cases
+     *
+     * ===============================================================
+     */
+    private void executeSimpleTest(String testName, Object[][] data)
+        throws ExpressionTestError
+    {
+        for(int i = 0; i < data.length; i++)
+        {
+            String expr = (String)data[i][0];
+            Object updateData = data[i][1];
+            Object updatedValue = (data[i][2] == null ? updateData : data[i][2]);
+            UpdateComparator comparator = (UpdateComparator)data[i][3];
+
+            // @TODO: plug-in all evaluation contexts here
+            ServletRequest request = _fauxPageContext.getRequest();
+            ServletResponse response = _fauxPageContext.getResponse();
+
+            try
+            {
+                evaluateUpdateExpression(expr, updateData, request, response, getActionForm());
+                
+                SimpleTypeActionForm simpleBean = (SimpleTypeActionForm)getActionForm();
+
+                comparator.compareSimple(updatedValue, simpleBean);
+            }
+            catch(Throwable e)
+            {
+                throw new ExpressionTestError("An error occurred executing " + testName + " [" + i + "] with expression '" + expr + "'", e);
+            }
+        }
+    }
+
+    private void executeComplexTest(String testName, Object[][] data)
+        throws Exception
+    {
+        useForm("complexBean");
+        
+        for(int i = 0; i < data.length; i++)
+        {
+            String expr = (String)data[i][0];
+            Object value = data[i][1];
+            Object expected = data[i][2];
+            UpdateComparator comparator = (UpdateComparator)data[i][3];
+
+            try
+            {
+                evaluateUpdateExpression(expr, value, _fauxRequest, _fauxResponse, getActionForm());
+
+                ComplexTypeActionForm complexBean = (ComplexTypeActionForm)_fauxRequest.getAttribute("complexBean");
+
+                comparator.compareComplex(expected, complexBean);
+            }
+            catch(Throwable t)
+            {
+                throw new ExpressionTestError("An error occurred executing " + testName + " [" + i + "] with expression '" + expr + "'", t);
+            }
+        }
+    }
+
+    public ExpressionUpdateTest(String name)
+    {
+        super(name);
+    }
+
+    /**
+     * A protected interface that allows the result of an expression update to be compared
+     * against an expected value.  This facilitates a cleaner and more extensible test 
+     * framework as there doesn't have to be code for each type of test.  A comparison
+     * can be made simply by implementing this interface.
+     */
+    protected interface UpdateComparator
+    {
+        public void compareSimple(Object expected, SimpleTypeActionForm simpleBean);
+        public void compareComplex(Object expected, ComplexTypeActionForm complexBean);
+    }
+
+    protected static class UpdateComparatorAdaptor
+        implements UpdateComparator
+    {
+        public void compareSimple(Object expected, SimpleTypeActionForm simpleBean){}
+        public void compareComplex(Object expected, ComplexTypeActionForm complexBean){}
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports
+import javax.servlet.ServletRequest;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public abstract class PageInputTest
+    extends AbstractExpressionTest
+{
+    private static final Logger _logger = Logger.getInstance(PageInputTest.class);
+
+    public void testPageInputs()
+        throws Exception
+    {
+        ServletRequest request = _fauxPageContext.getRequest();
+        
+        String value = "This is a Page Input!";
+        PageFlowUtils.addPageInput("test", value, request);
+        
+        Object result = evaluateExpression("{pageInput.test}", _fauxPageContext);
+        assert result.equals(value);
+    }
+    
+    public PageInputTest(String name)
+    {
+        super(name);
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ParsedExpressionTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ParsedExpressionTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.script.Expression;
+import org.apache.beehive.netui.script.ExpressionEvaluationException;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Unit tests for XScript expression parsing.
+ */
+public abstract class ParsedExpressionTest
+    extends AbstractExpressionTest
+{
+    private Object[][] _data = 
+    {
+        {"{pageContext.foo}", "pageContext"},
+        {"{pageFlow}", "pageFlow"},
+        {"{actionForm[42]}", "actionForm"},
+        {"{actionForm[\"42\"]}", "actionForm"},
+        {"{actionForm[\"42\"]", null},
+        {"nonExpressionText", null},
+    };
+
+    public void testParsedExpression()
+    {
+        for(int i = 0; i < _data.length; i++)
+        {
+            String expr = (String)_data[i][0];
+            String context = (String)_data[i][1];
+            
+            try
+            {
+                Expression act = getExpressionEvaluator().parseExpression(expr);
+                
+                assertEquals("ParsedExpression context failed on test case [" + i + "] with expression \"" + expr + "\" context is \"" + context + "\"", 
+                             context, act.getContext());
+            }
+            catch(Throwable t)
+            {
+                if(context == null)
+                    continue;
+                else throw new RuntimeException("ParsedExpression context test failed in test case [" + i + "].  Cause: " + t);
+            }
+        }
+    }
+
+    public ParsedExpressionTest(String name)
+    {
+        super(name);
+    }
+
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ProcessPopulateTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ProcessPopulateTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,106 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script;
+
+// java imports
+import java.lang.reflect.Proxy;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.ProcessPopulate;
+
+import org.apache.beehive.netui.pageflow.RequestParameterHandler;
+
+import org.apache.beehive.netui.test.servlet.HttpServletRequestHandler;
+import org.apache.beehive.netui.test.servlet.ServletFactory;
+import org.apache.beehive.netui.test.beans.SimpleTypeActionForm;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.struts.taglib.html.Constants;
+
+/**
+ *
+ */
+public class ProcessPopulateTest
+    extends TestCase
+{
+    private ServletRequest _fauxRequest = null;
+    private ServletResponse _fauxResponse = null;
+    private SimpleTypeActionForm _simpleActionForm = null;
+    
+    public static class HelloWorldPrefixHandler
+        implements RequestParameterHandler
+    {
+        public void process(HttpServletRequest request, String key, ProcessPopulate.ExpressionUpdateNode node)
+        {
+            String[] ary = {"hello world!"};
+            node.values = ary;
+        }
+    }
+
+    public void testParameterHandling()
+        throws Exception
+    {
+        ProcessPopulate.registerPrefixHandler("foo", new HelloWorldPrefixHandler());
+        
+        HttpServletRequestHandler reqHandler = (HttpServletRequestHandler)Proxy.getInvocationHandler(_fauxRequest);
+        reqHandler.addParam("wlw-foo:{actionForm.stringProperty}", "some new value");
+
+        // wlw-foo:{request.simple.textProperty} -> request.simple.textProperty="some value"
+        String expression = "{actionForm.stringProperty}";
+        String hExpr = ProcessPopulate.writeHandlerName("foo", expression);
+        ProcessPopulate.populate((HttpServletRequest)_fauxRequest, (HttpServletResponse)_fauxResponse, _simpleActionForm, false);
+
+        assertEquals("hello world!", ((SimpleTypeActionForm)_fauxRequest.getAttribute("simpleBean")).getStringProperty());
+    }
+
+    protected void setUp()
+    {
+        _simpleActionForm = new SimpleTypeActionForm();
+
+        _fauxRequest = ServletFactory.getServletRequest();
+        _fauxRequest.setAttribute("simpleBean", _simpleActionForm);
+        _fauxRequest.setAttribute(Constants.BEAN_KEY, _fauxRequest.getAttribute("simpleBean"));
+
+        _fauxResponse = ServletFactory.getServletResponse();
+    }
+
+    public ProcessPopulateTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(ProcessPopulateTest.class);
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELAccessTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELAccessTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script.el;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.test.script.AccessTest;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class NetUIELAccessTest
+    extends AccessTest
+{
+    protected ExpressionEvaluator getExpressionEvaluator()
+    {
+        return ExpressionEvaluatorFactory.getInstance("netuiel");
+    }
+
+    public NetUIELAccessTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite();
+
+        suite.addTest(new NetUIELAccessTest("testAccess"));
+        suite.addTest(new NetUIELAccessTest("testMapAccess"));
+
+        return suite;
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELBundleScriptTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELBundleScriptTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,61 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script.el;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.test.script.BundleScriptTest;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class NetUIELBundleScriptTest
+    extends BundleScriptTest
+{
+    protected ExpressionEvaluator getExpressionEvaluator()
+    {
+        return ExpressionEvaluatorFactory.getInstance("netuiel"); 
+    }
+
+    public NetUIELBundleScriptTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite();
+        suite.addTest(new NetUIELBundleScriptTest("testSimple"));
+        suite.addTest(new NetUIELBundleScriptTest("testLocaleSupport"));
+        return suite;
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script.el;
+
+// java imports
+import java.io.InputStream;
+
+// internal imports
+import org.apache.beehive.netui.test.script.AbstractExpressionTest;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+import org.apache.beehive.netui.util.config.ConfigUtil;
+
+import com.bea.netuix.servlets.script.PortalVariableResolver.SkinBean;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class NetUIELCustomBindingContextTest
+    extends AbstractExpressionTest
+{
+    public void testCustomBindingContext()
+        throws Exception
+    {
+        // load the NetUI config file so that the custom binding contexts 
+        // are initialized correctly
+        // @todo: there needs to be a general mechanism such that different
+        //        configurations can be passed to the expression engine / etc
+        InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/beehive/netui/qa/util/netui-config.xml");
+        ConfigUtil.init(is);
+        
+        SkinBean skinBean = new SkinBean();
+        Object result = evaluateExpression("{portal.skin.stringProperty}", _fauxPageContext);
+        assertEquals(skinBean.getStringProperty(), result);
+
+        boolean success = false;
+        try
+        {
+            evaluateExpression("{portal.notSkin.stringProperty}", _fauxPageContext);
+        }
+        catch(Exception e)
+        {
+            success = true;
+        }
+
+        assertTrue(success);
+    }
+
+    protected ExpressionEvaluator getExpressionEvaluator()
+    {
+        return ExpressionEvaluatorFactory.getInstance("netuiel");
+    }
+
+    public NetUIELCustomBindingContextTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(NetUIELCustomBindingContextTest.class);
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionObjectTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionObjectTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script.el;
+
+// java imports
+import java.util.List;
+
+// internal imports
+import org.apache.beehive.netui.script.Expression;
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+
+import org.apache.beehive.netui.script.el.ExpressionEvaluatorImpl;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+public class NetUIELExpressionObjectTest
+    extends TestCase
+{
+    private static final Logger _logger = Logger.getInstance(NetUIELExpressionObjectTest.class);
+
+    public void testSimple()
+    {
+        ExpressionEvaluator ee = createExpressionEvaluator();
+        
+        Expression expr = ee.parseExpression("{actionForm.customers[42].orders[12].lineItems[3].name}");
+        
+        List tokens = expr.getTokens();
+        for(int i = 0; i < tokens.size(); i++)
+        {
+            System.out.println("tokens[" + i + "]: " + tokens.get(i));
+        }
+
+        expr = ee.parseExpression("{container.item.foo.bar.blee}");
+        System.out.println("expression from index 2: " + expr.getExpression(2));
+    }
+    
+    private static final ExpressionEvaluator createExpressionEvaluator()
+    {
+        return new ExpressionEvaluatorImpl();
+    }
+
+    public NetUIELExpressionObjectTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(NetUIELExpressionObjectTest.class);
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+
+}
+
+

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script.el;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.test.script.ExpressionTest;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class NetUIELExpressionTest
+    extends ExpressionTest
+{
+    protected ExpressionEvaluator getExpressionEvaluator()
+    {
+        return ExpressionEvaluatorFactory.getInstance("netuiel");
+    }
+
+    public NetUIELExpressionTest(String name)
+    {
+        super(name);
+    }
+
+    public void testNetUIELContainsExpression()
+    {
+        try
+        {
+            ExpressionEvaluator ee = getExpressionEvaluator();
+            System.out.println("contains expression: " + ee.containsExpression("{pageFlow.foo"));
+        }
+        catch(Exception e)
+        {
+            System.out.println("Caught exception doing containsExpression: " + e);
+            e.printStackTrace();
+            throw new RuntimeException("The containsExpression call threw an exception when it shouldn't have", e);
+        }
+    }
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite();
+
+        suite.addTest(new NetUIELExpressionTest("testStrangeCharacters"));
+        suite.addTest(new NetUIELExpressionTest("testUnderbarStringRead"));
+
+        suite.addTest(new NetUIELExpressionTest("testStringRead"));
+        suite.addTest(new NetUIELExpressionTest("testPageContext"));
+        suite.addTest(new NetUIELExpressionTest("testIsContainsExpression"));
+        suite.addTest(new NetUIELExpressionTest("testNullProperty"));
+        suite.addTest(new NetUIELExpressionTest("testNonexistentPropertyGet"));
+        suite.addTest(new NetUIELExpressionTest("test15430"));
+        suite.addTest(new NetUIELExpressionTest("testQualify"));
+        suite.addTest(new NetUIELExpressionTest("testNetUIELContainsExpression"));
+        
+        // @bug: broken -- {} isn't valid
+        //suite.addTest(new NetUIELExpressionTest("testEmptyReadExpr"));
+
+        // @bug: broken -- does the right thing with String and Character
+        //suite.addTest(new NetUIELExpressionTest("testCharProperty"));        
+
+        return suite;
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,70 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script.el;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.test.script.ExpressionUpdateTest;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class NetUIELExpressionUpdateTest
+    extends ExpressionUpdateTest
+{
+    protected ExpressionEvaluator getExpressionEvaluator()
+    {
+        return ExpressionEvaluatorFactory.getInstance("netuiel");
+    }
+    
+    public NetUIELExpressionUpdateTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite();
+
+        suite.addTest(new NetUIELExpressionUpdateTest("testNonexistentPropertySet"));
+        suite.addTest(new NetUIELExpressionUpdateTest("testPrimitiveUpdate"));
+        suite.addTest(new NetUIELExpressionUpdateTest("testPrimitiveWrapperUpdate"));
+        suite.addTest(new NetUIELExpressionUpdateTest("testArrayUpdate"));        
+        suite.addTest(new NetUIELExpressionUpdateTest("testComplexUpdateExpressionEvaluation"));
+        suite.addTest(new NetUIELExpressionUpdateTest("testSettingComplexTypes"));
+        suite.addTest(new NetUIELExpressionUpdateTest("testWritableContexts"));
+        suite.addTest(new NetUIELExpressionUpdateTest("testIndexedUpdate"));
+        suite.addTest(new NetUIELExpressionUpdateTest("testDirectListUpdate"));
+        suite.addTest(new NetUIELExpressionUpdateTest("testB43011"));
+        return suite;
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script.el;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.test.script.PageInputTest;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class NetUIELPageInputTest
+    extends PageInputTest
+{
+    public NetUIELPageInputTest(String name) {super(name);}
+    
+    protected ExpressionEvaluator getExpressionEvaluator()
+    {
+        return ExpressionEvaluatorFactory.getInstance("netuiel"); 
+    }
+    
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite();
+        suite.addTest(new NetUIELPageInputTest("testPageInputs"));
+        return suite;
+    }
+    
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELParsedExpressionTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELParsedExpressionTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.script.el;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.test.script.ParsedExpressionTest;
+
+import org.apache.beehive.netui.script.ExpressionEvaluator;
+import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class NetUIELParsedExpressionTest
+    extends ParsedExpressionTest
+{
+    protected ExpressionEvaluator getExpressionEvaluator()
+    {
+        return ExpressionEvaluatorFactory.getInstance("netuiel");
+    }
+
+    public NetUIELParsedExpressionTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite();
+        suite.addTest(new NetUIELParsedExpressionTest("testParsedExpression"));
+        return suite;
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/tools/AssertHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/tools/AssertHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,296 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.tools;
+
+// java imports
+import java.lang.reflect.Array;
+
+// internal imports
+
+// external imports
+import junit.framework.AssertionFailedError;
+
+/**
+ * Helpers; these are assertEquals(...), etc... methods that JUnit does not provide.
+ *
+ * Many of these methods compare String[] to some Java type and convert the String into
+ * the compare-to type such as a Boolean, boolean, or Float.
+ *  
+ * Note, for the double / floating comparisons, these may fail on some VMs because of precision
+ * comparison problems.
+ */
+public class AssertHelper
+{
+    public static void assertEquals(double expected, double actual)
+    {
+        if(expected != actual)
+            throw new AssertionFailedError("Double assert failed; actual = " + actual + " expected = " + expected);
+    }
+
+    public static void assertEquals(float expected, float actual)
+    {
+        if(expected != actual)
+            throw new AssertionFailedError("Float assert failed; actual = " + actual + " expected = " + expected);
+    }
+
+    public static void assertEquals(String[] exp, String[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(!exp[i].equals(act[i]))
+                throw new AssertionFailedError("The values expected[" + i + "]=\"" + exp[i] + "\" does not equal actual[" + i + "]=\"" + act[i] + "\"");
+        }
+
+        return;        
+    }
+
+    public static void assertEquals(String[] exp, boolean[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Boolean.valueOf(exp[i]).booleanValue() != act[i])
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, int[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Integer.parseInt(exp[i]) != act[i])
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, char[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(exp[i].charAt(0) != act[i])
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, byte[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Byte.valueOf(exp[i]).byteValue() != act[i])
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, double[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Double.parseDouble(exp[i]) != act[i])
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, float[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Float.parseFloat(exp[i]) != act[i])
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, long[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Long.parseLong(exp[i]) != act[i])
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, short[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Short.parseShort(exp[i]) != act[i])
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, Boolean[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if( ((exp[i] == null || exp[i].equals("")) && act[i] == null) )
+                return;
+            else if((exp[i] == null || exp[i].equals("")) && act[i] != null)
+                     throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+            else if(Boolean.valueOf(exp[i]).booleanValue() != act[i].booleanValue())
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, Byte[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if( ((exp[i] == null || exp[i].equals("")) && act[i] == null) )
+                return;
+            else if((exp[i] == null || exp[i].equals("")) && act[i] != null)
+                     throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+            else if (Byte.valueOf(exp[i]).byteValue() != act[i].byteValue())
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, Integer[] act)
+    {
+        checkArrays(exp, act);
+        
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Integer.parseInt(exp[i]) != act[i].intValue())
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, Character[] act)
+    {
+        checkArrays(exp, act);        
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(exp[i].charAt(0) != act[i].charValue())
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, Double[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Double.parseDouble(exp[i]) != act[i].doubleValue())
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, Float[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Float.parseFloat(exp[i]) != act[i].floatValue())
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, Long[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Long.parseLong(exp[i]) != act[i].longValue())
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    public static void assertEquals(String[] exp, Short[] act)
+    {
+        checkArrays(exp, act);
+
+        for(int i = 0; i < exp.length; i++)
+        {
+            if(Long.parseLong(exp[i]) != act[i].shortValue())
+                throw new AssertionFailedError("The values expected[" + i + "]=" + exp[i] + " does not equal actual[" + i + "]=" + act[i]);
+        }
+
+        return;
+    }
+
+    private static void checkArrays(Object exp, Object act)
+    {
+        if(exp == null && act == null)
+            return;
+        else if((exp != null && act == null))
+            throw new AssertionFailedError("The expected array is non-null and the actual array is null.");
+        else if(exp == null && act != null)
+            throw new AssertionFailedError("The actual array is non-null and the expected array is null.");            
+        
+        assert exp.getClass().isArray() == true;
+        assert act.getClass().isArray() == true;
+
+        if(Array.getLength(exp) != Array.getLength(act))
+            throw new AssertionFailedError("The actual and expected value arrays are not of equal length");
+    }
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/config/ConfigTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/config/ConfigTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.util.config;
+
+// java imports
+import java.io.InputStream;
+
+// internal imports
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class ConfigTest
+    extends TestCase
+{
+    private static final Logger logger = Logger.getInstance(ConfigTest.class);
+
+    /**
+     * Ensure that the default v2 NetUI config file parses.
+     */
+    public void testValidate90Config()
+        throws Exception
+    {
+        InputStream is = getClass().getClassLoader().getResourceAsStream("WEB-INF/netui-config.xml");
+        
+        ConfigUtil.init(is);
+        NetuiConfig config = ConfigUtil.getConfig();
+        
+        assert(config != null);
+    }
+
+    public ConfigTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(ConfigTest.class);
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+
+    protected void setUp() {}
+    protected void tearDown() {}
+
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/iterator/IteratorFactoryTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/iterator/IteratorFactoryTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,84 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.util.iterator;
+
+// java imports
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+// internal imports
+import org.apache.beehive.netui.util.iterator.*;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class IteratorFactoryTest
+    extends TestCase
+{
+    public void testMapIterator()
+        throws Exception
+    {
+        Map map = new HashMap();
+
+        Iterator i = null;
+        i = IteratorFactory.makeIterator(map);
+     
+        assertTrue(i instanceof MapIterator);
+        assertNotNull(i);
+    }
+
+    public void testAtomicObjectIterator()
+        throws Exception
+    {
+        String s = new String("atomic");
+        Iterator i = null;
+        i = IteratorFactory.makeIterator(s);
+
+        assertTrue(i instanceof AtomicObjectIterator);
+        assertNotNull(i);
+
+        i = IteratorFactory.makeIterator(null);
+
+        assertNull(i);
+    }
+    
+    public IteratorFactoryTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(IteratorFactoryTest.class);
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+
+    protected void setUp() {}
+    protected void tearDown() {}
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/type/TypeUtilsTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/test/util/type/TypeUtilsTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,220 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.util.type;
+
+// java imports
+import java.math.BigDecimal;
+import java.math.BigInteger;
+// import java.sql.Date; // there are tests for this below, but the name conflicts with java.util.Date
+import java.sql.Timestamp;
+import java.util.Date;
+
+// internal imports
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.type.TypeUtils;
+
+// external imports
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ *
+ */
+public class TypeUtilsTest
+    extends TestCase
+{
+    private static final Logger _logger = Logger.getInstance(TypeUtilsTest.class);
+
+    // String value, target type, should convert, conversion validator
+    private Object[][] _tests =
+    {
+        {"42", int.class, Boolean.TRUE, new Integer(42)},
+        {"42.42", float.class, Boolean.TRUE, new Float(42.42)},
+
+        {"42", Integer.class, Boolean.TRUE, new Integer(42)},
+        {"42.42", Float.class, Boolean.TRUE, new Float(42.42)},
+        {"11/12/2002", java.util.Date.class, Boolean.TRUE, new java.util.Date("11/12/2002")},
+        {"2002-11-12", java.sql.Date.class, Boolean.TRUE, java.sql.Date.valueOf("2002-11-12")},
+        {"2002-11-12 00:00:00.00", java.sql.Timestamp.class, Boolean.TRUE, java.sql.Timestamp.valueOf("2002-11-12 00:00:00.00")},
+        {"18:20:00", java.sql.Time.class, Boolean.TRUE, java.sql.Time.valueOf("18:20:00")},
+
+        {"", Integer.class, Boolean.TRUE, null},
+        {"", Byte.class, Boolean.TRUE, null},
+        {"", Double.class, Boolean.TRUE, null},
+        {"", Float.class, Boolean.TRUE, null},
+        {"", Long.class, Boolean.TRUE, null},
+        {"", Short.class, Boolean.TRUE, null},
+        {"", Character.class, Boolean.TRUE, null},
+        {"", String.class, Boolean.TRUE, ""},
+        {"", BigDecimal.class, Boolean.TRUE, null},
+        {"", BigInteger.class, Boolean.TRUE, null},
+        {null, Integer.class, Boolean.TRUE, null},
+        {null, Byte.class, Boolean.TRUE, null}, 
+        {null, Double.class, Boolean.TRUE, null},
+        {null, Float.class, Boolean.TRUE, null},
+        {null, Long.class, Boolean.TRUE, null}, 
+        {null, Short.class, Boolean.TRUE, null},
+        {null, Character.class, Boolean.TRUE, null},
+        {null, String.class, Boolean.TRUE, null},
+        {null, BigDecimal.class, Boolean.TRUE, null},
+        {null, BigInteger.class, Boolean.TRUE, null},
+
+        {"1234", int.class, Boolean.TRUE, new Integer(1234)},
+        {"-42", byte.class, Boolean.TRUE, new Byte((byte)-42)},
+        {"3.1415", double.class, Boolean.TRUE, new Double(3.1415)},
+        {"42.42", float.class, Boolean.TRUE, new Float(42.42)},
+        {"123456789", long.class, Boolean.TRUE, new Long(123456789)},
+        {"12", short.class, Boolean.TRUE, new Short((short)12)},
+        {"A", char.class, Boolean.TRUE, new Character('A')},
+        {"12345678987654321", BigDecimal.class, Boolean.TRUE, new BigDecimal("12345678987654321")},
+        {"12345678987654321", BigInteger.class, Boolean.TRUE, new BigInteger("12345678987654321")},
+        {"Now is the time for all good men to come to the aid of their country", String.class, Boolean.TRUE, 
+         new String("Now is the time for all good men to come to the aid of their country")},
+
+        {"", int.class, Boolean.TRUE, new Integer(0)},
+        {"", byte.class, Boolean.TRUE, new Byte((byte)0)},
+        {"", double.class, Boolean.TRUE, new Double(0)},
+        {"", float.class, Boolean.TRUE, new Float(0)},
+        {"", long.class, Boolean.TRUE, new Long(0)},
+        {"", short.class, Boolean.TRUE, new Short((short)0)},
+        {"", char.class, Boolean.TRUE, new Character('\u0000')},
+        {null, int.class, Boolean.TRUE, new Integer(0)},
+        {null, byte.class, Boolean.TRUE, new Byte((byte)0)},
+        {null, double.class, Boolean.TRUE, new Double(0)},
+        {null, float.class, Boolean.TRUE, new Float(0)},
+        {null, long.class, Boolean.TRUE, new Long(0)},
+        {null, short.class, Boolean.TRUE, new Short((short)0)},
+        {null, char.class, Boolean.TRUE, new Character('\u0000')},
+
+        // error cases
+        {"2002/11/12", java.util.Date.class, Boolean.FALSE, null},
+        {"2002-11-12 00:00:00.00", java.sql.Date.class, Boolean.FALSE, null},
+        {"11:12:11.00", java.sql.Time.class, Boolean.FALSE, null},
+        {"asdf", java.sql.Timestamp.class, Boolean.FALSE, null},
+
+        {"abc", int.class, Boolean.FALSE, null},
+        {"abc", byte.class, Boolean.FALSE, null},
+        {"abc", double.class, Boolean.FALSE, null},
+        {"abc", float.class, Boolean.FALSE, null},
+        {"abc", long.class, Boolean.FALSE, null},
+        {"abc", short.class, Boolean.FALSE, null},
+        {"abc", int.class, Boolean.FALSE, null},
+        {"abc", byte.class, Boolean.FALSE, null},
+        {"abc", double.class, Boolean.FALSE, null},
+        {"abc", float.class, Boolean.FALSE, null},
+        {"abc", long.class, Boolean.FALSE, null},
+        {"abc", short.class, Boolean.FALSE, null},
+    };
+
+    public void testConverter()
+        throws Exception
+    {
+        int i = 0;
+        try
+        {
+            for(i = 0; i < _tests.length; i++)
+            {
+                String value = (String)_tests[i][0];
+                Class type = (Class)_tests[i][1];
+                boolean valid = ((Boolean)_tests[i][2]).booleanValue();
+                
+                if(_logger.isDebugEnabled()) _logger.debug("tests[" + i + "]: convert \"" + value + "\" to type \"" + type + "\"");
+                
+                Object result = null;
+                try
+                {
+                    result = TypeUtils.convertToObject(value, type);
+                    
+                    if(!valid) 
+                        throw new TestFailedException("The test case [" + i + "] failed because an illegal value \"" + 
+                                                      value + "\" was accepted in converting to type \"" + type + "\"");
+                }
+                catch(Exception e)
+                {
+                    if(!valid) continue;
+                    else if(valid)
+                        throw new TestFailedException("The test case [" + i + "] failed because an illegal value \"" + 
+                                                      value + "\" was accepted in converting to type \"" + type + "\"");
+                }
+                
+                Object target = _tests[i][3];
+                boolean correct = false;
+                if(target instanceof TypeConverterValidator)
+                    correct = ((TypeConverterValidator)target).validate(result);
+                else if(target == null && result == null)
+                    correct = true;
+                else if((target == null && result != null) || (target != null && result == null))
+                    correct = false;
+                else correct = target.equals(result);
+                
+                if(_logger.isDebugEnabled())
+                {
+                    _logger.debug("target.toString(): " + target);
+                    _logger.debug("result.toString(): " + result);
+                }
+                
+                if(!correct)
+                    throw new TestFailedException("The test case [" + i + "] failed because the converted value \"" + 
+                                                  result + "\" did not match the expected value \"" + target + "\" in converting to type \"" + type.getName() + "\"");
+            }
+        }
+        catch(Exception e)
+        {
+            throw new TestFailedException("The test case [" + i + "] failed because an exception was thrown: " + e, e);
+        }
+    }
+
+    interface TypeConverterValidator
+    {
+        boolean validate(Object value);
+    }
+
+    class TestFailedException 
+        extends RuntimeException
+    {
+        TestFailedException(String message)
+        {
+            super(message);
+        }
+
+        TestFailedException(String message, Throwable cause)
+        {
+            super(message, cause);
+        }
+    }
+
+    public TypeUtilsTest(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(TypeUtilsTest.class);
+    }
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.run(suite());
+    }
+
+    protected void setUp() {}
+    protected void tearDown() {}
+}

Added: incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/util/config/ConfigUtil.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/junitTests/org/apache/beehive/netui/util/config/ConfigUtil.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,156 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.util.config;
+
+// java imports
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+// internal imports
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument;
+import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig;
+import org.apache.beehive.netui.util.logging.Logger;
+
+// external imports
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlOptions;
+import org.apache.xmlbeans.XmlError;
+
+/**
+ * <p>
+ * Utility class for reading properties from the NetUI configuration file.
+ * <br/>
+ * <br/>
+ * </p>
+ */
+public final class ConfigUtil
+{
+    // @todo: how should defaults be handled?  in the schema with an empty NetuiConfigDocument used when
+    // the InputStream is null?
+    // @todo: need to change NetuiConfigDocument.NetuiConfig to NetUIConfig
+    // @todo: need to provide a read-only implementation so that users can't edit
+    // the config file on the fly
+
+    private static final Logger _logger = Logger.getInstance(ConfigUtil.class);
+    
+    private static NetuiConfigDocument _config = null;
+
+    /**
+     * <p>
+     * Initialize the NetUI configuration data.
+     * <br/>
+     * <br/>
+     * This method can be called exactly once in a J2EE web application.  The
+     * {@link java.io.InputStream} parameter should reference a 
+     * netui-config.xml file.  If an error occurs loading the configuration
+     * file, a {@link ConfigInitializationException} will be thrown.
+     * </p>
+     * 
+     * @param is the {@link java.io.InputStream} from which to read the configuration file
+     * @throws ConfigInitializationException thrown when an error occurs loading the configuration file
+     * or when the configuration is reinitialized.
+     */
+    public static final void init(InputStream is)
+        throws ConfigInitializationException
+    {
+        // @todo: need to remove this when the IDE upgrades 8.1 webapps to v9.  
+        // in this case, the config file will be provided in 8.1 backcompat mode by the IDE.
+        if(is == null) return;
+
+        if(_config == null)
+        {
+            try
+            {
+                XmlOptions loadOptions = new XmlOptions();
+                loadOptions.setLoadLineNumbers();
+                _config = NetuiConfigDocument.Factory.parse(is, loadOptions);
+            }
+            // XmlException | IOException
+            catch(Exception ex)
+            {
+                assert ex instanceof XmlException || ex instanceof IOException;
+
+                throw new ConfigInitializationException("Unable load the NetUI config file.  Cause: " + ex, ex);
+            }
+        }
+        //else throw new ConfigInitializationException("Config initialization already completed; unable to reload the NetUI config file.");
+        
+
+        // Validate the document.
+        XmlOptions validateOptions = new XmlOptions();
+        ArrayList errorList = new ArrayList();
+        validateOptions.setErrorListener(errorList);
+        boolean isValid = _config.validate(validateOptions);
+                
+        // Throw an exception if the XML is invalid.
+        if (!isValid)
+        {
+            StringBuffer msg = new StringBuffer("Invalid NetUI configuration file.");
+
+            for (int i = 0; i < errorList.size(); i++)
+            {
+                XmlError error = (XmlError)errorList.get(i);
+                msg.append("\n    line ").append(error.getLine()).append(": ");
+                msg.append(error.getMessage()).append(" (").append(error.getCursorLocation().toString()).append(")");
+            }
+
+            throw new ConfigInitializationException(msg.toString());
+        }        
+    }
+
+    public static void loadDefault()
+    {
+        try
+        {
+            ClassLoader cl = (ConfigUtil.class).getClassLoader(); //Thread.currentThread().getContextClassLoader();
+            InputStream is = cl.getResourceAsStream("WEB-INF/netui-config.xml");
+            assert is != null;
+            init(is);
+        }
+        catch(Exception ex)
+        {
+            assert ex instanceof ConfigInitializationException;
+            
+            System.out.println("Caught an exception: " + ex);
+            
+            throw new RuntimeException("Can not load the QA netui-config file from /WEB-INF/netui-config.xml.  Cause: " + ex, ex);
+        }
+    } 
+
+    /**
+     * <p>
+     * Get the NetUI configuration object.  
+     * <br/>
+     * <br/>
+     * </p>
+     *
+     * @return a configuration bean that contains data
+     * parsed from the netui-config.xml file.
+     */
+    public static NetuiConfig getConfig()
+    {
+        if(_config == null)
+        {
+            loadDefault();
+        }
+
+        return _config.getNetuiConfig();
+    }
+}

Added: incubator/beehive/netui/test/src/testBeans/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testBeans/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/TestBeans" default="compile" basedir=".">
+
+    <property name="module.classpath" location="${util.jar};${struts.jar};${servlet24.jar};${jsp20.jar}"/>
+    <property name="module.classes.dir" location="${qa.classes.dir}/${module.name}"/>
+    <property name="module.jar.name" value="${testBeans.jar.name}"/>
+    <property name="module.jar" location="${qa.lib.dir}/${module.jar.name}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath:=${module.classpath}</echo>
+        <echo>debug=${compile.debug}</echo>
+
+        <mkdir dir="${module.classes.dir}"/>
+
+        <javac srcdir="."
+               destdir="${module.classes.dir}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+               source="1.4">
+            <include name="**/*.java"/>
+        </javac>
+
+        <copy todir="${module.classes.dir}">
+          <fileset dir="./">
+                  <exclude name="./build.xml"/>
+                  <exclude name="**/*.java"/>
+              </fileset>
+        </copy>
+
+        <jar jarfile="${module.jar}" basedir="${module.classes.dir}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${module.classes.dir}"/>
+        <delete file="${module.jar}"/>
+    </target>
+
+</project>
+

Added: incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/BarJavaBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/BarJavaBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.beans;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class BarJavaBean 
+{
+    private boolean _bool = false;
+
+    public BarJavaBean()
+    {
+        _bool = true;
+    }
+
+    public boolean getBool()
+    {
+        return _bool;
+    }
+
+    public void setBool(boolean bool)
+    {
+        _bool = bool;
+    }
+
+    public String toString()
+    {
+        return "BarJavaBean (" + System.identityHashCode(this) + ")\n\tbool: " + getBool();
+    }
+}

Added: incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/ComplexTypeActionForm.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/ComplexTypeActionForm.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,152 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.beans;
+
+// java imports
+import java.math.BigDecimal;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class ComplexTypeActionForm
+    extends SimpleTypeActionForm
+{
+    public Map pubMap = null;
+    public List pubList = null;
+    public SimpleTypeActionForm[] pubArray = null;
+
+    public BigDecimal publicBigDecimal = null;
+    public Date publicDate = null;
+
+    private Map _map = null;
+    private List _list = null;
+    private SimpleTypeActionForm[] _array = null;
+    private BigDecimal _bigDecimal = null;
+    private Date _date = null;
+
+    public ComplexTypeActionForm()
+    {
+        _map = new HashMap();
+        _list = new ArrayList();
+        _array = new SimpleTypeActionForm[10];
+
+        pubMap = _map;
+        pubList = _list;
+        pubArray = _array;
+
+        populate();
+    }
+
+    public Map getMap()
+    {
+        return _map;
+    }
+
+    public List getList()
+    {
+        return _list;
+    }
+
+    public SimpleTypeActionForm[] getArray()
+    {
+        return _array;
+    }
+
+    public void setDate(Date date)
+    {
+        _date = date;
+    }
+
+    public Date getDate()
+    {
+        return _date;
+    }
+
+    public void setBigDecimal(BigDecimal bigDecimal)
+    {
+        _bigDecimal = bigDecimal;
+    }
+    
+    public BigDecimal getBigDecimal()
+    {
+        return _bigDecimal;
+    }
+    
+    private void populate()
+    {
+        for(int i = 0; i < sampleData.length; i++)
+        {
+            _list.add(sampleData[i]);
+            _map.put(mapKeys[i], sampleData[i]);
+        }
+
+        for(int i = 0; i < _array.length; i++)
+        {
+            _array[i] = new SimpleTypeActionForm();
+        }
+
+        _map.put("\"", "double quote");
+        _map.put("\"\"", "double, double quote");
+        _map.put("\'", "single quote");
+        _map.put("\'\'", "double, single quote");
+        _map.put("", "empty string");
+        _map.put(" ", "space");
+        _map.put("*", "asterisk");
+        _map.put("%", "percent");
+    }
+
+    private Object[] sampleData = 
+    {new Boolean(true),
+     new Byte((byte)42),
+     new Character('U'),
+     new Double(42.42),
+     new Float(3.14),
+     new Integer(27),
+     new Long(123456789),
+     new Short((short)4),
+     new String("some sample text"),
+     new SimpleTypeActionForm()
+    };
+
+    private String[] mapKeys = 
+    {
+        "booleanWrapper",
+        "byteWrapper",
+        "charWrapper",
+        "doubleWrapper",
+        "floatWrapper",
+        "integerWrapper",
+        "longWrapper",
+        "shortWrapper",
+        "string",
+        "bean"
+    };
+     
+}
+

Added: incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/FooJavaBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/FooJavaBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.beans;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class FooJavaBean 
+{
+    private boolean _bool = false;
+    private int _intProperty = -1;
+    private String _text = null;
+    private BarJavaBean _bar = null;
+
+    public FooJavaBean()
+    {
+        _bar = new BarJavaBean();
+        _text = "ATextProperty";
+    }
+
+    public FooJavaBean(String text)
+    {
+        this();
+        _bar = new BarJavaBean();
+        _text = text;
+    }
+
+    public BarJavaBean getBarJavaBean()
+    {
+        return _bar;
+    }
+    
+    public void setBarJavaBean(BarJavaBean bar)
+    {
+        _bar = bar;
+    }
+    
+    public String getTextProperty()
+    {
+        return _text;
+    }
+
+    public void setTextProperty(String text)
+    {
+        _text = text;
+    }
+
+    public boolean getBooleanProperty()
+    {
+        return _bool;
+    }
+
+    public void setBooleanProperty(boolean bool)
+    {
+        _bool = bool;
+    }
+
+    public int getIntegerProperty()
+    {
+        return _intProperty;
+    }
+
+    public void setIntegerProperty(int intProperty)
+    {
+        _intProperty = intProperty;
+    }
+}

Added: incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/IProduct.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/IProduct.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.beans;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+public interface IProduct 
+{
+    public String getName();
+
+    public double getPrice();
+    public void setPrice(double price);
+
+    public static class Factory
+    {
+        public static Object getInstance(String name, double price)
+        {
+            return new Product(name, price);
+        }
+    }
+}

Added: incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/Product.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/Product.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.beans;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+class Product 
+    implements IProduct
+{
+    private String _name;
+    private double _price;
+
+    Product(String name, double price)
+    {
+        _name = name;
+        _price = price;
+    }
+
+    public String getName() {return _name;}
+
+    public double getPrice() {return _price;}
+    public void setPrice(double price) {_price = price;}
+
+    public String toString()
+    {
+        return _name + " $" + _price;
+    }
+}

Added: incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/SimpleTypeActionForm.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testBeans/org/apache/beehive/netui/test/beans/SimpleTypeActionForm.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,475 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.test.beans;
+
+// java imports
+
+// internal imports
+
+// external imports
+import org.apache.struts.action.ActionForm;
+
+/**
+ * This is a Struts ActionForm that provides properties of primitive types and 
+ * arrays of those primitive types.  The bean is used to test databinding scenarios
+ * that need to work across many different types.
+ *
+ */
+public class SimpleTypeActionForm 
+    extends ActionForm
+{
+    private String stringProperty = "default string";
+    private String _StringProperty = "underbar CAP default string";
+    private String _stringProperty = "underbar default string";
+
+    private String[] _stringArrayProperty = null;
+
+    private String _nullProperty = null;
+
+    private boolean _boolProperty = false;
+    private byte _byteProperty = 0;;
+    private char _charProperty = 'a';
+    private double _doubleProperty = 0.0;
+    private float _floatProperty = 0.0f;
+    private int _intProperty = 0;
+    private long _longProperty = 0;
+    private short _shortProperty = 0;
+
+    private Boolean _boolWrapperProperty = null;
+    private Byte _byteWrapperProperty = null;
+    private Character _charWrapperProperty = null;
+    private Double _doubleWrapperProperty = null;
+    private Float _floatWrapperProperty = null;
+    private Integer _intWrapperProperty = null;
+    private Long _longWrapperProperty = null;
+    private Short _shortWrapperProperty = null;
+
+    private boolean[] _boolArrayProperty = null;
+    private byte[] _byteArrayProperty = null;
+    private char[] _charArrayProperty = null;
+    private double[] _doubleArrayProperty = null;
+    private float[] _floatArrayProperty = null;
+    private int[] _intArrayProperty = null;
+    private long[] _longArrayProperty = null;
+    private short[] _shortArrayProperty = null;
+
+    private Boolean[] _boolWrapperArrayProperty = null;
+    private Byte[] _byteWrapperArrayProperty = null;
+    private Character[] _charWrapperArrayProperty = null;
+    private Double[] _doubleWrapperArrayProperty = null;
+    private Float[] _floatWrapperArrayProperty = null;
+    private Integer[] _intWrapperArrayProperty = null;
+    private Long[] _longWrapperArrayProperty = null;
+    private Short[] _shortWrapperArrayProperty = null;
+
+    public void set_StringProperty(String stringProperty)
+    {
+        _StringProperty = stringProperty;
+    }
+
+    public String get_StringProperty()
+    {
+        return _StringProperty;
+    }
+
+    public void set_stringProperty(String stringProperty)
+    {
+        _stringProperty = stringProperty;
+    }
+
+    public String get_stringProperty()
+    {
+        return _stringProperty;
+    }
+
+    public void setStringProperty(String stringProperty)
+    {
+        this.stringProperty = stringProperty;
+    }
+
+    public String getStringProperty()
+    {
+        return this.stringProperty;
+    }
+
+    public void setStringArrayProperty(String[] stringArrayProperty)
+    {
+        _stringArrayProperty = stringArrayProperty;
+    }
+
+    public String[] getStringArrayProperty()
+    {
+        return _stringArrayProperty;
+    }
+
+    public String getNullProperty()
+    {
+        return _nullProperty;
+    }
+
+    public void setNullProperty(String nullProperty)
+    {
+        _nullProperty = nullProperty;
+    }
+
+    /*
+     *
+     * Primitive Properties
+     *
+     */
+
+    public void setBoolProperty(boolean boolProperty)
+    {
+        _boolProperty = boolProperty;
+    }
+
+    public boolean getBoolProperty()
+    {
+        return _boolProperty;
+    }
+
+    public void setIntProperty(int intProperty)
+    {
+        _intProperty = intProperty;
+    }
+
+    public int getIntProperty()
+    {
+        return _intProperty;
+    }
+
+    public void setCharProperty(char charProperty)
+    {
+        _charProperty = charProperty;
+    }
+
+    public char getCharProperty()
+    {
+        return _charProperty;
+    }
+
+    public void setByteProperty(byte byteProperty)
+    {
+        _byteProperty = byteProperty;
+    }
+
+    public byte getByteProperty()
+    {
+        return _byteProperty;
+    }
+
+    public void setShortProperty(short shortProperty)
+    {
+        _shortProperty = shortProperty;
+    }
+
+    public short getShortProperty()
+    {
+        return _shortProperty;
+    }
+
+    public void setLongProperty(long longProperty)
+    {
+        _longProperty = longProperty;
+    }
+
+    public long getLongProperty()
+    {
+        return _longProperty;
+    }
+
+    public void setFloatProperty(float floatProperty)
+    {
+        _floatProperty = floatProperty;
+    }
+
+    public float getFloatProperty()
+    {
+        return _floatProperty;
+    }
+
+    public void setDoubleProperty(double doubleProperty)
+    {
+        _doubleProperty = doubleProperty;
+    }
+
+    public double getDoubleProperty()
+    {
+        return _doubleProperty;
+    }
+    
+    /*
+     *
+     * Primitive Arrays
+     *
+     */
+
+    public void setBoolArrayProperty(boolean[] boolArrayProperty)
+    {
+        _boolArrayProperty = boolArrayProperty;
+    }
+
+    public boolean[] getBoolArrayProperty()
+    {
+        return _boolArrayProperty;
+    }
+
+    public void setIntArrayProperty(int[] intArrayProperty)
+    {
+        _intArrayProperty = intArrayProperty;
+    }
+
+    public int[] getIntArrayProperty()
+    {
+        return _intArrayProperty;
+    }
+
+    public void setCharArrayProperty(char[] charArrayProperty)
+    {
+        _charArrayProperty = charArrayProperty;
+    }
+
+    public char[] getCharArrayProperty()
+    {
+        return _charArrayProperty;
+    }
+
+    public void setByteArrayProperty(byte[] byteArrayProperty)
+    {
+        _byteArrayProperty = byteArrayProperty;
+    }
+
+    public byte[] getByteArrayProperty()
+    {
+        return _byteArrayProperty;
+    }
+
+    public void setShortArrayProperty(short[] shortArrayProperty)
+    {
+        _shortArrayProperty = shortArrayProperty;
+    }
+
+    public short[] getShortArrayProperty()
+    {
+        return _shortArrayProperty;
+    }
+
+    public void setLongArrayProperty(long[] longArrayProperty)
+    {
+        _longArrayProperty = longArrayProperty;
+    }
+
+    public long[] getLongArrayProperty()
+    {
+        return _longArrayProperty;
+    }
+
+    public void setFloatArrayProperty(float[] floatArrayProperty)
+    {
+        _floatArrayProperty = floatArrayProperty;
+    }
+
+    public float[] getFloatArrayProperty()
+    {
+        return _floatArrayProperty;
+    }
+
+    public void setDoubleArrayProperty(double[] doubleArrayProperty)
+    {
+        _doubleArrayProperty = doubleArrayProperty;
+    }
+
+    public double[] getDoubleArrayProperty()
+    {
+        return _doubleArrayProperty;
+    }
+
+    /*
+     *
+     * Primitive Wrappers
+     *
+     */
+
+    public void setBooleanWrapperProperty(Boolean boolWrapperProperty)
+    {
+        _boolWrapperProperty = boolWrapperProperty;
+    }
+
+    public Boolean getBooleanWrapperProperty()
+    {
+        return _boolWrapperProperty;
+    }
+
+    public void setByteWrapperProperty(Byte byteWrapperProperty)
+    {
+        _byteWrapperProperty = byteWrapperProperty;
+    }
+
+    public Byte getByteWrapperProperty()
+    {
+        return _byteWrapperProperty;
+    }
+
+    public void setCharWrapperProperty(Character charWrapperProperty)
+    {
+        _charWrapperProperty = charWrapperProperty;
+    }
+
+    public Character getCharWrapperProperty()
+    {
+        return _charWrapperProperty;
+    }
+
+    public void setDoubleWrapperProperty(Double doubleWrapperProperty)
+    {
+        _doubleWrapperProperty = doubleWrapperProperty;
+    }
+
+    public Double getDoubleWrapperProperty()
+    {
+        return _doubleWrapperProperty;
+    }
+
+    public void setFloatWrapperProperty(Float floatWrapperProperty)
+    {
+        _floatWrapperProperty = floatWrapperProperty;
+    }
+
+    public Float getFloatWrapperProperty()
+    {
+        return _floatWrapperProperty;
+    }
+
+    public void setIntWrapperProperty(Integer intWrapperProperty)
+    {
+        _intWrapperProperty = intWrapperProperty;
+    }
+
+    public Integer getIntWrapperProperty()
+    {
+        return _intWrapperProperty;
+    }
+
+    public void setLongWrapperProperty(Long longWrapperProperty)
+    {
+        _longWrapperProperty = longWrapperProperty;
+    }
+
+    public Long getLongWrapperProperty()
+    {
+        return _longWrapperProperty;
+    }
+
+    public void setShortWrapperProperty(Short shortWrapperProperty)
+    {
+        _shortWrapperProperty = shortWrapperProperty;
+    }
+
+    public Short getShortWrapperProperty()
+    {
+        return _shortWrapperProperty;
+    }
+
+    /*
+     *
+     * Primitive Wrapper Arrays
+     *
+     */
+
+    public void setBoolWrapperArrayProperty(Boolean[] boolWrapperArrayProperty)
+    {
+        _boolWrapperArrayProperty = boolWrapperArrayProperty;
+    }
+
+    public Boolean[] getBoolWrapperArrayProperty()
+    {
+        return _boolWrapperArrayProperty;
+    }
+
+    public void setIntWrapperArrayProperty(Integer[] intWrapperArrayProperty)
+    {
+        _intWrapperArrayProperty = intWrapperArrayProperty;
+    }
+
+    public Integer[] getIntWrapperArrayProperty()
+    {
+        return _intWrapperArrayProperty;
+    }
+
+    public void setCharWrapperArrayProperty(Character[] charWrapperArrayProperty)
+    {
+        _charWrapperArrayProperty = charWrapperArrayProperty;
+    }
+
+    public Character[] getCharWrapperArrayProperty()
+    {
+        return _charWrapperArrayProperty;
+    }
+
+    public void setByteWrapperArrayProperty(Byte[] byteWrapperArrayProperty)
+    {
+        _byteWrapperArrayProperty = byteWrapperArrayProperty;
+    }
+
+    public Byte[] getByteWrapperArrayProperty()
+    {
+        return _byteWrapperArrayProperty;
+    }
+
+    public void setShortWrapperArrayProperty(Short[] shortWrapperArrayProperty)
+    {
+        _shortWrapperArrayProperty = shortWrapperArrayProperty;
+    }
+
+    public Short[] getShortWrapperArrayProperty()
+    {
+        return _shortWrapperArrayProperty;
+    }
+
+    public void setLongWrapperArrayProperty(Long[] longWrapperArrayProperty)
+    {
+        _longWrapperArrayProperty = longWrapperArrayProperty;
+    }
+
+    public Long[] getLongWrapperArrayProperty()
+    {
+        return _longWrapperArrayProperty;
+    }
+
+    public void setFloatWrapperArrayProperty(Float[] floatWrapperArrayProperty)
+    {
+        _floatWrapperArrayProperty = floatWrapperArrayProperty;
+    }
+
+    public Float[] getFloatWrapperArrayProperty()
+    {
+        return _floatWrapperArrayProperty;
+    }
+
+    public void setDoubleWrapperArrayProperty(Double[] doubleWrapperArrayProperty)
+    {
+        _doubleWrapperArrayProperty = doubleWrapperArrayProperty;
+    }
+
+    public Double[] getDoubleWrapperArrayProperty()
+    {
+        return _doubleWrapperArrayProperty;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/testRecorder" default="compile" basedir=".">
+
+    <property name="module.classpath" location="${deployed.junit.jar};${deployed.httpClient.jar};${deployed.commons-logging.jar};${deployed.util.jar};${deployed.scoping.jar};${log4j.jar};${servlet24.jar};${jsp20.jar};${xbean.jar};${junit.jar}"/>
+    <property name="module.classes.dir" location="${qa.classes.dir}/${module.name}"/>
+    <property name="module.jar.name" value="${test-recorder.jar.name}"/>
+    <property name="module.jar" location="${qa.lib.dir}/${module.jar.name}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${module.classes.dir}"/>
+
+        <ant antfile="${netui.ant.dir}/xmlBean.xml" target="ant.build.xmlbean">
+            <property name="xsd.root.dir" value="schema/"/>
+            <property name="class.output.dir" value="${module.classes.dir}"/>
+            <property name="xbean.inputs" value="schema/*.xsd*"/>
+            <property name="xbean.output" value="${module.jar}"/>
+        </ant>
+
+        <javac srcdir="."
+               destdir="${module.classes.dir}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}">
+               <include name="**/*.java"/>
+        </javac>
+
+        <jar jarfile="${module.jar}" basedir="${module.classes.dir}"/>
+
+        <copy todir="${qa.lib.dir}/testRecorder-jsp">
+            <fileset dir="./jsp"/>
+        </copy>
+    </target>
+
+    <target name="clean">
+        <delete dir="${module.classes.dir}"/>
+        <delete file="${module.jar}" failonerror="false"/>
+    </target>
+
+</project>
+

Added: incubator/beehive/netui/test/src/testRecorder/jsp/admin.inc
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/admin.inc	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+
+<%
+   String prefix = ((HttpServletRequest)request).getContextPath();
+%>
+
+<a href="<%= prefix %>">Back to Titan Home Page</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder/startRecord.jsp?testRecorder.filter.skip=true">Record Start Page</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder?mode=record&cmd=stop&testRecorder.filter.skip=true">
+<strong style="color: red">STOP</strong> recording</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder?mode=admin&cmd=clean&testRecorder.filter.skip=true">
+<strong style="color: red">Clean</strong> up Test Recorder sessions</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder?mode=admin&cmd=setTestModeTrue&testRecorder.filter.skip=true">
+Set test mode to <strong style="color: red">True</strong></a>
+<br>
+
+<a href="<%= prefix %>/testRecorder?mode=admin&cmd=setTestModeFalse&testRecorder.filter.skip=true">
+Set test mode to <strong style="color: red">False</strong></a>
+<br>
+
+<a href="<%= prefix %>/testRecorder/status.jsp?testRecorder.filter.skip=true">Status</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder/sessionInfo.jsp?testRecorder.filter.skip=true">Categories, Tests and JUnit Results</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder/test.jsp?testRecorder.filter.skip=true">Test Page</a>
+<br>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/admin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/admin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+
+<html>
+
+<head>
+<title>Test Recorder Admin</title>
+</head>
+
+<body>
+
+<h2>Test Recorder Admin</h2>
+
+<%@ include file="admin.inc" %>
+
+<hr>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants" %>
+
+<html>
+
+<head>
+<title>Test Recorder Error</title>
+</head>
+
+<body>
+
+<h2>Test Recorder Error</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%
+    String msg = null;
+    msg = (String) request.getAttribute( Constants.MSG_ATTRIBUTE );
+%>
+<%= ( msg == null ) ? "no message provided." : msg %>
+
+<br>
+<br>
+
+<hr>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/forward.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/forward.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+
+<jsp:forward page="testRecord.jsp" />

Added: incubator/beehive/netui/test/src/testRecorder/jsp/forward2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/forward2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+
+<jsp:forward page="forward.jsp" />

Added: incubator/beehive/netui/test/src/testRecorder/jsp/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+
+<%
+    response.sendRedirect( "status.jsp?testRecorder.filter.skip=true" );
+%>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/playback.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/playback.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.*,
+                 org.apache.beehive.netui.tools.testrecorder.server.state.PlaybackSession,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants" %>
+
+<html>
+
+<head>
+<title>Test Recorder</title>
+</head>
+
+<body>
+
+<h2>Test Recorder</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%
+    String msg = null;
+    msg = (String) request.getAttribute( Constants.MSG_ATTRIBUTE );
+    PlaybackSession playSession = (PlaybackSession) request.getAttribute(
+        Constants.PLAYBACK_SESSION_ATTRIBUTE );
+%>
+
+<%= ( msg == null ) ? "error, no message provided." : msg %>
+<br>
+<br>
+
+<%= ( playSession == null ) ? "" : playSession.toString() %>
+
+<hr>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/record.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/record.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants" %>
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession" %>
+
+<html>
+
+<head>
+<title>Test Recorder</title>
+</head>
+
+<body>
+
+<h2>Test Recorder</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%
+    String msg = null;
+    msg = (String) request.getAttribute( Constants.MSG_ATTRIBUTE );
+    RecordSession recSession = (RecordSession) request.getAttribute(
+        Constants.RECORD_SESSION_ATTRIBUTE );
+%>
+
+<%= ( msg == null ) ? "error, no message provided." : msg %>
+<br>
+<br>
+
+<%= ( recSession == null ) ? "" : recSession.toString() %>
+
+<hr>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/redirect.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/redirect.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+
+<%
+    response.sendRedirect( "testRecord.jsp" );
+%>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/sessionInfo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/sessionInfo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions,
+                 org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.Category,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.Categories,
+                 java.util.List,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants,
+                 java.io.File,
+                 java.text.SimpleDateFormat,
+                 org.apache.beehive.netui.tools.testrecorder.server.state.Session,
+                 java.util.Calendar,
+                 java.util.Date"%>
+<%!
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat( "dd MMM, hh:mm:ss aa" );
+%>
+<%
+    Calendar calendar = Calendar.getInstance();
+    Date date = null;
+    TestDefinitions tests = TestRecorderFilter.instance().getTestDefinitions();
+    WebappConfig webapp = TestRecorderFilter.instance().getWebapp();
+    Category[] categories = tests.getCategories().getCategories();
+    Category category = null;
+    String catHref = null;
+    String resultsHref = null;
+    File reportFile = null;
+%>
+
+<html>
+<title>Test Session Information</title>
+<table border="2" cols="2">
+<tr><td><b>Tests for Category</b></td><td><b>Results</b></td></tr>
+
+<%
+    for ( int i = 0; i < categories.length; i++ ) {
+        category = categories[i];
+        catHref = new String( "testInfo.jsp?category=" + category.getName() );
+        reportFile = new File( category.getReportDirPath(), "/html/junit-noframes.html" );
+        if ( reportFile.exists() ) {
+            calendar.setTimeInMillis(  reportFile.lastModified());
+            date = calendar.getTime();
+            resultsHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.ADMIN +
+                "&" + Constants.CMD + "=" + Constants.DISPLAY_REPORT + "&category=" + category.getName() + ">results (" +
+                dateFormat.format( date ) + ")</a>");
+        }
+        else {
+            resultsHref = null;
+        }
+%>
+<tr><td><a href="<%=catHref%>"><%=category.getName()%></a></td><td>
+<%
+        if ( resultsHref == null ) {
+%>
+            &nbsp;
+<%
+        }
+        else {
+%>
+        <%=resultsHref%>
+<%
+        }
+%>
+        </td></tr>
+<%
+    }
+%>
+
+</table>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorder/jsp/startRecord.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/startRecord.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+
+<%
+   String contextPath = ((HttpServletRequest)request).getContextPath();
+%>
+
+<%@ page import="java.io.File" %>
+
+<%
+  
+%>
+
+
+<html>
+
+<head>
+<title>Recording Session Start</title>
+</head>
+
+<body>
+
+<h2>Recording Session Start</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<form method="POST" action="<%= contextPath %>/testRecorder?mode=record&cmd=start" >
+
+  <table>
+
+  <tr>
+    <td align="right"><strong>Test Name: </strong></td>
+    <td align="left"><input name="testName" type="text" size="30" />
+    <i style="color: blue" >or choose from the list of existing tests below.</i></td>
+  </tr>
+
+  <tr>
+    <td align="right"><strong>Test User: </strong></td>
+    <td align="left"><input name="testUser" type="text" size="30" /></td>
+  </tr>
+
+  <tr>
+    <td align="right"><strong>Description: </strong></td>
+    <td align="left"><textarea name="description" rows="5" cols="40"></textarea></td>
+  </tr>
+
+  <tr>
+    <td align="right"><strong>Overwrite existing test: </strong></td>
+    <td align="left"><input type="checkbox" name="overwrite" value="true" /></td>
+  </tr>
+
+  </table>
+
+  <br>
+
+  <input type="submit" />
+</form>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/status.inc
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/status.inc	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,113 @@
+
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.state.Session" %>
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter" %>
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession" %>
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession" %>
+<%@ page import="java.text.SimpleDateFormat" %>
+<%@ page import="java.text.MessageFormat" %>
+<%@ page import="java.util.*" %>
+
+<%!
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat( Session.DATE_FORMAT_STRING );
+
+    private static final String property =
+        "<strong style=\"color: blue\">{0}</strong>";
+    private static final String value =
+        "<b style=\"color: {1}\">{2}</b><br>";
+    private static final String RED = "red";
+    private static final String GREEN = "green";
+    private static final String ON = "On";
+    private static final String OFF = "Off";
+
+    private static final MessageFormat status = new MessageFormat( property + value );
+
+    private Object[] testModeObjects = { "Test Mode: ", null, null };
+    private Object[] recordingObjects = { "Recording: ", null, null };
+    private Object[] playbackObjects = { "Playback: ", null, null };
+
+    private static String getPlaybackSessionString( Map playbackMap ) {
+        StringBuffer sb = new StringBuffer( 64 * playbackMap.size() );
+        Set entrySet = playbackMap.entrySet();
+        List list = new ArrayList( entrySet.size() );
+        list.addAll( entrySet );
+
+        // TODO sort by session name and start time
+        for ( int i = 0; i < list.size(); i++ ) {
+            sb.append( "Playback Session [" + i + "]( " + list.get(i) + " )" + "<br><br>" );
+        }
+        return sb.toString();
+    }
+%>                                            
+
+<%
+    TestRecorderFilter filter = TestRecorderFilter.instance();
+    String dateString = dateFormat.format( new Date() );
+    boolean testMode = false;
+    RecordSession recordingSession = null;
+    String recSessionInfo = null;
+    String playSessionInfo = null;
+    Map playbackMap = null;
+    
+    if ( filter != null ) {
+       testMode = filter.getState().isTestMode();
+       recordingSession = filter.getState().getRecordingSession();
+       playbackMap = filter.getState().getPlaybackMap();
+
+       if ( testMode ) {
+           testModeObjects[1] = GREEN;
+           testModeObjects[2] = ON;
+       }
+       else {
+           testModeObjects[1] = RED;
+           testModeObjects[2] = OFF;
+       }
+   
+       if ( recordingSession == null ) {
+           recordingObjects[1] = RED;
+           recordingObjects[2] = OFF;
+           recSessionInfo = null;
+       }
+       else {
+           recordingObjects[1] = GREEN;
+           recordingObjects[2] = ON;
+           recSessionInfo = recordingSession.toString();
+       }
+   
+       if ( playbackMap == null ) {
+           playbackObjects[1] = RED;
+           playbackObjects[2] = OFF;
+       }
+       else {
+           playbackObjects[1] = GREEN;
+           playbackObjects[2] = ON;
+           playSessionInfo = getPlaybackSessionString( playbackMap );
+       }
+    }
+%>
+
+<h3><strong style="color: orange">Current Status ( </strong>
+<%= dateString %><strong style="color: orange"> )</strong></h3>
+
+<%
+   if ( filter != null ) {
+      // all is well
+%>
+
+&nbsp;&nbsp;&nbsp;&nbsp;<%=status.format( testModeObjects ) %>
+&nbsp;&nbsp;&nbsp;&nbsp;<%=status.format( recordingObjects ) %>
+<br>
+<%= ( recSessionInfo == null ) ? "" : "&nbsp;&nbsp;&nbsp;&nbsp;" + recSessionInfo + "<br><br>" %>
+&nbsp;&nbsp;&nbsp;&nbsp;<%=status.format( playbackObjects ) %>
+<br>
+<%= ( playSessionInfo == null ) ? "" : "&nbsp;&nbsp;&nbsp;&nbsp;" + playSessionInfo + "<br>" %>
+
+<%
+   }
+   else {
+%>
+
+<strong style="color: red">TestRecorderFilter is not properly deployed!!</strong>
+
+<%
+   }
+%>   

Added: incubator/beehive/netui/test/src/testRecorder/jsp/status.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/status.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+
+<html>
+
+<head>
+<title>Status Test Recorder</title>
+</head>
+
+<body>
+
+<h2>Status of the Test Recorder</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>
+

Added: incubator/beehive/netui/test/src/testRecorder/jsp/test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+
+<%
+   String contextPath = ((HttpServletRequest)request).getContextPath();
+%>
+
+<html>
+
+<head>
+<title>Test Recorder Admin</title>
+</head>
+
+<body>
+
+<h2>Test Recorder Admin</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%@ include file="status.inc" %>
+
+<hr>
+
+<br>
+<a href="testRecord.jsp">a simple page to record data for tests</a>
+<br>
+<br>
+
+<br>
+<a href="<%= contextPath %>/testRecorder">no params</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record">mode=record</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=unknown">mode=unknown</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start">mode=record, cmd=start</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=unknown">mode=record, cmd=unknown</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testUser=ozzy">
+mode=record, cmd=start, testUser=ozzy</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testName=test1">
+mode=record, cmd=start, testName=test1</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&description=someDescription">
+mode=record, cmd=start, description=someDescription</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&overwrite=false">
+mode=record, cmd=start, overwrite=false</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&overwrite=true">
+mode=record, cmd=start, overwrite=true</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testRecorder.filter.skip=false">
+mode=record, cmd=start, testRecorder.filter.skip=false</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testRecorder.filter.skip=true">
+mode=record, cmd=start, testRecorder.filter.skip=true</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testName=test1&testUser=ozzy&description=someDescription&overwrite=false&testRecorder.filter.skip=true">
+START record for 'test1', do not overwrite</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testName=test1&testUser=ozzy&description=someDescription&overwrite=true&testRecorder.filter.skip=true">
+START record for 'test1', overwrite if necessary</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testName=test2&testUser=ozzy&description=someDescription&overwrite=true&testRecorder.filter.skip=true">
+START record for 'test2', overwrite if necessary</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=stop&testRecorder.filter.skip=true">record STOP</a>
+<br>
+
+<hr>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback">mode=playback</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start">mode=playback, cmd=start</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=unknown">mode=playback, cmd=unknown</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testUser=ozzy">
+mode=playback, cmd=start, testUser=ozzy</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testName=test1">
+mode=playback, cmd=start, testName=test1</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&description=someDescription">
+mode=playback, cmd=start, description=someDescription</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testRecorder.filter.skip=false">
+mode=playback, cmd=start, testRecorder.filter.skip=false</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testRecorder.filter.skip=true">
+mode=playback, cmd=start, testRecorder.filter.skip=true</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testName=test1&testUser=ozzy&description=someDescription&overwrite=false&testRecorder.filter.skip=true">
+START playback for 'test1'</a>
+<br>
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testName=test2&testUser=ozzy&description=someDescription&overwrite=false&testRecorder.filter.skip=true">
+START playback for 'test2'</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=stop&testRecorder.filter.skip=true">playback STOP, no testId</a>
+</body>
+
+</html>

Added: incubator/beehive/netui/test/src/testRecorder/jsp/testInfo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/testInfo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,109 @@
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions,
+                 org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.Category,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.Categories,
+                 java.util.List,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants,
+                 java.io.File,
+                 java.text.SimpleDateFormat,
+                 java.util.Calendar,
+                 java.util.Date"%>
+<%!
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat( "dd MMM, hh:mm:ss aa" );
+%>
+<%
+    Calendar calendar = Calendar.getInstance();
+    Date date = null;
+    TestDefinitions tests = TestRecorderFilter.instance().getTestDefinitions();
+    WebappConfig webapp = TestRecorderFilter.instance().getWebapp();
+    String categoryString = request.getParameter( "category");
+    Category category = tests.getCategories().getCategory( categoryString );
+    List testList = tests.getCategories().getTests( category );
+    TestDefinition test = null;
+    String detailHref = null;
+    String recordHref = null;
+    String playbackHref = null;
+    String diffHref = null;
+    File file = null;
+%>
+
+
+<html>
+<title>Category Test Information</title>
+
+<%
+    if ( category == null ) {
+%>
+        <b>Unable to find category( <%=categoryString%> )</b>
+        </html>
+<%
+        return;
+    }
+%>
+
+<table border="2" cols="2">
+<tr>
+    <td><b>Test</b></td>
+    <td><b>Details</b></td></td>
+    <td><b>Diff</b></td>
+    <td><b>Record File</b></td></td>
+    <td><b>Playback File</b></td>
+</tr>
+
+<%
+    for ( int i = 0; i < testList.size(); i++ ) {
+        test = (TestDefinition) testList.get( i );
+        file = new File( test.getTestFilePath() );
+        if ( file.exists() ) {
+            calendar.setTimeInMillis(  file.lastModified());
+            date = calendar.getTime();
+            recordHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.ADMIN +
+                "&" + Constants.CMD + "=" + Constants.DISPLAY_RECORD + "&test=" + test.getName() + ">" + test.getName() +
+                " Record File</a>" );
+            detailHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.DPY_DETAILS + "&" +
+                Constants.FILE + "=" + test.getName() + ">" + test.getName() + " Details</a>" );
+        }
+        else {
+            recordHref = "&nbsp;";
+            detailHref = "file not found( " + file.getAbsolutePath() + " )";
+        }
+        file = new File( test.getResultFilePath() );
+        if ( file.exists() ) {
+            calendar.setTimeInMillis(  file.lastModified());
+            date = calendar.getTime();
+            playbackHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.ADMIN +
+                "&" + Constants.CMD + "=" + Constants.DISPLAY_PLAYBACK + "&test=" + test.getName() + ">" + test.getName() +
+                " Playback File (" + dateFormat.format( date ) + ")</a>");
+        }
+        else {
+            playbackHref =  "&nbsp;";
+
+        }
+        file = new File( test.getResultDiffFilePath() );
+        if ( file.exists() ) {
+            diffHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.DPY_DIFF + "&" +
+                Constants.FILE + "=" + test.getName() + ">" + test.getName() + "</a>");
+        }
+        else {
+            diffHref =  "&nbsp;";
+        }
+%>
+        <tr>
+            <td><%=test.getName()%></td>
+
+            <td><%=detailHref%></td>
+
+            <td><%=diffHref%></td>
+
+            <td><%=recordHref%></td>
+
+            <td><%=playbackHref%></td>
+        </tr>
+<%
+    }
+%>
+
+</table>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorder/jsp/testRecord.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/jsp/testRecord.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+
+<html>
+
+<head>
+<title>Record Test Page</title>
+</head>
+
+<body>
+
+<h2>Record Test Page</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%
+    // response.setStatus( 201 );
+%>
+
+<hr>
+
+<br>
+<a href="testRecord.jsp">reload this page</a>
+<br>
+<br>
+
+<a href="forward.jsp">forward back to this page</a>
+<br>
+<a href="forward2.jsp">two forwards back to this page</a>
+<br>
+<a href="redirect.jsp">redirect back to this page</a>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/MasterTestRecorderJUnitTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/MasterTestRecorderJUnitTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,247 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.client;
+
+import junit.framework.TestSuite;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.RuntimeConfigException;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Iterator;
+
+/**
+ */
+public class MasterTestRecorderJUnitTest extends TestCase {
+
+    private static final Logger log = Logger.getInstance( MasterTestRecorderJUnitTest.class );
+    private static TestDefinitions testDefinitions;
+
+    // specified when invoking the test to describe the tests to run
+    public static String TESTS_PROPERTY = "test.recorder.run.tests";
+    public static String CATEGORIES_PROPERTY = "test.recorder.run.categories";
+    public static String WEBAPPS_PROPERTY = "test.recorder.run.webapps";
+    public static String ALL_PROPERTY = "test.recorder.run.all";
+    public static String DELETE_RESULTS_PROPERTY = "test.recorder.run.results.delete";
+
+
+    public MasterTestRecorderJUnitTest() {
+        super( "MasterTestRecorderJUnitTest" );
+    }
+
+    public static Test suite() {
+        initialize();
+        TestSuite suite = null;
+        suite = new TestSuite();
+        buildSuite( suite );
+        return suite;
+    }
+
+    private static void buildSuite( TestSuite suite ) {
+        boolean delete = getDeleteResultsProperty();
+        HashMap webappMap = new HashMap();
+        if ( getAllProperty() ) {
+            List list = getTestDefinitions().getTestDefinitions();
+            addList( list, suite, webappMap );
+        }
+        else {
+            List list = getTestList( getTestsProperty() );
+            addList( list, suite, webappMap );
+            list = getTestsByCategory( getCategoriesProperty() );
+            addList( list, suite, webappMap );
+            list = getTestsByWebapp( getWebappsProperty() );
+            addList( list, suite, webappMap );
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "Test recorder test suite consists of (" + suite.countTestCases() + ") tests" );
+        }
+        if ( suite.countTestCases() == 0 ) {
+            String msg = "ERROR: no tests specified";
+            System.err.println( msg );
+            log.fatal( msg );
+            throw new RuntimeConfigException( "ERROR: no tests specified" );
+        }
+        // Delete results file for all webapps used, create results directory if it doesn't exist
+        // TODO move to server to allow for playback from remote server
+        Iterator it = webappMap.values().iterator();
+        WebappConfig webapp = null;
+        while ( it.hasNext() ) {
+            webapp = (WebappConfig) it.next();
+            // delete all results only if requested
+            if ( delete ) {
+                log.info( "Deleting results for webapp( " + webapp.getName() + " )" );
+                if ( !webapp.deleteResults() ) {
+                    String msg = "WARNING: unable to delete all results files for webapp( " + webapp.getName() +
+                            " )";
+                    System.out.println( msg );
+                    log.warn( msg );
+                }
+            }
+            if ( !webapp.createResultsDirectory() ) {
+                String msg = "ERROR: unable to create results directory( " + webapp.getResultsDirectory() +
+                        " ), for webapp( " + webapp.getName() + " )";
+                System.err.println( msg );
+                log.error( msg );
+                throw new RuntimeConfigException( msg );
+            }
+        }
+    }
+
+    private static void addList( List list, TestSuite suite, HashMap webappMap ) {
+        TestDefinition def = null;
+        for ( int i = 0; i < list.size(); i++ ) {
+            def = (TestDefinition) list.get( i );
+            log.debug( "Adding test( " + def.getName() + " )to JUnit suite" );
+            suite.addTest( new TestRecorderJUnitTest( def ) );
+            addWebapp( webappMap, def.getWebapp() );
+        }
+    }
+
+    private static void initialize() {
+        testDefinitions = XMLHelper.getTestDefinitionsInstance( Thread.currentThread().getContextClassLoader() );
+    }
+
+    private static TestDefinitions getTestDefinitions() {
+        return testDefinitions;
+    }
+
+    /**
+     * Returns a List of TestDefinition objects
+     */
+    private static List getTestList( String testList ) {
+        List list = new ArrayList();
+        if ( testList == null ) {
+            return list;
+        }
+        String name = null;
+        TestDefinition test = null;
+        for ( StringTokenizer stringTokenizer = new StringTokenizer( testList, "," );
+                stringTokenizer.hasMoreTokens(); ) {
+            name = stringTokenizer.nextToken().trim();
+            if ( name.length() == 0 ) {
+                continue;
+            }
+            test = getTestDefinitions().getTest( name );
+            if ( test == null ) {
+                if ( log.isWarnEnabled() ) {
+                    String msg = "WARNING: unable to find test with name( " + name + " ), skipping test";
+                    System.err.println( msg );
+                    log.warn( msg );
+                }
+                continue;
+            }
+            list.add( test );
+        }
+        return list;
+    }
+
+    private static List getTestsByCategory( String categoryList ) {
+        String category = null;
+        List list = new ArrayList();
+        if ( categoryList == null ) {
+            return list;
+        }
+        List temp = null;
+        for ( StringTokenizer stringTokenizer = new StringTokenizer( categoryList, "," );
+                stringTokenizer.hasMoreTokens(); ) {
+            category = stringTokenizer.nextToken().trim();
+            if ( category.length() == 0 ) {
+                continue;
+            }
+            temp = getTestDefinitions().getCategories().getTests( category );
+            if ( temp == null ) {
+                throw new RuntimeConfigException( "ERROR: unable to find category( " + category + " )" );
+            }
+            list.addAll( temp );
+        }
+        return list;
+    }
+
+    private static List getTestsByWebapp( String webappList ) {
+        String webapp = null;
+        List list = new ArrayList();
+        if ( webappList == null ) {
+            return list;
+        }
+        List temp = null;
+        for ( StringTokenizer stringTokenizer = new StringTokenizer( webappList, "," );
+                stringTokenizer.hasMoreTokens(); ) {
+            webapp = stringTokenizer.nextToken().trim();
+            if ( webapp.length() == 0 ) {
+                continue;
+            }
+            temp = getTestDefinitions().getTestList( webapp );
+            if ( temp == null ) {
+                throw new RuntimeConfigException( "ERROR: no tests for webapp( " + webapp + " )" );
+            }
+            list.addAll( temp );
+        }
+        return list;
+    }
+
+    private static boolean getDeleteResultsProperty() {
+        return Boolean.parseBoolean( getProperty( DELETE_RESULTS_PROPERTY ) );
+    }
+
+    private static String getTestsProperty() {
+        return getProperty( TESTS_PROPERTY );
+    }
+
+    private static String getCategoriesProperty() {
+        return getProperty( CATEGORIES_PROPERTY );
+    }
+
+    private static String getWebappsProperty() {
+        return getProperty( WEBAPPS_PROPERTY );
+    }
+
+    private static boolean getAllProperty() {
+        return Boolean.parseBoolean( getProperty( ALL_PROPERTY ) );
+    }
+
+    private static String getProperty( String prop ) {
+        String value = null;
+        try {
+            value = System.getProperty( prop );
+        }
+        catch ( Exception ex ) {
+            log.fatal( "unable to obtain system property( " + prop + " ), ex( " + ex.getMessage() + " )", ex );
+            throw new RuntimeException( "unable to obtain system property( " + prop + " ), exception( " +
+                    ex.toString() + " )" );
+        }
+        assert value != null : "system property( " + prop + " ) has value( " + value + " )";
+        return value;
+    }
+
+    private static void addWebapp( Map map, WebappConfig webapp ) {
+        if ( !map.containsKey( webapp.getName() ) ) {
+            map.put( webapp.getName(), webapp );
+        }
+    }
+}
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/PlaybackException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/PlaybackException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.client;
+
+/**
+ * User: ozzy
+ * Date: Mar 16, 2004
+ * Time: 11:12:06 AM
+ */
+public class PlaybackException extends Exception {
+
+    public PlaybackException() {
+        super();
+    }
+
+    public PlaybackException( String message ) {
+        super( message );
+    }
+
+    public PlaybackException( String message, Throwable cause ) {
+        super( message, cause );
+    }
+
+    public PlaybackException( Throwable cause ) {
+        super( cause );
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/PlaybackExecutor.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/PlaybackExecutor.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,573 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.client;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.RecordSessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.Constants;
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.NVPair;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.commons.httpclient.HttpRecoverableException;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.Locale;
+import java.util.List;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * User: ozzy
+ * Date: Jun 29, 2004
+ * Time: 2:26:39 PM
+ */
+public class PlaybackExecutor {
+
+    private static final Logger log = Logger.getInstance( PlaybackExecutor.class );
+
+    private static final DecimalFormat format = (DecimalFormat)
+            NumberFormat.getInstance( Locale.US );
+
+    static {
+        // we just want the integer portion
+        format.setDecimalSeparatorAlwaysShown( false );
+        format.setGroupingSize( 0 );
+    }
+
+    private TestDefinition test;
+    private String description;
+    private String testUser;
+    private File recordFile;
+    private File resultsFile;
+    private File diffFile;
+
+    private HttpClient controlClient;
+    private NameValuePair[] startParams;
+    private NameValuePair[] stopParams;
+
+    private HttpClient testClient;
+    private String testId;
+    private RecordSessionBean session;
+
+
+    public PlaybackExecutor( TestDefinition test,
+            String description, String testUser ) {
+        this.test = test;
+        assert test != null : "the test definition name may not be null";
+        this.description = description;
+        if ( description == null ) {
+            description = "No Description.";
+        }
+        this.testUser = testUser;
+        this.testClient = new HttpClient();
+        this.controlClient = new HttpClient();
+        setControlParams();
+    }
+
+    protected void setControlParams() {
+        startParams = new NameValuePair[6];
+        stopParams = new NameValuePair[4];
+
+        startParams[0] = new NameValuePair( Constants.MODE, Constants.PLAYBACK );
+        startParams[1] = new NameValuePair( Constants.CMD, Constants.START );
+        startParams[2] = new NameValuePair( Constants.FILTER_SKIP_PARAM, Boolean.TRUE.toString() );
+        startParams[3] = new NameValuePair( Constants.TEST_NAME, getTest().getName() );
+        startParams[4] = new NameValuePair( Constants.DESCRIPTION, getDescription() );
+        startParams[5] = new NameValuePair( Constants.TEST_USER, getTestUser() );
+
+        stopParams[0] = new NameValuePair( Constants.MODE, Constants.PLAYBACK );
+        stopParams[1] = new NameValuePair( Constants.CMD, Constants.STOP );
+        stopParams[2] = new NameValuePair( Constants.FILTER_SKIP_PARAM, Boolean.TRUE.toString() );
+    }
+
+    public boolean run() throws PlaybackException {
+        boolean rtnVal = false;
+        // start playback
+        Throwable exception = null;
+        try {
+            startPlayback();
+            executeRequests();
+        }
+        catch ( Throwable e ) {
+            log.error( "start failure", e );
+            exception = e;
+        }
+        finally {
+            if ( getTestId() != null ) {
+                // we successfully started, so stop
+                try {
+                    rtnVal = stopPlayback();
+                }
+                catch ( Throwable e ) {
+                    if ( exception == null ) {
+                        exception = e;
+                    }
+                    else {
+                        log.error( "ERROR: possible spurious failure, failed to stop playback, exception( " +
+                                e.getMessage() + " )", e );
+                    }
+                }
+            }
+            if ( exception != null ) {
+                String msg = "ERROR: playback failed, exception( " + exception.getMessage() + " )";
+                log.error( msg, exception );
+                if ( exception instanceof PlaybackException ) {
+                    throw (PlaybackException) exception;
+                }
+                throw new PlaybackException( msg, exception );
+            }
+        }
+        return rtnVal;
+    }
+
+    protected void startPlayback() throws PlaybackException {
+        HttpMethod method = new GetMethod( RequestData.genUri( "http",
+                getTest().getWebapp().getServer().getHostname(), getTest().getWebapp().getServer().getPort(),
+                getTest().getWebapp().getServletURI() ) );
+        method.setQueryString( getStartParams() );
+        ResponseData response = null;
+        try {
+            response = execute( getControlClient(), method );
+        }
+        catch ( Exception e ) {
+            String msg = "Failed to execute start playback request, exception( " + e.getMessage() + " )";
+            log.error( msg, e );
+            if ( e instanceof PlaybackException ) {
+                throw (PlaybackException) e;
+            }
+            throw new PlaybackException( msg, e );
+        }
+        String outcome = response.getHeader( Constants.OUTCOME_HEADER );
+        String testId = response.getHeader( Constants.TEST_ID_HEADER );
+        String testFileName = response.getHeader( Constants.RECORD_FILE_HEADER );
+        String startMsg = response.getHeader( Constants.MSG_ATTRIBUTE );
+        // config the playback stop params
+        setStopParam( 3, new NameValuePair( Constants.TEST_ID_HEADER, testId ) );
+        setTestId( testId );
+        if ( log.isInfoEnabled() ) {
+            log.info( "outcome( " + outcome + " )" );
+            log.info( "testId( " + getTestId() + " )" );
+            log.info( "testFileName( " + testFileName + " )" );
+        }
+        // failed
+        if ( outcome == null || !outcome.equals( Constants.PASS ) ) {
+            throw new PlaybackException(
+                    "ERROR: failed to start playback, server error message( " + startMsg + " )" );
+        }
+        this.recordFile = new File( testFileName );
+        if ( !getRecordFile().canRead() ) {
+            String msg = "ERROR: failed to start playback, lacking permissions to read record file( " +
+                    getRecordFile() + " )";
+            System.out.println( msg );
+            log.error( msg );
+            throw new PlaybackException( msg );
+        }
+        RecordSessionBean session = createSession();
+        setSession( session );
+        if ( log.isInfoEnabled() ) {
+            log.info( "playback started for test( " + getTest().getName() + " )" );
+        }
+    }
+
+    protected boolean stopPlayback() throws PlaybackException {
+        boolean rtnVal = false;
+        HttpMethod method = new GetMethod( RequestData.genUri( "http",
+                getTest().getWebapp().getServer().getHostname(), getTest().getWebapp().getServer().getPort(),
+                getTest().getWebapp().getServletURI() ) );
+        method.setQueryString( getStopParams() );
+        ResponseData response = null;
+        try {
+            response = execute( getControlClient(), method );
+        }
+        catch ( Exception e ) {
+            String msg = "Failed to execute stop playback request, exception( " + e.getMessage() + " )";
+            log.error( msg, e );
+            if ( e instanceof PlaybackException ) {
+                throw (PlaybackException) e;
+            }
+            throw new PlaybackException( msg, e );
+        }
+        String outcome = response.getHeader( Constants.OUTCOME_HEADER );
+        String resultsFileName = response.getHeader( Constants.RESULTS_FILE_HEADER );
+        String diffFileName = response.getHeader( Constants.RESULTS_DIFF_HEADER );
+        String stopMsg = response.getHeader( Constants.MSG_ATTRIBUTE );
+        if ( log.isDebugEnabled() ) {
+            log.debug( "stop outcome( " + outcome + " )" );
+            log.debug( "stopMsg( " + stopMsg + " )" );
+        }
+        if ( outcome != null && !outcome.equals( Constants.ERROR ) ) {
+            // requests successfully executed
+            if ( log.isInfoEnabled() ) {
+                log.info( "Results are stored in file( " + resultsFileName + " )" );
+            }
+            setResultsFile( new File( resultsFileName ) );
+            // if there were errors then report them...
+            if ( outcome.equals( Constants.FAIL ) ) {
+                if ( log.isInfoEnabled() ) {
+                    log.info( "Diff results are stored in file( " + diffFileName + " )" );
+                }
+                setDiffFile( new File( diffFileName ) );
+                rtnVal = false;
+            }
+            else {
+                rtnVal = true;
+            }
+        }
+        else {
+            String msg = "ERROR: error encountered executing test( " + getTest().getName() + " ), server msg( " +
+                    stopMsg + " )";
+            log.error( msg );
+            throw new PlaybackException( msg );
+        }
+        return rtnVal;
+    }
+
+    private RecordSessionBean createSession() throws PlaybackException {
+        RecordSessionBean session = null;
+        try {
+            session = XMLHelper.getRecordSessionBean( getRecordFile() );
+            if ( log.isDebugEnabled() ) {
+                log.debug( "test( " + getTest().getName() + " ), testCount( " + session.getTestCount() + " )" );
+            }
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed to process session file( " + getRecordFile().getAbsolutePath() + " )";
+            log.error( msg, e );
+            throw new PlaybackException( msg, e );
+        }
+        return session;
+    }
+
+    private void executeRequests() throws PlaybackException {
+        RequestData request = null;
+        int testNumber = 0;
+        try {
+            List requestList = getSession().getRequestData();
+            if ( log.isDebugEnabled() ) {
+                log.debug( "beginning test execution" );
+            }
+            for ( testNumber = 0; testNumber < requestList.size(); testNumber++ ) {
+                request = (RequestData) requestList.get( testNumber );
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "beginning execution for test number( " + ( testNumber + 1 ) + " )" );
+                }
+                HttpMethod method = createPlaybackMethod( request, getTest() );
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "playback URI( " + method.getURI() + " )" );
+                }
+                ResponseData response = execute( getTestClient(), method );
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "playback response, status code( " + response.getStatusCode() + " )" );
+                    log.debug( "playback response, body(\n" + response.getBody() + " )" );
+                }
+                String outcome = response.getHeader( Constants.OUTCOME_HEADER );
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "outcome( " + outcome + " )" );
+                }
+                if ( response.getStatusCode() >= 400 ) {
+                    String msg = "WARNING: unable to access URI( " + method.getURI() +
+                            " ), status code( " + response.getStatusCode() + " ) returned";
+                    System.out.println( msg );
+                    if ( log.isWarnEnabled() ) {
+                        log.warn( msg );
+                    }
+                }
+            }
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed executing request for test( " + getTest().getName() +
+                    " ), testNumber( " + testNumber + " ), path( " + request.getPath() + " ), exception( "
+                    + e.getMessage() + " )";
+            log.error( msg, e );
+            if ( e instanceof PlaybackException ) {
+                throw (PlaybackException) e;
+            }
+            throw new PlaybackException( msg, e );
+        }
+    }
+
+    protected ResponseData execute( HttpClient client, HttpMethod method ) throws PlaybackException, IOException {
+        ResponseData response = new ResponseData( method.getHostConfiguration().getHost(),
+                method.getHostConfiguration().getPort() );
+        int statusCode = -1;
+        // retry up to 3 times.
+        for ( int attempt = 0; statusCode == -1 && attempt < 3; attempt++ ) {
+            try {
+                statusCode = client.executeMethod( method );
+            }
+            catch ( HttpRecoverableException e ) {
+                if ( log.isWarnEnabled() ) {
+                    String msg = "A recoverable exception occurred calling URI( " + method.getURI() +
+                            " ), retrying. exception( " + e.getMessage() + " )";
+                    log.error( msg, e );
+                }
+            }
+            catch ( IOException e ) {
+                String msg = "Failed executing request( " + method.getURI() + " ), exception( " + e.getMessage() +
+                        " )";
+                log.error( msg, e );
+                throw e;
+            }
+        }
+        // Retries failed
+        if ( statusCode == -1 ) {
+            String msg = "Failed to execute request( " + method.getURI() + " )";
+            log.error( msg );
+            throw new PlaybackException( msg );
+        }
+        response.setStatusCode( statusCode );
+        byte[] responseBody = method.getResponseBody();
+        response.setBody( new String( responseBody ) );
+        if ( log.isDebugEnabled() ) {
+            log.debug( "statusCode( " + statusCode + " )" );
+//            log.debug( "response body:\n" + response.getBody() + "\n" );
+        }
+        response.setHeaders( convertHeaders( method.getResponseHeaders() ) );
+        method.releaseConnection();
+        return response;
+    }
+
+    protected HttpMethod createPlaybackMethod( RequestData request, TestDefinition test ) {
+        HttpMethod method = null;
+        if ( request.getMethod().equalsIgnoreCase( "POST" ) ) {
+            method = new PostMethod( request.getUri( getTest().getWebapp().getServer().getHostname(),
+                    getTest().getWebapp().getServer().getPort() ) );
+            populatePlaybackPostMethod( (PostMethod) method, request );
+        }
+        else if ( request.getMethod().equalsIgnoreCase( "GET" ) ) {
+            method = new GetMethod( request.getUri( getTest().getWebapp().getServer().getHostname(),
+                    getTest().getWebapp().getServer().getPort() ) );
+            populatePlaybackGetMethod( (GetMethod) method, request );
+        }
+        else {
+            throw new RuntimeException( "ERROR: unhandled HTTP method( " + request.getMethod() + " )" );
+        }
+        return method;
+    }
+
+    protected HttpMethod populatePlaybackPostMethod( final PostMethod method, final RequestData request ) {
+        log.debug( "calling setRequestBody()" );
+        method.setRequestBody( convertNVPairs( request.getParameters() ) );
+        populatePlaybackMethod( method, request );
+        debugNameValuePairs( method.getParameters() );
+        return method;
+    }
+
+    protected HttpMethod populatePlaybackGetMethod( final GetMethod method, final RequestData request ) {
+        populatePlaybackMethod( method, request );
+        method.setQueryString( convertNVPairs( request.getParameters() ) );
+        return method;
+    }
+
+    protected HttpMethod populatePlaybackMethod( final HttpMethod method, RequestData request ) {
+        addRequestHeaders( method, request );
+        addTestIdHeader( method );
+        return method;
+    }
+
+    protected HttpMethod addRequestHeaders( HttpMethod method, RequestData request ) {
+        for ( int i = 0; i < request.getHeaderCount(); i++ ) {
+            if ( skipPlaybackHeader( request.getHeaderName( i ) ) ) {
+                continue;
+            }
+            method.addRequestHeader( request.getHeaderName( i ), request.getHeaderValue( i ) );
+        }
+        return method;
+    }
+
+    /**
+     * if this method returns true the header specified by the name parameter should not be sent to the
+     * client during playback
+     *
+     * @param name
+     * @return
+     */
+    protected boolean skipPlaybackHeader( String name ) {
+        // fail mode header is for legacy record files
+        if ( name.equalsIgnoreCase( "host" ) ||
+                name.equalsIgnoreCase( "referer" ) ||
+                name.equalsIgnoreCase( "Content-length" ) ||
+                name.equalsIgnoreCase( "Host" ) ||
+                name.equals( Constants.TEST_ID_HEADER ) ||
+                name.equals( Constants.FAIL_MODE_HEADER ) ||
+                name.equals( Constants.TEST_NUMBER_HEADER ) ) {
+            // skip
+            return true;
+        }
+        return false;
+    }
+
+    public NameValuePair[] getStartParams() {
+        return startParams;
+    }
+
+    protected void setStartParams( NameValuePair[] startParams ) {
+        this.startParams = startParams;
+    }
+
+    protected void setStartParam( int index, NameValuePair param ) {
+        if ( index >= startParams.length ) {
+            throw new IndexOutOfBoundsException( "Invalid start parameter index( " + index +
+                    " ), start parameter size is (" + startParams.length + ")" );
+        }
+        stopParams[index] = param;
+    }
+
+    public NameValuePair[] getStopParams() {
+        return stopParams;
+    }
+
+    protected void setStopParams( NameValuePair[] stopParams ) {
+        this.stopParams = stopParams;
+    }
+
+    protected void setStopParam( int index, NameValuePair param ) {
+        if ( index >= stopParams.length ) {
+            throw new IndexOutOfBoundsException( "Invalid stop parameter index( " + index +
+                    " ), stop parameter size is (" + stopParams.length + ")" );
+        }
+        stopParams[index] = param;
+    }
+
+    protected HttpMethod addTestIdHeader( HttpMethod method ) {
+        if ( getTestId() != null ) {
+            method.setRequestHeader( Constants.TEST_ID_HEADER, getTestId() );
+        }
+        return method;
+    }
+
+    public RecordSessionBean getSession() {
+        return session;
+    }
+
+    protected void setSession( RecordSessionBean session ) {
+        this.session = session;
+    }
+
+    protected HttpClient getTestClient() {
+        return testClient;
+    }
+
+    protected HttpClient getControlClient() {
+        return controlClient;
+    }
+
+    public TestDefinition getTest() {
+        return test;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getTestUser() {
+        return testUser;
+    }
+
+    public String getTestId() {
+        return testId;
+    }
+
+    protected void setTestId( String testId ) {
+        this.testId = testId;
+    }
+
+    public File getRecordFile() {
+        return recordFile;
+    }
+
+    public File getResultsFile() {
+        return resultsFile;
+    }
+
+    protected void setResultsFile( File resultsFile ) {
+        this.resultsFile = resultsFile;
+    }
+
+    public File getDiffFile() {
+        return diffFile;
+    }
+
+    protected void setDiffFile( File diffFile ) {
+        this.diffFile = diffFile;
+    }
+
+    private static NVPair[] convertHeaders( Header[] headers ) {
+        if ( headers == null ) {
+            return null;
+        }
+        NVPair[] newPairs = new NVPair[headers.length];
+        NVPair newPair = null;
+        for ( int i = 0; i < headers.length; i++ ) {
+            newPair = convertHeader( headers[i] );
+            newPairs[i] = newPair;
+        }
+        return newPairs;
+    }
+
+    private static NVPair convertHeader( Header header ) {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "header, name( " + header.getName() + " ), value( " + header.getValue() + " )" );
+        }
+        return new NVPair( header.getName(), header.getValue() );
+    }
+
+    private static NameValuePair[] convertNVPairs( NVPair[] pairs ) {
+        if ( pairs == null ) {
+            return null;
+        }
+        NameValuePair[] newPairs = new NameValuePair[pairs.length];
+        NameValuePair newPair = null;
+        for ( int i = 0; i < pairs.length; i++ ) {
+            newPair = convertNVPair( pairs[i] );
+            newPairs[i] = newPair;
+        }
+        return newPairs;
+    }
+
+    private static NameValuePair convertNVPair( NVPair pair ) {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "pair, name( " + pair.getName() + " ), value( " + pair.getValue() + " )" );
+        }
+        return new NameValuePair( pair.getName(), pair.getValue() );
+    }
+
+    private static void debugNameValuePairs( NameValuePair[] pairs ) {
+        if ( pairs == null ) {
+            log.debug( "pairs( " + pairs + " )" );
+            return;
+        }
+        for ( int i = 0; i < pairs.length; i++ ) {
+            log.debug(
+                    "pair(" + i + ")[ name( " + pairs[i].getName() + " ), value( " + pairs[i].getValue() + " )" );
+        }
+        return;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/TestRecorderJUnitTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/client/TestRecorderJUnitTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,76 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.client;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.Constants;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition;
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ */
+public class TestRecorderJUnitTest extends TestCase {
+
+    private static final Logger log = Logger.getInstance( TestRecorderJUnitTest.class );
+    private TestDefinition test;
+
+    public TestRecorderJUnitTest( TestDefinition test ) {
+        super( test.getName() );
+        this.test = test;
+    }
+
+    protected void runTest() throws Throwable {
+        boolean outcome = execute();
+        if ( !outcome ) {
+            String msg = "\nPlayback FAILED for test( " + getTest().getName() + " )\n";
+            if ( log.isWarnEnabled() ) {
+                log.warn( msg );
+            }
+            System.out.println( msg );
+            Assert.fail( msg );
+        }
+    }
+
+    private boolean execute() {
+        boolean outcome = false;
+        String testUser = System.getProperty( "user.name" );
+        PlaybackExecutor exec = new PlaybackExecutor( getTest(), testUser, testUser );
+        try {
+            outcome = exec.run();
+            String msg = ( outcome == true ) ? Constants.PASS : Constants.FAIL ;
+            System.out.println( "Finished: '" + getTest().getName() + "': " + msg );
+            if ( log.isWarnEnabled() ) {
+                log.warn( "Finished: '" + getTest().getName() + "': " + msg );
+            }
+        }
+        catch ( Throwable ex ) {
+            outcome = false;
+            String msg = "ERROR: failed executing playback, exception( " + ex.getMessage() + " )";
+            System.out.println( Logger.format( msg, ex ) );
+            log.error( msg, ex );
+        }
+        return outcome;
+    }
+
+    public TestDefinition getTest() {
+        return test;
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/AbstractDiffEngine.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/AbstractDiffEngine.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.DiffFailedException;
+import org.apache.beehive.netui.tools.testrecorder.shared.NVPair;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.TestResults;
+
+/**
+ * User: ozzy
+ * Date: Jul 9, 2004
+ * Time: 10:10:18 AM
+ */
+public abstract class AbstractDiffEngine implements DiffEngine {
+
+    private static final Logger log = Logger.getInstance( AbstractDiffEngine.class );
+
+    public TestResults diff( RequestData recordRequest, ResponseData recordResponse, RequestData playbackRequest,
+            ResponseData playbackResponse, TestResults results ) throws DiffFailedException {
+        results = diff( recordRequest, playbackRequest, results );
+        results = diff( recordResponse, playbackResponse, results );
+        return results;
+    }
+
+    public abstract TestResults responseBodyDiff( String record, String playback, TestResults results )
+            throws DiffFailedException;
+
+    public TestResults diff( RequestData record, RequestData playback,
+            TestResults results ) throws DiffFailedException {
+        if ( !record.getProtocol().equals( playback.getProtocol() ) ) {
+            results.addDiffResult( "record request protocol( " + record.getProtocol() +
+                    " ) does not match playback request protocol( " +
+                    playback.getProtocol() + " )" );
+        }
+        if ( !record.getPath().equals( playback.getPath() ) ) {
+            results.addDiffResult( "record request path( " + record.getPath() +
+                    " ) does not match playback request path( " +
+                    playback.getPath() + " )" );
+        }
+        if ( !record.getMethod().equals( playback.getMethod() ) ) {
+            results.addDiffResult( "record request method( " + record.getMethod() +
+                    " ) does not match playback request method( " +
+                    playback.getMethod() + " )" );
+        }
+        results = diffParams( record.getParameters(), playback.getParameters(), results );
+        return results;
+    }
+
+    public TestResults diffParams( NVPair[] record, NVPair[] playback,
+            TestResults results ) throws DiffFailedException {
+        // assumption: params are sorted.
+        NVPair recPair = null;
+        NVPair playPair = null;
+        int i = 0;
+        boolean match = false;
+        if ( record != null ) {
+            for ( i = 0; i < record.length; i++, match = false ) {
+                recPair = record[i];
+                if ( playback != null && i < playback.length ) {
+                    playPair = playback[i];
+                    if ( recPair.equals( playPair ) ) {
+                        match = true;
+                    }
+                }
+                else {
+                    // match stays false
+                    playPair = null;
+                }
+                if ( !match ) {
+                    results.addDiffResult( "record request parameter( " + recPair +
+                            " ) does not match playback request parameter( " +
+                            playPair + " )" );
+                }
+            }
+        }
+        if ( playback != null ) {
+            // see if more playback params exist
+            recPair = null;
+            for ( ; i < playback.length; i++ ) {
+                playPair = playback[i];
+                results.addDiffResult( "record request parameter( " + recPair +
+                        " ) does not match playback request parameter( " +
+                        playPair + " )" );
+            }
+        }
+        return results;
+    }
+
+    public TestResults diff( ResponseData record, ResponseData playback, TestResults results )
+            throws DiffFailedException {
+        if ( record.getStatusCode() != playback.getStatusCode() ) {
+            results.addDiffResult( "record response status code( " + record.getStatusCode() +
+                    " ) does not match playback response status code( " +
+                    playback.getStatusCode() + " )" );
+        }
+        results = responseBodyDiff( record.getNormalizedBody(), playback.getNormalizedBody(), results );
+        return results;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DefaultFilterData.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DefaultFilterData.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,423 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Constants;
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.server.state.PlaybackSession;
+import org.apache.beehive.netui.tools.testrecorder.server.state.SessionFailedException;
+import org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession;
+import org.apache.beehive.netui.tools.testrecorder.server.serverAdapter.ServerAdapter;
+
+// J2EE dependencies.
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletResponseWrapper;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletException;
+
+import java.rmi.server.UID;
+import java.util.List;
+import java.util.ArrayList;
+import java.io.IOException;
+
+/**
+ * User: ozzy
+ * Date: Jul 9, 2004
+ * Time: 1:19:14 PM
+ */
+public class DefaultFilterData implements FilterData {
+
+    private static final Logger log = Logger.getInstance( DefaultFilterData.class );
+
+    private ServletRequest request;
+    private ServletResponse response;
+    private ServerAdapter serverAdapter;
+    protected String reqURI;
+    // wrapper
+    private ServletResponse newResponse;
+    protected boolean skipFilter = false;
+    protected boolean newRequest = false;
+    protected boolean testException = false;
+    // playback variables
+    protected String testId;
+    private PlaybackSession playbackSession;
+    // is this method call handling a record transaction?
+    // this indicates that we are in record mode.
+    private RecordSession recordSession;
+    private RequestData reqData;
+    private ResponseData respData;
+    private List testExceptions;
+    private List sessionExceptions;
+
+    public DefaultFilterData( ServletRequest request, ServletResponse response, ServerAdapter serverAdapter ) {
+        this.request = request;
+        this.response = response;
+        this.serverAdapter = serverAdapter;
+        testExceptions = new ArrayList();
+        sessionExceptions = new ArrayList();
+    }
+
+    public void init() throws SessionFailedException {
+        processRequest();
+        processResponse();
+    }
+
+    protected void processRequest() throws SessionFailedException {
+        reqURI = ( (HttpServletRequest) request ).getRequestURI();
+
+        ServletRequest original = getOriginalRequest();
+        testNewRequest( original );
+        testSkipFilter( original );
+        testForTestId( original );
+        testForTestException();
+
+        // capture request data, this may not be necessary if we aren't recording or playing back.
+        reqData = RequestData.populate( (HttpServletRequest) request, new RequestData() );
+    }
+
+    protected void testForTestId( ServletRequest request ) {
+        testId = ( (HttpServletRequest) request ).getHeader( Constants.TEST_ID_HEADER );
+    }
+
+    protected void testForTestException() {
+        Boolean val = (Boolean) getRequest().getAttribute( Constants.REQUEST_EXCEPTION_MARKER_ATTRIBUTE );
+        if ( val != null ) {
+            testException = val.booleanValue();
+        }
+        if ( testException ) {
+            val = (Boolean) getRequest().getAttribute( Constants.REQUEST_NEW_EXCEPTION_MARKER_ATTRIBUTE );
+            if ( val != null ) {
+                newRequest = val.booleanValue();
+                if ( newRequest ) {
+                    getRequest().setAttribute( Constants.REQUEST_NEW_EXCEPTION_MARKER_ATTRIBUTE,
+                            Boolean.valueOf( false ) );
+                }
+            }
+        }
+    }
+
+    protected void testSkipFilter( ServletRequest request ) {
+        skipFilter = Boolean.valueOf( request.getParameter( Constants.FILTER_SKIP_PARAM ) ).booleanValue();
+        // check to see if the skip request attribute is set
+        if ( skipFilter == false ) {
+            // or the skip may be set as an attribute when using a forward
+            Object obj = request.getAttribute( Constants.FILTER_SKIP_PARAM );
+            if ( obj != null ) {
+                if ( obj instanceof Boolean ) {
+                    Boolean bool = (Boolean) obj;
+                    skipFilter = bool.booleanValue();
+                }
+            }
+            if ( skipFilter == false ) {
+                skipFilter = Boolean.valueOf( ( (HttpServletRequest) request ).getHeader(
+                        Constants.FILTER_SKIP_PARAM ) ).booleanValue();
+            }
+        }
+    }
+
+    protected void testNewRequest( ServletRequest request ) {
+        UID uid = (UID) request.getAttribute( Constants.REQUEST_MARKER_ATTRIBUTE );
+        // the request should not have been wrapped either if it goes here
+        if ( uid == null ) {
+            // this is the first time this request has been seen in the filter.
+            // set the marker attribute
+            request.setAttribute( Constants.REQUEST_MARKER_ATTRIBUTE, new UID() );
+            newRequest = true;
+        }
+        else {
+            newRequest = false;
+        }
+    }
+
+    protected void processResponse() throws SessionFailedException {
+        // create a response wrapper for capturing response data.
+        ServletResponse original = getOriginalResponse();
+        if ( original instanceof ResponseWrapper ) {
+            if ( log.isDebugEnabled() ) {
+                log.debug( "instance of ResponseWrapper" );
+            }
+            if ( isNewRequest() ) {
+                // sanity check, new requests should not have an existing response wrapper
+                throw new SessionFailedException(
+                        "test recorder failure, requests deemed 'new' should not have previous response wrapper" );
+            }
+            setNewResponse( response );
+        }
+        else {
+            if ( log.isDebugEnabled() ) {
+                log.debug( "NOT instance of ResponseWrapper" );
+            }
+            if ( !isNewRequest() ) {
+                // sanity check, only new requests should need to have the response wrapped
+                throw new SessionFailedException( "test recorder failure, only new requests should be wrapped" );
+            }
+            setNewResponse( new ResponseWrapper( (HttpServletResponse) response ) );
+        }
+    }
+
+    /**
+     * return the original request.  if necessary work back through request wrappers to obtain original.
+     *
+     * @return
+     */
+    protected ServletRequest getOriginalRequest() {
+        ServletRequest original = request;
+        int i = 0;
+        while ( original instanceof HttpServletRequestWrapper ) {
+            original = ( (HttpServletRequestWrapper) original ).getRequest();
+            i++;
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "number of servlet request wrappers( " + i + " )" );
+        }
+        return original;
+    }
+
+    /**
+     * Return the original response or the test recorder wrapper around the original if it exists.
+     *
+     * @return
+     */
+    protected ServletResponse getOriginalResponse() {
+        ServletResponse original = response;
+        ServletResponse temp = response;
+        if ( log.isDebugEnabled() ) {
+            log.debug( "response.getClass().getName()( " + original.getClass().getName() + " )" );
+        }
+        while ( temp != null &&
+                ( original instanceof javax.servlet.ServletResponseWrapper ) &&
+                !( original instanceof ResponseWrapper ) ) {
+            temp = ( (ServletResponseWrapper) original ).getResponse();
+            if ( temp != null ) {
+                original = temp;
+            }
+            if ( log.isDebugEnabled() ) {
+                log.debug( "response.getClass().getName()( " + original.getClass().getName() + " )" );
+            }
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "final: (" + System.identityHashCode( original ) + ") response.getClass().getName()( " +
+                    original.getClass().getName() + " )" );
+        }
+        return original;
+    }
+
+    public void addTestException( Throwable e ) {
+        testExceptions.add( e );
+    }
+
+    public int getTestExceptionCount() {
+        return testExceptions.size();
+    }
+
+    /**
+     * return the first test exception if one exists.
+     *
+     * @return the first test exception or null
+     */
+    public Throwable getTestException() {
+        if ( getTestExceptionCount() == 0 ) {
+            return null;
+        }
+        return (Throwable) testExceptions.get( 0 );
+    }
+
+    public Throwable getTestException( int i ) {
+        return (Throwable) testExceptions.get( i );
+    }
+
+    public void addSessionException( Throwable e ) {
+        sessionExceptions.add( e );
+    }
+
+    public int getSessionExceptionCount() {
+        return sessionExceptions.size();
+    }
+
+    public Throwable getSessionException( int i ) {
+        return (Throwable) sessionExceptions.get( i );
+    }
+
+    /**
+     * rethrow the first test exception if it exists.
+     *
+     * @throws IOException
+     * @throws ServletException
+     */
+    public void throwTestException() throws IOException, ServletException {
+        Throwable ex = getTestException();
+        if ( ex != null ) {
+            if ( log.isWarnEnabled() ) {
+                log.warn( "rethrowing container exception( " + ex + " )", ex );
+            }
+            markTestException();
+            if ( ex instanceof IOException ) {
+                throw (IOException) ex;
+            }
+            if ( ex instanceof ServletException ) {
+                throw (ServletException) ex;
+            }
+            if ( ex instanceof RuntimeException ) {
+                throw (RuntimeException) ex;
+            }
+            // this shouldn't happen but this protects us from just returning from the method
+            // in the event of a progamming error.
+            // log and bail out the container interface has changed.
+            String msg = "Unexpected exception type( " + ex.getClass().getName() + " )";
+            log.error( msg );
+            assert false;
+            throw new RuntimeException( msg, ex );
+        }
+    }
+
+    protected void markTestException() {
+        getRequest().setAttribute( Constants.REQUEST_EXCEPTION_MARKER_ATTRIBUTE, Boolean.valueOf( true ) );
+        getRequest().setAttribute( Constants.REQUEST_NEW_EXCEPTION_MARKER_ATTRIBUTE, Boolean.valueOf( true ) );
+    }
+
+    public String getReqURI() {
+        return reqURI;
+    }
+
+    public ServletResponse getNewResponse() {
+        return newResponse;
+    }
+
+    protected void setNewResponse( ServletResponse newResponse ) {
+        this.newResponse = newResponse;
+    }
+
+    public boolean isSkipFilter() {
+        return skipFilter;
+    }
+
+    public boolean isNewRequest() {
+        return newRequest;
+    }
+
+    public boolean isTestException() {
+        return testException;
+    }
+
+    public String getTestId() {
+        return testId;
+    }
+
+    public boolean isPlayback() {
+        if ( getPlaybackSession() != null ) {
+            return true;
+        }
+        return false;
+    }
+
+    public PlaybackSession getPlaybackSession() {
+        return playbackSession;
+    }
+
+    public void setPlaybackSession( PlaybackSession playbackSession ) {
+        this.playbackSession = playbackSession;
+    }
+
+    public RecordSession getRecordingSession() {
+        return recordSession;
+    }
+
+    public void setRecordingSession( RecordSession recordSession ) {
+        this.recordSession = recordSession;
+    }
+
+    public void clearRecording() {
+        this.recordSession = null;
+    }
+
+
+    /**
+     * Indicates that the filter is in record mode and this is considered a new request.
+     *
+     * @return true if this is a new record request, false otherwise.
+     */
+    public boolean isNewRecording() {
+        if ( isRecording() && isNewRequest() ) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Indicates that the filter is in record mode for this request.
+     *
+     * @return true if this is a record request, false otherwise.
+     */
+    public boolean isRecording() {
+        if ( recordSession != null ) {
+            return true;
+        }
+        return false;
+    }
+
+    public RequestData getReqData() {
+        return reqData;
+    }
+
+    public ResponseData getRespData() {
+        return respData;
+    }
+
+    public void setRespData( boolean replaceSessionId ) throws SessionFailedException {
+        respData = ResponseWrapper.populate( (HttpServletResponse) newResponse,
+                new ResponseData( request.getServerName(), request.getServerPort() ) );
+        if ( replaceSessionId && respData.getBody() != null ) {
+            respData.setBody( serverAdapter.replaceSessionID( respData.getBody() ) );
+        }
+    }
+
+    public ServletRequest getRequest() {
+        return request;
+    }
+
+    public ServletResponse getResponse() {
+        return response;
+    }
+
+    public ServerAdapter getServerAdapter() {
+        return serverAdapter;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+        sb.append( "reqURI( " + getReqURI() + " )" );
+        sb.append( ", skipFilter( " + isSkipFilter() + " )" );
+        sb.append( ", newRequest( " + isNewRequest() + " )" );
+        sb.append( ", isTestException( " + isTestException() + " )" );
+        sb.append( ", recording( " + isRecording() + " )" );
+        sb.append( ", testId( " + getTestId() + " )" );
+        sb.append( ", playbackSession( " + getPlaybackSession() + " )" );
+        sb.append( ", exception( " + getTestException() + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DiffEngine.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DiffEngine.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+import org.apache.beehive.netui.tools.testrecorder.shared.DiffFailedException;
+import org.apache.beehive.netui.tools.testrecorder.shared.TestResults;
+
+/**
+ * User: ozzy
+ * Date: Jul 9, 2004
+ * Time: 10:04:11 AM
+ */
+public interface DiffEngine {
+
+    TestResults diff( RequestData recordRequest, ResponseData recordResponse,
+            RequestData playbackRequest, ResponseData playbackResponse,
+            TestResults results ) throws DiffFailedException;
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DiffEngineFactory.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/DiffEngineFactory.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+/**
+ * User: ozzy
+ * Date: Jul 9, 2004
+ * Time: 11:13:00 AM
+ */
+public class DiffEngineFactory {
+
+    public static DiffEngine getInstance( FilterData filterData ) {
+        return new LineDiffEngine();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/FilterData.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/FilterData.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+import org.apache.beehive.netui.tools.testrecorder.server.state.PlaybackSession;
+import org.apache.beehive.netui.tools.testrecorder.server.state.SessionFailedException;
+import org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession;
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletException;
+import java.io.IOException;
+
+/**
+ * User: ozzy
+ * Date: Jul 8, 2004
+ * Time: 3:28:25 PM
+ */
+public interface FilterData {
+
+    void init() throws SessionFailedException;
+
+    ServletRequest getRequest();
+
+    ServletResponse getResponse();
+
+    ServletResponse getNewResponse();
+
+    String getReqURI();
+
+    boolean isNewRequest();
+
+    boolean isSkipFilter();
+
+    public boolean isTestException();
+
+    String getTestId();
+
+    boolean isPlayback();
+
+    PlaybackSession getPlaybackSession();
+
+    void setPlaybackSession( PlaybackSession playbackSession );
+
+    boolean isRecording();
+
+    boolean isNewRecording();
+
+    RecordSession getRecordingSession();
+
+    void setRecordingSession( RecordSession recordSession );
+
+    void clearRecording();
+
+    RequestData getReqData();
+
+    ResponseData getRespData();
+
+    void setRespData( boolean replaceSessionId ) throws SessionFailedException;
+
+    void addTestException( Throwable e );
+
+    int getTestExceptionCount();
+
+    /**
+     * return the first test exception if one exists.
+     *
+     * @return the first test exception or null if no exceptions exist
+     */
+    Throwable getTestException();
+
+    Throwable getTestException( int i );
+
+    void addSessionException( Throwable e );
+
+    int getSessionExceptionCount();
+
+    Throwable getSessionException( int i );
+
+    /**
+     * rethrow the first test exception if it exists.
+     *
+     * @throws IOException
+     * @throws ServletException
+     */
+    void throwTestException() throws IOException, ServletException;
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/LineDiffEngine.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/LineDiffEngine.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.DiffFailedException;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.TestResults;
+
+import java.io.LineNumberReader;
+import java.io.StringReader;
+
+/**
+ * User: ozzy
+ * Date: Jul 9, 2004
+ * Time: 10:07:32 AM
+ */
+public class LineDiffEngine extends AbstractDiffEngine {
+
+    private static final Logger log = Logger.getInstance( LineDiffEngine.class );
+
+    private static final String REGEX_MARKER = "REGEX:";
+
+    public TestResults responseBodyDiff( String record, String playback, TestResults results )
+            throws DiffFailedException {
+        try {
+            LineNumberReader recReader = new LineNumberReader( new StringReader( record ) );
+            LineNumberReader playReader = new LineNumberReader( new StringReader( playback ) );
+            String recLine = null;
+            String playLine = null;
+            boolean match;
+            while ( ( recLine = recReader.readLine() ) != null ) {
+                playLine = playReader.readLine();
+                if ( playLine != null ) {
+                    playLine = playLine.trim();
+                    recLine = recLine.trim();
+                    if ( recLine.startsWith( REGEX_MARKER ) ) {
+                        match = playLine.matches( recLine.substring( REGEX_MARKER.length() ).trim() );
+                    }
+                    else {
+                        match = recLine.equals( playLine );
+                    }
+                }
+                else {
+                    match = false;
+                }
+
+                if ( !match ) {
+                    results.addDiffResult( "Line (" + recReader.getLineNumber() +
+                            ") does not match. \n" +
+                            "R: " + recLine + "\n" +
+                            "P: " + playLine + "\n" );
+                }
+            }
+            if ( log.isDebugEnabled() ) {
+                log.debug( "**** record reader has no more lines ****" );
+            }
+            while ( ( playLine = playReader.readLine() ) != null ) {
+                match = false;
+                results.addDiffResult( "Line (" + playReader.getLineNumber() +
+                        ") does not match.\n" +
+                        "R: " + recLine + "\n" +
+                        "P: " + playLine + "\n" );
+            }
+        }
+        catch ( Exception ex ) {
+            String msg = "diff failed, exception( " + ex.getMessage() + " )";
+            log.error( msg, ex );
+            throw new DiffFailedException( msg, ex );
+        }
+        return results;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/ResponseWrapper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/ResponseWrapper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,170 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+import org.apache.beehive.netui.tools.testrecorder.server.state.SessionFailedException;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+import java.io.OutputStream;
+import java.io.IOException;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+
+public class ResponseWrapper extends HttpServletResponseWrapper {
+
+    private static final Logger log = Logger.getInstance( ResponseWrapper.class );
+
+    private ByteArrayOutputStream output;
+    private PrintWriter writer;
+    private ServletOutputStream servletStream;
+    private int statusCode = 200;
+    private String reason = "";
+    private String outputString = null;
+
+    public ResponseWrapper( HttpServletResponse response ) {
+        super( response );
+        output = new ByteArrayOutputStream( 2048 );
+    }
+
+    public PrintWriter getWriter() {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "getWriter()" );
+        }
+        if ( writer == null ) {
+            writer = new PrintWriter( output );
+        }
+        return writer;
+    }
+
+    public ServletOutputStream getOutputStream() throws IOException {
+        if ( log.isDebugEnabled() ) {
+//            log.debug( "getOutputStream()" );
+//            Exception e = new Exception();
+//            e.printStackTrace();
+        }
+        if ( servletStream == null ) {
+            servletStream = new InternalServletStream( output );
+        }
+        // create an internal output
+        return servletStream;
+    }
+
+    public void sendError( int statusCode ) throws IOException {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "sendError(): statusCode( " + statusCode + " )" );
+        }
+        this.statusCode = statusCode;
+        super.sendError( statusCode );
+    }
+
+    public void sendError( int statusCode, String reason ) throws IOException {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "sendError(): statusCode( " + statusCode + " )" );
+            log.debug( "reason( " + reason + " )" );
+        }
+        this.statusCode = statusCode;
+        this.reason = reason;
+        super.sendError( statusCode, reason );
+    }
+
+    public void setStatus( int statusCode ) {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "setStatus(): statusCode( " + statusCode + " )" );
+        }
+        this.statusCode = statusCode;
+        super.setStatus( statusCode );
+        if ( log.isDebugEnabled() ) {
+            log.debug( "setStatus() done" );
+        }
+    }
+
+    // package scoped
+    int getStatusCode() {
+        return statusCode;
+    }
+
+    // package scoped
+    String getReason() {
+        return reason;
+    }
+
+    // package scoped
+    String getOutputString() throws IOException {
+        if ( outputString == null ) {
+            if ( writer != null ) {
+                writer.flush();
+                writer.close();
+            }
+            output.flush();
+            output.close();
+            outputString = output.toString();
+        }
+        return outputString;
+    }
+
+    /**
+     * Internal class that implements a ServletOutputStream.  This is used to
+     * return our output stream to the JSP world.
+     */
+    static class InternalServletStream extends ServletOutputStream {
+
+        private OutputStream stream;
+
+        public InternalServletStream( OutputStream stream ) {
+            this.stream = stream;
+        }
+
+        public void write( int b )
+                throws IOException {
+            stream.write( b );
+        }
+    }
+
+    public static ResponseData populate( HttpServletResponse response,
+            ResponseData respData ) throws SessionFailedException {
+        String data = null;
+        try {
+            // may throw ClassCastException
+            ResponseWrapper wrapper = (ResponseWrapper) response;
+            respData.setReason( wrapper.getReason() );
+            if ( log.isDebugEnabled() ) {
+                log.debug( "populate status code( " + wrapper.getStatusCode() + " )" );
+            }
+            respData.setStatusCode( wrapper.getStatusCode() );
+            data = wrapper.getOutputString();
+        }
+        catch ( Exception e ) {
+            throw new SessionFailedException( "ERROR: failed to get output stream from wrapper" );
+        }
+        if ( log.isDebugEnabled() ) {
+//            log.debug( "data( " + data + " )" );
+        }
+        // data may be null
+        respData.setBody( data );
+        return respData;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/TestRecorderFilter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/TestRecorderFilter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,576 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Cookie;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.io.OutputStreamWriter;
+import java.text.MessageFormat;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Constants;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig;
+import org.apache.beehive.netui.tools.testrecorder.server.state.State;
+import org.apache.beehive.netui.tools.testrecorder.server.state.SessionFailedException;
+import org.apache.beehive.netui.tools.testrecorder.server.state.PlaybackSession;
+import org.apache.beehive.netui.tools.testrecorder.server.serverAdapter.ServerAdapter;
+import org.apache.beehive.netui.tools.testrecorder.server.serverAdapter.ServerAdapterUtils;
+
+
+public class TestRecorderFilter implements Filter {
+
+    private static final Logger log = Logger.getInstance( TestRecorderFilter.class );
+    private static final String ADMIN_LINK =
+        "<div id=\"netuiTestRecorder\" style=\"background-color:yellow;color: blue;margin:5;padding:10;border: 1pt solid;\">\n" +
+        "<hr>\n" +
+        "<span style=\"font-weight:bold\">Test Recorder:</span>&nbsp;\n" +
+        "<a href=\"{0}\">\n" +
+        "<span style=\"color:{1};font-weight:bold;\">{2}</span> Recording</a>\n" +
+        "<a href=\"{3}\">Admin</a>\n" +
+        "</div>";
+    /*
+    private static final String ADMIN_LINK =
+            "<hr><table style=\"background-color: yellow; color: blue\" width=\"100%\">" +
+            "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Test Recorder:&nbsp;</strong>" +
+            "&nbsp;&nbsp;&nbsp;<a href=\"{0}\">" +
+            "<b style=\"color: {1}\">{2}</b><strong> Recording</strong></a>" +
+            "&nbsp;&nbsp;&nbsp;<a href=\"{3}\"><strong>Admin</strong></a>" +
+            "<td><tr></table></span>";
+    */
+    private static final MessageFormat link = new MessageFormat( ADMIN_LINK );
+    // set in init, returned to callers via a public static method
+    private static TestRecorderFilter instance = null;
+    boolean initFlag = false;
+    // set once on first request
+    private static String contextPath;
+    // these two are dependent on contextPath and are set on first request/
+    private static Object[] startLink;
+    private static Object[] stopLink;
+
+    private TestDefinitions testDefinitions;
+    private WebappConfig webapp;
+    private FilterConfig filterConfig = null;
+    private State state;
+
+
+    public TestRecorderFilter() {
+    }
+
+    public void doFilter( ServletRequest request, ServletResponse response,
+            FilterChain chain ) throws IOException, ServletException {
+        if ( initFlag == false ) {
+            filterInit( request );
+        }
+        String reqURI = ( (HttpServletRequest) request ).getRequestURI();
+        if ( log.isDebugEnabled() ) {
+            log.debug( "\n\t\t**********************************************\n" );
+        }
+        if ( !getState().isTestMode() || !shouldHandleRequest( reqURI ) || isControlRequest( reqURI ) ) {
+            // not in test mode just or not a handled suffix, do the normal stuff ...
+            if ( log.isDebugEnabled() ) {
+                log.debug( "ignoring request, reqURI( " + reqURI + " ), testMode( " +
+                        getState().isTestMode() + " )" );
+            }
+            chain.doFilter( request, response );
+            return;
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "reqURI( " + reqURI + " )" );
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "state( " + getState() + " )" );
+            //reportCookies( ((HttpServletRequest) request).getCookies() );
+            //reportHeaders( RequestData.getHeaders( (HttpServletRequest) request ) );
+        }
+        ServerAdapter serverAdapter = ServerAdapterUtils.getServerAdapter();
+        FilterData data = serverAdapter.genFilterDataInstance( request, response, state );
+        try {
+            data.init();
+        }
+        catch ( SessionFailedException e ) {
+            data.addSessionException( e );
+        }
+        if ( data.isSkipFilter() == true ) {
+            // skip filter work and send the request on
+            if ( log.isDebugEnabled() ) {
+                log.debug( "skiping filter" );
+            }
+            chain.doFilter( data.getRequest(), data.getResponse() );
+            return;
+        }
+        try {
+            // no container work, session work only
+            preFilter( data, chain );
+        }
+        catch ( SessionFailedException e ) {
+            data.addSessionException( e );
+            log.error( "Pre filter work failed", e );
+        }
+        // filter work
+        if ( log.isDebugEnabled() ) {
+            log.debug( "calling doFilter()" );
+        }
+        // store any exceptions ... after cleanup rethrow exceptions
+        // as necessary.
+        try {
+            chain.doFilter( data.getRequest(), data.getNewResponse() );
+        }
+        catch ( Exception ex ) {
+            data.addTestException( ex );
+            if ( log.isDebugEnabled() ) {
+                log.debug( "caught filter chain exception( " + ex + " )", ex );
+            }
+        }
+        finally {
+            postFilter( data );
+            if ( log.isDebugEnabled() && data.isNewRequest() ) {
+                log.debug( "\nreturning, state( " + state + " )" );
+            }
+            else if ( log.isDebugEnabled() ) {
+                log.debug( "data.isNewRequest()( " + data.isNewRequest() + " )" );
+            }
+        }
+        return;
+    }
+
+    protected void postFilter( FilterData data ) throws IOException, ServletException {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "postFilter START" );
+        }
+        try {
+            if ( data.isPlayback() ) {
+                postFilterPlayback( data );
+            }
+            else {
+                String body = null;
+                if ( data.isNewRequest() || data.isNewRecording() ) {
+                    // the request has been wrapped, get the body
+                    try {
+                        if ( data.getTestExceptionCount() > 0 ) {
+                            ( (HttpServletResponse) data.getNewResponse() ).setStatus( 500 );
+                        }
+                        data.setRespData( false );
+                        body = data.getRespData().getBody();
+                    }
+                    catch ( Exception e ) {
+                        data.addSessionException( e );
+                        body = "Failed getting output string from wrapper, exception( " +
+                                e.getMessage() + " )";
+                        log.error( body, e );
+                        body = "<br/><br/><b>" + body + "</b><br/><br/></html>";
+                    }
+                }
+                if ( data.isNewRecording() ) {
+                    // recording and outer or new request
+                    if ( log.isDebugEnabled() ) {
+                        log.debug( "filter data( " + data + " )" );
+                    }
+                    postFilterRecord( data, body );
+                }
+                else if ( data.isNewRequest() ) {
+                    // not recording or playback but we have still captured the response,
+                    // write out the response with links if in test mode
+                    writeResponse( (ResponseWrapper) data.getNewResponse(), body, data, getState().isTestMode() );
+                }
+                else {
+                    // forward or include
+                    if ( log.isDebugEnabled() ) {
+                        log.debug( "forward or include, filter data( " + data + " )" );
+                    }
+                }
+            }
+        }
+        finally {
+            data.throwTestException();
+            if ( log.isDebugEnabled() ) {
+                log.debug( "postFilter END" );
+            }
+        }
+    }
+
+    protected void postFilterRecord( FilterData data, String body ) throws IOException, ServletException {
+        // capture record response data
+        if ( log.isDebugEnabled() ) {
+            log.debug( "data.isNewRecording()( " + data.isNewRecording() + " )" );
+        }
+        // write the response to the client, let IOExceptions bubble up as part of normal servlet behavior
+        try {
+            writeResponse( (ResponseWrapper) data.getNewResponse(), body, data, true );
+        }
+        finally {
+            int testNum = 0;
+            try {
+                if ( data.isTestException() ) {
+                    if ( log.isDebugEnabled() ) {
+                        log.debug( "skipping record end, isTestException(" + data.isTestException() + "), body( " +
+                                body + " )");
+                    }
+                }
+                else {
+                    testNum = data.getRecordingSession().endTest( data.getReqData(), data.getRespData() );
+                    if ( log.isDebugEnabled() ) {
+                        log.debug( "testNum( " + testNum + " )" );
+                    }
+                }
+            }
+            catch ( SessionFailedException e ) {
+                // do not rethrow exception
+                data.addSessionException( e );
+                log.error( "Failed to end test(" + testNum + ") for session( " +
+                        data.getRecordingSession().getSessionName() + " )" );
+            }
+            data.clearRecording();
+        }
+    }
+
+    protected void postFilterPlayback( FilterData data ) {
+        // capture playback response data
+        if ( log.isDebugEnabled() ) {
+            log.debug( "postFilterPlayback START" );
+        }
+        if ( !data.isNewRequest() ) {
+            // forward or include ... do nothing
+            if ( log.isDebugEnabled() ) {
+                log.debug( "data.isNewRequest()( " + data.isNewRequest() + " )" );
+                log.debug( "postFilterPlayback END" );
+            }
+            return;
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "filter data( " + data + " )" );
+        }
+        // new or outer request obtain response data and diff
+        int testNum = -2;
+        try {
+            if ( data.getTestExceptionCount() > 0 ) {
+                ( (HttpServletResponse) data.getNewResponse() ).setStatus( 500 );
+            }
+            data.setRespData( true );
+            if ( log.isDebugEnabled() ) {
+                log.debug( "response body( " + data.getRespData().getBody() + " )" );
+            }
+            if ( data.isTestException() ) {
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "skipping playback end, isTestException(" + data.isTestException() + ")" );
+                }
+            }
+            else {
+                testNum = data.getPlaybackSession().endTest( data );
+            }
+
+            if ( log.isDebugEnabled() ) {
+                log.debug( "testNum( " + testNum + " )" );
+            }
+        }
+                // Session exception
+        catch ( Exception ex ) {
+            data.addSessionException( ex );
+            if ( log.isDebugEnabled() ) {
+                log.debug( "Failed ending playback, exception( " + ex.getMessage() + " )", ex );
+            }
+            // do not rethrow.
+        }
+        finally {
+            if ( testNum >= 0 ) {
+                setResponseOutcome( data.getResponse(), Constants.PASS );
+            }
+            else {
+                log.error( "Failed ending test(" + testNum + ")" );
+                setResponseOutcome( data.getResponse(), Constants.FAIL );
+            }
+            // write the output to client
+            writeResponse( (ResponseWrapper) data.getNewResponse(), data.getRespData().getBody(), data, false );
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "postFilterPlayback END" );
+        }
+    }
+
+    /**
+     * @param data
+     * @param chain
+     * @throws SessionFailedException
+     */
+    protected void preFilter( FilterData data, FilterChain chain ) throws SessionFailedException {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "preFilter START" );
+        }
+        if ( data.getTestId() != null ) {
+            // playback ...
+            if ( log.isDebugEnabled() ) {
+                log.debug( "filter data( " + data + " )" );
+            }
+            if ( data.isNewRequest() ) {
+                PlaybackSession session = getState().getPlaybackSession( data.getTestId() );
+                if ( session == null ) {
+                    String msg = "ERROR: no playback session found for test id( " + data.getTestId() + " )";
+                    log.error( msg );
+                    throw new SessionFailedException( msg );
+                }
+                data.setPlaybackSession( session );
+                if ( data.isTestException() ) {
+                    if ( log.isDebugEnabled() ) {
+                        log.debug( "skipping playback start, isTestException(" + data.isTestException() + ")" );
+                    }
+                }
+                else {
+                    boolean started = session.startTest();
+                    // may throw SessionFailedException
+                    if ( !started ) {
+                        throw new SessionFailedException( "Playback session failed to start, session( " +
+                                session.getSessionName() + " )" );
+                    }
+                }
+            }
+            else {
+                // this is a forward ... do nothing
+            }
+            if ( log.isDebugEnabled() ) {
+                log.debug( "filter data( " + data + " )" );
+            }
+        }
+        else {
+            // not playback ... maybe recording ...
+            // we want to check this value once and leave it on for the life of the filter data object
+            // (this method call) so we check and set it in a synchronized block
+            synchronized ( getState() ) {
+                if ( getState().isRecording() == true ) {
+                    data.setRecordingSession( getState().getRecordingSession() );
+                }
+            }
+            if ( data.isNewRecording() ) {
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "filter data.isNewRecording()( " + data.isNewRecording() + " )" );
+                }
+                // only start recording the request the first time it is seen,
+                // not on forwards back through the container or test exceptions forwarded back to filter
+                if ( data.isTestException() ) {
+                    if ( log.isDebugEnabled() ) {
+                        log.debug( "skipping record start, isTestException(" + data.isTestException() + ")" );
+                    }
+                }
+                else {
+                    data.getRecordingSession().startTest();
+                }
+            }
+            else {
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "forward, include or not recording filter data( " + data + " )" );
+                }
+            }
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "preFilter END" );
+        }
+    }
+
+    public void init( FilterConfig filterConfig ) throws ServletException {
+        this.filterConfig = filterConfig;
+        instance = this;
+        String webappName = filterConfig.getInitParameter( "webapp" );
+        System.out.println( "initializing test recorder enabled webapp( " + webappName + " )" );
+        if ( log.isInfoEnabled() ) {
+            log.info( "webapp name( " + webappName + " )" );
+        }
+        testDefinitions = XMLHelper.getTestDefinitionsInstance( Thread.currentThread().getContextClassLoader() );
+        webapp = testDefinitions.getWebapps().getWebapp( webappName );
+        if ( webapp == null ) {
+            throw new ServletException(
+                    "ERROR: unable to find the webapp config for webapp name( " + webappName + " )" );
+        }
+        if ( log.isInfoEnabled() ) {
+            log.debug( "webapp( " + webapp + " )" );
+        }
+        state = new State();
+        state.setTestMode( webapp.isTestMode() );
+    }
+
+    public void destroy() {
+        if ( log.isInfoEnabled() ) {
+            log.info( "destroying test recorder filter for webapp( " + getWebapp().getName() + " )" );
+        }
+        instance = null;
+        this.filterConfig = null;
+    }
+
+    public State getState() {
+        return state;
+    }
+
+    public static TestRecorderFilter instance() {
+        return instance;
+    }
+
+    protected FilterConfig getFilterConfig() {
+        return filterConfig;
+    }
+
+    public WebappConfig getWebapp() {
+        return webapp;
+    }
+
+    public TestDefinitions getTestDefinitions() {
+        return testDefinitions;
+    }
+
+    private void writeResponse( ResponseWrapper wrapper, String body, FilterData data, boolean addLink ) {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "data.getReqURI()( " + data.getReqURI() + " )" );
+        }
+        try {
+            ServletResponse response = wrapper.getResponse();
+            Writer writer = getWriter( response );
+            // add a link to start or stop recording.
+            if ( addLink ) {
+                int index = body.lastIndexOf( Constants.BODY_END );
+                if ( index == -1 ) {
+                    if ( log.isDebugEnabled() ) {
+                        log.debug( "</body> was not found:\nbody(" + body + ")" );
+                    }
+                    // just print what is there
+                    writer.write( body );
+                }
+                else if ( data.isNewRequest() ) {
+                    writer.write( body.substring( 0, index ) );
+                    // write link
+                    Object[] objs = null;
+                    if ( getState().isRecording() ) {
+                        objs = stopLink;
+                    }
+                    else {
+                        objs = startLink;
+                    }
+                    writer.write( Constants.NL + link.format( objs ) + Constants.NL );
+                    writer.write( body.substring( index ) );
+                }
+                else {
+                    writer.write( body );
+                }
+            }
+            else {
+                writer.write( body );
+            }
+        }
+        catch ( IOException e ) {
+            data.addTestException( e );
+            if ( log.isWarnEnabled() ) {
+                log.warn( "Failed writing response, exception( " + e.getMessage() + " )" );
+            }
+        }
+    }
+
+    private Writer getWriter( ServletResponse resp ) throws IOException {
+        Writer writer = null;
+        try {
+            writer = resp.getWriter();
+        }
+        catch ( IllegalStateException e ) {
+            // when we get an IllegalStateException then someone accessed the
+            // output stream so we need to create the writer from the output stream
+            if ( log.isDebugEnabled() ) {
+                log.debug( "Creating a Writer for the response" );
+            }
+            writer = new OutputStreamWriter( resp.getOutputStream() );
+        }
+        return writer;
+    }
+
+    private void filterInit( ServletRequest request ) {
+        // prefix for requests to this webapp
+        contextPath = ( (HttpServletRequest) request ).getContextPath();
+        genStartStopLinks();
+        initFlag = true;
+    }
+
+    protected static void genStartStopLinks() {
+        startLink = new Object[4];
+        stopLink = new Object[4];
+
+        startLink[0] = contextPath + "/testRecorder/startRecord.jsp?" +
+                Constants.FILTER_SKIP_PARAM + "=true";
+        startLink[1] = Constants.GREEN;
+        startLink[2] = Constants.START;
+        startLink[3] = contextPath + "/testRecorder/index.jsp?" +
+                Constants.FILTER_SKIP_PARAM + "=true";
+
+        stopLink[0] = contextPath + "/testRecorder?" +
+                Constants.MODE + "=" + Constants.RECORD + "&" +
+                Constants.CMD + "=" + Constants.STOP + "&" +
+                Constants.FILTER_SKIP_PARAM + "=true";
+        stopLink[1] = Constants.RED;
+        stopLink[2] = Constants.STOP;
+        stopLink[3] = contextPath + "/testRecorder/index.jsp?" +
+                Constants.FILTER_SKIP_PARAM + "=true";
+    }
+
+    // determine if this url should be handled by the filter.
+    private boolean shouldHandleRequest( String reqURI ) {
+        boolean rtnVal = false;
+        // is the request URI to a servlet, no suffix
+        int slash = reqURI.lastIndexOf( "/" );
+        int period = reqURI.lastIndexOf( "." );
+        String suffix = null;
+        if ( slash > period ) {
+            // no period in the last segment of the path, no path suffix.
+            suffix = Constants.EMPTY_STRING;
+        }
+        else {
+            suffix = reqURI.substring( period + 1 );
+        }
+        rtnVal = getWebapp().handleSuffix( suffix );
+        return rtnVal;
+    }
+
+    private boolean isControlRequest( String reqURI ) {
+        if ( reqURI.startsWith( getWebapp().getServletURI() ) ) {
+            return true;
+        }
+        return false;
+    }
+
+    static void setResponseOutcome( ServletResponse response, String value ) {
+        ( (HttpServletResponse) response ).setHeader( Constants.OUTCOME_HEADER, value );
+    }
+
+// debugging method
+    protected static void reportCookies( Cookie[] cookies ) {
+        if ( cookies != null ) {
+            for ( int i = 0; i < cookies.length; i++ ) {
+                log.debug( "cookies[" + i + "]( " + cookies[i] + " )" );
+            }
+        }
+        else {
+            log.debug( "cookies( " + cookies + " )" );
+        }
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/TestRecorderServlet.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/TestRecorderServlet.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,849 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.io.FileReader;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletException;
+import javax.servlet.RequestDispatcher;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.Constants;
+import org.apache.beehive.netui.tools.testrecorder.shared.Reporter;
+import org.apache.beehive.netui.tools.testrecorder.shared.RecordSessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.SessionXMLException;
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.ConfigException;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Category;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig;
+import org.apache.beehive.netui.tools.testrecorder.server.state.PlaybackSession;
+import org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession;
+import org.apache.beehive.netui.tools.testrecorder.server.state.State;
+import org.apache.beehive.netui.tools.testrecorder.server.state.SessionFailedException;
+
+
+public class TestRecorderServlet extends HttpServlet {
+
+    private static final Logger log = Logger.getInstance( TestRecorderServlet.class );
+
+    public TestRecorderServlet() {
+    }
+
+    public void init() {
+        if ( log.isInfoEnabled() ) {
+            log.warn( "initializing ..." );
+        }
+    }
+
+    public void destroy() {
+        if ( log.isInfoEnabled() ) {
+            log.warn( "destroying ..." );
+        }
+        super.destroy();
+    }
+
+    public void doPost( HttpServletRequest request, HttpServletResponse response )
+            throws ServletException, IOException {
+        doGet( request, response );
+    }
+
+    public void doGet( HttpServletRequest request, HttpServletResponse response )
+            throws ServletException, IOException {
+        String mode = null;
+        try {
+            mode = request.getParameter( Constants.MODE );
+            if ( mode == null ) {
+                // fail
+                String msg = "mode( " + mode + " ) may not be null.";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            else if ( mode.equalsIgnoreCase( Constants.RECORD ) ) {
+                doRecord( request, response );
+            }
+            else if ( mode.equalsIgnoreCase( Constants.PLAYBACK ) ) {
+                doPlayback( request, response );
+            }
+            else if ( mode.equalsIgnoreCase( Constants.DPY_DIFF ) ) {
+                doDiff( request, response );
+            }
+            else if ( mode.equalsIgnoreCase( Constants.DPY_DETAILS ) ) {
+                doDetails( request, response );
+            }
+            else if ( mode.equalsIgnoreCase( Constants.DPY_LINK ) ) {
+                doLink( request, response );
+            }
+            else if ( mode.equalsIgnoreCase( Constants.ADMIN ) ) {
+                doAdmin( request, response );
+            }
+            else {
+                // fail
+                String msg = "unknown mode( " + mode + " ).";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+        }
+        catch ( Exception ex ) {
+            String msg = "ERROR: encountered exception handling test recorder control request, mode( " + mode +
+                    ", exception( " + ex.getMessage() + " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true, ex );
+        }
+    }
+
+    public void doRecord( HttpServletRequest request, HttpServletResponse response )
+            throws ServletException, IOException, ConfigException {
+        String cmd = request.getParameter( Constants.CMD );
+        String testName = getTestName( request );
+        String testUser = request.getParameter( Constants.TEST_USER );
+        String description = request.getParameter( Constants.DESCRIPTION );
+        boolean overwrite = Boolean.valueOf( request.getParameter( Constants.OVERWRITE ) ).booleanValue();
+        if ( log.isInfoEnabled() ) {
+            log.debug( "record cmd( " + cmd + " )" );
+            log.debug( "testName( " + testName + " )" );
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "testUser( " + testUser + " )" );
+            log.debug( "overwrite( " + overwrite + " )" );
+            log.debug( "description( " + description + " )" );
+        }
+        if ( cmd == null ) {
+            // fail
+            String msg = "ERROR: unable to handle record request, '" + Constants.CMD + "' may not be null.";
+            forward( request, response, msg, Constants.ERROR_PAGE, true );
+            return;
+        }
+        if ( cmd.equalsIgnoreCase( Constants.START ) ) {
+            doRecordStart( testName, request, response, overwrite, testUser, description );
+        }
+        else if ( cmd.equalsIgnoreCase( Constants.STOP ) ) {
+            doRecordStop( request, response );
+        }
+        else {
+            // fail
+            String msg = "ERROR: unable to handle record request: '" + Constants.CMD + "'( " + cmd +
+                    " ) is not recognized.";
+            forward( request, response, msg, Constants.ERROR_PAGE, true );
+            return;
+        }
+    }
+
+    private void doRecordStop( HttpServletRequest request, HttpServletResponse response ) throws IOException,
+            ServletException {
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        RecordSession session = filter.getState().getRecordingSession();
+        String msg = "ERROR: failed stopping recording session";
+        if ( log.isDebugEnabled() ) {
+            log.debug( "STOPPING: recording session( " + session + " )" );
+        }
+        try {
+            // this may take some time, this waits for recording threads to finish
+            session = filter.getState().recordStop();
+            if ( session == null ) {
+                // fail, not currently recording
+                msg = "ERROR: no recording session is currently started";
+                if ( log.isWarnEnabled() ) {
+                    log.warn( msg );
+                }
+            }
+            else {
+                request.setAttribute( Constants.RECORD_SESSION_ATTRIBUTE, session );
+                msg = "Recording session( " + session.getSessionName() + " ) stopped";
+                if ( log.isInfoEnabled() ) {
+                    log.info( msg );
+                }
+            }
+            forward( request, response, msg, Constants.RECORD_PAGE, false );
+
+        }
+        catch ( Exception ex ) {
+            msg = "ERROR: failed while stopping recording";
+            request.setAttribute( Constants.RECORD_SESSION_ATTRIBUTE, session );
+            forward( request, response, msg, Constants.RECORD_PAGE, true, ex );
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "STOPPED: recording session( " + session + " )" );
+        }
+    }
+
+    private void doRecordStart( String testName, HttpServletRequest request, HttpServletResponse response,
+            boolean overwrite, String testUser, String description ) throws IOException, ServletException {
+        TestDefinition test = getTest( testName );
+        if ( test == null ) {
+            test = new TestDefinition( testName, description, TestRecorderFilter.instance().getWebapp(), null );
+        }
+        if ( test.getWebapp() != TestRecorderFilter.instance().getWebapp() ) {
+            String msg = "ERROR: unable to start recording, the webapp of the test( " +
+                    test.getWebapp().getName() + " ) is not the same as this webapp( " +
+                    TestRecorderFilter.instance().getWebapp() + " )";
+            forward( request, response, msg, Constants.RECORD_PAGE, true );
+            return;
+        }
+        // may throw IOException or SecurityException
+        RecordSession session = null;
+        try {
+            session = getRecordSession( test, overwrite, testUser, description );
+            if ( description != null ) {
+                test.setDescription( description );
+            }
+            TestRecorderFilter.instance().getTestDefinitions().add( test );
+        }
+        catch ( Exception ex ) {
+            String msg = "ERROR: unable to start recording, unable to obtain session, exception( " +
+                    ex.getMessage() + " )";
+            forward( request, response, msg, Constants.RECORD_PAGE, true, ex );
+            return;
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "attempting to start recording session( " + session + " )" );
+        }
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        boolean start = false;
+        try {
+            // may throw IOException
+            start = filter.getState().recordStart( session );
+        }
+        catch ( Exception ex ) {
+            String msg = "ERROR: failed to start recording, exception( " + ex.getMessage() + " )";
+            forward( request, response, msg, Constants.RECORD_PAGE, true, ex );
+            return;
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "start( " + start + " )" );
+        }
+        if ( start ) {
+            String msg = "recording session( " + session.getSessionName() + " ) started.";
+            request.setAttribute( Constants.RECORD_SESSION_ATTRIBUTE, session );
+            if ( log.isInfoEnabled() ) {
+                log.info( msg );
+            }
+            forward( request, response, msg, Constants.RECORD_PAGE, false );
+        }
+        else {
+            String msg = "ERROR: recording session( " +
+                    session.getSessionName() + " ) already started.";
+            request.setAttribute( Constants.RECORD_SESSION_ATTRIBUTE, filter.getState().getRecordingSession() );
+            forward( request, response, msg, Constants.RECORD_PAGE, true );
+        }
+    }
+
+    public void doPlayback( HttpServletRequest request, HttpServletResponse response )
+            throws ServletException, IOException, ConfigException {
+        String cmd = request.getParameter( Constants.CMD );
+        if ( log.isInfoEnabled() ) {
+            log.info( "playback cmd( " + cmd + " )" );
+        }
+        // any request forwards from here should skip the filter.
+        request.setAttribute( Constants.FILTER_SKIP_PARAM, Boolean.TRUE );
+        if ( cmd != null ) {
+            if ( cmd.equalsIgnoreCase( Constants.START ) ) {
+                doPlaybackStart( request, response );
+            }
+            if ( cmd.equalsIgnoreCase( Constants.STOP ) ) {
+                doPlaybackStop( request, response );
+            }
+        }
+        else {
+            // fail
+            String msg = "ERROR: playback '" + Constants.CMD + "'( " + cmd + " ) is not recognized.";
+            forward( request, response, msg, Constants.ERROR_PAGE, true );
+            return;
+        }
+        forward( request, response, Constants.RECORD_PAGE );
+    }
+
+    private void doPlaybackStop( HttpServletRequest request,
+            HttpServletResponse response ) throws IOException {
+        String testId = request.getParameter( Constants.TEST_ID_HEADER );
+        if ( log.isInfoEnabled() ) {
+            log.info( "playback stop testId( " + testId + " )" );
+        }
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        PlaybackSession session = null;
+        try {
+            // this may take some time, this waits for recording threads to finish
+            // may throw IOException
+            session = filter.getState().playbackStop( testId );
+        }
+        catch ( Exception ex ) {
+            String msg = "ERROR: unable to stop playback session for testId( " + testId + " ), exception( " +
+                    ex.getMessage() + " )";
+            request.setAttribute( Constants.MSG_ATTRIBUTE, msg );
+            response.setHeader( Constants.OUTCOME_HEADER, Constants.ERROR );
+            log.error( msg, ex );
+            if ( ex instanceof IOException ) {
+                throw (IOException) ex;
+            }
+            else if ( ex instanceof RuntimeException ) {
+                throw (RuntimeException) ex;
+            }
+            else {
+                throw new RuntimeException( msg, ex );
+            }
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "STOP: playback session( " + session + " )" );
+        }
+        if ( session == null ) {
+            // fail, not currently doing playback
+            String msg = "ERROR: no playback session exists for testId( " + testId + " )";
+            request.setAttribute( Constants.MSG_ATTRIBUTE, msg );
+            // set response headers for the client.
+            response.setHeader( Constants.OUTCOME_HEADER, Constants.ERROR );
+            response.setHeader( Constants.MSG_ATTRIBUTE, msg );
+            log.error( msg );
+        }
+        else {
+            // gen playback summary
+            // set outcome to stop or fail via resp header
+            // return playback summary as response body.
+            String outcome = session.getStatus();
+            String msg = "playback session( " + session.getSessionName() + " ) stopped with status( " + outcome +
+                    " ).";
+            request.setAttribute( Constants.MSG_ATTRIBUTE, msg );
+            request.setAttribute( Constants.PLAYBACK_SESSION_ATTRIBUTE, session );
+            if ( log.isInfoEnabled() ) {
+                log.info( msg );
+            }
+            // set response headers for the client.
+            response.setHeader( Constants.OUTCOME_HEADER, outcome );
+            response.setHeader( Constants.MSG_ATTRIBUTE, msg );
+            response.setHeader( Constants.RESULTS_FILE_HEADER, session.getPlaybackFile().getAbsolutePath() );
+            File diffFile = session.getDiffFile();
+            if ( diffFile != null ) {
+                response.setHeader( Constants.RESULTS_DIFF_HEADER, diffFile.getAbsolutePath() );
+            }
+        }
+    }
+
+    private void doPlaybackStart( HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ConfigException {
+        String testName = getTestName( request );
+        TestDefinition test = getTest( testName );
+        if ( test == null ) {
+            throw new ConfigException(
+                    "ERROR: playback start failed, unable to find a test for test name( " + testName + " )" );
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "playback start test( " + test.getName() + " )" );
+        }
+        PlaybackSession session = null;
+        try {
+            session = getPlaybackSession( test );
+        }
+        catch ( Exception ex ) {
+            String msg = "ERROR: unable to start playback, unable to obtain session, exception( " +
+                    ex.getMessage() + " )";
+            request.setAttribute( Constants.MSG_ATTRIBUTE, msg );
+            log.error( msg, ex );
+            System.err.println( "\nPLAYBACK ERROR:\n" + msg );
+            if ( ex instanceof IOException ) {
+                throw (IOException) ex;
+            }
+            else if ( ex instanceof RuntimeException ) {
+                throw (RuntimeException) ex;
+            }
+            else {
+                throw new RuntimeException( msg, ex );
+            }
+        }
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        boolean start = false;
+        try {
+            // may throw IOException
+            start = filter.getState().playbackStart( session );
+        }
+        catch ( Exception ex ) {
+            String msg = "ERROR: failed to start playback session( " + session + " ), exception( " +
+                    ex.getMessage() + " )";
+            request.setAttribute( Constants.MSG_ATTRIBUTE, msg );
+            log.error( msg, ex );
+            System.err.println( "\nPLAYBACK ERROR:\n" + msg );
+            if ( ex instanceof IOException ) {
+                throw (IOException) ex;
+            }
+            else if ( ex instanceof RuntimeException ) {
+                throw (RuntimeException) ex;
+            }
+            else {
+                throw new RuntimeException( msg, ex );
+            }
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "playback start( " + start + " )" );
+        }
+        if ( start ) {
+            String msg = "playback session( " +
+                    session.getSessionName() + " ) started.";
+            request.setAttribute( Constants.MSG_ATTRIBUTE, msg );
+            request.setAttribute( Constants.PLAYBACK_SESSION_ATTRIBUTE, session );
+            if ( log.isInfoEnabled() ) {
+                log.info( msg );
+            }
+            // set response headers for the client.
+            response.setHeader( Constants.OUTCOME_HEADER,
+                    Constants.PASS );
+            response.setHeader( Constants.TEST_ID_HEADER,
+                    session.getStringUID() );
+            response.setHeader( Constants.RECORD_FILE_HEADER,
+                    session.getRecordFile().getAbsolutePath() );
+        }
+        else {
+            // fail
+            String msg = "ERROR: failed to start playback session( " +
+                    session.getSessionName() + " )";
+            request.setAttribute( Constants.MSG_ATTRIBUTE, msg );
+            request.setAttribute( Constants.PLAYBACK_SESSION_ATTRIBUTE, session );
+            log.error( msg );
+            // set response headers for the client.
+            response.setHeader( Constants.OUTCOME_HEADER,
+                    Constants.FAIL );
+            response.setHeader( Constants.MSG_ATTRIBUTE, msg );
+        }
+    }
+
+    public void doDiff( HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ServletException, ConfigException {
+        // TODO use test name constant here, similar to the rest of the commands
+        String sessionName = request.getParameter( Constants.FILE );
+        TestDefinition test = getTest( sessionName );
+        if ( test == null ) {
+            String msg = "ERROR: unable to display diff output, no test was found for name( " + sessionName +
+                    " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true );
+            return;
+        }
+        try {
+            Writer wrtr = response.getWriter();
+            File diffFile = getDiffFile( test );
+            if ( !diffFile.exists() ) {
+                String msg = "ERROR: unable to display diff output, no file was found for test( " +
+                        test.getName() + " ), file( " + diffFile.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            // output an html page
+            wrtr.write( "<html><head><title>Test Diffs of " );
+            wrtr.write( test.getName() );
+            wrtr.write( "</title></head>\n" );
+            wrtr.write( "<body>\n" );
+            wrtr.write( "<h4>Test Diffs: " );
+            wrtr.write( test.getName() );
+            wrtr.write( "</h4>\n" );
+            wrtr.write( "<pre>" );
+            wrtr.write( Reporter.genDiffDetails( diffFile ) );
+            wrtr.write( "</pre>" );
+            wrtr.write( "</body></html>" );
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed to display diff file, exception( " + e.getMessage() +
+                    " ), test( " + test.getName() + " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true );
+            return;
+        }
+    }
+
+    public void doLink( HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ServletException, ConfigException {
+        String sessionName = request.getParameter( Constants.FILE );
+        TestDefinition test = getTest( sessionName );
+        WebappConfig config = TestRecorderFilter.instance().getWebapp();
+        try {
+            if ( test == null ) {
+                String msg = "No test was found for name( " + sessionName + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+
+            File recFile = getRecordSessionFile( test );
+            if ( !recFile.exists() ) {
+                String msg = "No file was found for test( " + test.getName() + " ), file( " +
+                        recFile.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+
+            RecordSessionBean bean = null;
+            try {
+                bean = XMLHelper.getRecordSessionBean( recFile );
+            }
+            catch ( SessionXMLException e ) {
+                String msg = "Failed processing file for record session( " + test.getName() + " ), file( " +
+                        recFile.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            RequestData rd = bean.getRequestData( 0 );
+            if ( rd == null ) {
+                String msg = "Unable to find the first request in the test ( " + test.getName() + " ), file( " +
+                        recFile.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            response.sendRedirect( rd.getUri( config.getServer().getHostname(),
+                    config.getServer().getPort() ) );
+            return;
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed to display test details, exception( " + e.getMessage() +
+                    " ), test( " + test.getName() + " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true, e );
+        }
+    }
+
+    public void doDetails( HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ServletException, ConfigException {
+        // TODO use test name constant here, similar to the rest of the commands
+        String sessionName = request.getParameter( Constants.FILE );
+        TestDefinition test = getTest( sessionName );
+        try {
+            if ( test == null ) {
+                String msg = "No test was found for name( " + sessionName + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            Writer wrtr = response.getWriter();
+            File recFile = getRecordSessionFile( test );
+            if ( !recFile.exists() ) {
+                String msg = "No file was found for test( " + test.getName() + " ), file( " +
+                        recFile.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            RecordSessionBean bean = null;
+            try {
+                bean = XMLHelper.getRecordSessionBean( recFile );
+            }
+            catch ( SessionXMLException e ) {
+                String msg = "Failed processing file for record session( " + test.getName() + " ), file( " +
+                        recFile.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            // output an html page
+            wrtr.write( "<html><head><title>Test Details of " );
+            wrtr.write( test.getName() );
+            wrtr.write( "</title></head>\n" );
+            wrtr.write( "<body>\n" );
+            wrtr.write( "<h3>Test Details: " );
+            wrtr.write( test.getName() );
+            wrtr.write( "</h3>\n" );
+            wrtr.write( Reporter.genDetails( bean ) );
+            wrtr.write( "</body></html>" );
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed to display test details, exception( " + e.getMessage() +
+                    " ), test( " + test.getName() + " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true, e );
+        }
+    }
+
+    private void forward( HttpServletRequest request, HttpServletResponse response, String msg,
+            String page, boolean error ) throws ServletException, IOException {
+        forward( request, response, msg, page, error, null );
+    }
+
+    private void forward( HttpServletRequest request, HttpServletResponse response, String msg,
+            String page, boolean error, Exception ex ) throws ServletException, IOException {
+        if ( request.getAttribute( Constants.MSG_ATTRIBUTE ) == null ) {
+            request.setAttribute( Constants.MSG_ATTRIBUTE, msg );
+        }
+        if ( error ) {
+            if ( ex != null ) {
+                log.error( msg, ex );
+            }
+            else {
+                log.error( msg );
+            }
+        }
+        forward( request, response, page );
+    }
+
+    private void forward( HttpServletRequest request, HttpServletResponse response, String page )
+            throws ServletException, IOException {
+        RequestDispatcher dispatcher = request.getRequestDispatcher( page );
+        dispatcher.forward( request, response );
+    }
+
+    public void doAdmin( HttpServletRequest request, HttpServletResponse response )
+            throws ServletException, IOException, ConfigException {
+        String cmd = request.getParameter( Constants.CMD );
+        if ( log.isInfoEnabled() ) {
+            log.info( "admin cmd( " + cmd + " )" );
+        }
+        // any request forwards from here should skip the filter.
+        request.setAttribute( Constants.FILTER_SKIP_PARAM, Boolean.TRUE );
+        if ( cmd != null ) {
+            if ( cmd.equalsIgnoreCase( Constants.CLEAN ) ) {
+                doClean( request, response );
+                return;
+            }
+            else if ( cmd.equalsIgnoreCase( Constants.SET_TEST_MODE_FALSE ) ) {
+                doTestMode( request, response, false );
+                return;
+            }
+            else if ( cmd.equalsIgnoreCase( Constants.SET_TEST_MODE_TRUE ) ) {
+                doTestMode( request, response, true );
+                return;
+            }
+            else if ( cmd.equalsIgnoreCase( Constants.DISPLAY_REPORT ) ) {
+                doDisplayReport( request, response );
+                return;
+            }
+            else if ( cmd.equalsIgnoreCase( Constants.DISPLAY_RECORD ) ) {
+                doDisplayRecord( request, response );
+                return;
+            }
+            else if ( cmd.equalsIgnoreCase( Constants.DISPLAY_PLAYBACK ) ) {
+                doDisplayPlayback( request, response );
+                return;
+            }
+        }
+        // fail
+        String msg = "ERROR: admin '" + Constants.CMD + "'( " + cmd + " ) is not recognized.";
+        forward( request, response, msg, Constants.ERROR_PAGE, true );
+    }
+
+    private void doClean( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
+            IOException {
+        if ( log.isInfoEnabled() ) {
+            log.info( "clean up test recorder sessions" );
+        }
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        filter.getState().stopAll();
+        forward( request, response, Constants.STATUS_PAGE );
+    }
+
+    private void doTestMode( HttpServletRequest request, HttpServletResponse response, boolean value )
+            throws ServletException, IOException {
+        if ( log.isInfoEnabled() ) {
+            log.info( "setting test mode to ( " + value + " )" );
+        }
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        filter.getState().setTestMode( value );
+        forward( request, response, Constants.STATUS_PAGE );
+    }
+
+    private void doDisplayRecord( HttpServletRequest request, HttpServletResponse response )
+            throws ServletException, IOException {
+        String testString = request.getParameter( "test" );
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        TestDefinition test = filter.getTestDefinitions().getTest( testString );
+        File file = null;
+        try {
+            if ( test == null ) {
+                String msg = "No test was found for name( " + testString + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            file = new File( test.getTestFilePath() );
+            if ( !file.exists() ) {
+                String msg = "No record file was found for test( " + test.getName() + " ), file( " +
+                        file.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            doFileReport( request, response, test, file, "Record File for '" + test.getName() + "' Test" );
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed to display record file, exception( " + e.getMessage() +
+                    " ), test( " + test.getName() + " ), file( " + file + " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true, e );
+        }
+    }
+
+    private void doDisplayPlayback( HttpServletRequest request, HttpServletResponse response )
+            throws ServletException, IOException {
+        String testString = request.getParameter( "test" );
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        TestDefinition test = filter.getTestDefinitions().getTest( testString );
+        File file = null;
+        try {
+            if ( test == null ) {
+                String msg = "No test was found for name( " + testString + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            file = new File( test.getResultFilePath() );
+            if ( !file.exists() ) {
+                String msg = "No playback file was found for test( " + test.getName() + " ), file( " +
+                        file.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            doFileReport( request, response, test, file, "Playback File for '" + test.getName() + "' Test" );
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed to display playback file, exception( " + e.getMessage() +
+                    " ), test( " + test.getName() + " ), file( " + file + " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true, e );
+        }
+    }
+
+    private void doFileReport( HttpServletRequest request, HttpServletResponse response, TestDefinition test,
+            File file, String title ) throws ServletException, IOException {
+        FileReader reader = null;
+        Writer wrtr = null;
+        try {
+            wrtr = response.getWriter();
+            wrtr.write( "<html><title>" + Reporter.escape( title ) + "</title><body><b>" + title +
+                    "</b><br /><br /><pre>" );
+            // output an html page
+            char[] buf = new char[1024];
+            reader = new FileReader( file );
+            int size;
+            while ( true ) {
+                size = reader.read( buf, 0, 1024 );
+                if ( size == -1 ) {
+                    break;
+                }
+                wrtr.write( Reporter.escape( buf, size ) );
+            }
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed to display file, exception( " + e.getMessage() +
+                    " ), test( " + test.getName() + " ), file( " + file.getAbsolutePath() + " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true, e );
+        }
+        finally {
+            if ( wrtr != null ) {
+                wrtr.write( "</pre></body></html>" );
+            }
+            if ( reader != null ) {
+                reader.close();
+            }
+        }
+    }
+
+    private void doDisplayReport( HttpServletRequest request, HttpServletResponse response )
+            throws ServletException, IOException {
+        String categoryString = request.getParameter( "category" );
+        TestRecorderFilter filter = TestRecorderFilter.instance();
+        Category category = filter.getTestDefinitions().getCategories().getCategory( categoryString );
+        FileReader reader = null;
+        try {
+            if ( category == null ) {
+                String msg = "No category was found for name( " + categoryString + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            Writer wrtr = response.getWriter();
+            File reportFile = new File( category.getReportDirPath(), "/html/junit-noframes.html" );
+            if ( !reportFile.exists() ) {
+                String msg = "No JUnit report was found for category( " + category.getName() + " ), file( " +
+                        reportFile.getAbsolutePath() + " )";
+                forward( request, response, msg, Constants.ERROR_PAGE, true );
+                return;
+            }
+            // output an html page
+            char[] buf = new char[1024];
+            reader = new FileReader( reportFile );
+            int size;
+            while ( true ) {
+                size = reader.read( buf, 0, 1024 );
+                if ( size == -1 ) {
+                    break;
+                }
+                wrtr.write( buf, 0, size );
+            }
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed to display JUnit report, exception( " + e.getMessage() +
+                    " ), category( " + category.getName() + " )";
+            forward( request, response, msg, Constants.ERROR_PAGE, true, e );
+        }
+        finally {
+            if ( reader != null ) {
+                reader.close();
+            }
+        }
+    }
+
+    private static String getTestName( HttpServletRequest request ) {
+        return request.getParameter( Constants.TEST_NAME );
+    }
+
+    private static TestDefinition getTest( String name ) {
+        if ( log.isInfoEnabled() ) {
+            log.debug( "test name( " + name + " )" );
+        }
+        if ( name == null ) {
+            return null;
+        }
+        TestDefinition test = TestRecorderFilter.instance().getTestDefinitions().getTest( name );
+        return test;
+    }
+
+    private static RecordSession getRecordSession( TestDefinition test, boolean overwrite,
+            String testUser, String description ) throws SessionFailedException {
+        File file = getRecordSessionFile( test );
+        if ( log.isInfoEnabled() ) {
+            log.info( "record file( " + file.getAbsolutePath() + " )" );
+        }
+        // may throw IOException or SecurityException (runtime)
+        RecordSession session = State.createRecordSession( test.getName(), file,
+                overwrite, testUser, description );
+        return session;
+    }
+
+    private static PlaybackSession getPlaybackSession( TestDefinition test )
+            throws IOException, SessionFailedException {
+        File playbackFile = getPlaybackSessionFile( test );
+        if ( log.isInfoEnabled() ) {
+            log.info( "playback file( " + playbackFile.getAbsolutePath() + " )" );
+        }
+        // may throw IOException or SecurityException (runtime)
+        File diffFile = getDiffFile( test );
+        File recordFile = getTestFile( test );
+        // may throw IOException or SecurityException (runtime)
+        PlaybackSession session = State.createPlaybackSession( test.getName(), playbackFile,
+                recordFile, diffFile );
+        return session;
+    }
+
+    public static File getRecordSessionFile( TestDefinition test ) {
+        return getTestFile( test );
+    }
+
+    public static File getPlaybackSessionFile( TestDefinition test ) throws IOException {
+        test.createPlaybackFile();
+        return getResultFile( test );
+    }
+
+    public static File getTestFile( TestDefinition test ) {
+        return new File( test.getTestFilePath() );
+    }
+
+    public static File getResultFile( TestDefinition test ) {
+        return new File( test.getResultFilePath() );
+    }
+
+    public static File getDiffFile( TestDefinition test ) {
+        return new File( test.getResultDiffFilePath() );
+    }
+
+}
+

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/AbstractServerAdapter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/AbstractServerAdapter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.serverAdapter;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+/**
+ * User: ozzy
+ * Date: Jul 9, 2004
+ * Time: 10:43:53 AM
+ */
+public abstract class AbstractServerAdapter implements ServerAdapter {
+
+    /**
+     * replace session ID with a non-unique string
+     */
+    public String replaceSessionID( String string ) {
+        Matcher matcher = getSessionIdPattern().matcher( string );
+        string = matcher.replaceAll( ResponseData.NON_UNIQUE_SESSION_ID );
+        return string;
+
+    }
+
+    public abstract Pattern getSessionIdPattern();
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/DefaultServerAdapter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/DefaultServerAdapter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.serverAdapter;
+
+import org.apache.beehive.netui.tools.testrecorder.server.FilterData;
+import org.apache.beehive.netui.tools.testrecorder.server.DefaultFilterData;
+import org.apache.beehive.netui.tools.testrecorder.server.state.State;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.util.regex.Pattern;
+
+/**
+ * User: ozzy
+ * Date: Oct 23, 2003
+ * Time: 10:46:55 AM
+ */
+public class DefaultServerAdapter extends AbstractServerAdapter {
+
+    protected static final Pattern sessIdPattern =
+            Pattern.compile( ";jsessionid=.[a-zA-Z0-9]+" );
+
+    public FilterData genFilterDataInstance( ServletRequest request, ServletResponse response, State state ) {
+        return new DefaultFilterData( request, response, this );
+    }
+
+    public DefaultServerAdapter() {
+    }
+
+    public Pattern getSessionIdPattern() {
+        return sessIdPattern;
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/ServerAdapter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/ServerAdapter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.serverAdapter;
+
+import org.apache.beehive.netui.tools.testrecorder.server.FilterData;
+import org.apache.beehive.netui.tools.testrecorder.server.state.State;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+/**
+ * User: ozzy
+ * Date: Oct 23, 2003
+ * Time: 10:43:32 AM
+ */
+public interface ServerAdapter {
+
+    FilterData genFilterDataInstance( ServletRequest request, ServletResponse response, State state );
+    
+    String replaceSessionID( String string );
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/ServerAdapterUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/ServerAdapterUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.serverAdapter;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+
+/**
+ */
+public class ServerAdapterUtils {
+
+    private static final Logger log = Logger.getInstance( ServerAdapterUtils.class );
+
+    private static final String SERVER_ADAPTER_PROP = "testRecorder.serveradapter";
+    private static final String CATALINA_HOME_PROP = "catalina.home";
+    private static final String WL_SERVER_ADAPTER_CLASS =
+            "org.apache.beehive.netui.tools.testrecorder.server.serverAdapter.WeblogicServerAdapter";
+    private static final String TOMCAT_SERVER_ADAPTER_CLASS =
+            "org.apache.beehive.netui.tools.testrecorder.server.serverAdapter.DefaultServerAdapter";
+
+    public static ServerAdapter SERVER_ADAPTER = createServerAdapter();
+
+    public static final ServerAdapter getServerAdapter() {
+        return SERVER_ADAPTER;
+    }
+
+    private static ServerAdapter createServerAdapter() {
+        String serverAdapterClassName = System.getProperty( SERVER_ADAPTER_PROP );
+        if ( serverAdapterClassName == null ) {
+            if ( System.getProperty( CATALINA_HOME_PROP ) != null ) {
+                serverAdapterClassName = TOMCAT_SERVER_ADAPTER_CLASS;
+            }
+            else {
+                serverAdapterClassName = WL_SERVER_ADAPTER_CLASS;
+            }
+        }
+        ServerAdapter serverAdapter = null;
+        try {
+            Class serverAdapterClass = Class.forName( serverAdapterClassName );
+            serverAdapter = (ServerAdapter) serverAdapterClass.newInstance();
+        }
+        catch ( ClassNotFoundException e ) {
+            String msg = "WARNING: Could not find ServerAdapter class( " +
+                    serverAdapterClassName + " ) exception( " + e.getMessage() + " )" +
+                    ", using " + DefaultServerAdapter.class.getName() + ".";
+            System.out.println( msg );
+            if ( log.isWarnEnabled() ) {
+                log.warn( msg, e );
+            }
+            serverAdapter = new DefaultServerAdapter();
+        }
+        catch ( Exception e ) {
+            String msg = "WARNING: failed to instantiate ServerAdapter class( " +
+                    serverAdapterClassName + " ) exception( " + e.getMessage() + " )" +
+                    ", using " + DefaultServerAdapter.class.getName() + ".";
+            System.out.println( msg );
+            if ( log.isWarnEnabled() ) {
+                log.warn( msg, e );
+            }
+            serverAdapter = new DefaultServerAdapter();
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "Created server adapter of type( " +
+                    serverAdapter.getClass().getName() + " )" );
+        }
+        return serverAdapter;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/WeblogicServerAdapter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/serverAdapter/WeblogicServerAdapter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.serverAdapter;
+
+import java.util.regex.Pattern;
+
+/**
+ * User: ozzy
+ * Date: Oct 23, 2003
+ * Time: 10:46:41 AM
+ */
+public class WeblogicServerAdapter extends DefaultServerAdapter {
+
+    private static final Pattern sessIdPattern =
+            Pattern.compile( ";jsessionid=.[a-zA-Z0-9]+!-*\\d+" );
+
+    public WeblogicServerAdapter() {
+    }
+
+    public Pattern getSessionIdPattern() {
+        return sessIdPattern;
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/PlaybackSession.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/PlaybackSession.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.state;
+
+import org.apache.beehive.netui.tools.testrecorder.server.FilterData;
+
+import java.io.File;
+
+
+/**
+ */
+public interface PlaybackSession extends Session {
+
+    /**
+     * @return true if successful starting the test, false if not tests remain, throws
+     *         an exception if a failure occurs.
+     * @throws SessionFailedException
+     */
+    boolean startTest() throws SessionFailedException;
+
+    /**
+     * @return returns the current test count or throws an exception if it fails.
+     * @throws SessionFailedException
+     */
+    int endTest( FilterData filterData ) throws SessionFailedException;
+
+    String getStringUID();
+
+    File getPlaybackFile();
+
+    File getDiffFile();
+
+    File getRecordFile();
+
+    int passCount();
+
+    int failCount();
+
+    String getStatus();
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/PlaybackSessionImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/PlaybackSessionImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,348 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.state;
+
+import java.io.File;
+import java.util.Calendar;
+import java.rmi.server.UID;
+import java.lang.StringBuffer;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.RecordSessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.PlaybackSessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.TestResults;
+import org.apache.beehive.netui.tools.testrecorder.server.DiffEngineFactory;
+import org.apache.beehive.netui.tools.testrecorder.server.FilterData;
+import org.apache.beehive.netui.tools.testrecorder.server.DiffEngine;
+
+
+class PlaybackSessionImpl extends SessionImpl implements PlaybackSession {
+
+    private static final Logger log = Logger.getInstance( PlaybackSessionImpl.class );
+
+    private UID uid;
+    private String stringUid;
+    private File recordFile;
+    private File playbackFile;
+    private File diffFile;
+
+    // record bean is read only
+    private RecordSessionBean recordSessionBean;
+    private PlaybackSessionBean playbackSessionBean;
+
+    PlaybackSessionImpl( String sessionName, File playbackFile, File recordFile,
+            File diffFile ) throws SessionFailedException {
+        super( new PlaybackSessionBean( sessionName ) );
+        playbackSessionBean = (PlaybackSessionBean) getSessionBean();
+        if ( sessionName == null || sessionName.trim().length() <= 0 ) {
+            error( "the session name supplied( " + sessionName +
+                    " ) is invalid, it must be a non-null string of non-zero length" );
+        }
+        if ( playbackFile == null || diffFile == null ) {
+            error( "the playback and diff files may not be null" );
+        }
+        uid = new UID();
+        stringUid = uid.toString();
+        this.playbackFile = playbackFile;
+        this.diffFile = diffFile;
+        this.recordFile = recordFile;
+        if ( !recordFile.exists() ) {
+            error( "record file( " + recordFile.getAbsolutePath() + " ) does NOT exist" );
+        }
+        if ( !recordFile.canRead() ) {
+            error( "record file( " + recordFile.getAbsolutePath() + " ) is not readable" );
+        }
+        recordSessionBean = parseRecordFile( recordFile );
+        playbackSessionBean.setRecordedTestCount( recordSessionBean.getTestCount() );
+        if ( playbackSessionBean.getTester() == null || playbackSessionBean.getTester().length() == 0 ) {
+            if ( recordSessionBean.getTester() == null || recordSessionBean.getTester().length() == 0 ) {
+                playbackSessionBean.setTester( "unknown" );
+            }
+            playbackSessionBean.setTester( recordSessionBean.getTester() );
+        }
+        if ( playbackSessionBean.getDescription() == null || playbackSessionBean.getDescription().length() == 0 ) {
+            if ( recordSessionBean.getDescription() == null ||
+                    recordSessionBean.getDescription().length() == 0 ) {
+                playbackSessionBean.setDescription( "unknown" );
+            }
+            playbackSessionBean.setDescription( recordSessionBean.getTester() );
+        }
+        // if a version of this file exists, kill it
+        if ( log.isDebugEnabled() ) {
+            log.debug( "playbackFile( " + playbackFile.getAbsolutePath() + " )" );
+        }
+        if ( playbackFile.exists() ) {
+            boolean rtnVal = playbackFile.delete();
+            if ( rtnVal ) {
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "playback file exists, deleted(" + rtnVal + ")" );
+                }
+            }
+            else {
+                error( "unable to delete playback file( " + playbackFile.getAbsolutePath() + " )" );
+            }
+        }
+        if ( diffFile.exists() ) {
+            boolean rtnVal = diffFile.delete();
+            if ( rtnVal ) {
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "diff file exists, deleted(" + rtnVal + ")" );
+                }
+            }
+            else {
+                error( "unable to delete diff file( " + diffFile.getAbsolutePath() + " )" );
+            }
+        }
+        // file doesn't exist
+        try {
+            if ( !playbackFile.createNewFile() ) {
+                error( "unable to create new playback file( " + playbackFile.getAbsolutePath() + " )" );
+            }
+        }
+        catch ( Exception ex ) {
+            error( "unable to create new playback file( " + playbackFile.getAbsolutePath() + " )", ex );
+        }
+        setSessionState( BEGIN );
+    }
+
+    public String getStatus() {
+        return playbackSessionBean.getStatus();
+    }
+
+    public synchronized boolean startTest() throws SessionFailedException {
+        boolean rtnVal = false;
+        if ( getSessionState() == PLAYBACK ) {
+            incrementInProgress();
+            rtnVal = true;
+        }
+        else if ( getSessionState() == BEGIN ) {
+            String msg = "Unable to start test, session must be started before starting a test";
+            error( msg );
+        }
+        else if ( getSessionState() == END ) {
+            String msg = "Unable to start test, session is finished, no new tests may be started";
+            error( msg );
+        }
+        else if ( getSessionState() >= ERROR ) {
+            String msg = "Unable to start test, Session has encountered a previous unrecoverable error";
+            error( msg );
+        }
+        else {
+            // getSessionState() == STOP ... return false, no new tests
+        }
+        return rtnVal;
+    }
+
+    // returns the current test count or -1 if endTest() fails
+    public synchronized int endTest( FilterData filterData ) throws SessionFailedException {
+        if ( getSessionState() >= ERROR ) {
+            String msg = "Unable to end test, Session has encountered a previous unrecoverable error";
+            error( msg );
+        }
+        if ( getSessionState() == BEGIN ) {
+            String msg = "Session must be started before using test operations";
+            error( msg );
+        }
+        else if ( getSessionState() == END ) {
+            String msg = "Session is finished, no test operations may be performed";
+            error( msg );
+        }
+        if ( inProgressCnt() == 0 ) {
+            // no tests in progress to end.
+            String msg = "No session in progress to end";
+            error( msg );
+        }
+        else if ( inProgressCnt() != 1 ) {
+            // programming error, unrecoverable
+            String msg = "inProgress( " + inProgressCnt() + " ) is invalid";
+            error( msg, null, true );
+        }
+        // write to record file.
+        if ( filterData.getReqData() == null ) {
+            // unrecoverable, test data cannot be persisted
+            String msg = "request data may not be null, test count(" + ( testCount() + 1 ) + ")";
+            error( msg, null, true );
+        }
+        else if ( filterData.getRespData() == null ) {
+            // unrecoverable, test data cannot be persisted
+            String msg = "response data may not be null, test count(" + ( testCount() + 1 ) + ")";
+            error( msg, null, true );
+        }
+        decrementInProgress();
+        playbackSessionBean.addRequestResponseData( filterData.getReqData(), filterData.getRespData() );
+        // do diff work ... get TestResults
+        TestResults results = new TestResults( testCount() + 1, filterData.getReqData().getPath() );
+        // add test and session exceptions to diff results.
+        Throwable throwable = null;
+        for ( int i = 0; i < filterData.getTestExceptionCount(); i++ ) {
+            throwable = filterData.getTestException( i );
+            results.addDiffResult( "encountered test exception(" + i + ")( " +
+                    Logger.format( throwable, throwable ) + " )" );
+        }
+        for ( int i = 0; i < filterData.getSessionExceptionCount(); i++ ) {
+            throwable = filterData.getSessionException( i );
+            results.addDiffResult( "encountered test recorder session exception(" + i + ")( " +
+                    Logger.format( throwable, throwable ) + " )" );
+        }
+        try {
+            DiffEngine engine = DiffEngineFactory.getInstance( filterData );
+            results = engine.diff( recordSessionBean.getRequestData( testCount() ),
+                    recordSessionBean.getResponseData( testCount() ),
+                    filterData.getReqData(), filterData.getRespData(), results );
+        }
+        catch ( Exception e ) {
+            String msg = "Failed diffing results for session( " + getSessionName() +
+                    " ), test count(" + testCount() + "), exception( " + e.getMessage() + " )";
+            results.addDiffResult( "Test Recorder ERROR: " + msg, true );
+            results.addDiffResult( Logger.format( "EXCEPTION: ", e ) );
+            error( msg, e, true );
+        }
+        finally {
+            playbackSessionBean.addTestResults( results );
+            // cleans up the session if getSessionState() == STOP and inProgressCnt() == 0
+            checkSessionComplete();
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "testCount( " + testCount() + " )" );
+        }
+        return testCount();
+    }
+
+    // returns true if the session is successfully started, false otherwise.
+    public synchronized boolean sessionStart() throws SessionFailedException {
+        boolean rtnVal = false;
+        if ( getSessionState() != BEGIN ) {
+            rtnVal = false;
+        }
+        else {
+            setStartDate( Calendar.getInstance() );
+            setSessionState( PLAYBACK );
+            rtnVal = true;
+        }
+        return rtnVal;
+    }
+
+    protected synchronized void closeSessionInternal() throws SessionFailedException {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "closing session file ( " + getPlaybackFile() + " ), session status( " +
+                    playbackSessionBean.getStatus() +
+                    " )" );
+        }
+        SessionFailedException caught = null;
+        try {
+            setEndDate( Calendar.getInstance() );
+            XMLHelper.createPlaybackFile( getPlaybackFile(), playbackSessionBean );
+        }
+        catch ( Exception e ) {
+            setSessionState( ERROR_END );
+            String msg = "ERROR: failed to create playback XML file( " + getPlaybackFile().getAbsolutePath() +
+                    " ), exception( " + e.getMessage() + " )";
+            log.error( msg, e );
+            caught = new SessionFailedException( msg, e );
+        }
+        if ( playbackSessionBean.getFailedCount() > 0 || playbackSessionBean.isError() ) {
+            // test failed, write diff data
+            try {
+                if ( !diffFile.createNewFile() ) {
+                    error( "unable to create new diff file( " + diffFile.getAbsolutePath() + " )" );
+                }
+                XMLHelper.createDiffFile( getDiffFile(), playbackSessionBean );
+            }
+            catch ( Exception e ) {
+                setSessionState( ERROR_END );
+                String msg = "ERROR: failed to create diff XML file( " + getDiffFile().getAbsolutePath() +
+                        " ), exception( " + e.getMessage() + " )";
+                log.error( msg, e );
+                // don't hide previous error
+                if ( caught == null ) {
+                    caught = new SessionFailedException( msg, e );
+                }
+            }
+        }
+        if ( caught != null ) {
+            throw caught;
+        }
+    }
+
+    public String getStringUID() {
+        return stringUid;
+    }
+
+    public File getPlaybackFile() {
+        return playbackFile;
+    }
+
+    public File getDiffFile() {
+        return diffFile;
+    }
+
+    public File getRecordFile() {
+        return recordFile;
+    }
+
+    public int passCount() {
+        return playbackSessionBean.getPassedCount();
+    }
+
+    public int failCount() {
+        return playbackSessionBean.getFailedCount();
+    }
+
+    public int testCount() {
+        return playbackSessionBean.getTestCount();
+    }
+
+    private RecordSessionBean parseRecordFile( File recordFile ) throws SessionFailedException {
+        RecordSessionBean sessionBean = null;
+        try {
+            sessionBean = XMLHelper.getRecordSessionBean( recordFile );
+        }
+        catch ( Exception e ) {
+            String msg = "ERROR: failed parsing record file( " + recordFile + " ), exception( " + e.getMessage() +
+                    " )";
+            error( msg, e );
+        }
+        return sessionBean;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 128 );
+        sb.append( "[ " );
+        sb.append( "sessionName( " + getSessionName() + " )" );
+//        sb.append( ", status( " + getStatus() + " )" );
+        sb.append( ", uid( " + uid + " )" );
+        sb.append( ", startDate( " + getStartDateString() + " )" );
+        sb.append( ", endDate( " + getEndDateString() + " )" );
+        sb.append( ", playbackFile( " + playbackFile + " )" );
+        sb.append( ", recordFile( " + recordFile + " )" );
+        sb.append( ", testUser( " + getTestUser() + " )" );
+        sb.append( ", recordDesc( " + recordSessionBean.getDescription() + " )" );
+        sb.append( ", state( " + getSessionState() + " )" );
+        sb.append( ", testCount( " + testCount() + " )" );
+        sb.append( ", recorded test count( " + playbackSessionBean.getRecordedTestCount() + " )" );
+        sb.append( ", passed( " + playbackSessionBean.getPassedCount() + " )" );
+        sb.append( ", failed( " + playbackSessionBean.getFailedCount() + " )" );
+        sb.append( ", inProgress( " + inProgressCnt() + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/RecordSession.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/RecordSession.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.state;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+
+import java.io.File;
+
+
+/**
+ * User: ozzy
+ * Date: Mar 7, 2003
+ * Time: 12:06:23 PM
+ */
+public interface RecordSession extends Session {
+
+    /**
+     * @return true if successful starting the test, false if not tests remain, throws
+     *         an exception if a failure occurs.
+     * @throws SessionFailedException
+     */
+    boolean startTest() throws SessionFailedException;
+
+    /**
+     * @param request
+     * @param response
+     * @return returns the current test count or throws an exception if it fails.
+     * @throws SessionFailedException
+     */
+    int endTest( RequestData request, ResponseData response )
+            throws SessionFailedException;
+
+    File getRecordFile();
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/RecordSessionImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/RecordSessionImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,207 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.state;
+
+import java.io.File;
+import java.util.Calendar;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.RecordSessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+
+
+class RecordSessionImpl extends SessionImpl implements RecordSession {
+
+    private static final Logger log = Logger.getInstance( RecordSessionImpl.class );
+
+    private File recordFile;
+    private RecordSessionBean sessionBean;
+
+    RecordSessionImpl( String sessionName, File recordFile, boolean overwrite,
+            String testUser, String description ) throws SessionFailedException {
+        super( new RecordSessionBean( sessionName ) );
+        sessionBean = (RecordSessionBean) getSessionBean();
+        setTestUser( testUser );
+        setDescription( description );
+        this.recordFile = recordFile;
+        if ( getSessionName() == null || getSessionName().trim().length() <= 0 ) {
+            String msg = "the session name supplied( " +
+                    getSessionName() + " ) is invalid, it must be a non-null string of non-zero length";
+            error( msg );
+        }
+        if ( recordFile == null ) {
+            String msg = "the record file may not be null";
+            error( msg );
+        }
+        if ( recordFile.exists() ) {
+            if ( overwrite == false ) {
+                String msg = "ERROR: failed to create recording session, file( " +
+                        recordFile.getAbsolutePath() + " ) exists and overwrite is false";
+                error( msg );
+            }
+            else if ( !recordFile.canWrite() ) {
+                // overwrite is true ... file is not writable.
+                String msg = "ERROR: failed to create recording session, file( " +
+                        recordFile.getAbsolutePath() + " ) exists but is not writable";
+                error( msg );
+            }
+            else {
+                // overwrite is true and file is writable.
+                try {
+                    recordFile.delete();
+                }
+                catch ( Exception ex ) {
+                    String msg = "unable to delete file( " + recordFile.getAbsolutePath() + " )";
+                    error( msg, ex );
+                }
+            }
+        }
+        // file doesn't exist
+        try {
+            if ( !recordFile.createNewFile() ) {
+                String msg = "unable to create new record file( " + recordFile.getAbsolutePath() +
+                        " ) for session( " + getSessionName() + " )";
+                error( msg );
+            }
+        }
+        catch ( Exception ex ) {
+            String msg = "unable to create new record file( " +
+                    recordFile.getAbsolutePath() + " ) for session( " + getSessionName() + " )";
+            error( msg, ex );
+        }
+        setSessionState( BEGIN );
+    }
+
+    public synchronized boolean sessionStart() throws SessionFailedException {
+        boolean rtnVal = false;
+        if ( getSessionState() != BEGIN ) {
+            rtnVal = false;
+        }
+        else {
+            setStartDate( Calendar.getInstance() );
+            setSessionState( RECORD );
+            rtnVal = true;
+        }
+        return rtnVal;
+    }
+
+    public synchronized boolean startTest() throws SessionFailedException {
+        boolean rtnVal = false;
+        if ( getSessionState() == RECORD ) {
+            incrementInProgress();
+            rtnVal = true;
+        }
+        else if ( getSessionState() == BEGIN ) {
+            String msg = "Unable to start test, session must be started before starting a test";
+            error( msg );
+        }
+        else if ( getSessionState() == END ) {
+            String msg = "Unable to start test, session is finished, no new tests may be started";
+            error( msg );
+        }
+        else if ( getSessionState() >= ERROR ) {
+            String msg = "Unable to start test, Session has encountered a previous unrecoverable error";
+            error( msg );
+        }
+        else {
+            // getSessionState() == STOP ... return false, no new tests
+        }
+        return rtnVal;
+    }
+
+    // returns the current test count
+    public synchronized int endTest( RequestData request, ResponseData response ) throws SessionFailedException {
+        if ( getSessionState() >= ERROR ) {
+            String msg = "Unable to end test, Session has encountered a previous unrecoverable error";
+            error( msg, null, true );
+        }
+        if ( getSessionState() == BEGIN ) {
+            String msg = "Session must be started before using test operations";
+            error( msg );
+        }
+        else if ( getSessionState() == END ) {
+            String msg = "Session is finished, no test operations may be performed";
+            error( msg );
+        }
+        if ( inProgressCnt() == 0 ) {
+            // no tests in progress to end.
+            String msg = "No session in progress to end";
+            error( msg );
+        }
+        else if ( inProgressCnt() != 1 ) {
+            // programming error, unrecoverable
+            String msg = "inProgress( " + inProgressCnt() + " ) is invalid";
+            error( msg, null, true );
+        }
+        // write to record file.
+        if ( request == null ) {
+            // unrecoverable, test data cannot be persisted
+            String msg = "request data may not be null, test count(" + ( testCount() + 1 ) + ")";
+            error( msg, null, true );
+        }
+        else if ( response == null ) {
+            // unrecoverable, test data cannot be persisted
+            String msg = "response data may not be null, test count(" + ( testCount() + 1 ) + ")";
+            error( msg, null, true );
+        }
+        decrementInProgress();
+        sessionBean.addRequestResponseData( request, response );
+        // cleans up the session if getSessionState() == STOP and inProgressCnt() == 0
+        checkSessionComplete();
+        if ( log.isDebugEnabled() ) {
+            log.debug( "testCount( " + testCount() + " )" );
+        }
+        return testCount();
+    }
+
+    protected synchronized void closeSessionInternal() throws SessionFailedException {
+        try {
+            setEndDate( Calendar.getInstance() );
+            XMLHelper.createRecordFile( getRecordFile(), sessionBean );
+        }
+        catch ( Exception e ) {
+            setSessionState( ERROR_END );
+            String msg = "ERROR: failed to create record XML file( " + getRecordFile().getAbsolutePath() +
+                    " ), exception( " + e.getMessage() + " )";
+            log.error( msg, e );
+            throw new SessionFailedException( msg, e );
+        }
+    }
+
+    public File getRecordFile() {
+        return recordFile;
+    }
+
+    public int testCount() {
+        return sessionBean.getTestCount();
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 128 );
+        sb.append( "[ " );
+        sb.append( super.toString() );
+        sb.append( ", recordFile( " + recordFile + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/Session.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/Session.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.state;
+
+
+/**
+ * User: ozzy
+ * Date: Mar 10, 2003
+ * Time: 10:10:37 AM
+ */
+public interface Session {
+
+    final String DATE_FORMAT_STRING = "dd MMM yyyy, hh:mm:ss.SSS aa zzz";
+
+    /**
+     * returns true if session started, false if the session is already started.  An excepion is thrown
+     * if an error occurs
+     *
+     * @return
+     * @throws SessionFailedException
+     */
+    boolean sessionStart() throws SessionFailedException;
+
+    /**
+     * Returns true if the session was ended or throws an exception if an error occured or the session
+     * failed to end.
+     * @return
+     * @throws SessionFailedException
+     */
+    boolean sessionEnd() throws SessionFailedException;
+
+    /**
+     * Returns true if the session was ended or throws an exception if an error occured or the session
+     * failed to end.
+     *
+     * @param loopTimeout wait time before checking to see if any running tests have completed.
+     * @param hardTimeout wait time before giving up on any running tests.
+     * @return
+     * @throws SessionFailedException
+     */
+    boolean sessionEnd( long loopTimeout, long hardTimeout ) throws SessionFailedException;
+
+    String getSessionName();
+
+    String getTestUser();
+
+    int testCount();
+
+    // session has been started, new tests may or may not be startable
+    boolean isSessionStarted();
+
+    // all tests have been persisted, no new tests may be started.
+    boolean isSessionFinished();
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/SessionFailedException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/SessionFailedException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.state;
+
+/**
+ * User: ozzy
+ * Date: Mar 16, 2004
+ * Time: 11:12:06 AM
+ */
+public class SessionFailedException extends Exception {
+
+    public SessionFailedException() {
+        super();
+    }
+
+    public SessionFailedException( String message ) {
+        super( message );
+    }
+
+    public SessionFailedException( String message, Throwable cause ) {
+        super( message, cause );
+    }
+
+    public SessionFailedException( Throwable cause ) {
+        super( cause );
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/SessionImpl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/SessionImpl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,297 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.state;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.SessionBean;
+
+
+/**
+ * User: ozzy
+ * Date: Mar 10, 2003
+ * Time: 10:33:11 AM
+ */
+abstract class SessionImpl implements Session {
+
+    private static final Logger log = Logger.getInstance( SessionImpl.class );
+
+    // milliseconds
+    public static final long LOOP_TIMEOUT = 250;
+    // milliseconds ... 1 minute to you and I
+    public static final int HARD_TIMEOUT = 60 * 1 * 1000;
+
+    public static final int BEGIN = 0;
+    public static final int RECORD = 1;
+    public static final int PLAYBACK = 2;
+    public static final int STOP = 3;
+    public static final int END = 4;
+    public static final int ERROR = 5;
+    // ended with an error
+    public static final int ERROR_END = 6;
+
+    // static
+    private SessionBean sessionBean;
+
+    // dynamic
+    private int inProgress;
+    private int sessionState;
+    private boolean sessionClosed;
+
+    SessionImpl( SessionBean sessionBean ) {
+        this.sessionBean = sessionBean;
+        inProgress = 0;
+        sessionState = BEGIN;
+    }
+
+    // session has been started, new tests may or may not be startable
+    public boolean isSessionStarted() {
+        boolean rtnVal = false;
+        if ( getSessionState() > BEGIN || getSessionState() < END ) {
+            rtnVal = true;
+        }
+        return rtnVal;
+    }
+
+    // all tests have been persisted, no new tests may be started.
+    public boolean isSessionFinished() {
+        boolean rtnVal = false;
+        if ( getSessionState() >= END ) {
+            rtnVal = true;
+        }
+        return rtnVal;
+    }
+
+    // returns true if the session is successfully started, false otherwise.
+    public abstract boolean sessionStart() throws SessionFailedException;
+
+    public synchronized boolean sessionEnd() throws SessionFailedException {
+        return sessionEnd( LOOP_TIMEOUT, HARD_TIMEOUT );
+    }
+
+    // TODO get rid of boolean return value
+    public synchronized boolean sessionEnd( long loopTimeout, long hardTimeout ) throws SessionFailedException {
+        if ( getSessionState() < ERROR ) {
+            setSessionState( STOP );
+        }
+        int cnt = 0;
+        long sTime = new Date().getTime();
+        long eTime = sTime;
+        while ( !isSessionFinished() ) {
+            if ( log.isDebugEnabled() ) {
+                log.debug( "sessionEnd(): cnt(" + cnt + "), starting loop" );
+            }
+            // we can only wait so long ...
+            if ( ( eTime - sTime ) > hardTimeout ) {
+                float milliseconds = ( eTime - sTime );
+                String msg = "ERROR: session end timed out, elapsedTime( " + milliseconds + "" +
+                        "milliseconds ), inProgress( " + inProgressCnt() + " )";
+                log.error( msg );
+                throw new SessionFailedException( msg );
+            }
+            cnt++;
+            if ( cnt != 1 ) {
+                try {
+                    if ( log.isDebugEnabled() ) {
+                        log.debug( "sessionEnd(): cnt(" + cnt + "), waiting ..." );
+                    }
+                    wait( loopTimeout );
+                }
+                catch ( InterruptedException ex ) {
+                    // do nothing.
+                }
+            }
+            // cleans up the session if getSessionState() == STOP and inProgressCnt() == 0
+            if ( getSessionState() == STOP && inProgressCnt() == 0 || getSessionState() >= ERROR ) {
+                if ( getSessionState() == ERROR ) {
+                    setSessionState( ERROR_END );
+                }
+                else {
+                    setSessionState( END );
+                }
+                closeSession();
+            }
+            eTime = new Date().getTime();
+        }
+        return true;
+    }
+
+    /**
+     * indicates the number of tests executed by this session.
+     *
+     * @return
+     */
+    public abstract int testCount();
+
+    public String getStartDateString() {
+        return sessionBean.getStartDateString();
+    }
+
+    public String getEndDateString() {
+        return sessionBean.getEndDateString();
+    }
+
+    public String getSessionName() {
+        return sessionBean.getSessionName();
+    }
+
+    public String getTestUser() {
+        return sessionBean.getTester();
+    }
+
+    public String getDescription() {
+        return sessionBean.getDescription();
+    }
+
+    protected int getSessionState() {
+        return sessionState;
+    }
+
+    protected int inProgressCnt() {
+        return inProgress;
+    }
+
+    // called by synchronized methods
+    protected synchronized void incrementInProgress() {
+        inProgress++;
+        if ( log.isDebugEnabled() ) {
+            log.debug( "inProgress( " + inProgress + " )" );
+        }
+    }
+
+    // called by synchronized methods
+    protected synchronized void decrementInProgress() {
+        inProgress--;
+        if ( log.isDebugEnabled() ) {
+            log.debug( "inProgress( " + inProgress + " )" );
+        }
+    }
+
+    protected SessionBean getSessionBean() {
+        return sessionBean;
+    }
+
+    protected synchronized void closeSession() throws SessionFailedException {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "closing session( " + getSessionName() + " ), testCount( " + testCount() + " )" );
+        }
+        if ( sessionClosed == true ) {
+            return;
+        }
+        sessionClosed = true;
+        closeSessionInternal();
+    }
+
+    protected abstract void closeSessionInternal() throws SessionFailedException;
+
+    // called by synchronized methods
+    protected synchronized void checkSessionComplete() throws SessionFailedException {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "checkSessionComplete(): inProgressCnt(" + inProgressCnt() + "), sessionState(" +
+                    getSessionState() + ")" );
+        }
+        if ( ( getSessionState() == STOP && inProgressCnt() == 0 ) || getSessionState() >= ERROR ) {
+            if ( getSessionState() == ERROR ) {
+                setSessionState( ERROR_END );
+            }
+            else {
+                setSessionState( END );
+            }
+            // a thread may be waiting for the session to complete
+            notifyAll();
+            // clean up the session
+            // may throw IOException
+            try {
+                closeSession();
+            }
+            catch ( Exception e ) {
+                String msg = "Failed to close session( " + getSessionName() + " ), exception( " +
+                        e.getMessage() + " )";
+                log.error( msg, e );
+                throw new SessionFailedException( msg, e );
+            }
+        }
+    }
+
+    protected Calendar setStartDate( Calendar startDate ) {
+        return sessionBean.setStartDate( startDate );
+    }
+
+    protected Calendar setEndDate( Calendar endDate ) {
+        return sessionBean.setEndDate( endDate );
+    }
+
+    protected void setTestUser( String testUser ) {
+        sessionBean.setTester( testUser );
+    }
+
+    protected void setDescription( String description ) {
+        sessionBean.setDescription( description );
+    }
+
+    protected void setSessionState( int sessionState ) {
+        this.sessionState = sessionState;
+    }
+
+    protected void error( String msg ) throws SessionFailedException {
+        // recoverable error
+        error( msg, null );
+    }
+
+    protected void error( String msg, Exception e ) throws SessionFailedException {
+        // recoverable error
+        error( msg, e, false );
+    }
+
+    protected void error( String msg, Exception e, boolean unrecoverable ) throws SessionFailedException {
+        if ( e == null ) {
+            log.error( msg );
+        }
+        else {
+            log.error( msg, e );
+        }
+        if ( unrecoverable ) {
+            setSessionState( ERROR_END );
+            closeSession();
+        }
+        if ( e == null ) {
+            throw new SessionFailedException( msg );
+        }
+        throw new SessionFailedException( msg, e );
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 128 );
+        sb.append( "[ " );
+        sb.append( "sessionName( " + getSessionName() + " )" );
+        sb.append( ", startDate( " + sessionBean.getStartDateString() + " )" );
+        sb.append( ", endDate( " + sessionBean.getEndDateString() + " )" );
+        sb.append( ", testUser( " + getTestUser() + " )" );
+        sb.append( ", description( " + getDescription() + " )" );
+        sb.append( ", state( " + getSessionState() + " )" );
+        sb.append( ", testCount( " + testCount() + " )" );
+        sb.append( ", inProgress( " + inProgressCnt() + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/State.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/server/state/State.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,344 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.server.state;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Util;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collections;
+import java.util.Iterator;
+import java.io.Serializable;
+import java.io.File;
+
+
+/**
+ * User: ozzy
+ * Date: Mar 6, 2003
+ * Time: 3:34:14 PM
+ */
+public class State implements Serializable {
+
+    private static final Logger log = Logger.getInstance( State.class );
+
+    private boolean testMode;
+    // needs to be serialized
+    private RecordSession recordSession = null;
+    // needs to be serialized
+    // map of PlaybackSessions
+    private Map playbackMap;
+
+
+    public State() {
+        if ( log.isInfoEnabled() ) {
+            log.info( "Constructor" );
+        }
+        playbackMap = new HashMap();
+    }
+
+    public boolean isTestMode() {
+        return testMode;
+    }
+
+    private void setTestMode() {
+        setTestMode( true );
+    }
+
+    public void setTestMode( boolean testMode ) {
+        this.testMode = testMode;
+    }
+
+    public boolean isRecording() {
+        boolean rtnVal = false;
+        if ( getRecordingSession() != null ) {
+            rtnVal = true;
+        }
+        return rtnVal;
+    }
+
+    public RecordSession getRecordingSession() {
+        return recordSession;
+    }
+
+    // return true if a new session has been started.
+    // if already in record mode false will be returned.
+    // Use record stop before starting a new session.
+    public boolean recordStart( RecordSession session ) throws SessionFailedException {
+        boolean rtnVal = false;
+        if ( isRecording() == true ) {
+            rtnVal = false;
+        }
+        else if ( session == null ) {
+            String msg = "the RecordSession may not be null";
+            log.error( msg );
+            throw new SessionFailedException( msg );
+        }
+        else {
+            synchronized ( this ) {
+                if ( isRecording() == true ) {
+                    rtnVal = false;
+                }
+                else {
+                    rtnVal = session.sessionStart();
+                    if ( rtnVal ) {
+                        setRecordingSession( session );
+                        setTestMode();
+                    }
+                }
+            }
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "rtnVal( " + rtnVal + " )" );
+            log.debug( "recording( " + isRecording() + " )" );
+            log.debug( "recordSession( " + getRecordingSession() + " )" );
+        }
+        return rtnVal;
+    }
+
+    // return the session or null if no recording session was in progress
+    public RecordSession recordStop() throws SessionFailedException {
+        RecordSession rtnVal = null;
+        if ( isRecording() == false ) {
+            rtnVal = null;
+        }
+        else {
+            synchronized ( this ) {
+                if ( isRecording() == false ) {
+                    rtnVal = null;
+                }
+                else {
+                    // may throw a RuntimeException if the session fails to end.
+                    // this method will wait for a timeout specified in the RecordSession class.
+                    try {
+                        rtnVal = getRecordingSession();
+                        rtnVal.sessionEnd();
+                    }
+                    catch ( Exception ex ) {
+                        String msg = "ERROR: Failed while stopping recording session( " +
+                                getRecordingSession().getSessionName() + " )";
+                        log.error( msg, ex );
+                        if ( ex instanceof SessionFailedException ) {
+                            throw (SessionFailedException) ex;
+                        }
+                        throw new SessionFailedException( msg, ex );
+                    }
+                    finally {
+                        removeRecordingSession();
+                    }
+                }
+            }
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "recording( " + isRecording() + " )" );
+            log.debug( "rtnVal( " + rtnVal + " )" );
+        }
+        return rtnVal;
+    }
+
+    public PlaybackSession getPlaybackSession( String testId ) {
+        return (PlaybackSession) getInternalPlaybackMap().get( testId );
+    }
+
+    public Map getPlaybackMap() {
+        if ( playbackMap.size() == 0 ) {
+            return null;
+        }
+        // playback sessions only modifiable by classes in testrecorder package.
+        // !!! don't modify them without understanding the consequences!!!
+        return Collections.unmodifiableMap( playbackMap );
+    }
+
+    public boolean playbackSessionExists( PlaybackSession session ) {
+        return playbackSessionExists( session.getStringUID() );
+    }
+
+    public boolean playbackSessionExists( String testId ) {
+        if ( getPlaybackMap() == null ) {
+            return false;
+        }
+        return getInternalPlaybackMap().containsKey( testId );
+    }
+
+    // return true if a new session has been started.
+    // if this session is already in playback mode, return false.
+    // Use playback stop before starting a session.
+    public boolean playbackStart( PlaybackSession session ) throws SessionFailedException {
+        boolean rtnVal = false;
+        if ( session == null ) {
+            String msg = "the PlaybackSession may not be null";
+            log.fatal( msg );
+            throw new SessionFailedException( msg );
+        }
+        else {
+            if ( log.isDebugEnabled() ) {
+                log.debug( "session( " + session + " )" );
+            }
+            rtnVal = session.sessionStart();
+            if ( rtnVal ) {
+                addPlaybackSession( session );
+                setTestMode();
+            }
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "rtnVal( " + rtnVal + " )" );
+        }
+        return rtnVal;
+    }
+
+    // return the session or null if the playback session was NOT in progress
+    public PlaybackSession playbackStop( String testId ) throws SessionFailedException {
+        PlaybackSession rtnVal = getPlaybackSession( testId );
+        // may throw a RuntimeException if the session fails to end.
+        // this method will wait for a timeout specified in the PlaybackSession class.
+        if ( rtnVal != null ) {
+            try {
+                if ( rtnVal.sessionEnd() == false ) {
+                    if ( log.isWarnEnabled() ) {
+                        log.warn( "session failed to end( " + rtnVal + " )" );
+                    }
+                }
+            }
+            finally {
+                removePlaybackSession( rtnVal );
+            }
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "rtnVal( " + rtnVal + " )" );
+        }
+        return rtnVal;
+    }
+
+    public synchronized void stopAll() {
+        if ( log.isDebugEnabled() ) {
+            log.debug( "stopAll(): START ..." );
+        }
+        if ( getRecordingSession() != null ) {
+            if ( log.isDebugEnabled() ) {
+                log.debug( "stopAll(): stopping record session ..." );
+            }
+            try {
+                recordStop();
+            }
+            catch ( Exception e ) {
+                log.error( e );
+            }
+            if ( log.isDebugEnabled() ) {
+                log.debug( "stopAll(): .... record session stopped" );
+            }
+        }
+        if ( getInternalPlaybackMap() != null ) {
+            if ( log.isDebugEnabled() ) {
+                log.debug( "stopAll(): stopping playback sessions, session count( " +
+                        getInternalPlaybackMap().size() + " )" );
+            }
+            Iterator it = Util.getListOfKeys( getInternalPlaybackMap() ).iterator();
+            String key = null;
+            while ( it.hasNext() ) {
+                key = (String) it.next();
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "stopAll(): stopping playback session with key( " + key + " ) ..." );
+                }
+                try {
+                    playbackStop( key );
+                }
+                catch ( Exception e ) {
+                    log.error( e );
+                }
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "stopAll(): ... playback session stopped" );
+                }
+            }
+        }
+        if ( log.isDebugEnabled() ) {
+            log.debug( "stopAll(): ... END" );
+        }
+    }
+
+    public static PlaybackSession createPlaybackSession( String sessionName,
+            File playbackFile, File recordFile, File diffFile )
+            throws SessionFailedException {
+        return new PlaybackSessionImpl( sessionName, playbackFile,
+                recordFile, diffFile );
+    }
+
+    public static RecordSession createRecordSession( String sessionName,
+            File recordFile, boolean overwrite, String testUser,
+            String description ) throws SessionFailedException {
+        return new RecordSessionImpl( sessionName, recordFile,
+                overwrite, testUser, description );
+    }
+
+    boolean addPlaybackSession( PlaybackSession session ) {
+        boolean rtnVal = false;
+        synchronized ( playbackMap ) {
+            if ( playbackSessionExists( session ) ) {
+                rtnVal = false;
+            }
+            else {
+                getInternalPlaybackMap().put( session.getStringUID(), session );
+                rtnVal = true;
+            }
+        }
+        return rtnVal;
+    }
+
+    PlaybackSession removePlaybackSession( PlaybackSession session ) {
+        return removePlaybackSession( session.getStringUID() );
+    }
+
+    PlaybackSession removePlaybackSession( String testId ) {
+        PlaybackSession rtnVal;
+        synchronized ( playbackMap ) {
+            if ( playbackSessionExists( testId ) ) {
+                // returns the value and removes the key.
+                rtnVal = (PlaybackSession) playbackMap.remove( testId );
+            }
+            else {
+                rtnVal = null;
+            }
+        }
+        return rtnVal;
+    }
+
+    protected RecordSession removeRecordingSession() {
+        RecordSession session = getRecordingSession();
+        setRecordingSession( null );
+        return session;
+    }
+
+    protected void setRecordingSession( RecordSession recordSession ) {
+        this.recordSession = recordSession;
+    }
+
+    protected Map getInternalPlaybackMap() {
+        return playbackMap;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 128 );
+        sb.append( "[ " );
+        sb.append( "recording( " + isRecording() + " )" );
+        sb.append( ", recordSession( " + getRecordingSession() + " )" );
+        sb.append( ", playbackMap( " + Util.toString( playbackMap ) + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Constants.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Constants.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,108 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+/**
+ * User: ozzy
+ * Date: Mar 20, 2003
+ * Time: 4:00:54 PM
+ */
+public class Constants {
+
+    // files in the classpath obtained via the classloader
+    public static String CONFIG_FILE = "testRecorder-config.xml";
+    public static String TESTS_FILE = "testRecorder-tests.xml";
+    public static String WEBAPPS_FILE = "testRecorder-webapp.xml";
+
+    // playback test number
+    public static final String TEST_NUMBER_HEADER = "testRecorder.playback.testNumber";
+    // playback session id.
+    public static final String TEST_ID_HEADER = "testRecorder.playback.testID";
+    // describes the absolute path to the playback file to be used for the session.
+    // returned as a response header on playback start.
+    public static final String RECORD_FILE_HEADER = "testRecorder.playback.recordFile";
+    // describes the absolute path to the playback results file
+    public static final String RESULTS_FILE_HEADER = "testRecorder.playback.resultsFile";
+    // describes the absolute path to the diff file
+    // NOTE: This may not be set if the file does not exist
+    public static final String RESULTS_DIFF_HEADER = "testRecorder.playback.resultsDiffFile";
+    // request header sent by PlaybackExecutor indicating whether to continue on
+    // failure with subsequent tests or to stop processing tests.
+    public static final String FAIL_MODE_HEADER = "testRecorder.playback.failMode";
+    // response header to indicate the outcome of a playback request.
+    public static final String OUTCOME_HEADER = "testRecorder.playback.outcome";
+    // skip processing through the filter, used as both a parameter and a request header
+    public static final String FILTER_SKIP_PARAM = "testRecorder.filter.skip";
+    // request attribute to mark requests seen by the filter, so forwards are still
+    // considered a single request from a capture stand point
+    public static final String REQUEST_MARKER_ATTRIBUTE = "testRecorder.request.marked";
+    public static final String REQUEST_EXCEPTION_MARKER_ATTRIBUTE = "testRecorder.request.marked.exception";
+    public static final String REQUEST_NEW_EXCEPTION_MARKER_ATTRIBUTE = "testRecorder.request.marked.exception.new";
+    public static final String STATE_STORAGE_KEY = "testRecorder.state.";
+    public static final String BODY_END = "</body>";
+    public static final String NL = "\n";
+    public static final String EMPTY_STRING = "";
+    // 'cmd' values
+    public static final String START = "Start";
+    public static final String STOP = "Stop";
+    public static final String RED = "red";
+    public static final String GREEN = "green";
+    public static final String RECORD_FILE_PATH = "/testRecorder/tests";
+    public static final String RESULTS_FILE_PATH = "/testRecorder/testResults";
+    public static final String ERROR_PAGE = "/testRecorder/error.jsp";
+    public static final String RECORD_PAGE = "/testRecorder/record.jsp";
+    public static final String PLAYBACK_PAGE = "/testRecorder/playback.jsp";
+    public static final String STATUS_PAGE = "/testRecorder/status.jsp";
+    public static final String TEST_PAGE = "/testRecorder/test.jsp";
+    public static final String XML = ".xml";
+    public static final String DIFF = ".diff";
+    // request attributes
+    public static final String MSG_ATTRIBUTE = "testRecorder.msg";
+    public static final String RECORD_SESSION_ATTRIBUTE = "testRecorder.record.session";
+    public static final String PLAYBACK_SESSION_ATTRIBUTE = "testRecorder.playback.session";
+    // request param
+    public static final String TEST_USER = "testUser";
+    public static final String TEST_NAME = "testName";
+    public static final String DESCRIPTION = "description";
+    public static final String OVERWRITE = "overwrite";
+    public static final String MODE = "mode";
+    public static final String CMD = "cmd";
+    public static final String FILE = "file";
+    // 'mode' values
+    public static final String RECORD = "record";
+    public static final String PLAYBACK = "playback";
+    public static final String ADMIN = "admin";
+    public static final String CLEAN = "clean";
+    public static final String SET_TEST_MODE_FALSE = "setTestModeFalse";
+    public static final String SET_TEST_MODE_TRUE = "setTestModeTrue";
+    public static final String DPY_DIFF = "diff";
+    public static final String DPY_DETAILS = "details";
+    public static final String DPY_LINK = "displayLink";
+    public static final String MODE_TEST = "test";
+    public static final String DISPLAY_REPORT = "displayReport";
+    public static final String DISPLAY_RECORD = "displayRecordFile";
+    public static final String DISPLAY_PLAYBACK = "displayPlaybackFile";
+
+    // outcomes
+    public static final String PASS = "pass";
+    public static final String FAIL = "fail";
+    public static final String ERROR= "ERROR";
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/DiffFailedException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/DiffFailedException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+/**
+ * User: ozzy
+ * Date: Mar 16, 2004
+ * Time: 11:12:06 AM
+ */
+public class DiffFailedException extends Exception {
+
+    public DiffFailedException() {
+        super();
+    }
+
+    public DiffFailedException( String message ) {
+        super( message );
+    }
+
+    public DiffFailedException( String message, Throwable cause ) {
+        super( message, cause );
+    }
+
+    public DiffFailedException( Throwable cause ) {
+        super( cause );
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Logger.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Logger.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,157 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.apache.log4j.*;
+import org.apache.commons.logging.Log;
+
+public class Logger implements Log {
+
+    private static final String STRUTS_APPENDER = "commons-logging";
+
+    static {
+        // Need to get rid of the appender that Struts adds so
+        // that we don't spam the console with all messages
+        Category root = Category.getRoot();
+
+        if ( root.getAppender( STRUTS_APPENDER ) != null ) {
+            root.removeAppender( STRUTS_APPENDER );
+        }
+    }
+
+
+    public static Logger getInstance( Class clazz ) {
+        return new Logger( clazz );
+    }
+
+    private org.apache.log4j.Logger logInstance;
+
+    public Logger( Class clazz ) {
+        logInstance = org.apache.log4j.Logger.getLogger( clazz.getName() );
+    }
+
+    public boolean isDebugEnabled() {
+        return logInstance.isEnabledFor( Level.DEBUG );
+    }
+
+    public boolean isErrorEnabled() {
+        return logInstance.isEnabledFor( Level.ERROR );
+    }
+
+    public boolean isFatalEnabled() {
+        return logInstance.isEnabledFor( Level.FATAL );
+    }
+
+    public boolean isInfoEnabled() {
+        return logInstance.isEnabledFor( Level.INFO );
+    }
+
+    public boolean isTraceEnabled() {
+        return logInstance.isEnabledFor( Level.DEBUG );
+    }
+
+    public boolean isWarnEnabled() {
+        return logInstance.isEnabledFor( Level.WARN );
+    }
+
+    public void debug( Object message ) {
+        if ( logInstance.isEnabledFor( Level.DEBUG ) ) {
+            logInstance.debug( message );
+        }
+    }
+
+    public void debug( Object message, Throwable t ) {
+        if ( logInstance.isEnabledFor( Level.DEBUG ) ) {
+            logInstance.debug( format( message, t ) );
+        }
+    }
+
+    public void trace( Object message ) {
+        if ( logInstance.isEnabledFor( Level.DEBUG ) ) {
+            logInstance.debug( message );
+        }
+    }
+
+    public void trace( Object message, Throwable t ) {
+        if ( logInstance.isEnabledFor( Level.DEBUG ) ) {
+            logInstance.debug( format( message, t ) );
+        }
+    }
+
+    public void info( Object message ) {
+        if ( logInstance.isEnabledFor( Level.INFO ) ) {
+            logInstance.info( message );
+        }
+    }
+
+    public void info( Object message, Throwable t ) {
+        if ( logInstance.isEnabledFor( Level.INFO ) ) {
+            logInstance.info( format( message, t ) );
+        }
+    }
+
+    public void warn( Object message ) {
+        if ( logInstance.isEnabledFor( Level.WARN ) ) {
+            logInstance.warn( message );
+        }
+    }
+
+    public void warn( Object message, Throwable t ) {
+        if ( logInstance.isEnabledFor( Level.WARN ) ) {
+            logInstance.warn( format( message, t ) );
+        }
+    }
+
+    public void error( Object message ) {
+        if ( logInstance.isEnabledFor( Level.ERROR ) ) {
+            logInstance.error( message );
+        }
+    }
+
+    public void error( Object message, Throwable t ) {
+        if ( logInstance.isEnabledFor( Level.ERROR ) ) {
+            logInstance.error( format( message, t ) );
+        }
+    }
+
+    public void fatal( Object message ) {
+        if ( logInstance.isEnabledFor( Level.FATAL ) ) {
+            logInstance.fatal( message );
+        }
+    }
+
+    public void fatal( Object message, Throwable t ) {
+        if ( logInstance.isEnabledFor( Level.FATAL ) ) {
+            logInstance.fatal( format( message, t ) );
+        }
+    }
+
+    public static String format( Object m, Throwable t ) {
+        if ( t == null ) {
+            return m.toString();
+        }
+        StringWriter sw = new StringWriter();
+        t.printStackTrace( new PrintWriter( sw ) );
+        return m + "\n\n" + "Throwable: " + t.toString() + "\nStack Trace:\n" + sw.toString();
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/NVPair.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/NVPair.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+/**
+ * User: ozzy
+ * Date: Jun 15, 2004
+ * Time: 9:48:04 AM
+ */
+
+public class NVPair {
+
+    private String name;
+    private String value;
+
+    public NVPair( String name, String value ) {
+        if ( name == null || value == null ) {
+            throw new RuntimeException( "name( " + name + " ) and value( " + value + " ) must not be null." );
+        }
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public boolean equals( Object object ) {
+        if ( this == object ) {
+            return true;
+        }
+        else if ( object == null || getClass() != object.getClass() ) {
+            return false;
+        }
+        NVPair other = (NVPair) object;
+        if ( this.getName().equals( other.getName() ) && this.getValue().equals( other.getValue() ) ) {
+            return true;
+        }
+        return false;
+    }
+
+    public String toString () {
+        return "name( " + name + " ), value( " + value + " )";
+    }
+}
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/PlaybackSessionBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/PlaybackSessionBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,141 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * User: ozzy
+ * Date: Jun 15, 2004
+ * Time: 9:19:12 AM
+ */
+public class PlaybackSessionBean extends RecordSessionBean {
+
+    private static final Logger log = Logger.getInstance( PlaybackSessionBean.class );
+
+    private int recordedTestCount = -1;
+    private int passedCount = 0;
+    private int failedCount = 0;
+    private List testResults;
+
+    public PlaybackSessionBean( String sessionName ) {
+        this( sessionName, false );
+    }
+
+    public PlaybackSessionBean( String sessionName, boolean error ) {
+        super( sessionName );
+        setError( error );
+        testResults = new ArrayList();
+    }
+
+    public int getRecordedTestCount() {
+        return recordedTestCount;
+    }
+
+    public void setRecordedTestCount( int recordedTestCount ) {
+        this.recordedTestCount = recordedTestCount;
+    }
+
+    public int getTestCount() {
+        return testResults.size();
+    }
+
+    public TestResults getTestResults( int index ) {
+        return (TestResults) testResults.get( index );
+    }
+
+    public List getTestResults() {
+        return Collections.unmodifiableList( testResults );
+    }
+
+    public void addTestResults( TestResults results ) {
+        if ( results.isTestPassed() ) {
+            incrementPassedCount();
+        }
+        else {
+            incrementFailedCount();
+        }
+        testResults.add( results );
+    }
+
+    public boolean isError() {
+        if ( error ) {
+            return error;
+        }
+        return isErrorInternal();
+    }
+
+    private boolean isErrorInternal() {
+        boolean rtnVal = false;
+        if ( getRecordedTestCount() < 1 ) {
+            if ( log.isDebugEnabled() ) {
+                log.debug( "Invalid recorded test count(" + getRecordedTestCount() + ")" );
+            }
+            rtnVal = true;
+        }
+        else if ( ( getTestCount() ) != getRecordedTestCount() ) {
+            if ( log.isDebugEnabled() ) {
+                log.debug( "executed count(" + getTestCount() + ") does not equal recorded test count(" +
+                        getRecordedTestCount() + ")" );
+            }
+            rtnVal = true;
+        }
+        return rtnVal;
+    }
+
+    public String getStatus() {
+        if ( isError() ) {
+            return Constants.ERROR;
+        }
+        if ( isSessionPassed() ) {
+            return Constants.PASS;
+        }
+        return Constants.FAIL;
+    }
+
+    public boolean isSessionPassed() {
+        if ( isError() ) {
+            return false;
+        }
+        if ( passedCount != getRecordedTestCount() ) {
+            return false;
+        }
+        return true;
+    }
+
+    public int incrementPassedCount() {
+        return ++passedCount;
+    }
+
+    public int getPassedCount() {
+        return passedCount;
+    }
+
+    public int incrementFailedCount() {
+        return ++failedCount;
+    }
+
+    public int getFailedCount() {
+        return failedCount;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/RecordSessionBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/RecordSessionBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,116 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ */
+public class RecordSessionBean extends SessionBean {
+
+    private List requestData;
+    private List responseData;
+    // if true indicates an error has occured in the session
+    protected boolean error = false;
+
+    public RecordSessionBean( String sessionName ) {
+        this.sessionName = sessionName;
+        requestData = new ArrayList();
+        responseData = new ArrayList();
+    }
+
+    public void setError() {
+        error = true;
+    }
+
+    public void setError( boolean error ) {
+        this.error = error;
+    }
+
+    public boolean isError() {
+        return error;
+    }
+
+
+    public List getRequestData() {
+        return Collections.unmodifiableList( requestData );
+    }
+
+    /**
+     *
+     * @param index
+     * @return
+     * @throws IndexOutOfBoundsException
+     */
+    public RequestData getRequestData( int index ) {
+        return (RequestData) requestData.get( index );
+    }
+
+    public List getResponseData() {
+        return Collections.unmodifiableList( responseData );
+    }
+
+    /**
+     * @param index
+     * @return
+     * @throws IndexOutOfBoundsException
+     */
+    public ResponseData getResponseData( int index ) {
+        return (ResponseData) responseData.get( index );
+    }
+
+    public void addRequestResponseData( RequestData request, ResponseData response ) {
+        requestData.add( request );
+        responseData.add( response );
+    }
+
+    /**
+     * update the data for the most recent test
+     * @param request
+     * @param response
+     */
+    public void updateRequestResponseData( RequestData request, ResponseData response ) {
+        if ( requestData.size() == 0 || responseData.size() == 0 ) {
+            throw new IllegalStateException( "data size is zero, unable to update");
+        }
+        requestData.set( requestData.size() -1, request );
+        responseData.add( responseData.size() -1, response );
+    }
+
+    public int getTestCount() {
+        return requestData.size();
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+        sb.append( "sessionName( " + getSessionName() + " )" );
+        sb.append( ", tester( " + getTester() + " )" );
+        sb.append( ", startDate( " + getStartDateString() + " )" );
+        sb.append( ", endDate( " + getEndDateString() + " )" );
+        sb.append( ", testCount( " + getTestCount() + " )" );
+        sb.append( ", description( " + getDescription() + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Reporter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Reporter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,188 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import java.io.IOException;
+import java.io.File;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+import org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet;
+
+
+public class Reporter {
+
+    private static final Logger log = Logger.getInstance( TestRecorderServlet.class );
+
+    public static String genDetails( RecordSessionBean bean ) {
+        return formatDetails( bean );
+    }
+
+    public static String genDiffDetails( File diffFile ) throws IOException, SessionXMLException {
+        List results = XMLHelper.getDiffResults( diffFile );
+        StringBuffer sb = new StringBuffer( results.size() * 128 );
+        TestResults testResults = null;
+        List diffList = null;
+        for ( int i = 0; i < results.size(); i++ ) {
+            testResults = (TestResults) results.get( i );
+            diffList = testResults.getDiffResults();
+            String diff = null;
+            if ( i > 0 ) {
+                sb.append( getLineBreak() );
+            }
+            sb.append( "Uri( " + testResults.getUri() + " )" + getLineBreak() );
+            sb.append( "Test Number( " + testResults.getTestNumber() + " )" + getLineBreak() );
+            if ( testResults.isError() ) {
+                sb.append( "Test Execution Error Encountered!" );
+            }
+            if ( diffList.size() == 0 ) {
+                sb.append( "*** no diff info present for this test failure ***" );
+            }
+            else if ( diffList.size() == 1 ) {
+                diff = (String) diffList.get( 0 );
+                sb.append( formatDiff( diff ) );
+            }
+            else {
+                sb.append( "*** ERROR: unexpected diff results ***" );
+            }
+        }
+        return sb.toString();
+    }
+
+    private static String formatDetails( RecordSessionBean bean ) {
+        StringBuffer sb = new StringBuffer();
+        // the header information
+        sb.append( "<table>" );
+        sb.append( "<tr><td><b>Test</b></td><td>" );
+        sb.append( bean.getSessionName() );
+        sb.append( "</td></tr>" );
+        sb.append( "<tr><td><b>Description</b></td><td>" );
+        sb.append( bean.getDescription() );
+        sb.append( "</td></tr>" );
+        sb.append( "<tr><td><b>Tester</b></td><td>" );
+        sb.append( bean.getTester() );
+        sb.append( "</td></tr>" );
+        sb.append( "</table>" );
+
+        int cnt = bean.getTestCount();
+        for ( int i = 0; i < cnt; i++ ) {
+            formatRequestDetails( bean.getRequestData( i ), sb );
+        }
+        return sb.toString();
+    }
+
+    private static void formatRequestDetails( RequestData request, StringBuffer sb ) {
+        sb.append( "<hr /><h4>Request " );
+        sb.append( request.getPath() );
+        String buttonAction = null;
+        String params = formatParameterDetails( request, buttonAction );
+        if ( buttonAction != null ) {
+            sb.append( "<br />Button Request" );
+            sb.append( buttonAction );
+        }
+        sb.append( "</h4>" );
+        sb.append( "<h5>Parameters</h5>" );
+        sb.append( params );
+    }
+
+    private static String formatParameterDetails( RequestData request, String buttonAction ) {
+        StringBuffer sb = new StringBuffer( ( 16 * request.getParamCount() ) + 5 );
+        buttonAction = null;
+        if ( request.getParamCount() > 0 ) {
+            sb.append( "<table border=\"1\" cellspacing=\"0\"><tr><th>Name</th><th>Value</th></tr>" );
+            int cnt = request.getParamCount();
+            for ( int i = 0; i < cnt; i++ ) {
+                if ( request.getParamName( i ).startsWith( "actionOverride:" ) ) {
+                    buttonAction = request.getParamName( i );
+                }
+                sb.append( "<tr><td>" );
+                sb.append( request.getParamName( i ) );
+                sb.append( "</td><td>" );
+                sb.append( request.getParamValue( i ) );
+                sb.append( "</td></tr>" );
+            }
+            sb.append( "</table>" );
+        }
+        else {
+            sb.append( "None" );
+        }
+        return sb.toString();
+    }
+
+    public static String formatDiff( String diff ) {
+        StringBuffer sb = new StringBuffer( diff.length() );
+        StringTokenizer st = new StringTokenizer( diff, "\n\r\f" );
+        String line = null;
+        while ( st.hasMoreTokens() ) {
+            line = st.nextToken();
+            if ( line.startsWith( "R:" ) ) {
+                if ( line.length() == 2 ) {
+                    line = getRecordMarker() + getLineBreak();
+                }
+                else {
+                    line = new String( getRecordMarker() + escape( line.substring( 2 ) ) + getLineBreak() );
+                }
+            }
+            else if ( line.startsWith( "P:" ) ) {
+                if ( line.length() == 2 ) {
+                    line = getPlaybackMarker() + getLineBreak();
+                }
+                else {
+                    line = new String( getPlaybackMarker() + escape( line.substring( 2 ) ) + getLineBreak() );
+                }
+            }
+            else {
+                line = escape( line ) + getLineBreak();
+            }
+            sb.append( line );
+        }
+        return sb.toString();
+    }
+
+    private static String getLineBreak() {
+        return "\n";
+    }
+
+    private static String getPlaybackMarker() {
+        return "<b>P:</b>";
+    }
+
+    private static String getRecordMarker() {
+        return "<b>R:</b>";
+    }
+
+    public static String escape( String in ) {
+        char[] c = in.toCharArray();
+        return escape( c, in.length() );
+    }
+    public static String escape( char[] c, int size ) {
+        StringBuffer sb = new StringBuffer();
+        for ( int i = 0; i < size; i++ ) {
+            if ( c[i] == '<' ) {
+                sb.append( "&lt;" );
+                continue;
+            }
+            sb.append( c[i] );
+        }
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/RequestData.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/RequestData.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,276 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import java.util.Map;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+
+// J2EE dependencies
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.Cookie;
+
+
+/**
+ * This class has a dependency on javax.servlet.http
+ */
+public class RequestData {
+
+    private static final Logger log = Logger.getInstance( RequestData.class );
+
+    private String protocol;
+    private String protocolVersion;
+    private String host;
+    private int port;
+    private String method;
+    private String path;
+    private NVPair[] headers;
+    private NVPair[] parameters;
+    private Cookie[] cookies;
+
+    public RequestData() {
+    }
+
+    /**
+     * returns the original request for this data
+     *
+     * @return
+     */
+    public String getUri() {
+        return getUri( getHost(), getPort() );
+    }
+
+    /**
+     * returns the Uri for this data but replaces the host and port with the provided values.
+     *
+     * @param host
+     * @param port
+     * @return
+     */
+    public String getUri( String host, int port ) {
+        return genUri( protocol, host, port, getPath() );
+    }
+
+    public void setProtocol( String protocol ) {
+        this.protocol = protocol;
+    }
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public void setProtocolVersion( String protocolVersion ) {
+        this.protocolVersion = protocolVersion;
+    }
+
+    public String getProtocolVersion() {
+        return protocolVersion;
+    }
+
+    public void setHost( String host ) {
+        this.host = host;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setMethod( String method ) {
+        this.method = method;
+    }
+
+    public String getMethod() {
+        return method;
+    }
+
+    public void setPath( String path ) {
+        this.path = path;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPort( int port ) {
+        this.port = port;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setParameters( NVPair[] parameters ) {
+        this.parameters = parameters;
+    }
+
+    public NVPair[] getParameters() {
+        return parameters;
+    }
+
+    public int getParamCount() {
+        if ( parameters == null ) {
+            return 0;
+        }
+        return parameters.length;
+    }
+
+    public String getParamName( int index ) {
+        return ( (NVPair) parameters[index] ).getName();
+    }
+
+    public String getParamValue( int index ) {
+        return ( (NVPair) parameters[index] ).getValue();
+    }
+
+    public void setHeaders( NVPair[] headers ) {
+        this.headers = headers;
+    }
+
+    public NVPair[] getHeaders() {
+        return headers;
+    }
+
+    public int getHeaderCount() {
+        if ( headers == null ) {
+            return 0;
+        }
+        return headers.length;
+    }
+
+    public String getHeaderName( int index ) {
+        return ( (NVPair) headers[index] ).getName();
+    }
+
+    public String getHeaderValue( int index ) {
+        return ( (NVPair) headers[index] ).getValue();
+    }
+
+    public void setCookies( Cookie[] cookies ) {
+        this.cookies = cookies;
+    }
+
+    public Cookie[] getCookies() {
+        return cookies;
+    }
+
+    public int getCookieCount() {
+        if ( cookies == null ) {
+            return 0;
+        }
+        return cookies.length;
+    }
+
+    public String getCookieName( int index ) {
+        return ( (Cookie) cookies[index] ).getName();
+    }
+
+    public String getCookieValue( int index ) {
+        return ( (Cookie) cookies[index] ).getValue();
+    }
+
+    public static String genUri( String protocol, String host, int port, String path ) {
+        return protocol + "://" + host + ":" + port + path;
+    }
+
+    public static RequestData populate( HttpServletRequest request, RequestData data ) {
+        String protocol = request.getProtocol();
+        int index = protocol.indexOf( "/" );
+        // make sure a slash exists and its not at the end of the string
+        if ( index > -1 && index < protocol.length() - 1 ) {
+            data.setProtocol( protocol.substring( 0, index ) );
+            data.setProtocolVersion( protocol.substring( index + 1 ) );
+        }
+        data.setHost( request.getServerName() );
+        data.setPort( request.getServerPort() );
+        data.setMethod( request.getMethod() );
+        data.setPath( request.getRequestURI() );
+        data.setParameters( getParams( request ) );
+        data.setHeaders( getHeaders( request ) );
+        data.setCookies( request.getCookies() );
+        return data;
+    }
+
+    public static NVPair[] getParams( HttpServletRequest request ) {
+        Map map = request.getParameterMap();
+        Enumeration e = request.getParameterNames();
+        List list = new ArrayList();
+        String param = null;
+        while ( e.hasMoreElements() ) {
+            param = (String) e.nextElement();
+//            if ( log.isDebugEnabled() ) {
+//                log.debug( "param name( " + param + " )" );
+//            }
+            list.add( param );
+        }
+        Collections.sort( list );
+        List pairs = new ArrayList( list.size() );
+        for ( int i = 0; i < list.size(); i++ ) {
+            String[] vals = (String[]) map.get( list.get( i ) );
+            for ( int j = 0; j < vals.length; j++ ) {
+                pairs.add( new NVPair( (String) list.get( i ),
+                        vals[j] ) );
+            }
+        }
+        return (NVPair[]) pairs.toArray( (Object[]) new NVPair[pairs.size()] );
+    }
+
+    public static NVPair[] getHeaders( HttpServletRequest request ) {
+        Enumeration e = request.getHeaderNames();
+        List list = new ArrayList();
+        String name = null;
+        while ( e.hasMoreElements() ) {
+            name = (String) e.nextElement();
+//            if ( log.isDebugEnabled() ) {
+//                log.debug( "header name( " + name + " )" );
+//            }
+            list.add( name );
+        }
+        Collections.sort( list );
+        NVPair[] pairs = new NVPair[list.size()];
+        for ( int i = 0; i < list.size(); i++ ) {
+            pairs[i] = new NVPair( (String) list.get( i ),
+                    request.getHeader( (String) list.get( i ) ) );
+//            if ( log.isDebugEnabled() ) {
+//                log.debug( "header: name( " + pairs[i].getName() + " ), value( " + pairs[i].getValue() + " )" );
+//            }
+        }
+        return pairs;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+        sb.append( "protocol( " + protocol + " )" );
+        sb.append( ", protocolVersion( " + protocolVersion + " )" );
+        sb.append( ", host( " + host + " )" );
+        sb.append( ", port( " + port + " )" );
+        sb.append( ", method( " + method + " )" );
+        sb.append( ", path( " + path + " )" );
+        sb.append( ", headers( " + Util.toString( headers ) + " )" );
+        sb.append( ", parameters( " + Util.toString( parameters ) + " )" );
+        sb.append( ", cookies( " + Util.toString( cookies ) + " )" );
+
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/ResponseData.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/ResponseData.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,165 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.Locale;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+
+public class ResponseData {
+
+    private static final Logger log = Logger.getInstance( ResponseData.class );
+
+    public static final String NON_UNIQUE_SESSION_ID = "";
+    public static final String NON_UNIQUE_HOST = "@NON_UNIQUE_HOST@";
+    public static final String NON_UNIQUE_PORT = "@NON_UNIQUE_PORT@";
+    private static final String COLON = ":";
+    private static final String HTTP = "http://";
+    private static final String HTTPS = "https://";
+
+    private static final DecimalFormat format = (DecimalFormat)
+            NumberFormat.getInstance( Locale.US );
+
+    static {
+        // we just want the integer portion
+        format.setDecimalSeparatorAlwaysShown( false );
+        format.setGroupingSize( 0 );
+    }
+
+    private String host;
+    private int port;
+    private int statusCode;
+    private String reason;
+    private NVPair[] headers;
+    private Map headerMap;
+    // non-normalized
+    private String body;
+
+
+    public ResponseData( String host, int port ) {
+        this.host = host;
+        this.port = port;
+    }
+
+    public void setStatusCode( int statusCode ) {
+        this.statusCode = statusCode;
+    }
+
+    public int getStatusCode() {
+        return statusCode;
+    }
+
+    public void setReason( String reason ) {
+        this.reason = reason;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setHeaders( NVPair[] headers ) {
+        this.headers = headers;
+    }
+
+    public NVPair[] getHeaders() {
+        return headers;
+    }
+
+    /**
+     * returns null if the header does not exist.
+     * @param name
+     * @return
+     */
+    public String getHeader( String name ) {
+        initializeHeaderMap();
+        String value = (String) headerMap.get( name );
+        return value;
+    }
+
+    private void initializeHeaderMap() {
+        if ( headerMap != null ) {
+            return;
+        }
+        headerMap = new HashMap();
+        NVPair header = null;
+        for ( int i = 0; i < headers.length; i++ ) {
+            header = headers[i];
+            // duplicates are over written
+            headerMap.put( header.getName(), header.getValue() );
+        }
+    }
+
+    public void setBody( String body ) {
+        this.body = body.trim();
+    }
+
+    /**
+     * Returns the non-normalized response body, that is, the response body contains the original
+     * host and port.
+     *
+     * @return
+     */
+    public String getBody() {
+        return body;
+    }
+
+    /**
+     * Returns the normalized response body, with the original port and host replaced with tokens.
+     *
+     * @return
+     */
+    public String getNormalizedBody() {
+        return replaceHostPort( getBody(), host, port );
+    }
+
+    // TODO needs to handle using the default port http://<host>/<path>
+    // TODO https needs to handle port and default port
+    private static String replaceHostPort( String string, String host, int port ) {
+        // replace http://<host>:<port> combination with a non-unique string
+        Pattern pattern = Pattern.compile( HTTP + host + COLON + format.format( port ) );
+        Matcher matcher = pattern.matcher( string );
+        string = matcher.replaceAll( HTTP + NON_UNIQUE_HOST + COLON + NON_UNIQUE_PORT );
+
+        // https
+        pattern = Pattern.compile( HTTPS + host + COLON );
+        matcher = pattern.matcher( string );
+        string = matcher.replaceAll( HTTPS + NON_UNIQUE_HOST + COLON );
+        return string;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+        sb.append( "host( " + host + " )" );
+        sb.append( ", port( " + port + " )" );
+        sb.append( ", statusCode( " + statusCode + " )" );
+        sb.append( ", reason( " + reason + " )" );
+        sb.append( ", headers( " + headers + " )" );
+        sb.append( ", body( " + body + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/SessionBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/SessionBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import org.apache.beehive.netui.tools.testrecorder.server.state.Session;
+
+import java.util.Calendar;
+import java.text.SimpleDateFormat;
+import java.text.ParseException;
+
+/**
+ * User: ozzy
+ * Date: Jun 20, 2004
+ * Time: 10:23:02 AM
+ */
+public class SessionBean {
+
+    private static final SimpleDateFormat xmlDateFormat = new SimpleDateFormat( Session.DATE_FORMAT_STRING );
+
+    protected String sessionName;
+    private String tester;
+    private Calendar startDate;
+    private Calendar endDate;
+    private String description;
+
+    public String getSessionName() {
+        return sessionName;
+    }
+
+    public String getTester() {
+        return tester;
+    }
+
+    public void setTester( String tester ) {
+        this.tester = tester;
+    }
+
+    protected Calendar getStartDate() {
+        return startDate;
+    }
+
+    public Calendar setStartDate( Calendar startDate ) {
+        return this.startDate = startDate;
+    }
+
+    public Calendar setStartDate( String date ) throws ParseException {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime( xmlDateFormat.parse( date ) );
+        startDate = calendar;
+        return startDate;
+    }
+
+    public String getStartDateString() {
+        if ( getStartDate() == null ) {
+            return null;
+        }
+        return xmlDateFormat.format( getStartDate().getTime() );
+    }
+
+    protected Calendar getEndDate() {
+        return endDate;
+    }
+
+    public Calendar setEndDate( Calendar endDate ) {
+        return this.endDate = endDate;
+    }
+
+    public Calendar setEndDate( String date ) throws ParseException {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime( xmlDateFormat.parse( date ) );
+        endDate = calendar;
+        return endDate;
+    }
+
+    public String getEndDateString() {
+        if ( getEndDate() == null ) {
+            return null;
+        }
+        return xmlDateFormat.format( getEndDate().getTime() );
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription( String description ) {
+        this.description = description;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/SessionXMLException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/SessionXMLException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+/**
+ * User: ozzy
+ * Date: Mar 16, 2004
+ * Time: 11:12:06 AM
+ */
+public class SessionXMLException extends Exception {
+
+    public SessionXMLException() {
+        super();
+    }
+
+    public SessionXMLException( String message ) {
+        super( message );
+    }
+
+    public SessionXMLException( String message, Throwable cause ) {
+        super( message, cause );
+    }
+
+    public SessionXMLException( Throwable cause ) {
+        super( cause );
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/TestResults.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/TestResults.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,112 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+
+
+public class TestResults {
+
+    private String uri;
+    private int testNumber;
+    // if true indicates an error has occured playing back the test
+    private boolean error;
+    // if no error has occured and the the test passed
+    private boolean testPassed = true;
+    // List of entrues
+    private List diffResults;
+
+    public TestResults( int testNumber, final String uri ) {
+        this( testNumber, uri, false, true );
+    }
+
+    public TestResults( int testNumber, String uri, boolean error, boolean testPassed ) {
+        this.uri = uri;
+        this.testNumber = testNumber;
+        this.error = error;
+        this.testPassed = testPassed;
+    }
+
+    public String getUri() {
+        return uri;
+    }
+
+    public int getTestNumber() {
+        return testNumber;
+    }
+
+    public String getStatus() {
+        if ( error ) {
+            return Constants.ERROR;
+        }
+        if ( testPassed ) {
+            return Constants.PASS;
+        }
+        return Constants.FAIL;
+    }
+
+    public boolean isError() {
+        return error;
+    }
+
+    public boolean isTestPassed() {
+        if ( isError() ) {
+            return false;
+        }
+        return testPassed;
+    }
+
+    public void addDiffResult( String result ) {
+        addDiffResult( result, false );
+    }
+
+    public void addDiffResult( String result, final boolean error ) {
+        if ( error ) {
+            this.error = true;
+        }
+        testPassed = false;
+        if ( diffResults == null ) {
+            diffResults = new ArrayList();
+        }
+        diffResults.add( result );
+    }
+
+    // may return null.
+    public List getDiffResults() {
+        if ( diffResults == null ) {
+            return null;
+        }
+        return Collections.unmodifiableList( diffResults );
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 16 );
+        sb.append( "[ " );
+        sb.append( ", status( " + getStatus() + " )" );
+        sb.append( ", diffResults( " +
+                ( ( diffResults == null ) ? "null" :
+                Util.toString( diffResults.iterator(), diffResults.size() ) ) + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Util.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/Util.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,179 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.Iterator;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
+
+public class Util {
+
+    static final int REPORT_SESSION = 0;
+    static final int REPORT_REQUEST = 1;
+
+    private static final String LT = "<";
+    private static final String LT_END = "</";
+    private static final String GT = ">";
+
+    private Util() {
+    }
+
+    public static List getListOfKeys( Map map ) {
+        List keys = null;
+        if ( map != null ) {
+            Set keySet = map.keySet();
+            if ( keySet.size() > 0 ) {
+                keys = new ArrayList( keySet.size() );
+                keys.addAll( keySet );
+            }
+        }
+        if ( keys == null ) {
+            keys = new ArrayList();
+        }
+        return keys;
+    }
+
+    public static String toString( Map map ) {
+        Set keySet = null;
+        StringBuffer sb = new StringBuffer();
+
+        if ( map != null ) {
+            keySet = map.keySet();
+            sb.append( "Map(" + keySet.size() + ")[ " );
+        }
+        else {
+            sb.append( "Map[ " );
+        }
+
+        if ( map != null ) {
+            Iterator it = keySet.iterator();
+            Object key = null;
+            int i = 0;
+            for ( i = 0; it.hasNext(); i++ ) {
+                key = it.next();
+                if ( i != 0 ) {
+                    sb.append( "; " );
+                }
+                sb.append( "key(" + key + "), value( " + map.get( key ) + " )" );
+            }
+            if ( i == 0 ) {
+                sb.append( "empty" );
+            }
+        }
+        else {
+            sb.append( "null" );
+        }
+
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public static String toString( Object[] objects ) {
+        if ( objects == null ) {
+            return null;
+        }
+        StringBuffer sb = new StringBuffer( 16 * objects.length );
+        sb.append( "[ " );
+        int i = 0;
+        for ( i = 0; i < objects.length; i++ ) {
+            sb.append( ", [" + i + "]( " + objects[i] + " )" );
+        }
+        if ( i == 0 ) {
+            sb.append( "EMPTY" );
+        }
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public static String toString( Iterator it, int size ) {
+        StringBuffer sb = new StringBuffer( 16 * size );
+        sb.append( "[ " );
+        int i = 0;
+        for ( i = 0; it.hasNext(); i++ ) {
+            sb.append( ", [" + i + "]( " + it.next() + " )" );
+        }
+        if ( i == 0 ) {
+            sb.append( "EMPTY" );
+        }
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public static final String genStartTag( final String tagName ) {
+        return LT + tagName + GT;
+    }
+
+    public static final String genStartTag( final String tagName, final String attributes ) {
+        if ( attributes == null ) {
+            return genStartTag( tagName );
+        }
+        return LT + tagName + " " + attributes + GT;
+    }
+
+    public static final String genEndTag( final String tagName ) {
+        return LT_END + tagName + GT;
+    }
+
+    public static StringBuffer reportSessionAttributes( StringBuffer sb,
+            HttpServletRequest request, String id, String separator ) {
+        return reportAttributes( sb, request, id, separator, REPORT_SESSION );
+    }
+
+    public static StringBuffer reportRequestAttributes( StringBuffer sb,
+            HttpServletRequest request, String id, String separator ) {
+        return reportAttributes( sb, request, id, separator, REPORT_REQUEST );
+    }
+
+    static StringBuffer reportAttributes( StringBuffer sb,
+            HttpServletRequest request, String id, String separator, int type ) {
+        HttpSession session = request.getSession();
+        Enumeration e = session.getAttributeNames();
+        String key = null;
+        Object value = null;
+        while ( e.hasMoreElements() ) {
+            key = (String) e.nextElement();
+            switch ( type ) {
+                case REPORT_REQUEST:
+                    value = request.getAttribute( key );
+                    break;
+                case REPORT_SESSION:
+                    value = request.getAttribute( key );
+                    break;
+                default:
+                    throw new RuntimeException();
+            }
+            reportAttribute( sb, key, value, id, separator );
+        }
+        return sb;
+    }
+
+    public static StringBuffer reportAttribute( StringBuffer sb, String key,
+            Object value, String id, String separator ) {
+        sb.append( id + " [ key( " + key + " ), value(" + value.getClass().getName() + ")( " +
+                value + " ) ]" + separator );
+        return sb;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Categories.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Categories.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,146 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.util.StringHelper;
+
+import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.List;
+import java.util.Iterator;
+import java.util.Collections;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+
+
+/**
+ * User: ozzy
+ * Date: Apr 9, 2004
+ * Time: 2:31:56 PM
+ */
+public class Categories {
+
+    private static final Logger log = Logger.getInstance( Categories.class );
+
+    private Category[] categories;
+    // string -> Category
+    private HashMap categoryStringMap;
+    // Category -> list of TestDefinition objects
+    private HashMap categoryTestMap;
+
+    public Categories( Category[] categories ) {
+        this.categories = categories;
+        categoryStringMap = new HashMap();
+        categoryTestMap = new HashMap();
+        init();
+    }
+
+    private void init() {
+        for ( int i = 0; i < categories.length; i++ ) {
+            categoryStringMap.put( categories[i].getName(), categories[i] );
+            categoryTestMap.put( categories[i], new ArrayList() );
+        }
+    }
+
+    public Category[] getCategories() {
+        return categories;
+    }
+
+    public Category getCategory( String categoryString ) {
+        return (Category) getCategoryStringMap().get( categoryString );
+    }
+
+    private Map getCategoryStringMap() {
+        return categoryStringMap;
+    }
+
+    public List getTests( String category ) {
+        assert category != null : "ERROR: category string may not be null";
+        return getTests( getCategory( category ) );
+    }
+
+    /**
+     *
+     * @param category
+     * @return a List of TestDefinition objects, returns null if no tests exist for the category
+     */
+    public List getTests( Category category ) {
+        List list = (List) getCategoryTestMap().get( category );
+        if ( list == null ) {
+            return null;
+        }
+        return Collections.unmodifiableList( list);
+    }
+
+    private Map getCategoryTestMap() {
+        return categoryTestMap;
+    }
+
+    public void addTest( TestDefinition test ) throws ConfigException {
+        List testCategories = test.getCategories();
+        Category category = null;
+        for ( int i = 0; i < testCategories.size(); i++ ) {
+            category = (Category) testCategories.get( i );
+            addTest( category, test );
+        }
+    }
+
+    private void addTest( Category category, TestDefinition test ) throws ConfigException {
+        List list = null;
+        if ( !getCategoryTestMap().containsKey( category ) ) {
+            ConfigException ce = new ConfigException( "ERROR: unable to find category( " + category + " )" );
+            log.fatal( ce );
+            throw ce;
+        }
+        list = (List) getCategoryTestMap().get( category );
+        list.add( test );
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 64 );
+        sb.append( "[ " );
+        sb.append( "categories( \n" + StringHelper.toString( getCategories(), "\n\t", "\n\t" ) + " ), \n" );
+        sb.append( "testMap( \n" + testMapToString() + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public String testMapToString() {
+        Map map = getCategoryTestMap();
+        Iterator it = map.keySet().iterator();
+        StringBuffer sb = new StringBuffer( 16 * map.size() );
+        Category category = null;
+        List testList = null;
+        sb.append( "[\n" );
+        for ( int i = 0; it.hasNext(); i++ ) {
+            category = (Category) it.next();
+            testList = (List) map.get( category );
+            if ( i != 0 ) {
+                sb.append( "\n" );
+            }
+            sb.append( "\t[" + i + "] key(" + category.getName() + "), value( " +
+                    TestDefinition.testListToString( testList ) + " )" );
+        }
+        sb.append( "\n]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Category.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Category.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,86 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+import java.io.File;
+
+/**
+ * User: ozzy
+ * Date: Apr 9, 2004
+ * Time: 2:32:14 PM
+ */
+public class Category implements Comparable {
+
+    private String name;
+    private String description;
+    private File reportDir;
+
+    public Category( String name, String description, String baseDirPath ) throws ConfigException {
+        this.name = name;
+        this.description = description;
+        this.reportDir = new File( baseDirPath + "/junit/" + name );
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getReportDirPath() {
+        return reportDir.getAbsolutePath();
+    }
+
+    public int compareTo( Object o ) {
+        if ( o instanceof Category ) {
+            Category other = (Category) o;
+            return getName().compareToIgnoreCase( other.getName() );
+        }
+        return 1;
+    }
+
+    public boolean equals( Object object ) {
+        if ( this == object ) {
+            return true;
+        }
+        else if ( object == null || getClass() != object.getClass() ) {
+            return false;
+        }
+        Category other = (Category) object;
+        return getName().equals( other.getName() );
+    }
+
+    public int hashCode() {
+        return getName().hashCode();
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 64 );
+        sb.append( "[ " );
+        sb.append( "name( " + name + " )" );
+        sb.append( ", reportDir( " + getReportDirPath() + " )" );
+        sb.append( ", description( " + description + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Config.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Config.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.util.StringHelper;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.Collections;
+import java.io.File;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+
+/**
+ * User: ozzy
+ * Date: Apr 13, 2004
+ * Time: 4:19:09 PM
+ */
+public class Config {
+
+    private static final Logger log = Logger.getInstance( Config.class );
+
+    private Map suffixMap;
+    private String servletURI;
+    private File baseDirectory;
+
+    public Config( List suffixList, String servletURI, String baseDirPath ) {
+        this( (String[]) suffixList.toArray( new String[suffixList.size()] ), servletURI, baseDirPath );
+    }
+
+    public Config( String[] suffixList, String servletURI, String baseDirPath ) {
+        this.servletURI = servletURI;
+        suffixMap = new HashMap();
+        baseDirectory = new File( baseDirPath );
+        init( suffixList );
+    }
+
+    private void init( String[] suffixList ) {
+        String suffix = null;
+        if ( suffixList != null ) {
+            for ( int i = 0; i < suffixList.length; i++ ) {
+                suffix = suffixList[i];
+                if ( log.isDebugEnabled() ) {
+                    log.debug( "suffix( " + suffix + " )" );
+                }
+                suffixMap.put( suffix, suffix );
+            }
+        }
+    }
+
+    public boolean handleSuffix( String suffix ) {
+        return suffixMap.containsKey( suffix );
+    }
+
+    // this URI specifies the portion to the right of the context root, not including the root.
+    public String getServletURI() {
+        return servletURI;
+    }
+
+    public Set getSuffixes() {
+        return Collections.unmodifiableSet( getSuffixMap().keySet() );
+    }
+
+    public File getBaseDirectory() {
+        return baseDirectory;
+    }
+
+    public boolean createBaseDirectory() {
+        if ( baseDirectory.exists() ) {
+            return true;
+        }
+        return baseDirectory.mkdirs();
+    }
+
+    private Map getSuffixMap() {
+        return suffixMap;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+        sb.append( "servletURI( " + getServletURI() + " )" );
+        sb.append( ", suffixList( " + StringHelper.toString( getSuffixes().iterator(), "\n", "\n\t" ) + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/ConfigException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/ConfigException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+/**
+ * User: ozzy
+ * Date: Mar 16, 2004
+ * Time: 11:12:06 AM
+ */
+public class ConfigException extends Exception {
+
+    public ConfigException() {
+        super();
+    }
+
+    public ConfigException( String message ) {
+        super( message );
+    }
+
+    public ConfigException( String message, Throwable cause ) {
+        super( message, cause );
+    }
+
+    public ConfigException( Throwable cause ) {
+        super( cause );
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/RuntimeConfigException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/RuntimeConfigException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+/**
+ * User: ozzy
+ * Date: Mar 16, 2004
+ * Time: 11:12:06 AM
+ */
+public class RuntimeConfigException extends RuntimeException {
+
+    public RuntimeConfigException() {
+        super();
+    }
+
+    public RuntimeConfigException( String message ) {
+        super( message );
+    }
+
+    public RuntimeConfigException( String message, Throwable cause ) {
+        super( message, cause );
+    }
+
+    public RuntimeConfigException( Throwable cause ) {
+        super( cause );
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/ServerConfig.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/ServerConfig.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,61 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+/**
+ * User: ozzy
+ * Date: Apr 15, 2004
+ * Time: 3:08:44 PM
+ */
+public class ServerConfig {
+
+    private String name;
+    private String hostname;
+    private int port;
+
+    public ServerConfig( String name, String hostname, int port ) {
+        this.name = name;
+        this.hostname = hostname;
+        this.port = port;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getHostname() {
+        return hostname;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 48 );
+        sb.append( "[ " );
+        sb.append( "name( " + getName() + " )" );
+        sb.append( ", hostname( " + getHostname() + " )" );
+        sb.append( ", port( " + getPort() + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/TestDefinition.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/TestDefinition.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,205 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.util.StringHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.Constants;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * User: ozzy
+ * Date: Apr 9, 2004
+ * Time: 2:36:17 PM
+ */
+public class TestDefinition implements Comparable {
+
+    private static final Logger log = Logger.getInstance( TestDefinition.class );
+
+    private String name;
+    private String description;
+    private WebappConfig webapp;
+    private List categories;
+
+    public TestDefinition( String name, String description, WebappConfig webapp, List categories ) {
+        this.name = name;
+        assert name != null : "ERROR: test name may not be null";
+        if ( description == null ) {
+            this.description = "";
+        }
+        else {
+            this.description = description;
+        }
+        assert webapp != null : "ERROR: webapp may not be null, test name( " + name + " )";
+        this.webapp = webapp;
+        this.categories = categories;
+        if ( this.categories == null ) {
+            this.categories = new ArrayList();
+        }
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription( String description ) {
+        this.description = description;
+    }
+
+    public WebappConfig getWebapp() {
+        return webapp;
+    }
+
+    private List getCategoriesInternal() {
+        return categories;
+    }
+
+    public List getCategories() {
+        return Collections.unmodifiableList( categories );
+    }
+
+    public void addCategory( Category category ) {
+        getCategoriesInternal().add( category );
+    }
+
+    public String getTestFilePath() {
+        return getWebapp().getTestDirectory() + "/" + getName() + Constants.XML;
+    }
+
+    public String getResultFilePath() {
+        return getWebapp().getResultsDirectory() + "/" + getName() + Constants.XML;
+    }
+
+    public String getResultDiffFilePath() {
+        return getWebapp().getResultsDirectory() + "/" + getName() + Constants.DIFF + Constants.XML;
+    }
+
+    public void createRecordFile() throws IOException {
+        createRecordFile( false );
+    }
+
+    public void createRecordFile( boolean overwrite ) throws IOException {
+        if ( ! getWebapp().createTestDirectory()) {
+            String msg = "ERROR: unable to create test directory( " + getWebapp().getTestDirectory() + " )";
+            log.error( msg );
+            throw new IOException( msg );
+        }
+        File file = new File( getTestFilePath() );
+        if ( overwrite ) {
+            if ( file.exists() && ! file.delete() ) {
+                String msg = "ERROR: unable to delete existing test file( " + file  + " )";
+                log.error( msg );
+                throw new IOException( msg );
+            }
+        }
+        else {
+            if ( file.exists() ) {
+                String msg = "ERROR: test file exists( " + file + " )";
+                log.error( msg );
+                throw new IOException( msg );
+            }
+        }
+        if ( ! file.createNewFile() ) {
+            String msg = "ERROR: unable to create new test file( " + file + " )";
+            log.error( msg );
+            throw new IOException( msg );
+        }
+    }
+
+    public void createPlaybackFile( ) throws IOException {
+        if ( !getWebapp().createResultsDirectory() ) {
+            String msg = "ERROR: unable to create results directory( " + getWebapp().getResultsDirectory() + " )";
+            log.error( msg );
+            throw new IOException( msg );
+        }
+        File file = new File( getResultFilePath() );
+        if ( file.exists() && !file.delete() ) {
+            String msg = "ERROR: unable to delete existing playback file( " + file + " )";
+            log.error( msg );
+            throw new IOException( msg );
+        }
+        if ( !file.createNewFile() ) {
+            String msg = "ERROR: unable to create new test playback file( " + file + " )";
+            log.error( msg );
+            throw new IOException( msg );
+        }
+    }
+
+    public void createPlaybackDiffFile() throws IOException {
+        if ( !getWebapp().createResultsDirectory() ) {
+            String msg = "ERROR: unable to create results directory( " + getWebapp().getResultsDirectory() + " )";
+            log.error( msg );
+            throw new IOException( msg );
+        }
+        File file = new File( getResultDiffFilePath() );
+        if ( file.exists() && !file.delete() ) {
+            String msg = "ERROR: unable to delete existing playback diff file( " + file + " )";
+            log.error( msg );
+            throw new IOException( msg );
+        }
+        if ( !file.createNewFile() ) {
+            String msg = "ERROR: unable to create new playback diff file( " + file + " )";
+            log.error( msg );
+            throw new IOException( msg );
+        }
+    }
+
+    public int compareTo( Object o ) {
+        if ( o instanceof TestDefinition ) {
+            TestDefinition other = (TestDefinition)o;
+            return getName().compareToIgnoreCase( other.getName() );
+        }
+        return 1;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 64 );
+        sb.append( "[ " );
+        sb.append( "name( " + name + " )" );
+        sb.append( ", description( " + description + " )" );
+        sb.append( ", webapp( " + getWebapp().getName() + " )" );
+        sb.append( ",\n\t categories( " + StringHelper.toString( categories.toArray(), "\n", "\n\t" ) + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public static String testListToString( List list ) {
+        StringBuffer sb = new StringBuffer( 16 * list.size() );
+        TestDefinition test = null;
+        for ( int i = 0; i < list.size(); i++ ) {
+            test = (TestDefinition) list.get( i );
+            if ( i != 0 ) {
+                sb.append( ", " );
+            }
+            sb.append( test.getName() );
+        }
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/TestDefinitions.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/TestDefinitions.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.util.StringHelper;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * User: ozzy
+ * Date: Apr 9, 2004
+ * Time: 2:36:12 PM
+ */
+public class TestDefinitions {
+
+    private List testDefinitions;
+    private Categories categories;
+    private Webapps webapps;
+    // test name -> TestDefinition
+    private Map testsByNameMap;
+    // webapp name -> List of TestDefinition objects
+    private Map testsByWebappMap;
+
+    public TestDefinitions( List testDefinitions, Categories categories, Webapps webapps ) {
+        this.testDefinitions = testDefinitions;
+        this.categories = categories;
+        this.webapps = webapps;
+        testsByNameMap = new HashMap();
+        testsByWebappMap = new HashMap();
+        init();
+    }
+
+    private void init() {
+        TestDefinition testDefinition = null;
+        for ( int i = 0; i < testDefinitions.size(); i++ ) {
+            testDefinition = (TestDefinition) testDefinitions.get(i);
+            addToMap( testDefinition );
+        }
+    }
+
+    private void addToMap( TestDefinition test ) {
+        getTestsByNameMap().put( test.getName(), test );
+        List list = (List) getTestsByWebappMap().get( test.getWebapp().getName() );
+        if ( list == null ) {
+            list = new ArrayList();
+            getTestsByWebappMap().put( test.getWebapp().getName(), list );
+        }
+        list.add( test );
+    }
+
+    public void add( TestDefinition test ) {
+        WebappConfig webapp = test.getWebapp();
+        WebappConfig temp = webapps.getWebapp( webapp.getName() );
+        if ( temp == null || temp != webapp ) {
+            throw new RuntimeConfigException( "ERROR: webapp does not exist in this set of definitions, webapp( " +
+                    webapp + " ), found match( " + temp + " )");
+        }
+        testDefinitions.add( test );
+        addToMap( test );
+    }
+
+    public List getTestDefinitions() {
+        return Collections.unmodifiableList( testDefinitions );
+    }
+
+    public Categories getCategories() {
+        return categories;
+    }
+
+    public Webapps getWebapps() {
+        return webapps;
+    }
+
+    public TestDefinition getTest( String name ) {
+        return (TestDefinition) getTestsByNameMap().get( name );
+    }
+
+    public List getTestList( String webappName ) {
+        return (List) getTestsByWebappMap().get( webappName );
+    }
+
+    private Map getTestsByWebappMap() {
+        return testsByWebappMap;
+    }
+
+    private Map getTestsByNameMap() {
+        return testsByNameMap;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 64 );
+        sb.append( "[ " );
+        sb.append( "tests( " + StringHelper.toString( getTestDefinitions(), "\n", "\n" ) + " )" );
+        sb.append( ",\ncategories( " + categories + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/WebappConfig.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/WebappConfig.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,178 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.util.StringHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+
+import java.io.File;
+
+/**
+ * User: ozzy
+ * Date: Apr 12, 2004
+ * Time: 5:35:51 PM
+ */
+public class WebappConfig {
+
+    private static final Logger log = Logger.getInstance( WebappConfig.class );
+
+    private String name;
+    private String description;
+    private boolean testMode;
+    private ServerConfig server;
+    // includes leading slash
+    private String contextRoot;
+    private File testDirectory;
+    private File resultsDirectory;
+    private Config config;
+
+    public WebappConfig( String name, String description, ServerConfig server, boolean testMode,
+            String contextRoot, String testDirectory, Config config ) {
+        this.name = name;
+        this.description = description;
+        this.testMode = testMode;
+        this.server = server;
+        this.contextRoot = contextRoot;
+        this.testDirectory = new File( testDirectory );
+        this.resultsDirectory = new File( config.getBaseDirectory(), name + "-playback" );
+        this.config = config;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public ServerConfig getServer() {
+        return server;
+    }
+
+    public boolean isTestMode() {
+        return testMode;
+    }
+
+    public String getContextRoot() {
+        return contextRoot;
+    }
+
+    public String getServletURI() {
+        return getContextRoot() + "/" + getConfig().getServletURI();
+    }
+
+    public String getTestDirectory() {
+        return testDirectory.getAbsolutePath();
+    }
+
+    /**
+     * @return true if the directory exists or was created successfully.
+     */
+    public boolean createTestDirectory() {
+        if ( testDirectory.exists() ) {
+            return true;
+        }
+        return testDirectory.mkdirs();
+    }
+
+    public String getResultsDirectory() {
+        return resultsDirectory.getAbsolutePath();
+    }
+
+    /**
+     * returns true only if all files could be deleted from the results directory, false otherwise
+     *
+     * @return
+     */
+    public boolean deleteResults() {
+        return deleteResults( false );
+    }
+
+    /**
+     * return value is true only if all files could be deleted from the results directory,
+     * false otherwise.
+     *
+     * @return
+     */
+    public boolean deleteResults( boolean removeDir ) {
+        boolean rtnVal = true;
+        if ( resultsDirectory.exists() ) {
+            File[] files = resultsDirectory.listFiles();
+            File file = null;
+            for ( int i = 0; i < files.length; i++ ) {
+                file = files[i];
+                if ( !file.delete() ) {
+                    if ( log.isWarnEnabled() ) {
+                        log.warn( "unable to delete results file( " + file.getAbsolutePath() + " )" );
+                    }
+                    rtnVal = false;
+                }
+            }
+            if ( rtnVal && removeDir ) {
+                if ( !resultsDirectory.delete() ) {
+                    if ( log.isWarnEnabled() ) {
+                        log.warn( "unable to delete( " + resultsDirectory.getAbsolutePath() + " )" );
+                    }
+                    rtnVal = false;
+                }
+            }
+        }
+        return rtnVal;
+    }
+
+    /**
+     * @return true if the results directory exists immediately prior to returning.  therefore,
+     *         if the directory already exists this method will return true.
+     */
+    public boolean createResultsDirectory() {
+        boolean rtnVal = false;
+        resultsDirectory.mkdirs();
+        if ( resultsDirectory.exists() ) {
+            rtnVal = true;
+        }
+        return rtnVal;
+    }
+
+    public boolean handleSuffix( String suffix ) {
+        return getConfig().handleSuffix( suffix );
+    }
+
+    public Config getConfig() {
+        return config;
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+        sb.append( "name( " + getName() + " )" );
+        sb.append( ", description( " + getDescription() + " )" );
+        sb.append( ", testMode( " + isTestMode() + " )" );
+        sb.append( ", server( " + getServer() + " )" );
+        sb.append( ", contextRoot( " + getContextRoot() + " )" );
+        sb.append( ", servletURI( " + getServletURI() + " )" );
+        sb.append( ", testDir( " + getTestDirectory() + " )" );
+        sb.append( ", resultsDir( " + getResultsDirectory() + " )" );
+        sb.append( ", suffixList( " + StringHelper.toString( getConfig().getSuffixes().iterator(), "\n", "\n\t" ) + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Webapps.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/config/Webapps.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.config;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.util.StringHelper;
+
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collections;
+
+/**
+ * User: ozzy
+ * Date: Apr 12, 2004
+ * Time: 5:35:43 PM
+ */
+public class Webapps {
+
+    // List of WebappConfig objects
+    private List webappList;
+    // name -> Webapp
+    private Map webappNameMap;
+
+    public Webapps( List webappList ) {
+        this.webappList = webappList;
+        webappNameMap = new HashMap();
+        init();
+    }
+
+    private void init() {
+        WebappConfig webapp = null;
+        for ( int i = 0; i < webappList.size(); i++ ) {
+            webapp = (WebappConfig) webappList.get( i );
+            webappNameMap.put( webapp.getName(), webapp );
+        }
+    }
+
+    public List getWebappList() {
+        return Collections.unmodifiableList( webappList );
+    }
+
+    private Map getWebappNameMap() {
+        return webappNameMap;
+    }
+
+    public WebappConfig getWebapp( String name ) {
+        return (WebappConfig) getWebappNameMap().get( name );
+    }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+        sb.append( ", webappList( " + StringHelper.toString( getWebappList(), "\n", "\n\t" ) + " )" );
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/util/StringHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/util/StringHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,220 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.util;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.List;
+
+/**
+ * User: ozzy
+ * Date: Jul 3, 2003
+ * Time: 10:36:33 AM
+ */
+public class StringHelper {
+
+    public static String toString( Object[] objects ) {
+        return toString( objects, null, null );
+    }
+
+    public static String toString( List list, String prefix, String delimiter ) {
+        return toString( list.toArray(), prefix, delimiter );
+    }
+
+    public static String toString( Object[] objects, String prefix, String delimiter ) {
+        if ( objects == null ) {
+            return "NULL";
+        }
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+
+        if ( objects != null ) {
+            int i = 0;
+            Object object = null;
+            Object[] array = null;
+            for ( i = 0; i < objects.length; i++ ) {
+                object = objects[i];
+                try {
+                    array = (Object[]) object;
+                }
+                catch (ClassCastException e) {
+                }
+                if ( array != null ) {
+                    if ( prefix != null ) {
+                        sb.append( prefix );
+                    }
+                    sb.append( "(" + i + ") [" + toString( array, null, " " ) + "]" );
+                    if ( delimiter != null ) {
+                        sb.append( delimiter );
+                    }
+                    array = null;
+                }
+                else {
+                    if ( prefix != null ) {
+                        sb.append( prefix );
+                    }
+                    sb.append( "(" + i + ") [" + object + "]" );
+                    if ( delimiter != null ) {
+                        sb.append( delimiter );
+                    }
+                }
+            }
+            if ( i == 0 ) {
+                sb.append( "EMPTY" );
+            }
+        }
+        else {
+            sb.append( objects );
+        }
+
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public static String toString( Iterator it, String prefix, String delimiter ) {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+
+        int i = 0;
+        Object object = null;
+        Object[] array = null;
+        for ( i = 0; it.hasNext(); i++ ) {
+            object = it.next();
+            try {
+                array = (Object[]) object;
+            }
+            catch (ClassCastException e) {
+            }
+            if ( array != null ) {
+                if ( prefix != null ) {
+                    sb.append( prefix );
+                }
+                sb.append( "(" + i + ") [" + toString( array, null, " " ) + "]" );
+                if ( delimiter != null ) {
+                    sb.append( delimiter );
+                }
+                array = null;
+            }
+            else {
+                if ( prefix != null ) {
+                    sb.append( prefix );
+                }
+                sb.append( "(" + i + ") [" + object + "]" );
+                if ( delimiter != null ) {
+                    sb.append( delimiter );
+                }
+            }
+        }
+        if ( i == 0 ) {
+            sb.append( "EMPTY" );
+        }
+
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public static String toDelimitedString( Object[] objects, String delimiter ) {
+        StringBuffer sb = new StringBuffer( 256 );
+        if ( objects != null ) {
+            int i = 0;
+            for ( i = 0; i < objects.length; i++ ) {
+                if ( i != 0 && delimiter != null ) {
+                    sb.append( delimiter );
+                }
+                sb.append( objects[i] );
+            }
+        }
+        return sb.toString();
+    }
+
+    public static String toString( Set set ) {
+        Iterator it = set.iterator();
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+
+        Object value = null;
+        for ( int i = 0; it.hasNext(); i++ ) {
+            value = it.next();
+            if ( i == 0 ) {
+                sb.append( "value(" + i + ")( " + value + " )" );
+            }
+            else {
+                sb.append( ", value(" + i + ")( " + value + " )" );
+            }
+        }
+
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public static String toString( Map map ) {
+        Iterator it = map.keySet().iterator();
+        return toString( it, map );
+    }
+
+    public static String toString( Map map, String delimiter ) {
+        if ( map == null ) {
+            return "NULL";
+        }
+        Iterator it = map.keySet().iterator();
+        return toString( it, map, delimiter );
+    }
+
+    public static String toString( Iterator it, Map map ) {
+        return toString( it, map, null );
+    }
+
+    public static String toString( Iterator it, Map map, String delimiter ) {
+        StringBuffer sb = new StringBuffer( 256 );
+        sb.append( "[ " );
+
+        Object key = null;
+        Object value = null;
+        for ( int i = 0; it.hasNext(); i++ ) {
+            key = it.next();
+            value = map.get( key );
+            if ( i == 0 ) {
+                sb.append( "key( " + key + " ), value( " + value + " )" );
+            }
+            else {
+                sb.append( ", key( " + key + " ), value( " + value + " )" );
+            }
+            if ( delimiter != null ) {
+                sb.append( delimiter );
+            }
+        }
+
+        sb.append( " ]" );
+        return sb.toString();
+    }
+
+    public static StringBuffer getStringFromList( List list ) {
+        return getStringFromList( new StringBuffer( 64 * list.size() ), list );
+    }
+
+    public static StringBuffer getStringFromList( StringBuffer sb, List list ) {
+        for ( int i = 0; i < list.size(); i++ ) {
+            sb.append( list.get( i ) );
+        }
+        return sb;
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/XMLHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/XMLHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,917 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans;
+
+import org.apache.beehive.netui.tools.testrecorder.x2004.*;
+import org.apache.beehive.netui.tools.testrecorder.x2004.TestsType;
+import org.apache.beehive.netui.tools.testrecorder.x2004.TestType;
+import org.apache.beehive.netui.tools.testrecorder.x2004.diffsession.RecorderDiffDocument;
+import org.apache.beehive.netui.tools.testrecorder.x2004.diffsession.TestDiffType;
+import org.apache.beehive.netui.tools.testrecorder.x2004.session.*;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.Iterator;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import java.text.ParseException;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.util.StringHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.*;
+import org.apache.beehive.netui.tools.testrecorder.shared.*;
+
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlOptions;
+import org.apache.xmlbeans.XmlObject;
+
+import javax.servlet.http.Cookie;
+
+/**
+ */
+public class XMLHelper {
+
+    private static final Logger log = Logger.getInstance( XMLHelper.class );
+
+    public static RecordSessionBean getRecordSessionBean( File file ) throws SessionXMLException, IOException {
+        if ( log.isInfoEnabled() ) {
+            log.info( "file( " + file.getAbsolutePath() + " )" );
+        }
+        InputStream is = new FileInputStream( file );
+        return getRecordSessionBean( is, file.getAbsolutePath() );
+    }
+
+    public static RecordSessionBean getRecordSessionBean( InputStream is, String resourceIdentifier )
+            throws SessionXMLException, IOException {
+        RecorderSessionDocument doc = null;
+        try {
+            XmlOptions loadOptions = new XmlOptions();
+            loadOptions.setLoadLineNumbers();
+            doc = RecorderSessionDocument.Factory.parse( is, loadOptions );
+        }
+        catch ( XmlException e ) {
+            log.fatal( "test recorder parse exception", e );
+            SessionXMLException ex = new SessionXMLException( "ERROR: failed parsing test recorder record session XML, file( " +
+                    resourceIdentifier + " )", e );
+            log.fatal( ex );
+            throw ex;
+        }
+        finally {
+            if ( is != null ) {
+                try {
+                    is.close();
+                }
+                catch ( IOException e ) {
+                    log.error( "ERROR: failed to close stream for file( " + resourceIdentifier + " )" );
+                }
+            }
+        }
+
+        assert doc != null;
+        try {
+            validate( doc, resourceIdentifier,
+                    "ERROR: test recorder record session XML document is not valid against the schema" );
+        }
+        catch ( ConfigException e ) {
+            throw new SessionXMLException( e.getMessage(), e );
+        }
+        RecorderSessionDocument.RecorderSession xmlSession = doc.getRecorderSession();
+        RecordSessionBean bean = new RecordSessionBean( xmlSession.getSessionName() );
+        bean = getRecordSessionBean( bean, doc );
+        return bean;
+    }
+
+    public static PlaybackSessionBean getPlaybackSessionBean( File file ) throws SessionXMLException, IOException {
+        if ( log.isInfoEnabled() ) {
+            log.info( "file( " + file.getAbsolutePath() + " )" );
+        }
+        InputStream is = new FileInputStream( file );
+        return getPlaybackSessionBean( is, file.getAbsolutePath() );
+    }
+
+    public static PlaybackSessionBean getPlaybackSessionBean( InputStream is, String resourceIdentifier )
+            throws SessionXMLException, IOException {
+        RecorderSessionDocument doc = null;
+        try {
+            XmlOptions loadOptions = new XmlOptions();
+            loadOptions.setLoadLineNumbers();
+            doc = RecorderSessionDocument.Factory.parse( is, loadOptions );
+        }
+        catch ( XmlException e ) {
+            log.fatal( "test recorder parse exception", e );
+            SessionXMLException ex = new SessionXMLException( "ERROR: failed parsing test recorder playback session XML, file( " +
+                    resourceIdentifier + " )", e );
+            log.fatal( ex );
+            throw ex;
+        }
+        finally {
+            if ( is != null ) {
+                try {
+                    is.close();
+                }
+                catch ( IOException e ) {
+                    log.error( "ERROR: failed to close stream for file( " + resourceIdentifier + " )" );
+                }
+            }
+        }
+
+        assert doc != null;
+        try {
+            validate( doc, resourceIdentifier,
+                    "ERROR: test recorder playback session XML document is not valid against the schema" );
+        }
+        catch ( ConfigException e ) {
+            throw new SessionXMLException( e.getMessage(), e );
+        }
+        PlaybackSessionBean bean = getPlaybackSessionBean( doc );
+        return bean;
+    }
+
+    public static List getDiffResults( File file ) throws SessionXMLException, IOException {
+        if ( log.isInfoEnabled() ) {
+            log.info( "file( " + file.getAbsolutePath() + " )" );
+        }
+        InputStream is = new FileInputStream( file );
+        return getDiffResults( is, file.getAbsolutePath() );
+    }
+
+    public static List getDiffResults( InputStream is, String resourceIdentifier )
+            throws SessionXMLException, IOException {
+        RecorderDiffDocument doc = null;
+        try {
+            XmlOptions loadOptions = new XmlOptions();
+            loadOptions.setLoadLineNumbers();
+            doc = RecorderDiffDocument.Factory.parse( is, loadOptions );
+        }
+        catch ( XmlException e ) {
+            log.fatal( "test recorder parse exception", e );
+            SessionXMLException ex = new SessionXMLException( "ERROR: failed parsing test recorder diff XML, file( " +
+                    resourceIdentifier + " )", e );
+            log.fatal( ex );
+            throw ex;
+        }
+        finally {
+            if ( is != null ) {
+                try {
+                    is.close();
+                }
+                catch ( IOException e ) {
+                    log.error( "ERROR: failed to close stream for file( " + resourceIdentifier + " )" );
+                }
+            }
+        }
+
+        assert doc != null;
+        try {
+            validate( doc, resourceIdentifier,
+                    "ERROR: test recorder diff XML document is not valid against the schema" );
+        }
+        catch ( ConfigException e ) {
+            throw new SessionXMLException( e.getMessage(), e );
+        }
+        List list = getDiffResults( doc );
+        return list;
+    }
+
+    public static void createRecordFile( File recordFile, RecordSessionBean bean ) throws IOException {
+        XmlOptions xmlOptions = new XmlOptions();
+        xmlOptions.setSavePrettyPrint();
+        xmlOptions.setSavePrettyPrintIndent( 3 );
+        RecorderSessionDocument doc = createRecorderSessionDocument( bean, xmlOptions );
+        doc.save( recordFile, xmlOptions );
+    }
+
+    public static void createPlaybackFile( File playbackFile, PlaybackSessionBean bean ) throws IOException {
+        XmlOptions xmlOptions = new XmlOptions();
+        xmlOptions.setSavePrettyPrint();
+        xmlOptions.setSavePrettyPrintIndent( 3 );
+        RecorderSessionDocument doc = createPlaybackSessionDocument( bean, xmlOptions );
+        doc.save( playbackFile, xmlOptions );
+    }
+
+    public static void createDiffFile( File diffFile, PlaybackSessionBean bean ) throws IOException {
+        XmlOptions xmlOptions = new XmlOptions();
+        xmlOptions.setSavePrettyPrint();
+        xmlOptions.setSavePrettyPrintIndent( 3 );
+        RecorderDiffDocument doc = createDiffSessionDocument( bean, xmlOptions );
+        doc.save( diffFile, xmlOptions );
+    }
+
+    private static RecorderDiffDocument createDiffSessionDocument( PlaybackSessionBean bean, XmlOptions options ) {
+        RecorderDiffDocument doc = RecorderDiffDocument.Factory.newInstance( options );
+        RecorderDiffDocument.RecorderDiff diff = doc.addNewRecorderDiff();
+        TestResults results = null;
+        RequestData request = null;
+        for ( int i = 0; i < bean.getTestCount(); i++ ) {
+            results = bean.getTestResults( i );
+            if ( results.isTestPassed() ) {
+                continue;
+            }
+            // failure, persist diff data
+            request = bean.getRequestData( i );
+            populateTestDiffType( diff.addNewRequest(), results, request );
+        }
+        return doc;
+    }
+
+    private static RecorderSessionDocument createPlaybackSessionDocument( PlaybackSessionBean bean,
+            XmlOptions options ) {
+        RecorderSessionDocument doc = createRecorderSessionDocument( (RecordSessionBean) bean, options );
+        RecorderSessionDocument.RecorderSession session = doc.getRecorderSession();
+        addTestResults( doc, bean );
+        session.setSessionStatus( StatusType.Enum.forString( bean.getStatus().toLowerCase() ) );
+        session.setPassedCount( bean.getPassedCount() );
+        session.setFailedCount( bean.getFailedCount() );
+        session.setTestCount( bean.getTestCount() );
+        return doc;
+    }
+
+    private static RecorderSessionDocument createRecorderSessionDocument( RecordSessionBean bean,
+            XmlOptions options ) {
+        RecorderSessionDocument doc = createRecorderSessionDocument( (SessionBean) bean, options );
+        RecorderSessionDocument.RecorderSession session = doc.getRecorderSession();
+        session.setTestCount( bean.getTestCount() );
+        // TODO add for record
+        //        session.setSessionStatus( );
+        addTests( doc, bean );
+        return doc;
+    }
+
+    private static RecorderSessionDocument createRecorderSessionDocument( SessionBean bean, XmlOptions options ) {
+        RecorderSessionDocument doc = RecorderSessionDocument.Factory.newInstance( options );
+        RecorderSessionDocument.RecorderSession session = doc.addNewRecorderSession();
+        session.setSessionName( bean.getSessionName() );
+        session.setTester( bean.getTester() );
+        session.setDescription( bean.getDescription() );
+        session.setStartDate( bean.getStartDateString() );
+        session.setEndDate( bean.getEndDateString() );
+        return doc;
+    }
+
+    private static void addTests( RecorderSessionDocument doc, RecordSessionBean bean ) {
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestsType tests = doc.getRecorderSession()
+                .addNewTests();
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestType test = null;
+        for ( int i = 0; i < bean.getTestCount(); i++ ) {
+            test = tests.addNewTest();
+            test.setTestNumber( i + 1 );
+            populateRequestType( test.addNewRequest(), bean.getRequestData( i ) );
+            populateResponseType( test.addNewResponse(), bean.getResponseData( i ) );
+        }
+        return;
+    }
+
+    private static void addTestResults( RecorderSessionDocument doc, PlaybackSessionBean bean ) {
+        int count = doc.getRecorderSession().getTests().sizeOfTestArray();
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestsType tests = doc.getRecorderSession()
+                .getTests();
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestType test = null;
+        for ( int i = 0; i < count; i++ ) {
+            test = tests.getTestArray( i );
+            populateTestResultsType( test.addNewTestResults(), bean.getTestResults( i ) );
+        }
+        return;
+    }
+
+    /**
+     * @param requestType 
+     * @param data        
+     * @return 
+     */
+    private static RequestType populateRequestType( final RequestType requestType, final RequestData data ) {
+        requestType.setProtocol( ProtocolType.Enum.forString( data.getProtocol() ) );
+        requestType.setProtocolVersion( data.getProtocolVersion() );
+        requestType.setHost( data.getHost() );
+        requestType.setPort( data.getPort() );
+        requestType.setUri( data.getPath() );
+        requestType.setMethod( MethodType.Enum.forString( data.getMethod() ) );
+        populateParametersType( requestType.addNewParameters(), data );
+        populateCookiesType( requestType.addNewCookies(), data );
+        populateHeadersType( requestType.addNewHeaders(), data );
+        return requestType;
+    }
+
+    private static ResponseType populateResponseType( final ResponseType responseType, final ResponseData data ) {
+        responseType.setStatusCode( data.getStatusCode() );
+        responseType.setReason( data.getReason() );
+        responseType.setResponseBody( data.getBody() );
+        return responseType;
+    }
+
+    private static TestResultsType populateTestResultsType( final TestResultsType testResultsType,
+            final TestResults data ) {
+        testResultsType.setTestStatus( StatusType.Enum.forString( data.getStatus().toLowerCase() ) );
+        return testResultsType;
+    }
+
+    private static TestDiffType populateTestDiffType( final TestDiffType diffType,
+            final TestResults results, final RequestData request ) {
+        diffType.setTestNumber( results.getTestNumber() );
+        diffType.setUri( request.getPath() );
+        diffType.setDiffResults( getDiffString( results ) );
+        return diffType;
+    }
+
+    private static String getDiffString( TestResults results ) {
+        List list = results.getDiffResults();
+        StringBuffer sb = new StringBuffer( 64 * list.size() );
+        sb.append( "\n" );
+        for ( int i = 0; i < list.size(); i++ ) {
+            sb.append( (String) list.get( i ) + "\n" );
+        }
+        return sb.toString();
+    }
+
+    private static ParametersType populateParametersType( final ParametersType paramsType, final RequestData data ) {
+        NameValueType param = null;
+        for ( int i = 0; i < data.getParamCount(); i++ ) {
+            param = paramsType.addNewParameter();
+            param.setName( data.getParamName( i ) );
+            param.setValue( data.getParamValue( i ) );
+        }
+        return paramsType;
+    }
+
+    private static CookiesType populateCookiesType( final CookiesType cookies, final RequestData data ) {
+        NameValueType cookie = null;
+        for ( int i = 0; i < data.getCookieCount(); i++ ) {
+            cookie = cookies.addNewCookie();
+            cookie.setName( data.getCookieName( i ) );
+            cookie.setValue( data.getCookieValue( i ) );
+        }
+        return cookies;
+    }
+
+    private static HeadersType populateHeadersType( final HeadersType headersType, final RequestData data ) {
+        NameValueType header = null;
+        for ( int i = 0; i < data.getHeaderCount(); i++ ) {
+            header = headersType.addNewHeader();
+            header.setName( data.getHeaderName( i ) );
+            header.setValue( data.getHeaderValue( i ) );
+        }
+        return headersType;
+    }
+
+    /**
+     * returns a List of TestResults objects.
+     * 
+     * @param document 
+     * @return 
+     * @throws SessionXMLException 
+     */
+    private static List getDiffResults( RecorderDiffDocument document ) throws SessionXMLException {
+        RecorderDiffDocument.RecorderDiff diff = document.getRecorderDiff();
+        List list = new ArrayList( diff.sizeOfRequestArray() );
+        TestDiffType diffType = null;
+        TestResults results = null;
+        for ( int i = 0; i < diff.sizeOfRequestArray(); i++ ) {
+            diffType = diff.getRequestArray( i );
+            results = new TestResults( diffType.getTestNumber(), diffType.getUri(), false, false );
+            results.addDiffResult( diffType.getDiffResults() );
+            list.add( results );
+        }
+        return list;
+    }
+
+    private static PlaybackSessionBean getPlaybackSessionBean( RecorderSessionDocument document )
+            throws SessionXMLException {
+        RecorderSessionDocument.RecorderSession xmlSession = document.getRecorderSession();
+        boolean error = true;
+        String status = null;
+        status = xmlSession.getSessionStatus().toString();
+        if ( Constants.ERROR.equals( status ) ) {
+            error = true;
+        }
+        PlaybackSessionBean bean = new PlaybackSessionBean( xmlSession.getSessionName(), error );
+        bean = (PlaybackSessionBean) getRecordSessionBean( bean, document );
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestsType tests = xmlSession.getTests();
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestType testType = null;
+        boolean passed = false;
+        for ( int i = 0; i < tests.sizeOfTestArray(); i++ ) {
+            testType = tests.getTestArray( i );
+            status = testType.getTestResults().getTestStatus().toString();
+            if ( Constants.ERROR.equals( status ) ) {
+                error = true;
+                passed = false;
+            }
+            else if ( Constants.PASS.equals( status ) ) {
+                error = false;
+                passed = true;
+            }
+            else {
+                error = false;
+                passed = false;
+            }
+            bean.addTestResults(
+                    new TestResults( testType.getTestNumber(), testType.getRequest().getUri(), error, passed ) );
+        }
+        // TODO add recorded count to XML populate bean with data.
+        bean.setRecordedTestCount( xmlSession.getTestCount() );
+        return bean;
+    }
+
+    // doc -> object
+    private static RecordSessionBean getRecordSessionBean( RecordSessionBean bean,
+            RecorderSessionDocument document ) throws SessionXMLException {
+        RecorderSessionDocument.RecorderSession xmlSession = document.getRecorderSession();
+        bean.setTester( xmlSession.getTester() );
+        bean.setDescription( xmlSession.getDescription() );
+        try {
+            bean.setStartDate( xmlSession.getStartDate() );
+        }
+        catch ( ParseException e ) {
+            String msg = "ERROR: failed parsing start date( " + xmlSession.getStartDate() + " )";
+            log.error( msg );
+            throw new SessionXMLException( msg, e );
+        }
+        try {
+            bean.setEndDate( xmlSession.getEndDate() );
+        }
+        catch ( ParseException e ) {
+            String msg = "ERROR: failed parsing end date( " + xmlSession.getEndDate() + " )";
+            log.error( msg );
+            throw new SessionXMLException( msg, e );
+        }
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestsType tests = xmlSession.getTests();
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestType[] testArray = tests.getTestArray();
+        org.apache.beehive.netui.tools.testrecorder.x2004.session.TestType testType = null;
+        RequestType requestType = null;
+        ResponseType responseType = null;
+        RequestData request = null;
+        ResponseData response = null;
+        for ( int i = 0; i < testArray.length; i++ ) {
+            testType = testArray[i];
+            requestType = testType.getRequest();
+            request = getRequestData( requestType );
+            responseType = testType.getResponse();
+            response = getResponseData( responseType, request );
+            bean.addRequestResponseData( request, response );
+        }
+        return bean;
+    }
+
+    private static RequestData getRequestData( RequestType requestType ) {
+        RequestData request = new RequestData();
+        request.setProtocol( requestType.getProtocol().toString() );
+        request.setProtocolVersion( requestType.getProtocolVersion() );
+        request.setHost( requestType.getHost() );
+        request.setPort( requestType.getPort() );
+        request.setPath( requestType.getUri() );
+        request.setMethod( requestType.getMethod().toString() );
+        request.setParameters( getNVPairs( requestType.getParameters().getParameterArray() ) );
+        request.setHeaders( getNVPairs( requestType.getHeaders().getHeaderArray() ) );
+        request.setCookies( getCookies( requestType.getCookies().getCookieArray() ) );
+        return request;
+    }
+
+    private static NVPair[] getNVPairs( NameValueType[] nvArray ) {
+        NVPair[] pairs = new NVPair[nvArray.length];
+        NVPair pair = null;
+        NameValueType nv = null;
+        for ( int i = 0; i < nvArray.length; i++ ) {
+            nv = nvArray[i];
+            pair = new NVPair( nv.getName(), nv.getValue() );
+            pairs[i] = pair;
+        }
+        return pairs;
+    }
+
+    // TODO change to Http client cookies?
+    private static Cookie[] getCookies( NameValueType[] nvArray ) {
+        Cookie[] cookies = new Cookie[nvArray.length];
+        Cookie cookie = null;
+        NameValueType nv = null;
+        for ( int i = 0; i < nvArray.length; i++ ) {
+            nv = nvArray[i];
+            cookie = new Cookie( nv.getName(), nv.getValue() );
+            cookies[i] = cookie;
+        }
+        return cookies;
+    }
+
+    private static ResponseData getResponseData( ResponseType responseType, RequestData request ) {
+        ResponseData response = new ResponseData( request.getHost(), request.getPort() );
+        response.setStatusCode( responseType.getStatusCode() );
+        response.setReason( responseType.getReason() );
+        response.setBody( responseType.getResponseBody() );
+        return response;
+    }
+
+    public static TestDefinitionsDocument createTestDefDocument( Set tests, Set categories ) {
+        TestDefinitionsDocument doc = TestDefinitionsDocument.Factory.newInstance();
+        org.apache.beehive.netui.tools.testrecorder.x2004.TestDefinitionsDocument.TestDefinitions defs =
+                doc.addNewTestDefinitions();
+        CategoriesType catsType = defs.addNewCategories();
+        Category category = null;
+        CategoryType catType = null;
+        for ( Iterator it = categories.iterator(); it.hasNext(); ) {
+            category = (Category) it.next();
+            catType = catsType.addNewCategory();
+            populateCategory( catType, category );
+        }
+        TestsType testsType = defs.addNewTests();
+        TestDefinition testDef = null;
+        TestType testType = null;
+        for ( Iterator it = tests.iterator(); it.hasNext(); ) {
+            testDef = (TestDefinition) it.next();
+            testType = testsType.addNewTest();
+            populateTest( testType, testDef );
+        }
+        return doc;
+    }
+
+    private static CategoryType populateCategory( CategoryType type, Category category ) {
+        type.setName( category.getName() );
+        type.setDescription( category.getDescription() );
+        return type;
+    }
+
+    private static TestType populateTest( TestType type, TestDefinition def ) {
+        type.setName( def.getName() );
+        type.setDescription( def.getDescription() );
+        type.setWebapp( def.getWebapp().getName() );
+        if ( def.getCategories().size() > 0 ) {
+            TestCategoriesType catType = type.addNewCategories();
+            populateTestCategories( catType, def );
+            type.setCategories( catType );
+        }
+        else {
+            if ( log.isWarnEnabled() ) {
+                log.warn( "WARNING: no categories for test( " + def.getName() + " ), size( " +
+                        def.getCategories().size() +
+                        " )" );
+            }
+        }
+        return type;
+    }
+
+    private static TestCategoriesType populateTestCategories( TestCategoriesType type, TestDefinition def ) {
+        List categories = def.getCategories();
+        for ( int i = 0; i < categories.size(); i++ ) {
+            Category category = (Category) categories.get( i );
+            type.addCategory( category.getName() );
+        }
+        return type;
+    }
+
+    public static TestDefinitions getTestDefinitionsInstance( ClassLoader loader ) {
+        InputStream is = loader.getResourceAsStream( Constants.CONFIG_FILE );
+        if ( is == null ) {
+            throw new RuntimeConfigException( "ERROR: unable to obtain the resource stream for resource( " +
+                    Constants.CONFIG_FILE + " )" );
+        }
+        Config config = null;
+        try {
+            config = getConfig( is, Constants.CONFIG_FILE );
+        }
+        catch ( ConfigException e ) {
+            throw new RuntimeException( e.getMessage(), e );
+        }
+        catch ( IOException e ) {
+            log.fatal( "ERROR: encountered IOException processing resource( " + Constants.CONFIG_FILE + " )", e );
+            throw new RuntimeConfigException(
+                    "ERROR: encountered IOException processing resource( " + Constants.CONFIG_FILE + " )", e );
+        }
+        finally {
+            try {
+                is.close();
+            }
+            catch ( IOException e ) {
+            }
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "config( " + config + " )" );
+        }
+
+        is = loader.getResourceAsStream( Constants.WEBAPPS_FILE );
+        if ( is == null ) {
+            throw new RuntimeConfigException( "ERROR: unable to obtain the resource stream for resource( " +
+                    Constants.WEBAPPS_FILE + " )" );
+        }
+        Webapps webapps = null;
+        try {
+            webapps = XMLHelper.getWebapps( is, Constants.WEBAPPS_FILE, config );
+        }
+        catch ( ConfigException e ) {
+            throw new RuntimeConfigException( e.getMessage(), e );
+        }
+        catch ( IOException e ) {
+            log.fatal( "ERROR: encountered IOException processing resource( " + Constants.WEBAPPS_FILE + " )", e );
+            throw new RuntimeConfigException( "ERROR: encountered IOException processing resource( " +
+                    Constants.WEBAPPS_FILE + " ), message( " + e.getMessage(), e );
+        }
+        finally {
+            try {
+                is.close();
+            }
+            catch ( IOException e ) {
+            }
+        }
+        if ( log.isInfoEnabled() ) {
+            log.info( "webapps( " + webapps + " )" );
+        }
+
+        is = loader.getResourceAsStream( Constants.TESTS_FILE );
+        if ( is == null ) {
+            throw new RuntimeConfigException( "ERROR: unable to obtain the resource stream for resource( " +
+                    Constants.TESTS_FILE + " )" );
+        }
+        TestDefinitions testDefinitions = null;
+        try {
+            testDefinitions = XMLHelper.getTestDefinitionsInstance( is, Constants.TESTS_FILE, webapps,
+                    config.getBaseDirectory().getAbsolutePath() );
+        }
+        catch ( ConfigException e ) {
+            throw new RuntimeConfigException( e.getMessage(), e );
+        }
+        catch ( IOException e ) {
+            log.fatal( "ERROR: encountered IOException processing resource( " + Constants.TESTS_FILE + " )", e );
+            throw new RuntimeException( "ERROR: encountered IOException processing resource( " +
+                    Constants.TESTS_FILE + " ), message( " + e.getMessage(), e );
+        }
+        finally {
+            try {
+                is.close();
+            }
+            catch ( IOException e ) {
+            }
+        }
+        if ( log.isDebugEnabled() ) {
+//            log.debug( "testDefinitions( " + testDefinitions + " )" );
+        }
+        return testDefinitions;
+    }
+
+    public static Config getConfig( File file ) throws ConfigException, IOException {
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        InputStream is = new FileInputStream( file );
+        return getConfig( is, file.getAbsolutePath() );
+    }
+
+    public static Config getConfig( InputStream is, String resourceIdentifier ) throws ConfigException,
+            IOException {
+        ConfigDocument doc = null;
+        try {
+            XmlOptions loadOptions = new XmlOptions();
+            loadOptions.setLoadLineNumbers();
+            doc = ConfigDocument.Factory.parse( is, loadOptions );
+        }
+        catch ( XmlException e ) {
+            log.fatal( "test recorder parse exception", e );
+            ConfigException ce = new ConfigException( "ERROR: failed parsing test recorder default server configuration XML, file( " +
+                    resourceIdentifier + " )", e );
+            log.fatal( ce );
+            throw ce;
+        }
+        finally {
+            if ( is != null ) {
+                is.close();
+            }
+        }
+
+        assert doc != null;
+        // may throw ConfigException
+        validate( doc, resourceIdentifier,
+                "ERROR: test recorder default server config document is not valid against the schema" );
+        Config config = getConfig( doc );
+        return config;
+    }
+
+    public static Webapps getWebapps( File file, Config config ) throws ConfigException, IOException {
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        InputStream is = new FileInputStream( file );
+        return getWebapps( is, file.getAbsolutePath(), config );
+    }
+
+    public static Webapps getWebapps( InputStream is, String resourceIdentifier, Config config )
+            throws ConfigException, IOException {
+        ServerDocument doc = null;
+        try {
+            XmlOptions loadOptions = new XmlOptions();
+            loadOptions.setLoadLineNumbers();
+            doc = ServerDocument.Factory.parse( is, loadOptions );
+        }
+        catch ( XmlException e ) {
+            log.fatal( "test recorder parse error", e );
+            ConfigException ce = new ConfigException( "ERROR: failed parsing test recorder webapp configuration XML, file( "
+                    + resourceIdentifier + " )", e );
+            log.fatal( ce );
+            throw ce;
+        }
+        finally {
+            if ( is != null ) {
+                is.close();
+            }
+        }
+
+        assert doc != null;
+        // may throw ConfigException
+        validate( doc, resourceIdentifier,
+                "ERROR: test recorder webapp config document is not valid against the schema" );
+
+        ServerDocument.Server serverXML = doc.getServer();
+        ServerConfig server = new ServerConfig( serverXML.getName(), serverXML.getHostname(), serverXML.getPort() );
+        List webappList = new ArrayList();
+        webappList = getWebappList( serverXML.getWebapps().getWebappArray(), webappList, server, config );
+        return new Webapps( webappList );
+    }
+
+    public static TestDefinitions getTestDefinitionsInstance( File file, Webapps webapps, String baseDirPath )
+            throws ConfigException, IOException {
+        InputStream is = new FileInputStream( file );
+        return getTestDefinitionsInstance( is, file.getAbsolutePath(), webapps, baseDirPath );
+    }
+
+    public static TestDefinitions getTestDefinitionsInstance( InputStream is, String resourceIdentifier,
+            Webapps webapps, String baseDirPath )
+            throws ConfigException, IOException {
+        TestDefinitionsDocument doc = null;
+        try {
+            XmlOptions loadOptions = new XmlOptions();
+            loadOptions.setLoadLineNumbers();
+            doc = TestDefinitionsDocument.Factory.parse( is, loadOptions );
+        }
+        catch ( XmlException e ) {
+            log.fatal( "test recorder parse exception", e );
+            ConfigException ce = new ConfigException( "ERROR: parsing of test recorder test document failed, file( " +
+                    resourceIdentifier + " )", e );
+            log.fatal( ce );
+            throw ce;
+        }
+        finally {
+            if ( is != null ) {
+                is.close();
+            }
+        }
+
+        assert doc != null;
+        // may throw ConfigException
+        validate( doc, resourceIdentifier,
+                "ERROR: test recorder test definitions document is not valid against the schema" );
+        return getTestDefinitionsInstance( doc, webapps, baseDirPath );
+    }
+
+    private static Config getConfig( ConfigDocument document ) {
+        Config config = null;
+        config = new Config( document.getConfig().getSuffixList().getSuffixArray(),
+                document.getConfig().getServletURI(), document.getConfig().getBaseDirectory() );
+        return config;
+    }
+
+    private static TestDefinitions getTestDefinitionsInstance( TestDefinitionsDocument document, Webapps webapps,
+            String baseDirPath ) throws ConfigException {
+        CategoryType[] categoryTypes = document.getTestDefinitions().getCategories().getCategoryArray();
+        Categories categories = getCategoriesInstance( categoryTypes, baseDirPath );
+        TestType[] testTypes = document.getTestDefinitions().getTests().getTestArray();
+        TestDefinitions tests = getTestDefinitionsInstance( testTypes, categories, webapps );
+        return tests;
+    }
+
+
+    private static List getWebappList( WebappType[] webappTypes, List webappList, ServerConfig server,
+            Config defaultConfig ) {
+        WebappType webappType = null;
+        WebappConfig webapp = null;
+        for ( int i = 0; i < webappTypes.length; i++ ) {
+            webappType = webappTypes[i];
+            webapp = getWebapp( webappType, server, defaultConfig );
+            webappList.add( webapp );
+        }
+        return webappList;
+    }
+
+    private static WebappConfig getWebapp( WebappType webappType, ServerConfig server,
+            Config defaultConfig ) {
+        Config config = getConfig( webappType, defaultConfig );
+        if ( config == null ) {
+            config = defaultConfig;
+        }
+        WebappConfig webapp = new WebappConfig( webappType.getName().trim(),
+                webappType.getDescription().trim(),
+                server,
+                webappType.getTestMode(),
+                webappType.getContextRoot().trim(),
+                webappType.getTestDefinitionsDirectory().trim(),
+                config );
+        return webapp;
+    }
+
+    private static Config getConfig( WebappType webappType, Config defaultConfig ) {
+        // values not specified do not override default config so return null
+        if ( webappType.getOverrideDefaultConfig() == null ) {
+            return null;
+        }
+        Config config = null;
+        String[] suffixes = null;
+        String servletURI = null;
+        if ( webappType.getOverrideDefaultConfig().getSuffixList() != null ) {
+            suffixes = webappType.getOverrideDefaultConfig().getSuffixList().getSuffixArray();
+            servletURI = webappType.getOverrideDefaultConfig().getServletURI();
+        }
+        config = new Config( suffixes, servletURI, defaultConfig.getBaseDirectory().getAbsolutePath() );
+        return config;
+    }
+
+    private static Categories getCategoriesInstance( CategoryType[] categoryTypes, String baseDirPath )
+            throws ConfigException {
+        List list = new ArrayList();
+        Category category = null;
+        CategoryType type = null;
+        for ( int i = 0; i < categoryTypes.length; i++ ) {
+            type = categoryTypes[i];
+            category = new Category( type.getName().trim(), type.getDescription().trim(), baseDirPath );
+            list.add( category );
+        }
+        Categories categories = new Categories( (Category[]) list.toArray( new Category[list.size()] ) );
+        return ( categories );
+    }
+
+    private static TestDefinitions getTestDefinitionsInstance( TestType[] testTypes, Categories categories,
+            Webapps webapps )
+            throws ConfigException {
+        List list = new ArrayList();
+        TestDefinition testDef = null;
+        TestType type = null;
+        String[] testCategoryStrings = null;
+        List testCategories = null;
+        WebappConfig webapp = null;
+        for ( int i = 0; i < testTypes.length; i++ ) {
+            type = testTypes[i];
+            if ( type.getCategories() != null ) {
+                testCategoryStrings = type.getCategories().getCategoryArray();
+                testCategories = getCategories( testCategoryStrings, categories );
+            }
+            else {
+                testCategories = new ArrayList();
+            }
+            webapp = webapps.getWebapp( type.getWebapp() );
+            if ( webapp == null ) {
+                ConfigException ce = new ConfigException( "ERROR: unable to find test recorder webapp with name( " +
+                        type.getWebapp() +
+                        " ) referenced in test definition( " + type.getName() + " )" );
+                log.fatal( ce );
+                throw ce;
+            }
+            testDef =
+                    new TestDefinition( type.getName().trim(), type.getDescription().trim(), webapp,
+                            testCategories );
+            categories.addTest( testDef );
+            list.add( testDef );
+        }
+        TestDefinitions defs = new TestDefinitions( list, categories, webapps );
+        return ( defs );
+    }
+
+    private static List getCategories( String[] names, Categories categories ) throws ConfigException {
+        List list = new ArrayList();
+        String name = null;
+        Category category = null;
+        for ( int i = 0; i < names.length; i++ ) {
+            name = names[i];
+            category = categories.getCategory( name );
+            if ( category == null ) {
+                ConfigException ce = new ConfigException(
+                        "ERROR: unable to determine test recorder category for name( " + name + " )" );
+                log.fatal( ce );
+                throw ce;
+            }
+            list.add( category );
+        }
+        return list;
+    }
+
+    private static void validate( XmlObject doc, String resourceIdentifier, String errorMsg )
+            throws ConfigException {
+        XmlOptions validateOptions = new XmlOptions();
+        validateOptions.setLoadLineNumbers();
+        ArrayList errorList = new ArrayList();
+        validateOptions.setErrorListener( errorList );
+        boolean isValid = doc.validate( validateOptions );
+        if ( !isValid ) {
+            ConfigException ce = new ConfigException( errorMsg + ", resource (" +
+                    resourceIdentifier + " ), errors( " + StringHelper.toString( errorList, "\n", "\n\t" ) + " )" );
+            log.error( ce );
+            throw ce;
+        }
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorder/schema/testRecorderDefaultConfig.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/schema/testRecorderDefaultConfig.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004"
+    targetNamespace="http://beehive.apache.org/netui/tools/testrecorder/2004"
+    elementFormDefault="qualified">
+
+    <xs:element name="config">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="suffixList" type="defaultSuffixListType" minOccurs="1"/>
+                <xs:element name="servletURI" type="nonZeroLengthString" minOccurs="1"/>
+                <xs:element name="baseDirectory" type="nonZeroLengthString" minOccurs="1"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:complexType name="defaultSuffixListType">
+        <xs:sequence>
+            <xs:element name="suffix" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:simpleType name="nonZeroLengthString">
+        <xs:restriction base="xs:string">
+            <xs:minLength value="1"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+</xs:schema>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorder/schema/testRecorderDiffSession.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/schema/testRecorderDiffSession.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/diffsession"
+    targetNamespace="http://beehive.apache.org/netui/tools/testrecorder/2004/diffsession"
+    elementFormDefault="qualified">
+
+    <xs:element name="recorderDiff">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="request" type="testDiffType" minOccurs="1" maxOccurs="unbounded"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:complexType name="testDiffType">
+        <xs:sequence>
+            <xs:element name="testNumber" type="positiveInt" minOccurs="0"/>
+            <xs:element name="uri" type="xs:string" minOccurs="1"/>
+            <xs:element name="diffResults" type="xs:string" minOccurs="1"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:simpleType name="positiveInt">
+        <xs:restriction base="xs:int">
+            <xs:minInclusive value="1"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+</xs:schema>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorder/schema/testRecorderSession.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/schema/testRecorderSession.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session"
+    targetNamespace="http://beehive.apache.org/netui/tools/testrecorder/2004/session"
+    elementFormDefault="qualified">
+
+    <xs:element name="recorderSession">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="sessionName" type="nonZeroLengthString"/>
+                <xs:element name="tester" type="xs:string"/>
+                <xs:element name="startDate" type="xs:string"/>
+                <xs:element name="description" type="xs:string"/>
+                <xs:element name="tests" type="testsType"/>
+                <xs:element name="endDate" type="xs:string"/>
+                <xs:element name="sessionStatus" type="statusType" minOccurs="0"/>
+                <xs:element name="testCount" type="positiveInt"/>
+                <xs:element name="passedCount" type="nonNegativeInt" minOccurs="0"/>
+                <xs:element name="failedCount" type="nonNegativeInt" minOccurs="0"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:complexType name="testsType">
+        <xs:sequence>
+            <xs:element name="test" type="testType" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="testType">
+        <xs:sequence>
+            <xs:element name="testNumber" type="positiveInt"/>
+            <xs:element name="request" type="requestType"/>
+            <xs:element name="response" type="responseType"/>
+            <xs:element name="testResults" type="testResultsType" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="requestType">
+        <xs:sequence>
+            <xs:element name="protocol" type="protocolType"/>
+            <xs:element name="protocolVersion" type="xs:string"/>
+            <xs:element name="host" type="xs:string"/>
+            <xs:element name="port" type="positiveInt"/>
+            <xs:element name="uri" type="xs:string"/>
+            <xs:element name="method" type="methodType"/>
+            <xs:element name="parameters" type="parametersType"/>
+            <xs:element name="cookies" type="cookiesType"/>
+            <xs:element name="headers" type="headersType"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="responseType">
+        <xs:sequence>
+            <xs:element name="statusCode" type="positiveInt"/>
+            <xs:element name="reason" type="xs:string"/>
+            <xs:element name="responseBody" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="testResultsType">
+        <xs:sequence>
+            <xs:element name="testStatus" type="statusType"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="parametersType">
+        <xs:sequence>
+            <xs:element name="parameter" type="nameValueType" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="cookiesType">
+        <xs:sequence>
+            <xs:element name="cookie" type="nameValueType" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="headersType">
+        <xs:sequence>
+            <xs:element name="header" type="nameValueType" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="nameValueType">
+        <xs:sequence>
+            <xs:element name="name" type="xs:string"/>
+            <xs:element name="value" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:simpleType name="protocolType">
+        <xs:restriction base="xs:token">
+            <xs:enumeration value="HTTP"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="statusType">
+        <xs:restriction base="xs:token">
+            <xs:enumeration value="pass"/>
+            <xs:enumeration value="fail"/>
+            <xs:enumeration value="error"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="methodType">
+        <xs:restriction base="xs:token">
+            <xs:enumeration value="GET"/>
+            <xs:enumeration value="POST"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="positiveInt">
+        <xs:restriction base="xs:int">
+            <xs:minInclusive value="1"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="nonNegativeInt">
+        <xs:restriction base="xs:int">
+            <xs:minInclusive value="0"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="nonZeroLengthString">
+        <xs:restriction base="xs:string">
+            <xs:minLength value="1"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+</xs:schema>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorder/schema/testRecorderTests.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/schema/testRecorderTests.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004"
+    targetNamespace="http://beehive.apache.org/netui/tools/testrecorder/2004"
+    elementFormDefault="qualified">
+
+    <xs:element name="testDefinitions">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="categories" type="categoriesType"/>
+                <xs:element name="tests" type="testsType"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:complexType name="categoriesType">
+        <xs:sequence>
+            <xs:element name="category" type="categoryType" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="categoryType">
+        <xs:sequence>
+            <xs:element name="name" type="nonZeroLengthString"/>
+            <xs:element name="description" type="xs:string" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="testsType">
+        <xs:sequence>
+            <xs:element name="test" type="testType" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="testType">
+        <xs:sequence>
+            <xs:element name="name" type="nonZeroLengthString"/>
+            <xs:element name="description" type="xs:string" minOccurs="0"/>
+            <xs:element name="webapp" type="nonZeroLengthString" minOccurs="1"/>
+            <xs:element name="categories" type="testCategoriesType" minOccurs="0"/>
+            <xs:element name="features" type="testFeaturesType" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="testCategoriesType">
+        <xs:sequence>
+            <xs:element name="category" type="nonZeroLengthString" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="testFeaturesType">
+        <xs:sequence>
+            <xs:element name="feature" type="nonZeroLengthString" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+</xs:schema>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorder/schema/testRecorderWebapps.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorder/schema/testRecorderWebapps.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004"
+    targetNamespace="http://beehive.apache.org/netui/tools/testrecorder/2004"
+    elementFormDefault="qualified">
+
+    <xs:element name="server">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="name" type="nonZeroLengthString"/>
+                <xs:element name="hostname" type="nonZeroLengthString"/>
+                <xs:element name="port" type="xs:int"/>
+                <xs:element name="webapps" type="webappsType" minOccurs="1"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:complexType name="webappsType">
+        <xs:sequence>
+            <xs:element name="webapp" type="webappType" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="webappType">
+        <xs:sequence>
+            <xs:element name="name" type="nonZeroLengthString"/>
+            <xs:element name="description" type="xs:string" minOccurs="0"/>
+            <xs:element name="testMode" type="xs:boolean"/>
+            <xs:element name="contextRoot" type="nonZeroLengthString"/>
+            <xs:element name="testDefinitionsDirectory" type="nonZeroLengthString"/>
+            <xs:element name="overrideDefaultConfig" type="overrideDefaultConfigType" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideDefaultConfigType">
+        <xs:sequence>
+            <xs:element name="suffixList" type="suffixListType" minOccurs="1"/>
+            <xs:element name="servletURI" type="nonZeroLengthString" minOccurs="1"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="suffixListType">
+        <xs:sequence>
+            <xs:element name="suffix" type="xs:string" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+</xs:schema>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorderQA/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+
+<project name="NetUI/testRecorderQa" default="compile" basedir=".">
+    
+    <property name="module.classpath" location="${junit.jar};${test-recorder.jar};${xbean.jar};${deployed.httpClient.jar}"/>
+    <property name="module.classes.dir" location="${qa.classes.dir}/${module.name}"/>
+    <property name="module.jar.name" value="${test.recorder.qa.jar.name}"/>
+    <property name="module.jar" location="${qa.lib.dir}/${module.jar.name}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${module.classes.dir}"/>
+
+        <javac srcdir="."
+               destdir="${module.classes.dir}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}">
+            <include name="**/*.java"/>
+        </javac>
+
+        <jar jarfile="${module.jar}" basedir="${module.classes.dir}"/>
+    </target>
+
+    <target name="clean">
+        <echo>Clean Test Recorder QA</echo>
+        <delete dir="${module.classes.dir}"/>
+        <delete file="${module.jar}"/>
+    </target>
+ 
+</project>
+

Added: incubator/beehive/netui/test/src/testRecorderQA/data/config1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/config1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<config xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <suffixList>
+        <suffix>jsp</suffix>
+        <suffix>jspx</suffix>
+        <suffix>do</suffix>
+        <suffix>jpf</suffix>
+        <suffix></suffix>
+    </suffixList>
+    <servletURI>testRecorder</servletURI>
+    <baseDirectory>D:\temp\build\testRecorder</baseDirectory>
+</config>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorderQA/data/config2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/config2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<config xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+</config>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorderQA/data/config3.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/config3.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<config xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <suffixList>
+    </suffixList>
+</config>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorderQA/data/session1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/session1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Accesskey</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:18:16.539 PM MST</startDate>
+  <description>Test of the accesskey attribute</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/netuiDRT/tags/accesskey/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ff6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/netuiDRT/tags/accesskey/begin.do" accesskey="H"><b>H</b>ome</a>
+        <br>
+        <a href="/netuiDRT/tags/accesskey/post.do" accesskey="P"><b>P</b>ost</a>
+        <br>
+        <a href="/netuiDRT/tags/accesskey/begin.do"><img src="/netuiDRT/tags/accesskey/./folder.gif" accesskey="W"></a>
+        <form name="myBean" action="/netuiDRT/tags/accesskey/post.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Color:</td>
+                    <td>
+                    
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.color}" value="foo" accesskey="8" alt="PageFlow Text for Alt"><span>foo</span> (8)<br/>
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.color}" value="bar" accesskey="9" alt="PageFlow Text for Alt"><span>bar</span> (9)<br/>
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.color}" value="baz" accesskey="0" alt="PageFlow Text for Alt"><span>baz</span> (0)<br/>
+                    
+                   </td>
+                </tr>
+                <tr valign="top">
+                    <td>Des<b>C</b>ription:</td>
+                    <td>
+                    <textarea name="{actionForm.description}" accesskey="C"></textarea>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td><b>D</b>isabled:</td>
+                    <td>
+                    <input type="hidden" name="wlw-checkbox_key:{actionForm.disabled}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.disabled}" accesskey="D" alt="PageFlow Text for Alt">
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>na<b>M</b>e:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="" accesskey="M" alt="PageFlow Text for Alt">
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td><b>T</b>ype:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}" accesskey="T">
+<option value="foo">foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option></select>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Attributes:</td>
+                    <td>
+                    <input type="hidden" name="wlw-checkbox_group_key:{actionForm.attributes}OldValue" value="true">
+                        <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="fenders" accesskey="1" alt="PageFlow Text for Alt"><span>fenders</span> (1)<br/>
+                        <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="wheels" accesskey="2" alt="PageFlow Text for Alt"><span>wheels</span> (2)<br/>
+                        <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="windows" accesskey="3" alt="PageFlow Text for Alt"><span>windows</span> (3)<br/>
+                    
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="_Form Submit" accesskey="F" alt="PageFlow Text for Alt">
+            <input type="Reset" value="_Reset" accesskey="R" alt="PageFlow Text for Alt">
+            <input type="image" src="/netuiDRT/tags/accesskey/./folder.gif" accesskey="X">
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/netuiDRT/tags/accesskey/post.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.attributes}</name>
+          <value>fenders</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.attributes}</name>
+          <value>wheels</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.attributes}</name>
+          <value>windows</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.attributes}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.disabled}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.disabled}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.color}</name>
+          <value>foo</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}</name>
+          <value>foo</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.description}</name>
+          <value>kkk</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>ss</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>563</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ff6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/netuiDRT/tags/accesskey/begin.do" accesskey="H">Home</a><br/>
+        <b>Attributes:</b><br/>
+        <ol>
+                <li>
+                    <span>fenders</span>
+                </li>
+            
+                <li>
+                    <span>wheels</span>
+                </li>
+            
+                <li>
+                    <span>windows</span>
+                </li>
+            </ol><br>
+        <b>Color:</b> <span>foo</span><br/>
+        <b>Description:</b> <span>kkk</span><br/>
+        <b>Disabled:</b> <span>true</span><br/>
+        <b>Name:</b> <span>ss</span><br/>
+        <b>Type:</b> <span>foo</span><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:18:20.875 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorderQA/data/test1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/test1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<testDefinitions xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <categories>
+        <category>
+            <name>DRT</name>
+            <description>
+                Developer Regression Tests
+            </description>
+        </category>
+        <category>
+            <name>BVT</name>
+            <description>
+                Build Verification Tests
+            </description>
+        </category>
+        <category>
+            <name>EmptyCategory</name>
+            <description>
+                A cateogry with no tests
+            </description>
+        </category>
+
+    </categories>
+
+    <tests>
+        <test>
+            <name>t1</name>
+            <description>test 1</description>
+            <webapp>webapp1</webapp>
+            <categories>
+                <category>DRT</category>
+            </categories>
+        </test>
+        <test>
+            <name>t2</name>
+            <description>test 2</description>
+            <webapp>webappOverride1</webapp>
+            <categories>
+                <category>DRT</category>
+                <category>BVT</category>
+            </categories>
+        </test>
+        <test>
+            <name>t3</name>
+            <description>test 3</description>
+            <webapp>webappOverride2</webapp>
+            <categories>
+                <category>BVT</category>
+            </categories>
+        </test>
+        <test>
+            <name>testWithNoCategories</name>
+            <description>a test without categories</description>
+            <webapp>webappOverride1</webapp>
+        </test>
+    </tests>
+</testDefinitions>
+

Added: incubator/beehive/netui/test/src/testRecorderQA/data/test2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/test2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<testDefinitions xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <categories>
+        <category>
+            <name>DRT</name>
+            <description>
+                Developer Regression Tests
+            </description>
+        </category>
+    </categories>
+
+    <tests>
+        <test>
+            <name>testWithNonExistentWebapp</name>
+            <description>this test haa a webapp specification that is not in the webapps XML</description>
+            <webapp>nonExistent</webapp>
+            <categories>
+                <category>DRT</category>
+            </categories>
+        </test>
+    </tests>
+</testDefinitions>
+

Added: incubator/beehive/netui/test/src/testRecorderQA/data/test3.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/test3.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!--
+   this XML is invalid.  two tests exist with the same name.
+-->
+<testDefinitions xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <categories>
+        <category>
+            <name>DRT</name>
+            <description>
+                Developer Regression Tests
+            </description>
+        </category>
+    </categories>
+
+    <tests>
+        <test>
+            <name>test</name>
+            <description>t1</description>
+            <webapp>webapp1</webapp>
+        </test>
+
+        <test>
+            <name>test</name>
+            <description>t2</description>
+            <webapp>webapp1</webapp>
+        </test>
+    </tests>
+</testDefinitions>
+

Added: incubator/beehive/netui/test/src/testRecorderQA/data/testRecorder-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/testRecorder-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<config xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <suffixList>
+        <suffix>jsp</suffix>
+        <suffix>jspx</suffix>
+        <suffix>do</suffix>
+        <suffix>jpf</suffix>
+        <suffix></suffix>
+    </suffixList>
+    <servletURI>testRecorder</servletURI>
+    <baseDirectory>@BASE_DIR@</baseDirectory>
+</config>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorderQA/data/testRecorder-webapp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/testRecorder-webapp.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<server xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <name>drt-test</name>
+    <hostname>localhost</hostname>
+    <port>8080</port>
+    <webapps>
+        <webapp>
+            <name>coreWeb</name>
+            <description>NetUI DRT application</description>
+            <testMode>true</testMode>
+            <contextRoot>/coreWeb</contextRoot>
+            <testDefinitionsDirectory>D:\dev\src/wlw/beehive/netui/test/webapps/drt/testRecorder/tests</testDefinitionsDirectory>
+        </webapp>
+    </webapps>
+</server>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorderQA/data/webapp1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/data/webapp1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<server xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <name>weblogic</name>
+    <hostname>localhost</hostname>
+    <port>7001</port>
+
+    <webapps>
+        <webapp>
+            <name>webapp1</name>
+            <description>webapp1 description</description>
+            <testMode>true</testMode>
+            <contextRoot>webapp1ContextRoot</contextRoot>
+            <testDefinitionsDirectory>D:/dev/src/wlw/netui/applications/testRecorder/tests/webapp1</testDefinitionsDirectory>
+        </webapp>
+
+        <webapp>
+            <name>webappOverride1</name>
+            <description>webapp override 1 description</description>
+            <testMode>true</testMode>
+            <contextRoot>webappOverride1ContextRoot</contextRoot>
+            <testDefinitionsDirectory>D:/dev/src/wlw/netui/applications/testRecorder/tests/webapp1</testDefinitionsDirectory>
+            <overrideDefaultConfig>
+                <suffixList>
+                    <suffix>jsp</suffix>
+                    <suffix>jspx</suffix>
+                    <suffix>do</suffix>
+                    <suffix>jpf</suffix>
+                </suffixList>
+                <servletURI>testRecorderr</servletURI>
+            </overrideDefaultConfig>
+        </webapp>
+
+        <webapp>
+            <name>webappOverride2</name>
+            <description>webappOverride2 description</description>
+            <testMode>true</testMode>
+            <contextRoot>webappOverride2ContextRoot</contextRoot>
+            <testDefinitionsDirectory>D:/dev/src/wlw/netui/applications/testRecorder/tests/webappOverride</testDefinitionsDirectory>
+            <overrideDefaultConfig>
+                <suffixList>
+                    <suffix>a</suffix>
+                    <suffix>b</suffix>
+                    <suffix>c</suffix>
+                    <suffix>d</suffix>
+                </suffixList>
+                <servletURI>override</servletURI>
+            </overrideDefaultConfig>
+        </webapp>
+    </webapps>
+</server>
\ No newline at end of file

Added: incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/PropertiesHelper.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/PropertiesHelper.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,74 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.qa;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * User: ozzy
+ * Date: Jul 7, 2003
+ * Time: 7:26:48 PM
+ */
+public class PropertiesHelper {
+
+    public static Properties load( File propFile, Properties props ) throws IOException {
+        if ( props == null ) {
+            props = new Properties();
+        }
+        FileInputStream fis = null;
+        try {
+            fis = new FileInputStream( propFile );
+            props.load( fis );
+        }
+        finally {
+            if ( fis != null ) {
+                fis.close();
+            }
+        }
+        return props;
+    }
+
+    public static void store( File propFile, Properties props, String comment,
+                              boolean replace )
+            throws IOException {
+        if ( !replace && propFile.exists() ) {
+            throw new RuntimeException( "properties file( " +
+                    propFile.getAbsolutePath() + " exists" );
+        }
+        if ( comment == null ) {
+            comment = "";
+        }
+        FileOutputStream fos = null;
+        try {
+            fos = new FileOutputStream( propFile, false );
+            props.store( fos, comment );
+        }
+        finally {
+            if ( fos != null ) {
+                fos.close();
+            }
+        }
+        fos.close();
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/SchemaTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/SchemaTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,252 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.qa;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Config;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Webapps;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.ConfigException;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Category;
+
+/**
+ * User: ozzy
+ * Date: Apr 8, 2004
+ * Time: 3:44:42 PM
+ */
+public class SchemaTest extends TRTestCase {
+
+    private static final Logger log = Logger.getInstance( SchemaTest.class );
+
+    public SchemaTest( String name ) {
+        super( name );
+    }
+
+    public static Test suite() {
+        log.info( "" );
+        log.info( "" );
+        log.info( SchemaTest.class.getName() );
+        return new TestSuite( SchemaTest.class );
+    }
+
+    public void testTestDefinitions() {
+        log.info( "\ntestTestDefinitions()" );
+        File file = new File( getDataDir(), "config1.xml" );
+        Config config = getConfig( file );
+
+        file = new File( getDataDir(), "webapp1.xml" );
+
+        Webapps webapps = getWebapps( file, config );
+        log.debug( "webapps( " + webapps + " )" );
+
+        file = new File( getDataDir(), "test1.xml" );
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        TestDefinitions tests = null;
+        try {
+            tests = XMLHelper.getTestDefinitionsInstance( file, webapps,
+                            config.getBaseDirectory().getAbsolutePath() );
+        }
+        catch ( ConfigException e ) {
+            assertTrue( e );
+        }
+        catch ( IOException ioe ) {
+            assertTrue( ioe );
+        }
+        log.debug( "tests( " + tests + " )" );
+    }
+
+    public void testCategories() {
+        log.info( "\ntestCategories()" );
+        File file = new File( getDataDir(), "config1.xml" );
+        Config config = getConfig( file );
+
+        file = new File( getDataDir(), "webapp1.xml" );
+
+        Webapps webapps = getWebapps( file, config );
+        log.debug( "webapps( " + webapps + " )" );
+
+        file = new File( getDataDir(), "test1.xml" );
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        TestDefinitions tests = null;
+        try {
+            tests = XMLHelper.getTestDefinitionsInstance( file, webapps,
+                            config.getBaseDirectory().getAbsolutePath() );
+        }
+        catch ( ConfigException e ) {
+            assertTrue( e );
+        }
+        catch ( IOException ioe ) {
+            assertTrue( ioe );
+        }
+        Category category = null;
+        for( int i = 0; i < tests.getCategories().getCategories().length; i++ ) {
+            category = tests.getCategories().getCategories()[i];
+            log.debug( "\n" );
+            log.debug( "category( " + category.getName() + " )" );
+            log.debug( "reportDir( " + category.getReportDirPath() + " )" );
+        }
+    }
+
+    public void testWebappConfig() {
+        log.info( "\ntestWebappConfig()" );
+        File file = new File( getDataDir(), "config1.xml" );
+        Config config = getConfig( file );
+
+        file = new File( getDataDir(), "webapp1.xml" );
+
+        Webapps webapps = getWebapps( file, config );
+        log.debug( "webapps( " + webapps + " )" );
+
+        assertNotNull( "webapps returned null", webapps );
+        WebappConfig webapp = null;
+        for ( int i = 0; i < webapps.getWebappList().size(); i++ ) {
+            webapp = (WebappConfig) webapps.getWebappList().get( i );
+            log.debug( "\n" );
+            log.debug( "webapp(" + ( i + 1 ) + ")( " + webapp.getName() + " )" );
+            log.debug( "config baseDirectory( " + config.getBaseDirectory() + " )" );
+            log.debug( "webapp config baseDirectory( " + webapp.getConfig().getBaseDirectory() + " )" );
+            log.debug( "resultsDirectory( " + webapp.getResultsDirectory() + " )" );
+        }
+    }
+
+    public void testInvalidTestDefinitions() {
+        log.info( "\ntestInvalidTestDefinitions()" );
+        File file = new File( getDataDir(), "config1.xml" );
+        Config config = getConfig( file );
+
+        file = new File( getDataDir(), "webapp1.xml" );
+        Webapps webapps = getWebapps( file, config );
+        log.debug( "webapps( " + webapps + " )" );
+
+        file = new File( getDataDir(), "test2.xml" );
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        try {
+            XMLHelper.getTestDefinitionsInstance( file, webapps, config.getBaseDirectory().getAbsolutePath() );
+        }
+        catch ( ConfigException e ) {
+            log.info( getStackTrace( e ) );
+            // success
+            return;
+        }
+        catch ( IOException ioe ) {
+            assertTrue( ioe );
+        }
+        assertTrue( false );
+    }
+
+    public void testConfigXML() {
+        log.info( "\ntestConfigXML()" );
+        File file = new File( getDataDir(), "config1.xml" );
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        Config config = null;
+        try {
+            config = XMLHelper.getConfig( file );
+        }
+        catch ( ConfigException e ) {
+            assertTrue( e );
+        }
+        catch ( IOException e ) {
+            assertTrue( e );
+        }
+        log.debug( "config( " + config + " )" );
+    }
+
+    public void testConfigBaseDir() {
+        log.info( "\ntestConfigBaseDir()" );
+        File file = new File( getDataDir(), "config1.xml" );
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        Config config = null;
+        try {
+            config = XMLHelper.getConfig( file );
+        }
+        catch ( ConfigException e ) {
+            assertTrue( e );
+        }
+        catch ( IOException e ) {
+            assertTrue( e );
+        }
+        if ( config.getBaseDirectory() == null ) {
+            assertNull( "server config base directory is null", config.getBaseDirectory() );
+        }
+        log.debug( "base directory( " + config.getBaseDirectory() + " )" );
+        log.debug( "config( " + config + " )" );
+    }
+
+    public void testInvalidConfigXML() {
+        log.info( "\ntestInvalidConfigXML()" );
+        File file = new File( getDataDir(), "config2.xml" );
+        invalidConfigTest( file );
+        file = new File( getDataDir(), "config3.xml" );
+        invalidConfigTest( file );
+    }
+
+    private Webapps getWebapps( File file, Config config ) {
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        Webapps webapps = null;
+        try {
+            webapps = XMLHelper.getWebapps( file, config );
+        }
+        catch ( ConfigException e ) {
+            assertTrue( e );
+        }
+        catch ( IOException e ) {
+            assertTrue( e );
+        }
+        return webapps;
+    }
+
+    private Config getConfig( File configFile ) {
+        log.info( "configFile( " + configFile.getAbsolutePath() + " )" );
+        Config config = null;
+        try {
+            config = XMLHelper.getConfig( configFile );
+        }
+        catch ( Exception e ) {
+            assertTrue( e );
+        }
+        return config;
+    }
+
+    private void invalidConfigTest( File file ) {
+        log.info( "file( " + file.getAbsolutePath() + " )" );
+        try {
+            XMLHelper.getConfig( file );
+        }
+        catch ( ConfigException ce ) {
+            // success
+            return;
+        }
+        catch ( IOException e ) {
+            assertTrue( e );
+        }
+    }
+
+    public static void main( String[] args ) throws Exception {
+        log.info( "\n\nTestRecorder Schema Test" );
+    }
+}

Added: incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/SessionSchemaTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/SessionSchemaTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.qa;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.SessionXMLException;
+import org.apache.beehive.netui.tools.testrecorder.shared.RecordSessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.Constants;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Config;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.ConfigException;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Webapps;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig;
+import org.apache.beehive.netui.tools.testrecorder.shared.xmlbeans.XMLHelper;
+
+/**
+ * User: ozzy
+ * Date: Apr 8, 2004
+ * Time: 3:44:42 PM
+ */
+public class SessionSchemaTest extends TRTestCase {
+
+    private static final Logger log = Logger.getInstance( SessionSchemaTest.class );
+
+    public SessionSchemaTest( String name ) {
+        super( name );
+    }
+
+    public static Test suite() {
+        log.info( "" );
+        log.info( "" );
+        log.info( SessionSchemaTest.class.getName() );
+        return new TestSuite( SessionSchemaTest.class );
+    }
+
+    public void testSession1() {
+        log.info( "\ntestSession1()" );
+        File file = new File( getDataDir(), "session1.xml" );
+        getRecordSessionBean( file );
+    }
+
+    public void testExisting() {
+        log.info( "testExisting" );
+        Config config = null;
+        try {
+            config = XMLHelper.getConfig( new File( getDataDir(), Constants.CONFIG_FILE ) );
+        }
+        catch ( ConfigException e ) {
+            assertTrue( e );
+        }
+        catch ( IOException e ) {
+            assertTrue( e );
+        }
+        Webapps webapps = null;
+        try {
+            webapps = XMLHelper.getWebapps( new File( getDataDir(), Constants.WEBAPPS_FILE ), config );
+        }
+        catch ( Exception e ) {
+            assertTrue( e );
+        }
+
+        List webappList = webapps.getWebappList();
+        for ( int i = 0; i < webappList.size(); i++ ) {
+            WebappConfig webappConfig = (WebappConfig) webappList.get( i );
+            File[] testFiles = new File( webappConfig.getTestDirectory() ).listFiles();
+            for ( int j = 0; j < testFiles.length; j++ ) {
+                File testFile = testFiles[j];
+                if ( testFile.getName().endsWith( ".xml" ) ) {
+                    log.info( "processing file( " + testFile.getAbsolutePath() + " )" );
+                    getRecordSessionBean( testFile );
+                }
+                else {
+                    log.warn( "skipping file( " + testFile.getAbsolutePath() + " )" );
+                }
+            }
+        }
+    }
+
+    public RecordSessionBean getRecordSessionBean( File file ) {
+        RecordSessionBean session = null;
+        try {
+            session = XMLHelper.getRecordSessionBean( file );
+        }
+        catch ( SessionXMLException e ) {
+            e.printStackTrace();
+            assertTrue( e );
+        }
+        catch ( IOException e ) {
+            e.printStackTrace();
+            assertTrue( e );
+        }
+        catch ( Exception e ) {
+            e.printStackTrace();
+            assertTrue( e );
+        }
+        log.info( "record session bean( " + session + " )" );
+        return session;
+    }
+
+    public static void main( String[] args ) throws Exception {
+        log.info( "\n\nTestRecorder Session Schema Test" );
+    }
+
+}

Added: incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/TRTestCase.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/testRecorderQA/org/apache/beehive/netui/tools/testrecorder/qa/TRTestCase.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,117 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.netui.tools.testrecorder.qa;
+
+import junit.framework.TestCase;
+
+import java.io.File;
+import java.io.StringWriter;
+import java.io.PrintWriter;
+
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+
+/**
+ * User: ozzy
+ * Date: Jun 16, 2004
+ * Time: 11:16:26 AM
+ */
+public class TRTestCase extends TestCase {
+
+    private static final Logger log = Logger.getInstance( TRTestCase.class );
+
+    private File dataDir;
+    private File appDir;
+    private File webuiHomeDir;
+
+    public TRTestCase( String name ) {
+        super( name );
+    }
+
+    protected void setUp() {
+        setDataDir( determineDataDir() );
+        setAppDir( determineAppDir() );
+        setWebuiHomeDir( determineWebuiHomeDir() );
+    }
+
+    protected void tearDown() {
+    }
+
+    protected File determineDataDir() {
+        String val = System.getProperty( "data.dir" );
+        assertNotNull( "'data.dir' property must be specified", val );
+        return new File( val );
+    }
+
+    protected File determineAppDir() {
+        String val = System.getProperty( "app.dir" );
+        assertNotNull( "'app.dir' property must be specified", val );
+        return new File( val );
+    }
+
+    protected File determineWebuiHomeDir() {
+        String val = System.getProperty( "webui.home" );
+        assertNotNull( "'webui.home' property must be specified", val );
+        return new File( val );
+    }
+
+    public File getDataDir() {
+        return dataDir;
+    }
+
+    public void setDataDir( File dataDir ) {
+        this.dataDir = dataDir;
+    }
+
+    public File getAppDir() {
+        return appDir;
+    }
+
+    public void setAppDir( File appDir ) {
+        this.appDir = appDir;
+    }
+
+    public File getWebuiHomeDir() {
+        return webuiHomeDir;
+    }
+
+    public void setWebuiHomeDir( File webuiHomeDir ) {
+        this.webuiHomeDir = webuiHomeDir;
+    }
+
+    public void assertTrue( Throwable e ) {
+        log.info( getStackTrace( e ) );
+        assertTrue( e.getMessage(), false );
+    }
+
+    public void assertTrue( Throwable e, boolean condition ) {
+        log.info( getStackTrace( e ) );
+        assertTrue( e.getMessage(), condition );
+    }
+
+    public static String getStackTrace( Throwable e ) {
+        StringWriter sw = new StringWriter( 256 );
+        PrintWriter pw = new PrintWriter( sw );
+        e.printStackTrace( pw );
+        pw.flush();
+        pw.close();
+        return sw.toString();
+    }
+
+}

Added: incubator/beehive/netui/test/src/tools/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/tools/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/Tools" default="compile" basedir=".">
+
+    <property name="module.classpath" value="${ant.jar};${ant-junit.jar};${junit.jar};"/>
+    <property name="module.classes.dir" location="${qa.classes.dir}/${module.name}"/>
+    <property name="module.jar.name" value="${test-tools.jar.name}"/>
+    <property name="module.jar" location="${qa.lib.dir}/${module.jar.name}"/>
+
+    <target name="compile">
+        <echo>compile module: ${module.name}</echo>
+        <echo>module.classpath: ${module.classpath}</echo>
+        <echo>debug: ${compile.debug}</echo>
+
+        <mkdir dir="${module.classes.dir}"/>
+
+        <javac srcdir="."
+               destdir="${module.classes.dir}"
+               classpath="${module.classpath}"
+               debug="${compile.debug}"
+               deprecation="${compile.deprecation}"
+               optimize="${compile.optimize}"
+	       source="${compile.source}">
+            <include name="**/*.java"/>
+        </javac>
+
+        <jar jarfile="${module.jar}" basedir="${module.classes.dir}"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${module.classes.dir}"/>
+        <delete file="${test-tools.jar}"/>
+    </target>
+
+    <target name="javadoc">
+    </target>
+
+    <target name="clean.javadoc">
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JUnitTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JUnitTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,555 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools.ant.junit;
+
+// java imports
+import java.io.File;
+import java.io.IOException;
+
+import java.lang.reflect.Modifier;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import java.util.jar.JarFile;
+
+import java.util.zip.ZipEntry;
+
+// internal imports
+
+// external imports
+import org.apache.tools.ant.AntClassLoader;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+import org.apache.tools.ant.Task;
+
+import org.apache.tools.ant.taskdefs.Ant;
+import org.apache.tools.ant.taskdefs.Execute;
+import org.apache.tools.ant.taskdefs.ExecuteWatchdog;
+import org.apache.tools.ant.taskdefs.LogStreamHandler;
+import org.apache.tools.ant.taskdefs.optional.junit.FormatterElement;
+import org.apache.tools.ant.taskdefs.optional.junit.JUnitTest;
+import org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner;
+
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.CommandlineJava;
+import org.apache.tools.ant.types.Environment;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.types.Path.PathElement;
+
+/**
+ * An Ant JUnit task.  This is a derivative of the JUnit tasks
+ * that Ant provides in the optinal task set.  It was created because
+ * these Ant tasks were substandard in design and flexibiliy.  While this
+ * and its helping classes are not entirely divested from the Ant JUnit tasks,
+ * they are an improvement and a start to creating a set of tools for executing
+ * tests from Ant.
+ *
+ */
+public class JUnitTask
+    extends Task
+{
+    private String _testJars = null;
+    private String _fileFilter = null;
+    private String _printSummary = null;
+    private boolean _haltOnError = false;
+    private String  _errorProperty = null;
+    private boolean _haltOnFailure = false;
+    private String _failureProperty = null;
+    private boolean _filterTrace = true;
+    private boolean _showOutput = true;
+    private int _timeout = -1;
+    private String _toDir = null;
+    private String _jvm = null;
+
+    private CommandlineJava _commandline = null;
+    private Environment _env = new Environment();
+    private List _formatters = null;
+    private JUnitTestFilter _testFilter = null;
+
+    public JUnitTask()
+        throws Exception
+    {
+        super();
+        _commandline = new CommandlineJava();
+        _formatters = new ArrayList();
+    }
+
+    /* ===========================================================
+     *
+     * Create contained elements.  This is the Ant way of doing object creation for 
+     * nested <classpath> and <jvmarg> elements.  These parameters are added to the 
+     * command line Java process that is launched for each executed JUnit test.
+     *
+     * ===========================================================
+     */
+
+    public void addEnv(Environment.Variable var)
+    {
+        _env.addVariable(var);
+    }
+
+    public void addSysproperty(Environment.Variable sysp)
+    {
+        _commandline.addSysproperty(sysp);
+    }
+
+    public void addFormatter(FormatterElement fe)
+    {
+        _formatters.add(fe);
+    }
+
+    public Path createClasspath()
+    {
+        return _commandline.createClasspath(project).createPath();
+    }
+
+    public Commandline.Argument createJvmarg() 
+    {
+        return _commandline.createVmArgument();
+    }
+
+    /* ===========================================================
+     *
+     * Construct a command line call to run a JUnit Test
+     *
+     * ===========================================================
+     */
+
+    public void execute()
+    {
+        log("EXECUTE JUNIT TASK", Project.MSG_DEBUG);
+        log("JUnitTask:\n" + toString(), Project.MSG_DEBUG);
+        log("::::::::::\nFind and execute tests: ", Project.MSG_DEBUG);
+
+        Iterator iterator = getAllTests();
+        if(iterator != null)
+        {
+            ExecuteWatchdog dog = createWatchdog();
+            while(iterator.hasNext())
+            {
+                JUnitTestWrapper testWrapper = (JUnitTestWrapper)iterator.next();
+                JUnitTest test = testWrapper.getJUnitTest();
+
+                log("Execute JUnit Test: " + test, Project.MSG_DEBUG);
+                int retVal = executeTest(testWrapper, dog);
+                handleErrorFailureCode(test, retVal);
+            }
+
+            boolean wasKilled = false;
+            if(dog != null)
+                wasKilled = dog.killedProcess();
+        }
+    }
+
+    protected void handleErrorFailureCode(JUnitTest test, int retVal)
+    {
+        boolean error = (retVal == JUnitTestRunner.ERRORS);
+        boolean failure = (retVal == JUnitTestRunner.FAILURES);
+
+        if(error || failure)
+            log("Some test(s) FAILED (failure / error::" + failure + " / " + error + ")");
+        else log("All Tests PASSED" + "\n");
+
+        if(error || failure)
+        {
+            if((error && getHaltOnError()) || (failure && getHaltOnFailure()))
+            {
+                log("detected an exit condition with process return value: " + retVal, Project.MSG_DEBUG);
+                throw new BuildException("JUnit testcase \"" + test.getName() + "\" exited with " +
+                                         (error ? (failure ? "ERROR and FAILURE" : "an ERROR") : "a FAILURE") + ".  " +
+                                         "See log file for this test case in: " + makeTestResultsPath(getToDir(), test.getName()) + "\n",
+                                         location);
+            }
+            else
+            {
+                log("Log file: " + makeTestResultsPath(getToDir(), test.getName()));
+
+                if(error && getErrorProperty() != null)
+                    project.setNewProperty(getErrorProperty(), "true");
+
+                if(failure && getFailureProperty() != null)
+                    project.setNewProperty(getFailureProperty(), "true");
+            }
+
+        }
+        else log("Log file: " + makeTestResultsPath(getToDir(), test.getName()));
+
+        log("errorProperty: " + project.getProperty(getErrorProperty()), Project.MSG_DEBUG);
+        log("failureProperty: " + project.getProperty(getFailureProperty()), Project.MSG_DEBUG);
+        log("===================================== END Test: " + test.getName() + " retVal: " + retVal + "\n", Project.MSG_DEBUG);
+    }
+
+    protected int executeTest(JUnitTestWrapper testWrapper, ExecuteWatchdog dog)
+    {
+        JUnitTest test = testWrapper.getJUnitTest();
+        String testList = testWrapper.getTestList();
+
+        log("===================================== START Test: " + test.getName() + "\n", Project.MSG_DEBUG);
+        
+        CommandlineJava cmd = (CommandlineJava)_commandline.clone();
+
+        cmd.setClassname("org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner");
+        if(_jvm != null && _jvm.trim() != "")
+        {
+            cmd.setVm(_jvm);
+        }
+        cmd.createArgument().setValue(test.getName());
+        cmd.createArgument().setValue("filtertrace=" + getFilterTrace());
+        cmd.createArgument().setValue("haltOnError=" + getHaltOnError());
+        cmd.createArgument().setValue("haltOnFailure=" + getHaltOnFailure());
+        cmd.createArgument().setValue("showoutput=" + getShowOutput());
+
+        Iterator iterator = _formatters.iterator();
+        while(iterator.hasNext())
+        {
+            String outputfile = makeTestResultsPath(getToDir(), test.getName());
+            FormatterElement fe = (FormatterElement)iterator.next();
+            cmd.createArgument().setValue("formatter=" + fe.getClassname() + "," + outputfile);
+        }
+
+        if(getPrintSummary() != null && (getPrintSummary().equals("on") || getPrintSummary().equals("onWithOutAndErr")))
+        {
+            // add output summary formatter
+            cmd.createArgument().setValue("formatter=org.apache.tools.ant.taskdefs.optional.junit.SummaryJUnitResultFormatter");
+        }
+
+        // if there is user data to pass along, send it under the system property key "test.list"
+        if(testList != null && testList != "")
+        {
+            Environment.Variable var = new Environment.Variable();
+            var.setKey("test.list");
+            var.setValue(testList);
+            cmd.addSysproperty(var);
+        }
+
+        log("==== Test Name: " + test.getName(), Project.MSG_INFO);
+        log("CommandlineJava classpath: " + cmd.getClasspath().toString(), Project.MSG_DEBUG);
+        
+        Execute execute = new Execute(new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN), dog);
+        execute.setCommandline(cmd.getCommandline());
+        execute.setAntRun(project);
+        execute.setEnvironment(_env.getVariables());
+
+        String[] cmdLine = cmd.getCommandline();
+        StringBuffer buf = new StringBuffer();
+        for(int i = 0; i < cmdLine.length; i++)
+        {
+            buf.append(cmdLine[i] + " ");
+        }
+        log("\n==========\n" + buf.toString() + "\n==========", Project.MSG_DEBUG);
+
+        int retVal;
+        try
+        {
+            retVal = execute.execute();
+        }
+        catch(IOException e)
+        {
+            throw new BuildException("Process fork for JUnit test: " + test.getName() + " failed.  Cause: " + e, e);
+        }
+
+        return retVal;
+    }
+
+    protected ExecuteWatchdog createWatchdog()
+    {
+        ExecuteWatchdog dog = null;
+
+        if(_timeout <= 0)
+            return null;
+        else return new ExecuteWatchdog(_timeout);
+    }
+
+    public String toString()
+    {
+        StringBuffer buf = new StringBuffer();
+        buf.append("testJars " + _testJars + "\n");
+        buf.append("fileFilter " + _fileFilter + "\n");
+        buf.append("printSummary " + _printSummary + "\n");
+        buf.append("haltOnError " + _haltOnError + "\n");
+        buf.append("errorProperty " + _errorProperty + "\n");
+        buf.append("haltOnFailure " + _haltOnFailure + "\n");
+        buf.append("failureProperty " + _failureProperty + "\n");
+        buf.append("filterTrace " + _filterTrace + "\n");
+        buf.append("showOutput " + _showOutput + "\n");
+        return buf.toString();
+    }
+
+    /* ===========================================================
+     *
+     * Property getters and setters
+     *
+     * ===========================================================
+     */
+
+    public void setTestJars(String testJars)
+    {
+        _testJars = testJars;
+    }
+
+    public String getTestJars()
+    {
+        return _testJars;
+    }
+
+    public void setPrintSummary(String printSummary)
+    {
+        _printSummary = printSummary;
+    }
+
+    public String getPrintSummary()
+    {
+        return _printSummary;
+    }
+
+    public void setHaltOnError(boolean haltOnError)
+    {
+        _haltOnError = haltOnError;
+    }
+
+    public boolean getHaltOnError()
+    {
+        return _haltOnError;
+    }
+
+    public void setErrorProperty(String  errorProperty)
+    {
+        _errorProperty = errorProperty;
+    }
+
+    public String  getErrorProperty()
+    {
+        return _errorProperty;
+    }
+
+    public void setHaltOnFailure(boolean haltOnFailure)
+    {
+        _haltOnFailure = haltOnFailure;
+    }
+
+    public boolean getHaltOnFailure()
+    {
+        return _haltOnFailure;
+    }
+
+    public void setFailureProperty(String failureProperty)
+    {
+        _failureProperty = failureProperty;
+    }
+
+    public String getFailureProperty()
+    {
+        return _failureProperty;
+    }
+
+    public void setFilterTrace(boolean filterTrace)
+    {
+        _filterTrace = filterTrace;
+    }
+    
+    public void setJVM(String jvm)
+    {
+        _jvm = jvm;
+    }
+
+    public boolean getFilterTrace()
+    {
+        return _filterTrace;
+    }
+
+    public void setShowOutput(boolean showOutput)
+    {
+        this._showOutput = showOutput;
+    }
+
+    public boolean getShowOutput()
+    {
+        return _showOutput;
+    }
+
+    public void setFileFilter(String fileFilter)
+    {
+        if(fileFilter != null && !fileFilter.trim().equals(""))
+        {
+            log("Adding Property File filter: " + fileFilter);
+            _testFilter = new PropertyFileTestFilter(fileFilter);
+        }
+    }
+
+    public void setTimeout(int timeout)
+    {
+        this._timeout = timeout;
+    }
+
+    public int getTimeout() 
+    {
+        return _timeout;
+    }
+
+    public void setToDir(String toDir) 
+    {
+        _toDir = toDir;
+    }
+
+    public String getToDir() 
+    {
+        return _toDir;
+    }
+
+    /* ===========================================================
+     *
+     * Methods to extract the Test cases from a JAR file
+     *
+     * ===========================================================
+     */
+
+    protected Iterator getAllTests()
+    {
+        log("commandline.getClasspath() = " + _commandline.getClasspath(), Project.MSG_INFO);
+
+        // need to wrap the command line path in an AntClassLoader, which gives the convenience
+        // of being able to create a class loader from a Java classpath / Ant <classpath/>
+        // element.  This class loader is passed to the Jar class loader as its parent so
+        // that tests referencing classes that are expected to be on classpath
+        // are loaded.  Once the JUnitTestRunner is forked, the classes on the system
+        // classpath are resolved appropriately.
+        AntClassLoader cl = new AntClassLoader(getClass().getClassLoader(),
+                                               getProject(),
+                                               _commandline.getClasspath(),
+                                               true);
+
+        ArrayList allTests = new ArrayList();
+
+        log("testJars: " + _testJars, Project.MSG_DEBUG);
+        
+        StringTokenizer st = new StringTokenizer(_testJars, ";", false);
+        while(st.hasMoreTokens())
+        {
+            String jarName = st.nextToken();
+            log("===== found test JAR: " + jarName);
+
+            try
+            {
+                JarClassLoader jcl = new JarClassLoader(jarName, cl);
+                JarFile jar = new JarFile(jarName);
+                
+                log("===== loading classes from JAR: " + jarName);
+
+                List tests = loadTests(jar, jcl);
+                allTests.addAll(tests);
+            }
+            catch(IOException e)
+            {
+                log("Error loading JAR file \"" + _testJars + "\"", Project.MSG_ERR);
+                throw new RuntimeException(e);
+            }
+
+        }
+        
+        assert allTests != null;
+
+        return allTests.iterator();
+    }
+
+    private List loadTests(JarFile jar, JarClassLoader jcl)
+    {
+        ArrayList tests = new ArrayList();
+
+        Enumeration entries = jar.entries();
+        while(entries.hasMoreElements())
+        {
+            ZipEntry entry = (ZipEntry)entries.nextElement();
+            log("entry: " + entry + " type: " + entry.getClass().getName(), Project.MSG_DEBUG);
+
+            String className = entry.getName();
+            if(className.endsWith(".class"))
+            {
+                // format this path into the correct string for the ClassLoader.loadClass method.
+                className = className.substring(0, className.length() - ".class".length());
+                log("Load test class: " + className, Project.MSG_DEBUG);
+
+                Class test = null;
+                try
+                {
+                    test = jcl.loadClass(className.replace('/', '.'));
+                }
+                catch(Exception e)
+                {
+                    System.err.println("***********************");
+                    log("Error loading class: " + className, Project.MSG_ERR);
+                    e.printStackTrace();
+                }
+
+                boolean validTest = validTest(test);
+
+                if(validTest)
+                {
+                    log("Loading Test", Project.MSG_DEBUG);
+                    tests.add(new JUnitTestWrapper(new JUnitTest(test.getName()), (_testFilter != null ? _testFilter.getTestList(test) : null)));
+                }
+                else log("Class returnd was not a TestCase", Project.MSG_DEBUG);
+            }
+        }
+
+        return tests;
+    }
+
+    private static class JUnitTestWrapper
+    {
+        private JUnitTest _junitTest = null;
+        private String _testList = null;
+        
+        JUnitTestWrapper(JUnitTest test, String testList)
+        {
+            _junitTest = test;
+            _testList = testList;
+        }
+        
+        JUnitTest getJUnitTest() {return _junitTest;}
+        String getTestList() {return _testList;}
+    }
+
+    private boolean validTest(Class clazz)
+    {
+        if(clazz == null) return false;
+        
+        if((junit.framework.TestCase.class).isAssignableFrom(clazz) && !Modifier.isAbstract(clazz.getModifiers()))
+        {
+            if(_testFilter != null && !_testFilter.filter(clazz))
+                return false;
+
+            log("Found valid test case: " + clazz.getName());
+
+            return true;
+        }
+        else return false;
+    }
+
+    private static String makeTestResultsPath(String resultsDir, String testCaseName)
+    {
+        String path = null;
+        path = new File(resultsDir + File.separator + "TEST-" + testCaseName + ".xml").getAbsolutePath();
+        return path;
+    }
+}

Added: incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JUnitTestFilter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JUnitTestFilter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools.ant.junit;
+
+// java imports
+
+// internal imports
+
+// external imports
+import org.apache.tools.ant.BuildException;
+
+/**
+ *
+ */
+interface JUnitTestFilter
+{
+    public boolean filter(Class clazz) throws BuildException;
+
+    public String getTestList(Class clazz);
+}

Added: incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JarClassLoader.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/JarClassLoader.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,182 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools.ant.junit;
+ 
+// java imports
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+// internal imports
+
+// external imports
+// @TODO: add a JarClassLoader exception; don't want to be tightly coupled with BulidException / Ant here.
+import org.apache.tools.ant.BuildException;
+
+/**
+ *
+ */
+class JarClassLoader
+    extends ClassLoader
+{
+    private static boolean DEBUG = false;
+
+    private String jarFileName = null;
+    private JarFile jar = null;
+    private Map loadedClasses = null;
+
+    public JarClassLoader(JarFile jar, ClassLoader parent)
+    {
+        super(parent);
+
+        this.jar = jar;        
+        this.jarFileName = jar.getName();
+        this.loadedClasses = new HashMap();
+    }
+    
+    public JarClassLoader(String jarFileName, ClassLoader parent)
+    {
+        super(parent);
+        
+        this.jarFileName = jarFileName;
+        this.loadedClasses = new HashMap();
+
+        try
+        {
+            jar = new JarFile(jarFileName);
+        }
+        catch(IOException io)
+        {
+            error("Error loading JAR file: \"" + jarFileName + "\"");
+            throw new RuntimeException("Error loading JAR file: \"" + jarFileName + "\"", io);
+        }
+    }
+
+    public synchronized Class findClass(String className)
+        throws ClassNotFoundException
+    {
+        debug("find class: " + className);
+
+        byte[] b = loadClassBytes(className);
+
+        return defineClass(className, b, 0, b.length);
+    }
+
+    private byte[] loadClassBytes(String className)
+        throws ClassNotFoundException
+    {
+        if(className.trim().endsWith(".class"))
+            throw new ClassNotFoundException("Invalid class name: " + className);
+
+        // make a valid class name
+        String pathName = className.replace('.', '/') + ".class";
+
+        return loadResource(pathName);
+    }
+    
+    private byte[] loadResource(String className)
+        throws ClassNotFoundException
+    {
+        debug("read from JAR file: " + jarFileName);       
+        debug("load resource: " + className);
+
+        try
+        {
+            // read bytes...
+            JarEntry jarEntry = jar.getJarEntry(className);
+            
+            if(jarEntry == null)
+                throw new ClassNotFoundException("Failed to find resource in Jar file: " + className);
+
+            InputStream stream = jar.getInputStream(jarEntry);
+                        
+            int size = (int)jarEntry.getSize();
+            
+            if(size == -1)
+                throw new ClassNotFoundException("Class file has no size");
+            
+            debug("resource size: " + size);
+                        
+            byte[] b = new byte[size];
+            int rb = 0, chunk = 0;
+            while((size-rb) > 0)
+            {
+                chunk = stream.read(b, rb, size-rb);
+                if(chunk == -1) break;
+                rb += chunk;            
+            }
+
+            debug("read bytes: " + rb);
+            
+            stream.close();
+
+            return b;
+        }
+        catch(IOException io)
+        {
+            debug("Caught exception reading class: " + className, io);
+            throw new ClassNotFoundException("Caught exception reading class: " + className, io);
+        }
+    }
+
+    private void error(Object message)
+    {
+        System.err.println(message.toString());
+    }
+
+    private void error(Object message, Throwable t)
+    {
+        System.err.println(message.toString());
+        t.printStackTrace();
+    }
+
+    private static void debug(Object message)
+    {
+        if(DEBUG)
+            System.err.println(message.toString());
+    }
+
+    private static void debug(Object message, Throwable t)
+    {
+        if(!DEBUG) return;
+
+        System.err.println(message.toString());
+        t.printStackTrace();
+    }    
+
+    private void printPackages()
+    {
+        Package[] pkgs = getPackages();
+        for(int i = 0; i < pkgs.length; i++)
+        {
+            if(!(pkgs[i].toString().indexOf("java.") > -1) && 
+               !(pkgs[i].toString().indexOf("org.") > -1))
+                System.err.println("pkg[" + i + "]: " + pkgs[i]);
+        }
+    }
+}

Added: incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/PropertyFileTestFilter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/src/tools/org/apache/beehive/netui/tools/ant/junit/PropertyFileTestFilter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.tools.ant.junit;
+
+// java imports
+import java.io.FileInputStream;
+
+import java.util.Properties;
+
+// internal imports
+
+// external imports
+import org.apache.tools.ant.BuildException;
+
+/**
+ *
+ */
+class PropertyFileTestFilter
+    implements JUnitTestFilter
+{
+    private String propertyFileName = null;
+    private Properties properties = null;
+
+    public PropertyFileTestFilter(String propertyFileName)
+    {
+        this.propertyFileName = propertyFileName;
+    }
+
+    public boolean filter(Class clazz)
+    {
+        if(properties == null)
+        {
+            try
+            {
+                properties = new Properties();
+                FileInputStream fis = new FileInputStream(propertyFileName);
+                properties.load(fis);
+                fis.close();
+            }
+            catch(Exception e)
+            {
+                throw new BuildException("Could not open properties file \"" + propertyFileName + "\"", e);
+            }
+        }
+
+        if(properties.containsKey(clazz.getName()))
+           return true;
+        else return false;
+    }
+
+    public String getTestList(Class clazz)
+    {
+        assert properties != null;
+
+        if(properties.containsKey(clazz.getName()))
+            return properties.getProperty(clazz.getName());
+        else return "";
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,234 @@
+<?xml version="1.0"?>
+
+<!-- 
+================================================================
+
+  This project is a test of using the test recorder against a
+  Tomcat web application.  Below are targets that show how 
+  the test recorder runs against Tomcat for running a test suite 
+  against a running server, a test suite without the server running,
+  and a set of named tests against a running server.
+
+================================================================ 
+-->
+<project name="Beehive/NetUI/TestRecorder-webapp" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/test/ant/test.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/bootstrap.properties"/>
+    <property file="${os.BEEHIVE_HOME}/netui/ant/common.properties"/>
+
+    <property name="webapp.name" value="coreWeb"/>
+    <property name="testRecorder.config.name" value="netui-server-drt-config"/>
+    <property name="webapp.waitfor.url" value="http://localhost:8080/${webapp.name}"/>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for building a webapp                                    -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="build" description="Build webapp">
+        <echo message="--------------------------------------------------"/>
+        <echo message="|     NetUI coreWeb DRT webapp build starting    |"/>
+        <echo message="--------------------------------------------------"/>
+
+        <property name="webapp.dir" location="${app.dir}/drt/${webapp.name}"/>
+
+        <ant antfile="${test.dir}/ant/buildWebapp.xml" target="deploy.netui" inheritAll="false">
+            <property name="webapp.dir" location="${webapp.dir}"/>
+            <property name="include.testrecorder" value="true"/>
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="test.file" location="${app.dir}/drt/testRecorder/config/testRecorder-tests.xml"/>
+            <property name="config.file" location="${app.dir}/drt/testRecorder/config/testRecorder-config.xml"/>
+            <property name="webapp.file" location="${app.dir}/drt/testRecorder/config/testRecorder-webapp.xml"/>
+        </ant>
+
+        <copy file="${webapp.dir}/WEB-INF/local-netui-config.xml" 
+              tofile="${webapp.dir}/WEB-INF/${netuiconfig.xml.name}" 
+              overwrite="true" failonerror="false"/>
+
+        <copy todir="${webapp.dir}/WEB-INF" file="${struts11.logic.tld}"/>
+        <copy todir="${webapp.dir}/WEB-INF" file="${struts11.html.tld}"/>
+        <copy todir="${webapp.dir}/WEB-INF" file="${struts11.bean.tld}"/>
+
+        <ant antfile="${buildWebapp.ant}" target="build.webapp" inheritAll="false">
+            <property name="webapp.dir" location="${webapp.dir}"/>
+        </ant>
+
+        <echo message="--------------------------------------------------"/>
+        <echo message="|     NetUI coreWeb DRT webapp build ending      |"/>
+        <echo message="--------------------------------------------------"/>
+    </target>
+
+    <target name="clean" description="Clean webapp">
+        <echo message="--------------------------------------------------"/>
+        <echo message="|     NetUI coreWeb DRT webapp clean starting    |"/>
+        <echo message="--------------------------------------------------"/>
+
+        <ant antfile="${test.dir}/ant/buildWebapp.xml" target="undeploy.netui" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/drt/${webapp.name}"/>
+            <property name="include.testrecorder" value="true"/>
+        </ant>
+        <ant antfile="${buildWebapp.ant}" target="clean.webapp" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/drt/${webapp.name}"/>
+        </ant>
+
+        <echo message="--------------------------------------------------"/>
+        <echo message="|     NetUI coreWeb DRT webapp clean ending      |"/>
+        <echo message="--------------------------------------------------"/>
+    </target>
+
+    <target name="scrub" depends="clean" description="Scrub webapp">
+        <delete dir="${tomcat.dir}/work/Catalina/localhost/${webapp.name}" includeEmptyDirs="true"/>
+        <delete file="${tomcat.dir}/conf/Catalina/localhost/${webapp.name}.xml"/>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for running test recorder test suites                    -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="playback" description="Playback a specified list of test recorder tests">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="playback" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+        </ant>
+    </target>
+
+    <target name="drt.running" description="Playback the 'drt' category to a running server">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="suite.callback" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="suite.name" value="drt"/>
+            <property name="waitfor.url" value="${webapp.waitfor.url}"/>
+        </ant>
+    </target>
+
+    <target name="bvt.running" description="Playback the 'bvt' category to a running server">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="suite.callback" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="suite.name" value="bvt"/>
+            <property name="waitfor.url" value="${webapp.waitfor.url}"/>
+        </ant>
+    </target>
+
+    <target name="drt" description="Run the drt suite with full server start / stop support.">
+        <ant dir="${test.dir}" antfile="${test.dir}/ant/testRecorder.xml" inheritAll="false" target="server.test">
+            <property name="app.build.file" location="${app.dir}/drt/build.xml"/>
+            <property name="waitfor.url" value="${webapp.waitfor.url}"/>
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="suite.name" value="drt"/>
+            <property name="drt.mode" value="true"/>
+        </ant>
+    </target>
+
+    <target name="bvt" description="Run the bvt suite with full server start / stop support.">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" inheritAll="false" target="server.test">
+            <property name="app.build.file" location="${app.dir}/drt/build.xml"/>
+            <property name="waitfor.url" value="${webapp.waitfor.url}"/>
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="suite.name" value="bvt"/>
+            <property name="drt.mode" value="true"/>
+        </ant>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for deploying the webapp on a server                     -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="deploy" description="Deploy webapp">
+        <ant antfile="${runTomcat.ant}" target="deploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+            <property name="webapp.root" value="${app.dir}/drt/${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="undeploy" description="Undeploy webapp">
+        <ant antfile="${runTomcat.ant}" target="undeploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="redeploy" description="Redeploy webapp">
+        <ant antfile="${runTomcat.ant}" target="redeploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+        </ant>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for starting / stopping a server                         -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="start" description="Start server">
+        <ant antfile="${runTomcat.ant}" target="start" inheritAll="false"/>
+    </target>
+
+    <target name="start.with.shmem" description="Start server">
+        <ant antfile="${runTomcat.ant}" target="start.with.shmem" inheritAll="false"/>
+    </target>
+
+    <target name="start.with.asserts" description="Start server with asserts enabled for org.apache.beehive.netui">
+        <ant antfile="${runTomcat.ant}" target="start" inheritAll="false">
+            <property name="java.options" value="-ea:org.apache.beehive.netui..."/>
+        </ant>
+    </target>
+
+    <target name="stop" description="Stop server">
+        <ant antfile="${runTomcat.ant}" target="stop" inheritAll="false"/>
+    </target>
+
+    <target name="package.drts" description="Package the NetUI DRT application.">
+        <antcall target="clean"/>
+
+        <mkdir dir="../../../build/drt"/>
+
+        <zip destfile="../../../build/drt/beehive-netui-drt.zip">
+            <zipfileset dir="." prefix="drt"/>
+        </zip>
+    </target>
+
+    <target name="usage">
+        <java fork="no" classname="org.apache.tools.ant.Main">
+            <arg line="-projecthelp"/>
+        </java>
+    </target>
+
+    <!-- todo: this needs to compost down into runTomcat.xml; until we're sure it works, it stays here -->
+    <target name="ensure.deployed" description="Deploy webapp for the test recorder">
+        <echo>Ensuring that the webapp ${webapp.name} is deployed on a running server at the url ${webapp.waitfor.url}</echo>
+
+        <waitfor maxwait="5" maxwaitunit="second" timeoutproperty="unavailable">
+            <http url="${webapp.waitfor.url}"/>
+        </waitfor>
+        <antcall target="do.deploy"/>
+        <antcall target="do.redeploy"/>
+        <fail if="still.unavailable" message="Couldn't find webapp with path ${webapp.waitfor.url}"/>
+    </target>
+
+    <target name="do.deploy" if="unavailable">
+        <echo>Webapp is not deployed; deploying</echo>
+
+        <antcall target="deploy"/>
+        <echo>...deploy complete</echo>
+
+        <waitfor maxwait="120" maxwaitunit="second" timeoutproperty="still.unavailable">
+            <http url="${webapp.waitfor.url}"/>
+        </waitfor>
+    </target>
+
+    <target name="do.redeploy" unless="unavailable">
+        <echo>Webapp is deployed; undeploy and redeploy</echo>
+
+        <antcall target="undeploy"/>
+        <echo>...undeploy complete</echo>
+
+        <antcall target="deploy"/>
+        <echo>...deploy complete</echo>
+
+        <waitfor maxwait="120" maxwaitunit="second" timeoutproperty="still.unavailable">
+            <http url="${webapp.waitfor.url}"/>
+        </waitfor>
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/interOp/struts-config-tests.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/interOp/struts-config-tests.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions =================================== -->
+    <form-beans>
+        <form-bean name="form" type="interOp.test1.Struts1$OldForm" />
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================== -->
+    <global-forwards>
+
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+        <action
+            path="/test1/gotoStrutsJSP"
+            name="form"
+            scope="session"
+            type="org.apache.struts.actions.ForwardAction"
+            parameter="/interOp/test1/Struts1/Struts1.jsp" >
+        </action>
+
+        <action
+            path="/test1/gotoJpf2"
+            name="form"
+            scope="session"
+            type="org.apache.struts.actions.ForwardAction"
+            parameter="/interOp/test1/Controller2/Jpf2.jpf" >
+        </action>
+
+        <action
+            path="/test2/gotoStrutsJSP"
+            name="form"
+            scope="session"
+            type="org.apache.struts.actions.ForwardAction"
+            parameter="/interOp/test2/Struts1/Struts1.jsp" >
+        </action>
+
+       <action
+            path="/test2/gotoDone"
+            name="form"
+            scope="session"
+            type="org.apache.struts.actions.ForwardAction"
+            parameter="/interOp/test2/Done.jsp" >
+        </action>
+
+        <action
+            path="/test3/gotoStrutsJSP"
+            name="form"
+            scope="session"
+            type="org.apache.struts.actions.ForwardAction"
+            parameter="/interOp/test3/Struts1/Struts1.jsp" >
+        </action>
+
+       <action
+            path="/test3/gotoDone"
+            name="form"
+            scope="session"
+            type="org.apache.struts.actions.ForwardAction"
+            parameter="/interOp/test3/Done.jsp" >
+        </action>
+
+       <action
+             path="/test4/gotoStrutsJSP"
+             name="form"
+             scope="session"
+             type="org.apache.struts.actions.ForwardAction"
+             parameter="/interOp/test4/Struts1/Struts1.jsp" >
+       </action>
+
+        <action
+             path="/test4/gotoDone"
+             name="form"
+             scope="session"
+             type="org.apache.struts.actions.ForwardAction"
+             parameter="/interOp/test4/Controller2/done.do" >
+         </action>
+
+       <action
+             path="/test5/gotoStrutsJSP"
+             name="form"
+             scope="session"
+             type="org.apache.struts.actions.ForwardAction"
+             parameter="/interOp/test5/Struts1/Struts1.jsp" >
+       </action>
+
+       <action
+             path="/test5/gotoGlobal"
+             name="form"
+             scope="session"
+             type="org.apache.struts.actions.ForwardAction"
+             parameter="/interOp/test5/Controller1/globalAction.do" >
+       </action>
+
+       <action
+             path="/test5/gotoStruts2JSP"
+             name="form"
+             scope="session"
+             type="org.apache.struts.actions.ForwardAction"
+             parameter="/interOp/test5/Struts1/Struts2.jsp" >
+       </action>
+
+        <action
+             path="/test5/gotoDone"
+             name="form"
+             scope="session"
+             type="org.apache.struts.actions.ForwardAction"
+             parameter="/interOp/test5/Controller1/jpf1Done.do" >
+         </action>
+
+    </action-mappings>
+
+
+</struts-config>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<netui-config xmlns="http://beehive.apache.org/netui/2004/server/config">
+
+    <legacy-tag-support>false</legacy-tag-support>
+
+    <expression-languages>
+        <default-language>netuiel</default-language>
+        <expression-language>
+            <name>netuiel</name>
+            <factory-class>org.apache.beehive.netui.script.el.ExpressionEvaluatorImpl$NetUIELEngineFactory</factory-class>
+            <binding-contexts>
+                <binding-context>
+                    <name>bundle</name>
+                    <factory-class>org.apache.beehive.netui.databinding.script.el.BundleVariableResolver$BundleContextFactory</factory-class>
+                </binding-context>
+                <binding-context>
+                    <name>container</name>
+                    <factory-class>org.apache.beehive.netui.databinding.script.el.ContainerVariableResolver$ContainerContextFactory</factory-class>
+                </binding-context>
+            </binding-contexts>
+        </expression-language>
+    </expression-languages>
+
+    <pageflow-action-interceptors>
+        <global>
+            <before-action>
+                <action-interceptor>
+                    <interceptor-class>miniTests.interceptors.InterceptorsController$BeforeInterceptor</interceptor-class>
+                </action-interceptor>
+                <action-interceptor>
+                    <interceptor-class>miniTests.interceptors.InterceptorsController$BeforeInterceptor2</interceptor-class>
+                </action-interceptor>
+            </before-action>
+            <after-action>
+                <action-interceptor>
+                    <interceptor-class>miniTests.interceptors.InterceptorsController$AfterInterceptor</interceptor-class>
+                </action-interceptor>
+                <action-interceptor>
+                    <interceptor-class>miniTests.interceptors.InterceptorsController$AfterInterceptor2</interceptor-class>
+                </action-interceptor>
+            </after-action>
+        </global>
+    </pageflow-action-interceptors>
+
+    <pageflow-handlers>
+        <forward-redirect-handler-class>pageFlowCore.forwards.Controller$Redirector</forward-redirect-handler-class>
+    </pageflow-handlers>
+
+    <iterator-factories>
+    </iterator-factories>
+
+</netui-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/CustomerProfile.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/CustomerProfile.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema 
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+    targetNamespace="http://openuri.org/customerProfileLocal" 
+    elementFormDefault="qualified">
+	<xsd:element name="CUSTOMERPROFILE">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element name="CUSTOMER" minOccurs="0" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:sequence>
+							<xsd:element name="NAME" type="xsd:string" minOccurs="0"/>
+							<xsd:element name="ADDRESS" type="xsd:string" minOccurs="0"/>
+							<xsd:element name="CITY" type="xsd:string" minOccurs="0"/>
+							<xsd:element name="STATE" type="xsd:string" minOccurs="0"/>
+							<xsd:element name="ZIP" type="xsd:string" minOccurs="0"/>
+							<xsd:element name="PHONE" type="xsd:string" minOccurs="0"/>
+							<xsd:element name="ORDER" minOccurs="0" maxOccurs="unbounded">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="ORDER_DATE" type="xsd:dateTime" minOccurs="0"/>
+										<xsd:element name="TOTAL_ORDER_AMT" type="xsd:integer" minOccurs="0"/>
+										<xsd:element name="ORDERID" type="xsd:string"/>
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+							<xsd:element name="PROMOTION" minOccurs="0" maxOccurs="unbounded">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="PROMOTION_NAME" type="xsd:string"/>
+										<xsd:element name="PROMOTION_DESC" type="xsd:string"/>
+										<xsd:element name="STATE" type="xsd:string"/>
+										<xsd:element name="FROM_DATE" type="xsd:dateTime"/>
+										<xsd:element name="TO_DATE" type="xsd:dateTime"/>
+										<xsd:element name="PRICE" type="xsd:decimal"/>
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+							<xsd:element name="CUSTID" type="xsd:string"/>
+						</xsd:sequence>
+					</xsd:complexType>
+				</xsd:element>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+</xsd:schema>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/CustomerProfileConfig.xsdconfig
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/CustomerProfileConfig.xsdconfig	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<xb:config 
+    xmlns:pkg="http://openuri.org/customerProfileLocal" 
+    xmlns:xb="http://www.bea.com/2002/09/xbean/config">
+    
+	<xb:namespace uri="http://openuri.org/customerProfileLocal">
+		<xb:package>org.openuri.customerprofile.schemas</xb:package>
+	</xb:namespace>
+    <xb:qname name="pkg:CUSTOMERPROFILE" javaname="CustomerProfile"/>
+    <xb:qname name="pkg:CUSTOMER" javaname="Customer"/>
+    <xb:qname name="pkg:NAME" javaname="Name"/>
+    <xb:qname name="pkg:ADDRESS" javaname="Address"/>
+    <xb:qname name="pkg:CITY" javaname="City"/>
+    <xb:qname name="pkg:STATE" javaname="State"/>
+    <xb:qname name="pkg:ZIP" javaname="Zip"/>
+    <xb:qname name="pkg:PHONE" javaname="Phone"/>
+    <xb:qname name="pkg:ORDER" javaname="Order"/>
+    <xb:qname name="pkg:ORDER_DATE" javaname="OrderDate"/>
+    <xb:qname name="pkg:TOTAL_ORDER_AMT" javaname="TotalOrderAmt"/>
+    <xb:qname name="pkg:ORDERID" javaname="OrderId"/>
+    <xb:qname name="pkg:PROMOTION" javaname="Promtion"/>
+    <xb:qname name="pkg:PROMOTION_DATE" javaname="PromitionDate"/>
+    <xb:qname name="pkg:PROMOTION_DESC" javaname="PromitionDesc"/>
+    <xb:qname name="pkg:STATE" javaname="State"/>
+    <xb:qname name="pkg:FROM_DATE" javaname="FromDate"/>
+    <xb:qname name="pkg:TO_DATE" javaname="ToDate"/>
+    <xb:qname name="pkg:PRICE" javaname="Price"/>
+    <xb:qname name="pkg:CUSTID" javaname="CustId"/>
+</xb:config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/catalog.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/catalog.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://www.openuri.org/catalog"
+            xmlns:catalog="http://www.openuri.org/catalog"
+            elementFormDefault="qualified">
+
+    <xsd:simpleType name="productType">
+        <xsd:restriction base="xsd:string">
+            <xsd:enumeration value="road-frame"/>
+            <xsd:enumeration value="road-part"/>
+            <xsd:enumeration value="mountain-frame"/>
+            <xsd:enumeration value="mountain-part"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <xsd:complexType name="product">
+        <xsd:sequence>
+            <xsd:element name="name" type="xsd:string"/>
+            <xsd:element name="price" type="xsd:double"/>
+            <xsd:element name="image" type="xsd:string"/>
+        </xsd:sequence>
+        <xsd:attribute name="type" type="catalog:productType" use="required"/>
+    </xsd:complexType>
+    
+    <xsd:element name="catalog">
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="product" type="catalog:product" minOccurs="0" maxOccurs="unbounded"/>
+            </xsd:sequence>
+        </xsd:complexType>
+    </xsd:element>
+
+</xsd:schema>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/portfolio.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/schemas/portfolio.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://www.openuri.org/customerPortfolio"
+            xmlns:folio="http://www.openuri.org/customerPortfolio"
+            elementFormDefault="qualified">
+
+    <xsd:simpleType name="exchangeType">
+        <xsd:restriction base="xsd:string">
+            <xsd:enumeration value="nyse"/>
+            <xsd:enumeration value="nasdaq"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+    
+    <xsd:complexType name="stock">
+        <xsd:sequence>
+            <xsd:element name="symbol" type="xsd:string"/>
+            <xsd:element name="name" type="xsd:string"/>
+            <xsd:element name="price" type="xsd:double"/>
+            <xsd:element name="web" type="xsd:string"/>
+            <xsd:element name="shares" type="xsd:int"/>
+        </xsd:sequence>
+        <xsd:attribute name="exchange" type="folio:exchangeType" use="required"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="stocks">
+        <xsd:sequence>
+            <xsd:element name="stock" type="folio:stock" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:element name="portfolio">
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="stocks" type="folio:stocks" minOccurs="0" maxOccurs="1"/>
+            </xsd:sequence>
+        </xsd:complexType>
+    </xsd:element>
+
+</xsd:schema>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/SimpleJavaBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/SimpleJavaBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package databinding;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class SimpleJavaBean 
+{
+    private int index = 0;
+    
+    public SimpleJavaBean(int index)
+    {
+        this.index = index;
+    }
+    
+    public String getTextProperty()
+    {
+        return "message from SimpleJavaBean: " + index;
+    }
+    
+    public String getIndex()
+    {
+        return "" + index;
+    }
+    
+    public void setTextProperty(String testProperty)
+    {
+        // no-op
+    }
+    
+    public String toString()
+    {
+        return "SimpleJavaBean (" + System.identityHashCode(this) + ")\n\tindex: " + index;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/callMethod/CallMethodType.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/callMethod/CallMethodType.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package databinding.callMethod;
+
+// java imports
+
+// internal imports
+
+// external imports
+
+/**
+ *
+ */
+public class CallMethodType
+{
+    public String publicMethod() {return "public method";}
+    private String privateMethod() {return "private method";}
+    protected String protectedMethod() {return "protected method";}
+
+    public static String publicStaticMethod() {return "public static method";}
+
+    public String publicMethodZeroArg() {return "public method: zero arg";}
+    public String publicMethodOneArg(int value1) {return "public method: value1: " + value1;}
+    public String publicMethodTwoArg(int value1, int value2) {return "public method: value1: " + value1 + " value2: " + value2;}
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/type/Person.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/type/Person.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package databinding.type;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.util.type.TypeConverter;
+
+// external imports
+
+/**
+ *
+ */
+public class Person
+    implements java.io.Serializable
+{
+    private String name = null;
+
+    public Person()
+    {
+    }
+
+    public Person(String name)
+    {
+        setName(name);
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+    
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String toString()
+    {
+        StringBuffer buf = new StringBuffer();
+        buf.append("name: ");
+        buf.append(name);
+        return buf.toString();
+    }
+
+    public boolean equals(Object object)
+    {
+        if(!(object instanceof Person) || object == null)
+            return false;
+        
+        if(name.equals(((Person)object).getName()))
+            return true;
+        else return false;
+    }
+
+    public static class PersonTypeConverter
+        implements TypeConverter
+    {
+        public Object convertToObject(String string)
+        {
+            if(string == null || string.equals(""))
+                return new Person();
+            else return new Person(string);
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/error/Errors.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/error/Errors.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,5 @@
+NameError=Invalid Name, must start with upper case letter
+TypeError=Invalid Type, must be 'foo' or 'bar'
+BundleString=String from the Errors.properties
+BundleString2=String 2 from Errors.properties
+$$=##$String$##
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/error/Text.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/error/Text.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,6 @@
+BundleString=Text Bundle String
+BundleString2=Text Bundle String 2
+$$=---- String ----
+MessageString={0} of {1}
+MessageStringTwo=Bar
+MessageStringThree=Foo
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/Messages1.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/Messages1.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,5 @@
+defaultPropertyMessage = This came from Messages1.properties
+rootPropertyMessage = This came from XXX.  Arg1 = {0}, arg2 = {1}, arg3 = {2}.
+error.suffix=<br>
+errors.header=<font color="red">
+errors.footer=</font><br>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/Messages2.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/Messages2.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,5 @@
+bundlePropertyMessage1 = This came from Messages2.properties.  Arg1 = {0}.
+bundlePropertyMessage2 = This came from Messages2.properties.  Arg1 = {0}.  Arg2 = {1}.
+error.suffix=<br>
+errors.header=<font color="red">
+errors.footer=</font><br>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/RootMessages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/errors/RootMessages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+rootPropertyMessage = This came from RootMessages.properties.  Arg1 = {0}, arg2 = {1}, arg3 = {2}.
+error.suffix=<br>
+errors.header=<font color="red">
+errors.footer=</font><br>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/exceptions/Messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/exceptions/Messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1 @@
+theMessage=This message came from exceptions.Messages.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/FormBeanTest1Form1.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/FormBeanTest1Form1.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package formBean.test1;
+
+import org.apache.beehive.netui.pageflow.FormData;
+
+/***************************************************************************
+ *
+ **************************************************************************/
+public class FormBeanTest1Form1 extends FormData
+    {
+    public final static String DEFAULT_FORM_VALUE   = "Default form value";
+    private             String field1               = DEFAULT_FORM_VALUE;
+
+    public FormBeanTest1Form1()
+        {
+        super();
+        System.out.println(">>> FormBeanTest1Form1.constructor - ("
+                           + this.toString() + ").");
+        }
+    /***************************************************************************
+     * Field1
+     **************************************************************************/
+    public void setField1(String inField1)
+        {
+        System.out.println(">>> FormBeanTest1Form1.setField1 - ("
+                           + this.toString() + ") old value: ("
+                           + field1 + ") new value: ("
+                           + inField1 + ").");
+        this.field1 = inField1;
+        }
+    public String getField1()
+        {
+        System.out.println(">>> FormBeanTest1Form1.getField1 - ("
+                           + this.toString() + ") field1 value: ("
+                           + field1 + ").");
+        return this.field1;
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ page import="org.apache.struts.action.ActionForm" %>
+<%@ page import="formBean.test1.FormBeanTest1Form1" %>
+
+<html>
+   <head>
+      <title>FormBean Test1</title>
+   </head>
+   <body>
+      <h3 align="center">FormBean Test1 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <font color="blue">
+         <h3 align="center">Struts jsp page.</h3>
+      </font>
+      <center>
+         Field1 Value:&nbsp;
+         <%
+            FormBeanTest1Form1  foo = (FormBeanTest1Form1) request.getSession().getAttribute("formBeanTest1Form1");
+            out.write(foo.getField1());
+         %>
+         <br/><br/>
+         <a href="/coreWeb/formBeanTest1/strutsAction2.do">Continue</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Struts1.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Struts1.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package formBean.test1;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import formBean.test1.FormBeanTest1Form1;
+
+public final class Struts1 extends Action
+    {
+    public final static String  STRUTS1_FORM_VALUE  = "Struts1 form value";
+    public ActionForward execute(ActionMapping inMapping
+                                 ,ActionForm inForm
+                                 ,HttpServletRequest inRequest
+                                 ,HttpServletResponse inResponse)
+                                 throws Exception
+        {
+        // Get the form bean and change the value of field1.
+        //----------------------------------------------------------------------
+        formBean.test1.FormBeanTest1Form1 frm
+            = (formBean.test1.FormBeanTest1Form1) inForm;
+        System.out.println(">>> Struts1.execute - ("
+                           + inForm.toString() + ").");
+        frm.setField1(STRUTS1_FORM_VALUE);
+
+        // Forward control to the specified success target
+        //----------------------------------------------------------------------
+        return(inMapping.findForward("gotoJsp2"));
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Struts2.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/Struts2.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package formBean.test1;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import formBean.test1.FormBeanTest1Form1;
+
+public final class Struts2 extends Action
+    {
+    public final static String  STRUTS2_FORM_VALUE  = "Struts2 form value";
+    public ActionForward execute(ActionMapping inMapping
+                                 ,ActionForm inForm
+                                 ,HttpServletRequest inRequest
+                                 ,HttpServletResponse inResponse)
+                                 throws Exception
+        {
+        // Get the form bean and change the value of field1.
+        //----------------------------------------------------------------------
+        formBean.test1.FormBeanTest1Form1 frm
+            = (formBean.test1.FormBeanTest1Form1) inForm;
+        System.out.println(">>> Struts2.execute - ("
+                           + inForm.toString() + ").");
+        frm.setField1(STRUTS2_FORM_VALUE);
+
+        // Forward control to the specified success target
+        //----------------------------------------------------------------------
+        return(inMapping.findForward("gotoJpf3"));
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/struts-config-formBean.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test1/struts-config-formBean.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions ================================== -->
+    <form-beans>
+        <form-bean name="formBeanTest1Form1" type="formBean.test1.FormBeanTest1Form1" />
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================= -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================= -->
+    <action-mappings>
+        <action
+            path="/strutsAction1"
+            name="formBeanTest1Form1"
+            scope="session"
+            validate="false"
+            type="formBean.test1.Struts1" >
+            <forward name="gotoJsp2" contextRelative="true" path="/WEB-INF/src/formBean/test1/Jsp2.jsp" />
+        </action>
+        <action
+            path="/strutsAction2"
+            name="formBeanTest1Form1"
+            scope="session"
+            validate="false"
+            type="formBean.test1.Struts2" >
+            <forward name="gotoJpf3" contextRelative="true" path="/formBean/test1/jpfAction2.do" />
+        </action>
+
+    </action-mappings>
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/FormBeanTest2Form1.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/FormBeanTest2Form1.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package formBean.test2;
+
+import org.apache.beehive.netui.pageflow.FormData;
+
+/***************************************************************************
+ *
+ **************************************************************************/
+public class FormBeanTest2Form1 extends org.apache.beehive.netui.pageflow.FormData
+    {
+    public final static String DEFAULT_FORM_VALUE   = "Default form value";
+    private             String field1               = DEFAULT_FORM_VALUE;
+
+    public FormBeanTest2Form1()
+        {
+        super();
+        System.out.println(">>> FormBeanTest2Form1.constructor - ("
+                           + this.toString() + ").");
+        }
+    /***************************************************************************
+     * Field1
+     **************************************************************************/
+    public void setField1(String inField1)
+        {
+        System.out.println(">>> FormBeanTest2Form1.setField1 - ("
+                           + this.toString() + ") old value: ("
+                           + field1 + ") new value: ("
+                           + inField1 + ").");
+        this.field1 = inField1;
+        }
+    public String getField1()
+        {
+        System.out.println(">>> FormBeanTest2Form1.getField1 - ("
+                           + this.toString() + ") field1 value: ("
+                           + field1 + ").");
+        return this.field1;
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+
+<html>
+    <head>
+        <title>FormBean Test2</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test2 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <font color="blue">
+            <h3 align="center">Struts jsp page.</h3>
+        </font>
+        <center>
+            <html:form action="/strutsAction2">
+                <table>
+                    <tr>
+                        <td>Field1 Value:</td>
+                        <td>
+                            <html:text property="field1"/>
+                        </td>
+                    </tr>
+                </table>
+                <html:submit>Continue</html:submit>
+            </html:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+
+<html>
+    <head>
+        <title>FormBean Test2</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test2 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <font color="blue">
+            <h3 align="center">Struts jsp page.</h3>
+        </font>
+        <center>
+            <html:form action="/strutsAction4">
+                <table>
+                    <tr>
+                        <td>Field1 Value:</td>
+                        <td>
+                            <html:text property="field1"/>
+                        </td>
+                    </tr>
+                </table>
+                <html:submit>continue</html:submit>
+            </html:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts1.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts1.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package formBean.test2;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import formBean.test2.FormBeanTest2Form1;
+
+public final class Struts1 extends Action
+   {
+   public final static String  STRUTS1_FORM_VALUE  = "Struts1 form value";
+   public ActionForward execute(ActionMapping inMapping
+                                ,ActionForm inForm
+                                ,HttpServletRequest inRequest
+                                ,HttpServletResponse inResponse)
+   throws Exception
+      {
+      // Get the form bean and change the value of field1.
+      //----------------------------------------------------------------------
+      formBean.test2.FormBeanTest2Form1 frm
+      = (formBean.test2.FormBeanTest2Form1) inForm;
+      System.out.println(">>> Struts1.execute - ("
+                         + inForm.toString() + ").");
+      frm.setField1(STRUTS1_FORM_VALUE);
+
+      // Forward control to the specified success target
+      //----------------------------------------------------------------------
+      return(inMapping.findForward("gotoJsp1"));
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts2.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts2.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package formBean.test2;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import formBean.test2.FormBeanTest2Form1;
+
+public final class Struts2 extends Action
+   {
+   public final static String  STRUTS2_FORM_VALUE  = "Struts2 form value";
+   public ActionForward execute(ActionMapping inMapping
+                                ,ActionForm inForm
+                                ,HttpServletRequest inRequest
+                                ,HttpServletResponse inResponse)
+   throws Exception
+      {
+      // Get the form bean and change the value of field1.
+      //----------------------------------------------------------------------
+      formBean.test2.FormBeanTest2Form1 frm
+      = (formBean.test2.FormBeanTest2Form1) inForm;
+      System.out.println(">>> Struts2.execute - ("
+                         + inForm.toString() + ").");
+      frm.setField1(STRUTS2_FORM_VALUE);
+
+      // Forward control to the specified success target
+      //----------------------------------------------------------------------
+      return(inMapping.findForward("gotoJpf1"));
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts3.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts3.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package formBean.test2;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import formBean.test2.FormBeanTest2Form1;
+
+public final class Struts3 extends Action
+   {
+   public ActionForward execute(ActionMapping inMapping
+                                ,ActionForm inForm
+                                ,HttpServletRequest inRequest
+                                ,HttpServletResponse inResponse)
+   throws Exception
+      {
+      // Get the form bean and change the value of field1.
+      //----------------------------------------------------------------------
+      // Get the form bean and change the value of field1.
+      //----------------------------------------------------------------------
+      formBean.test2.FormBeanTest2Form1 frm = (formBean.test2.FormBeanTest2Form1) inForm;
+      System.out.println(">>> Struts3.execute - (" + inForm.toString() + ").");
+
+      // Forward control to the specified success target
+      //----------------------------------------------------------------------
+      return(inMapping.findForward("gotoJsp3"));
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts4.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/Struts4.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package formBean.test2;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import formBean.test2.FormBeanTest2Form1;
+
+public final class Struts4 extends Action
+   {
+   public ActionForward execute(ActionMapping inMapping
+                                ,ActionForm inForm
+                                ,HttpServletRequest inRequest
+                                ,HttpServletResponse inResponse)
+   throws Exception
+      {
+      // Get the form bean and change the value of field1.
+      //----------------------------------------------------------------------
+      formBean.test2.FormBeanTest2Form1 frm
+      = (formBean.test2.FormBeanTest2Form1) inForm;
+      System.out.println(">>> Struts4.execute - ("
+                         + inForm.toString() + ").");
+
+      if (frm.getField1().equals("Jpf1 form value") == true)
+         {
+         return inMapping.findForward("gotoDone");
+         }
+      return inMapping.findForward("gotoError");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/struts-config-formBean.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/formBean/test2/struts-config-formBean.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+   <!-- ========== Form Bean Definitions ================================== -->
+   <form-beans>
+      <form-bean name="formBeanTest2Form1" type="formBean.test2.FormBeanTest2Form1" />
+   </form-beans>
+
+   <!-- ========== Global Forward Definitions ============================= -->
+   <global-forwards>
+   </global-forwards>
+
+   <!-- ========== Action Mapping Definitions ============================= -->
+   <action-mappings>
+      <action
+         path="/strutsAction1"
+         name="formBeanTest2Form1"
+         scope="session"
+         validate="false"
+         type="formBean.test2.Struts1" >
+         <forward name="gotoJsp1" contextRelative="true" path="/WEB-INF/src/formBean/test2/Jsp1.jsp" />
+      </action>
+      <action
+         path="/strutsAction2"
+         name="formBeanTest2Form1"
+         scope="session"
+         validate="false"
+         type="formBean.test2.Struts2" >
+         <forward name="gotoJpf1" contextRelative="true" path="/formBean/test2/Jpf1.jpf" />
+      </action>
+      <action
+         path="/strutsAction3"
+         name="formBeanTest2Form1"
+         scope="session"
+         validate="false"
+         type="formBean.test2.Struts3" >
+         <forward name="gotoJsp3" contextRelative="true" path="/WEB-INF/src/formBean/test2/Jsp3.jsp" />
+      </action>
+      <action
+         path="/strutsAction4"
+         name="formBeanTest2Form1"
+         scope="session"
+         validate="false"
+         type="formBean.test2.Struts4" >
+         <forward name="gotoDone" contextRelative="true" path="/resources/jsp/done.jsp" />
+         <forward name="gotoError" contextRelative="true" path="/resources/jsp/error.jsp" />
+      </action>
+
+   </action-mappings>
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/Global.app
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/Global.app	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,527 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package global;
+
+import org.apache.beehive.netui.pageflow.*;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.util.Arrays;
+
+import shared.FormA;
+import shared.QaTrace;
+
+
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForward;
+
+import pageFlowCore.returnToTest.returnToTestController.InputForm;
+
+
+public class Global extends GlobalApp
+{
+    private String _pageGroupState = "";
+    private String _results;
+    private String _globalAppInfo = "";
+
+    // from QA Global.app
+    private  boolean  _toggle  = true;
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /** 
+     * This property is referenced by the databinding/globalApp/nojpf/ BVT.
+     */
+    public String getSayHello()
+    {
+        return "Hello World! -- the Global.app";
+    }
+
+    public static class GlobalForm extends FormData
+    {
+	String _search;
+	public void setSearch(String search) {
+	    _search = search;
+	}
+	public String getSearch() {
+	    return _search;
+	}
+    }	
+
+    public String getAppState() {
+	return "running";
+    }
+
+    public String getAppInfo() {
+	return "App DRT";
+    }
+
+    public String getResults() {
+	return _results;
+    }
+    public void setResults(String results) {
+	_results = results;
+    }
+
+    public String getPageFlowState() {
+	return _pageGroupState;
+    }
+    public void setPageFlowState(String pgs) {
+	_pageGroupState = pgs;
+    }
+
+    public String getGlobalAppInfo() {
+        return _globalAppInfo;
+    }
+    
+@Jpf.Action(forwards = { @Jpf.Forward(name = "nesting", path = "/globalJpfs/nestReturn/Controller.jpf") })
+    public Forward globalAction_action()
+    {
+        return new Forward("nesting");
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "nesting", path = "/globalJpfs/nestReturn/Controller.jpf") })
+    public Forward globalAction_form(GlobalForm form)
+    {
+        return new Forward("nesting");
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "return", navigateTo = Jpf.NavigateTo.currentPage) })
+    public Forward globalAction_getInfo(GlobalForm form)
+    {
+        StringBuffer sb = new StringBuffer();
+        sb.append("<table border='1' cellspacing='0'cellpaddinig='2'>");
+
+        sb = new StringBuffer();
+        sb.append("<table border='1' cellspacing='0'cellpaddinig='2'>");
+
+        HttpServletRequest req = getRequest();
+        sb.append("<tr><td>Request</td><td>");
+        sb.append(req.getRequestURI());
+        sb.append("</td></tr>");
+
+
+        HttpServletResponse resp = getResponse();
+        sb.append("<tr><td>Response</td><td>Committed:");
+        sb.append("" + resp.isCommitted());
+        sb.append("</td></tr>");
+
+
+        HttpSession session = getSession();
+        session.setMaxInactiveInterval( 3600 );
+        sb.append("<tr><td>Session</td><td>In active interval:");
+        sb.append("" + session.getMaxInactiveInterval());
+        sb.append("</td></tr>");
+
+        // nestable
+        sb.append("<tr><td>Nestable</td><td>");
+        sb.append("" + isNestable());
+        sb.append("</td></tr>");
+
+        // nestable
+        sb.append("<tr><td>PageFlow</td><td>");
+        sb.append("" + isPageFlow());
+        sb.append("</td></tr>");
+
+        // get action
+        sb.append("<tr><td>Actions</td><td>");
+        String[] actions = getActions();
+        Arrays.sort(actions);
+        for (int i=0;i<actions.length;i++) {
+            sb.append(actions[i]);
+            sb.append("<br />");
+        }
+        sb.append("</td></tr>");
+
+
+        // get mapping
+        ActionMapping map = getMapping();
+        sb.append("<tr><td>ActionMapping</td><td>");
+        sb.append("" + map);
+        sb.append("</td></tr>");
+
+        // URI
+        sb.append("<tr><td>URI</td><td>");
+        sb.append("" + getURI());
+        sb.append("</td></tr>");
+
+        // parent dir
+        sb.append("<tr><td>parentDir</td><td>");
+        sb.append("" + getModulePath());
+        sb.append("</td></tr>");
+
+
+        sb.append("</table>");
+        _globalAppInfo = sb.toString();
+
+        return new Forward("return");
+    }
+
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "results", path = "/results/Controller.jpf") })
+    public Forward globalAction_results()
+    {
+        return new Forward("results");
+    }
+
+
+    //
+    // The following actions are for /pageFlowCore/returnToTest/returnToTestController.jpf.
+    //
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage) })
+    protected Forward globalReturnToCurrentPageOverrideInputs()
+    {
+        Forward fwd = new Forward( "success", "input1", "overridden #1" );
+        fwd.addPageInput( "input2", "overridden #2" );
+        return fwd;
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage) })
+    protected Forward globalReturnToCurrentPageOverrideForm()
+    {
+        InputForm overrideForm = new InputForm();
+        overrideForm.setFoo( "override foo" );
+        overrideForm.setBar( "override bar" );
+        return new Forward("success", overrideForm);
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage) })
+    protected Forward globalReturnToCurrentPage()
+    {
+        return new Forward("success");
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage) })
+    protected Forward globalReturnToCurrentPageWithForm( InputForm form )
+    {
+        return new Forward("success");
+    }
+
+
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage) })
+    protected Forward globalReturnToPageOverrideInputs()
+    {
+        Forward fwd = new Forward( "success", "input1", "overridden #1" );
+        fwd.addPageInput( "input2", "overridden #2" );
+        return fwd;
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage) })
+    protected Forward globalReturnToPageOverrideForm()
+    {
+        InputForm overrideForm = new InputForm();
+        overrideForm.setFoo( "override foo" );
+        overrideForm.setBar( "override bar" );
+        return new Forward("success", overrideForm);
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage) })
+    protected Forward globalReturnToPage()
+    {
+        return new Forward("success");
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage) })
+    protected Forward globalReturnToPageWithForm( InputForm form )
+    {
+        return new Forward("success");
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.previousPage) })
+    protected Forward globalReturnToPreviousPage()
+    {
+        return new Forward("success");
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.previousPage) })
+    protected Forward globalReturnToPreviousPageOverrideInputs()
+    {
+        Forward fwd = new Forward( "success", "input1", "overridden #1" );
+        fwd.addPageInput( "input2", "overridden #2" );
+        return fwd;
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.previousPage) })
+    protected Forward globalReturnToPreviousPageOverrideForm()
+    {
+        InputForm overrideForm = new InputForm();
+        overrideForm.setFoo( "override foo" );
+        overrideForm.setBar( "override bar" );
+        return new Forward("success", overrideForm);
+    }
+   
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.previousAction) })
+    protected Forward globalReturnToPreviousAction()
+    {
+        return new Forward("success");
+    }
+
+@Jpf.Action(forwards = { @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.previousAction) })
+    protected Forward globalReturnToAction()
+    {
+        return new Forward("success");
+    }
+
+    // from QA Web
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        HttpSession session = getSession();
+        _log = QaTrace.getTrace(getSession(), true);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Global.onCreate():" + _cnt);
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "struts1Do",
+                path = "/interOp/tests/test2/gotoStrutsJSP.do") 
+        })
+   public Forward toLegacy()
+      {
+      _log.tracePoint("Global.toLegacy():" + _cnt + " - Test2");
+      return new Forward("struts1Do");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "struts2Do",
+                path = "/interOp/tests/test5/gotoStruts2JSP.do") 
+        })
+   public Forward globalAction()
+      {
+      _log.tracePoint("Global.globalAction():" + _cnt + " - Test5");
+      return new Forward("struts2Do");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+   public Forward test35GlobalAction()
+      {
+      _log.tracePoint("Global.test35GlobalAction():" + _cnt + " - Test35");
+      return new Forward("goBack");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "/returnTo/test36/Jsp2.jsp") 
+        })
+   public Forward test36GlobalAction()
+      {
+      _log.tracePoint("Global.test36GlobalAction():" + _cnt + " - Test36");
+      return new Forward("gotoPg2");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   public Forward test39GlobalAction()
+      {
+      _log.tracePoint("Global.test39GlobalAction():" + _cnt + " - Test39");
+      return new Forward("goBack");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "/returnTo/test40/Jsp2.jsp") 
+        })
+   public Forward test40GlobalAction()
+      {
+      _log.tracePoint("Global.test40GlobalAction():" + _cnt + " - Test40");
+      return new Forward("gotoPg2");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   public Forward test40GlobalAction_B()
+      {
+      _log.tracePoint("Global.test40GlobalAction_B():" + _cnt + " - Test40");
+      return new Forward("goBack");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+   public Forward test45GlobalAction()
+      {
+      _log.tracePoint("Global.test45GlobalAction():" + _cnt + " - Test45");
+      return new Forward("goBack");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAct2",
+                path = "/returnTo/test46/action2.do") 
+        })
+   public Forward test46GlobalAction()
+      {
+      _log.tracePoint("Global.test46GlobalAction():" + _cnt + " - Test46");
+      if (_toggle == true)
+         {
+         _toggle = false;
+         return new Forward("gotoAct2");
+         }
+      _toggle = true;
+      return new Forward("gotoError");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+   public Forward test48GlobalAction(FormA inForm)
+//   public Forward test48GlobalAction()
+      {
+      _log.tracePoint("Global.test48GlobalAction(FormA):"
+                        + _cnt
+                        + " - Test48 - FormA instance:"
+                        + _log.getClassCnter(inForm));
+      return new Forward("goBack");
+      }
+
+    @Jpf.Action(
+        )
+   public Forward unKnown()
+      {
+      ActionMapping mapping = getMapping();
+      _log.tracePoint("Global.unKnown():"
+                        + _cnt
+                        + " - Parameter:"
+                        + mapping.getParameter());
+      return new Forward("gotoError");
+      }
+
+   /**
+    * StrutsMergeTest2 will raise this "unHandledAction" action.  The forward
+    * "jpf:gotoAction1" below will be overridden by the "struts-merge"
+    * annotation above and send control back to a valid action in the
+    * StrutsMergeTest2 pageflow.
+    */
+    @Jpf.Action(
+        )
+   public Forward unHandledAction()
+      {
+      ActionMapping mapping = getMapping();
+      _log.tracePoint("Global.unHandledAction():"
+                        + _cnt
+                        + " - Parameter:"
+                        + mapping.getParameter());
+      return new Forward("gotoAction1");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoResults",
+                path = "/miscJpf/bug30448/jpfReturn1.do") 
+        })
+   public Forward jpfReturn1(FormA inForm)
+      {
+      _log.tracePoint("Global.jpfReturn1(FormA):" + _cnt + " - bug30448");
+      return new Forward("gotoResults");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/scopedJpf/jpfTest5/jpf1/Jpf1.jpf") 
+        })
+   public Forward jpf1Begin()
+      {
+      _log.tracePoint("Global.jpf1Begin():" + _cnt + " - JpfTest5");
+      return new Forward("success");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/scopedJpf/jpfTest5/jpf2/Jpf2.jpf") 
+        })
+   public Forward jpf2Begin()
+      {
+      _log.tracePoint("Global.jpf2Begin():" + _cnt + " - JpfTest5");
+      return new Forward("success");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/scopedJpf/jpfTest5/jpf1/goNested.do") 
+        })
+   public Forward jpf1GoNested(FormA form)
+      {
+      _log.tracePoint("Global.jpf1GoNested(FormA):" + _cnt + " - JpfTest5");
+      return new Forward("success");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/scopedJpf/jpfTest5/jpf2/goNested.do") 
+        })
+   public Forward jpf2GoNested(FormA form)
+      {
+      _log.tracePoint("Global.jpf2GoNested(FormA):" + _cnt + " - JpfTest5");
+      return new Forward("success");
+      }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/singletonJpf/jpfTest10/jpf1/jpf1.jpf") 
+        })
+   public Forward gblJpfTest10()
+      {
+      _log.tracePoint("Global.jpfTest10():" + _cnt + " - JpfTest10");
+      return new Forward("success");
+      }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/b36628.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/b36628.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+theMessage=This message came from exceptions.Messages.
+theMessageTwo=Here is a completely new message

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/global/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+   <!-- ========== Form Bean Definitions =================================== -->
+   <form-beans>
+   </form-beans>
+
+   <!-- ========== Global Forward Definitions ============================== -->
+   <global-forwards>
+   </global-forwards>
+
+   <!-- ========== Action Mapping Definitions ============================== -->
+   <action-mappings>
+      <action
+         path="/unKnown"
+         parameter="Action (/unKnown) from global.app merge-jpf-struts-config.xml file." >
+      </action>
+      <action
+         path="/unHandledAction"
+         parameter="Action (/unHandledAction) from global.app merge-jpf-struts-config.xml file." >
+         <forward
+            contextRelative="true"
+            path="/strutsMerge/test2/action1.do"
+            name="gotoAction1"/>
+      </action>
+   </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/interOp/test1/Struts1.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/interOp/test1/Struts1.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package interOp.test1;
+
+import javax.servlet.http.*;
+import org.apache.struts.action.*;
+
+public final class Struts1 extends Action
+    {
+    public ActionForward execute(ActionMapping mapping,
+                                 ActionForm form,
+                                 HttpServletRequest request,
+                                 HttpServletResponse response) throws Exception
+        {
+        // Forward control to the specified success target
+        //----------------------------------------------------------------------
+        String param = mapping.getParameter();
+        System.out.println("in struts. Parameter: " + param);
+        return(mapping.findForward("success"));
+        }
+
+    /**
+     * Inner form
+     */
+    public static class OldForm extends ActionForm
+        {
+        String field1;
+        }
+
+    }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/jpfScopedForms/test55/messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/jpfScopedForms/test55/messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+index.title=Test 23
+index.heading=Test23
+
+errors.header=<br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+errors.footer=</ul></td></tr></table>
+
+error.mustChange=<li class="error">Please change the values of String 1 & String 2.</li>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/log4j.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/log4j.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+<!-- 
+  <appender name="NETUISYSLOGFILE" class="org.apache.log4j.RollingFileAppender">
+    <param name="File" value="c:/tmp/netui.log"/>
+-->
+  <appender name="NETUISYSLOGFILE" class="org.apache.log4j.ConsoleAppender">
+    <param name="Append" value="true"/>
+    <param name="MaxFileSize" value="500000KB"/>
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d{DATE} %-5p %-15c{1} [%x]: %m%n"/>
+    </layout>
+  </appender>
+
+  <!-- base for all netui server components -->
+  <category name="org.apache.beehive.netui">
+    <priority value="error"/>
+    <appender-ref ref="NETUISYSLOGFILE"/>
+  </category>
+
+  <!-- base for all netui server components -->
+  <category name="org.apache.struts">
+    <priority value="error"/>
+    <appender-ref ref="NETUISYSLOGFILE"/>
+  </category>
+
+  <category name="org.apache.beehive.netui.script">
+    <priority value="error"/>
+    <appender-ref ref="NETUISYSLOGFILE"/>
+  </category>
+
+</log4j:configuration>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/webinfSrc/WebinfSrcController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/webinfSrc/WebinfSrcController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,154 @@
+package miniTests.webinfSrc;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.util.RequestUtils;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller struts-merge="merge.xml"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests.webinfSrc/WebinfSrcController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * </view-properties>::
+ */
+@Jpf.Controller(
+    strutsMerge = "merge.xml")
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests.webinfSrc/WebinfSrcController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class WebinfSrcController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="toAction.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "toAction.do") 
+        })
+    protected Forward toActionPart1()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward toAction()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/webinfSrc/WebinfSrcController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/webinfSrc/WebinfSrcController.jpf") 
+        })
+    protected Forward toMe1()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="WebinfSrcController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "WebinfSrcController.jpf") 
+        })
+    protected Forward toMe2()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/webinfSrc/index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/webinfSrc/index.jsp") 
+        })
+    protected Forward mergeAction()
+    {
+        return new Forward( "success" );
+    }
+
+    protected void afterAction()
+    {
+        getRequest().setAttribute( "actionMapping", getMapping() );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/webinfSrc/merge.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/webinfSrc/merge.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+    <form-beans>
+    </form-beans>
+    <global-forwards>
+    </global-forwards>
+    <action-mappings>
+        <action scope="session" path="/mergeAction"/>
+    </action-mappings>
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/bundle1.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/bundle1.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+message1=This is message (1) from resource bundle (bundle1.properties).
+message2=This is message (2) from resource bundle (bundle1.properties).

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/bundle2.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/bundle2.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+message1=This is message (1) from resource bundle (bundle2.properties).
+message2=This is message (2) from resource bundle (bundle2.properties).
+message3=This is message (3) from resource bundle (bundle2.properties). Param 0: ({0}), Param 1: ({1}), Param 2: ({2})
+message4=This is message (4) from resource bundle (bundle2.properties). Param 1: ({1}), Param 0: ({0}), Param 2: ({2})
+message5=This is message (5) from resource bundle (bundle2.properties). Param 2: ({2}), Param 1: ({1}), Param 0: ({0})
+message6=This is message (6) from resource bundle (bundle2.properties). Param 2: ({1}), Param 1: ({1}), Param 0: ({1})
+message7=This is message (7) from resource bundle (bundle2.properties). Param 2: ({0}), Param 1: ({-1}), Param 0: ({2})

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/struts/NamedStrutsMessages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/struts/NamedStrutsMessages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+message1=This is message (1) from resource bundle (NamedStrutsMessages.properties).
+message2=This is message (2) from resource bundle (NamedStrutsMessages.properties).
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/struts/StrutsMessages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/bug26856/struts/StrutsMessages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+message1=This is message (1) from the default resource bundle (StrutsMessages.properties).
+message2=This is message (2) from the default resource bundle (StrutsMessages.properties).
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/LoadStruts.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/LoadStruts.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package miscJpf.test13;
+
+import javax.servlet.http.*;
+import org.apache.struts.action.*;
+
+public final class LoadStruts extends Action
+   {
+   public ActionForward execute(ActionMapping mapping,
+                                ActionForm form,
+                                HttpServletRequest request,
+                                HttpServletResponse response) throws Exception
+      {
+      // Forward control to loadStruts
+      //------------------------------------------------------------------------
+      System.out.println(">>> LoadStruts.execute");
+      return(mapping.findForward("success"));
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/SubmitAction.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/SubmitAction.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package miscJpf.test13;
+
+import javax.servlet.http.*;
+import org.apache.struts.action.*;
+
+public final class SubmitAction extends Action
+   {
+   public ActionForward execute(ActionMapping mapping,
+                                ActionForm form,
+                                HttpServletRequest request,
+                                HttpServletResponse response) throws Exception
+      {
+      System.out.println(">>> SubmitAction.execute");
+
+      // Get the form bean and take the last name value
+      //------------------------------------------------------------------------
+      SubmitForm f = (SubmitForm) form;
+      String lastName = f.getLastName();
+
+      // Translate the name to upper case and save it in the request object
+      //------------------------------------------------------------------------
+      request.setAttribute("lastName", lastName.toUpperCase());
+
+      // Forward control to the specified success target
+      //------------------------------------------------------------------------
+      return(mapping.findForward("success"));
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/SubmitForm.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/SubmitForm.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,117 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package miscJpf.test13;
+
+import javax.servlet.http.HttpServletRequest;
+import org.apache.struts.action.*;
+
+public final class SubmitForm extends ActionForm
+   {
+   // Last Name
+   //---------------------------------------------------------------------------
+   private String lastName = "John Doe";
+   public String getLastName()
+      {
+      return(this.lastName);
+      }
+   public void setLastName(String lastName)
+      {
+      this.lastName = lastName;
+      }
+
+   // Address
+   //---------------------------------------------------------------------------
+   private String address = null;
+   public String getAddress()
+      {
+      return(this.address);
+      }
+   public void setAddress(String address)
+      {
+      this.address = address;
+      }
+
+   // Sex
+   //---------------------------------------------------------------------------
+   private String sex = null;
+   public String getSex()
+      {
+      return(this.sex);
+      }
+   public void setSex(String sex)
+      {
+      this.sex = sex;
+      }
+
+   // Married status
+   //---------------------------------------------------------------------------
+   private String married = null;
+   public String getMarried()
+      {
+      return(this.married);
+      }
+   public void setMarried(String married)
+      {
+      this.married = married;
+      }
+
+   // Age
+   //---------------------------------------------------------------------------
+   private String age = null;
+   public String getAge()
+      {
+      return(this.age);
+      }
+   public void setAge(String age)
+      {
+      this.age = age;
+      }
+
+   // Form validation
+   //---------------------------------------------------------------------------
+   public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
+      {
+      System.out.println(">>> SubmitForm.validate");
+
+      // Check for all mandatory data
+      //-----------------------------------------------------------------------
+      ActionErrors errors = new ActionErrors();
+      if (lastName == null || lastName.equals(""))
+         {
+         System.out.println(">>> Last Name error");
+         errors.add("Last Name", new ActionError("error.lastName"));
+         }
+      if (address == null || address.equals(""))
+         {
+         System.out.println(">>> Address error");
+         errors.add("Address", new ActionError("error.address"));
+         }
+      if (sex == null || sex.equals(""))
+         {
+         System.out.println(">>> Sex error");
+         errors.add("Sex", new ActionError("error.sex"));
+         }
+      if (age == null || age.equals(""))
+         {
+         System.out.println(">>> Age error");
+         errors.add("Age", new ActionError("error.age"));
+         }
+      return errors;
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/bld.bat
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/bld.bat	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+@echo off
+setlocal
+
+rem Change only these two environment variables to fit your environment.
+rem ----------------------------------------------------------------------------
+set libRoot=b:\fw\netui\build\lib
+set webAppRoot=b:\fw\netui\applications\netuiDRTApp\netuiDRT\qaNetuiWeb
+
+rem Prep for and compile the struts classes.
+rem ----------------------------------------------------------------------------
+set classesDir=%webAppRoot%\WEB-INF\classes
+set testRoot=%webAppRoot%\WEB-INF\src\miscJpf\test13
+
+set cp=%libRoot%\tomcat\4x\servlet.jar
+set cp=%cp%;%libRoot%\struts\struts.jar
+javac -d %classesDir% -classpath %cp% %testRoot%\*.java
+
+rem Copy the message properties file to the classes directory.
+rem ----------------------------------------------------------------------------
+attrib -r %classesDir%\miscJpf\test13\test13.properties
+copy /y %testRoot%\test13.properties %classesDir%\miscJpf\test13\test13.properties > nul
+
+:exit
+endlocal

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/readme.txt
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/readme.txt	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+Here is what I did/do to run this test under tomcat.
+
+1) copy {devRoot}/netui/applications/netuiDRTApp/netuiDRT/qaNetuiWeb/WEB-INF/tomcat-web.xml -> web.xml
+2) copy {devRoot}/netui/applications/netuiDRTApp/netuiDRT/qaNetuiWeb/WEB-INF/src/miscJpf/test13/tomcat-struts-config-test13.xml -> struts-config-test13.xml
+3) edit {devRoot}/netui/applications/netuiDRTApp/netuiDRT/qaNetuiWeb/WEB-INF/src/miscJpf/test13/bld.bat
+   so environment variables "libRoot" & "webAppRoot" point to locations in your dev environment.
+4) from a dos shell execute bld.bat
+5) edit the Tomcat/conf/server.xml file and add a line similar to the one below.
+   put this line within the <Service> attribute.
+      <Context path="/test13" docBase="{devRoot}\netui\applications\netuiDRTApp\netuiDRT\qaNetuiWeb" />
+6) start tomcat and hit "http://localhost:8080/test13"
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/struts-config-test13.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/struts-config-test13.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+
+   <!-- ========== Form Bean Definitions =================================== -->
+   <form-beans>
+      <form-bean name="submitForm" type="miscJpf.test13.SubmitForm" />
+   </form-beans>
+
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+       <action path="/loadStruts"
+               type="miscJpf.test13.LoadStruts" >
+
+          <forward    name="success" path="/submit.jsp" />
+       </action>
+
+       <action path="/submit"
+               name="submitForm"
+               scope="request"
+               validate="true"
+               type="miscJpf.test13.SubmitAction"
+               input="/submit.jsp" >
+
+          <forward    name="success" path="/submit.jsp" />
+          <forward    name="failure" path="/submit.jsp" />
+       </action>
+    </action-mappings>
+
+<controller processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor"/>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/test13.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/test13.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+index.title=Struts Starter Application
+index.heading=Hello World!
+
+errors.header=<h4>Validation Error(s)</h4><ul>
+errors.footer=</ul><hr>
+
+error.lastName=<li>Please enter your last name.  It's required.
+error.address=<li>Please enter your address.  It's required.
+error.sex=<li>Please enter your sex.  It's required.
+error.age=<li>Please enter your age. It's required.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/tomcat-struts-config-test13.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/miscJpf/test13/tomcat-struts-config-test13.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+
+   <!-- ========== Form Bean Definitions =================================== -->
+   <form-beans>
+      <form-bean name="submitForm" type="miscJpf.test13.SubmitForm" />
+   </form-beans>
+
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+       <action path="/loadStruts"
+               type="miscJpf.test13.LoadStruts" >
+
+          <forward    name="success" path="/submit.jsp" />
+       </action>
+
+       <action path="/submit"
+               name="submitForm"
+               scope="request"
+               validate="true"
+               type="miscJpf.test13.SubmitAction"
+               input="/submit.jsp" >
+
+          <forward    name="success" path="/submit.jsp" />
+          <forward    name="failure" path="/submit.jsp" />
+       </action>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortalTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortalTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package mockportal;
+
+import javax.servlet.jsp.tagext.BodyTagSupport;
+import javax.servlet.jsp.JspException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import java.io.PrintWriter;
+import java.io.IOException;
+import java.io.StringWriter;
+
+public class MockPortalTag extends BodyTagSupport
+{
+    public int doStartTag() throws JspException
+    {
+        return EVAL_BODY_INCLUDE;
+    }
+
+    public int doEndTag() throws JspException
+    {
+        try
+        {
+            HttpServletResponse response = ( HttpServletResponse ) pageContext.getResponse();
+            response.getWriter().flush();
+        }
+        catch ( IOException e )
+        {
+            e.printStackTrace();
+            throw new JspException( e );
+        }
+        
+        return super.doEndTag();
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortalUrlRewriter.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortalUrlRewriter.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,119 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package mockportal;
+
+import org.apache.beehive.netui.pageflow.util.DefaultURLRewriter;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+import org.apache.beehive.netui.pageflow.PageFlowConstants;
+
+import javax.servlet.jsp.PageContext;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.util.StringTokenizer;
+
+
+public class MockPortalUrlRewriter extends DefaultURLRewriter
+{
+    public String rewriteURL(ServletContext servletContext, ServletRequest request, ServletResponse response, String url, String type)
+    {
+        if ( url.startsWith( "/" ) )
+        {
+            int queryStart = url.indexOf( '?' );
+            String path = null, query = null;
+            
+            if ( queryStart != -1 )
+            {
+                path = url.substring( 0, queryStart );
+                query = url.substring( queryStart + 1 );
+            }
+            else
+            {
+                path = url;
+                query = "";
+            }
+             
+            if ( path.endsWith( PageFlowConstants.ACTION_EXTENSION ) )
+            {
+                String portletID = ( String ) request.getAttribute( "portletID" );
+                
+                if ( portletID != null )
+                {
+                    int actionStart = path.lastIndexOf( '/' );
+                    int actionEnd = path.lastIndexOf( PageFlowConstants.ACTION_EXTENSION );
+                    String action = path.substring( actionStart + 1, actionEnd );
+                    StringBuffer ret = makeActionURL( servletContext, request, action );
+                    for ( StringTokenizer tok = new StringTokenizer( query, "&" ); tok.hasMoreTokens(); )
+                    {
+                        ret.append( '&' );
+                        String queryItem = tok.nextToken();
+                        int eq = queryItem.indexOf( '=' );
+                        if ( eq != -1 )
+                        {
+                            ret.append( rewriteName( servletContext, request, queryItem.substring( 0, eq ) ) );
+                            ret.append( '=' ).append( queryItem.substring( eq + 1 ) );
+                        }
+                        else
+                        {
+                            ret.append( rewriteName( servletContext, request, queryItem ) );
+                        }
+                    }
+                    
+                    return ret.toString();
+                }
+            }
+        }
+        return super.rewriteURL( servletContext, request, response, url, type );
+    }
+
+    /**
+     * Return the form action converted into an action mapping path.
+     */
+    public String getActionMappingName( ServletContext servletContext, ServletRequest request, String action )
+    {
+        return URLRewriterService.getActionMappingName( action );
+    }
+
+    
+    /**
+     * Return the tag name with a scoping prefix
+     */
+    public String rewriteName( ServletContext servletContext, ServletRequest request, String name )
+    {
+        String portletID = ( String ) request.getAttribute( "portletID" );
+
+        if ( portletID != null )
+        {
+            return ScopedServletUtils.getScopedName( name, portletID );
+        }
+        
+        return super.rewriteName( servletContext, request, name );
+    }
+        
+     private StringBuffer makeActionURL( ServletContext servletContext, ServletRequest request, String action )
+     {
+         StringBuffer ret = new StringBuffer( ( String ) request.getAttribute( "repostURL" ) );
+         ret.append( '?' ).append( rewriteName( servletContext, request, "altAction" ) ).append( '=' ).append( action );
+         ret.append( '&' ).append( rewriteName( servletContext, request, "_submit") ).append( "=true" );
+         return ret;
+     }
+        
+}
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortletTag.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/mockportal/MockPortletTag.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,319 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package mockportal;
+
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.FlowControllerFactory;
+import org.apache.beehive.netui.pageflow.ActionResolver;
+import org.apache.beehive.netui.pageflow.StrutsModuleFactory;
+import org.apache.beehive.netui.pageflow.ActionResult;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.pageflow.scoping.ScopedResponse;
+import org.apache.beehive.netui.pageflow.util.URLRewriterService;
+
+import javax.servlet.jsp.tagext.BodyTagSupport;
+import javax.servlet.jsp.JspException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import java.io.PrintWriter;
+import java.io.IOException;
+import java.io.StringWriter;
+
+public class MockPortletTag extends BodyTagSupport
+{
+    private String _portletID;
+    private String _pageFlowURI;
+    private String _strutsModulePath;
+    private String _listenTo;
+    private boolean _verbose;
+    
+
+    public int doStartTag() throws JspException
+    {
+        try
+        {
+            //
+            // outerRequest and outerResponse are the "real" request and response.
+            //
+            HttpServletRequest outerRequest = ( HttpServletRequest ) pageContext.getRequest();
+            HttpServletResponse outerResponse = ( HttpServletResponse ) pageContext.getResponse();
+            ServletContext outerServletContext = pageContext.getServletContext();
+
+            PrintWriter out = outerResponse.getWriter();
+            
+            //
+            // We're having each portlet keep track of its current URL in the session.  'Cause it was easy.
+            //
+            String currentURL = ( String ) outerRequest.getSession().getAttribute( _portletID + "CurrentURL" );
+
+            //
+            // Override the request/response (etc.) with scoped versions.  Keep track of these scoped
+            // objects -- together they constitute the scoped environment for the portlet.
+            //
+            ScopedRequest scopedRequest = 
+                    ScopedServletUtils.getScopedRequest( outerRequest, currentURL, outerServletContext, _portletID );
+            ScopedResponse scopedResponse =
+                    ScopedServletUtils.getScopedResponse( outerResponse, scopedRequest );
+            
+            if ( _listenTo != null )
+            {
+                scopedRequest.addListenScope( _listenTo );
+            }
+            
+            // Set up some attributes for MockPortalUrlRewriter.
+            URLRewriterService.registerURLRewriter( scopedRequest, new MockPortalUrlRewriter());
+            scopedRequest.setAttribute( "portletID", _portletID );
+            scopedRequest.setAttribute( "repostURL", outerRequest.getRequestURI() );
+
+            ActionResolver actionResolver = PageFlowUtils.getCurrentActionResolver( scopedRequest );
+            if ( actionResolver == null )
+            {
+                if ( _pageFlowURI != null )
+                {
+                    actionResolver = FlowControllerFactory.getPageFlowForURI( scopedRequest, scopedResponse, _pageFlowURI, pageContext.getServletContext() );
+                }
+                else
+                {
+                    actionResolver = StrutsModuleFactory.getStrutsModule( _strutsModulePath, scopedRequest );
+                }
+            }
+
+            out.println( "<table border=\"1\" cellspacing=\"1\" cellpadding=\"5\" width=\"100%\">" );
+            out.println( "<tr bordercolor=\"White\"><td bgcolor=\"#EEEEFF\">" );
+            out.print( "<b>Portlet " );
+            out.print( _portletID );
+            out.println( "</b></td></tr><tr bordercolor=\"White\"><td bgcolor=\"#EEEEFF\">" );
+
+            String action = null;
+            
+            boolean submittedThisPortlet = ( scopedRequest.getParameter( "_submit" ) != null );
+
+            String uri = ( currentURL != null ? currentURL : _pageFlowURI );
+            
+            if ( currentURL == null )   // First time -- execute the begin action
+            {
+                if ( actionResolver != null )
+                {
+                    currentURL = actionResolver.getURI();
+                    action = "begin";  // @TODO add a tag attr to allow overriding this
+                }
+                
+                submittedThisPortlet = true;
+            }
+
+            ActionResult actionResult = null;
+            
+            if ( submittedThisPortlet )
+            {
+                scopedRequest.setActiveRequest();
+                
+                String requestAction = scopedRequest.getParameter( "altAction" );
+                if ( requestAction != null )
+                {
+                    action = requestAction;
+                }
+
+                if ( action == null || action.length() == 0 )
+                {
+                    action = scopedRequest.getParameter( "actionSelect" );
+                }
+
+                printValue( out, "Action was", action, "green" );
+
+                try
+                {
+                    String modulePath = ( actionResolver != null ? actionResolver.getModulePath() : null );
+                    action = modulePath + "/" + action;
+                    actionResult = PageFlowUtils.strutsLookup( outerServletContext, scopedRequest, scopedResponse,
+                                                               action, null );
+
+                    if ( actionResult != null )
+                    {
+                        printValue( out, "Action result URI", actionResult.getURI(), "green" );
+                        printValue( out, "Action result isRedirect", new Boolean( actionResult.isRedirect() ), "green" );
+                        
+                        if ( _verbose )
+                        {
+                            printValue( out, "Action result isError", new Boolean( actionResult.isError() ), "green" );
+                            printValue( out, "Action result statusCode", new Integer( actionResult.getStatusCode() ), "green" );
+                            printValue( out, "Action result statusMessage", actionResult.getStatusMessage(), "green" );
+                        }
+                    }
+                    else
+                    {
+                        printValue( out, "Action result", actionResult, "green" );
+                    }
+                    
+                    currentURL = actionResult != null ? actionResult.getURI() : null;
+                    
+                    if ( actionResult != null && actionResult.isRedirect() )
+                    {
+                        // Redirect URIs include the context path.  Strip it -- we're doing a forward.
+                        currentURL = currentURL.substring( scopedRequest.getContextPath().length() );
+                    }
+                }
+                catch ( Exception e )
+                {
+                    e.printStackTrace();
+                    out.println( "<font color=\"red\"><pre>" );
+
+                    StringWriter err = new StringWriter();
+                    e.printStackTrace( new PrintWriter( err ) );
+                    out.println( err.toString() );
+                    out.println( "</pre></font>" );
+                }
+            }
+            else
+            {
+                scopedRequest.restoreAttributes();
+            }
+
+            outerRequest.getSession().setAttribute( _portletID + "CurrentURL", currentURL );
+
+            ActionResolver currentActionResolver = PageFlowUtils.getCurrentActionResolver( scopedRequest ) ;
+            String type = ( currentActionResolver != null ? currentActionResolver.getClass().getName() : "null" );
+            printValue( out, "PageFlow/StrutsModule type", type );
+
+            printValue( out, "Current URL", currentURL );
+            out.println( "</td></tr>" );
+
+            if ( currentActionResolver != null && ! submittedThisPortlet )
+            {
+                currentActionResolver.refresh( scopedRequest, scopedResponse );
+            }
+
+            
+            //
+            // MockPortal.jsp uses the mockCurrentUrl attribute to choose which page to jsp:include.
+            //
+            if ( currentURL != null ) //&& currentURL.endsWith( ".jsp" ) )
+            {
+                pageContext.setAttribute( "mockCurrentUrl", currentURL );
+                out.println( "<tr><td>" );  // block-quote any body content            
+                out.flush();
+                scopedRequest.getRequestDispatcher( currentURL ).include( scopedRequest, scopedResponse );
+                out.println( "</td></tr>" );  // block-quote any body content
+            }
+            else
+            {
+                pageContext.setAttribute( "mockCurrentUrl", "" );
+            }
+            
+            out.println( "</table><br><br>" );
+            out.flush();
+        }
+        catch ( ServletException e )
+        {
+            System.err.println( "****" );
+            e.getRootCause().printStackTrace();
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace();
+        }
+
+        
+        return EVAL_BODY_INCLUDE;
+    }
+
+    protected void printValue( PrintWriter out, String prefix, Object value )
+            throws IOException
+    {
+        printValue( out, prefix, value, "black" );
+    }
+
+    protected void printValue( PrintWriter out, String prefix, Object value, String color )
+        throws IOException
+    {
+        out.print( "<font color=\"" + color + "\">" );
+        out.print( prefix + ": <b>" );
+        out.print( value != null ? value : "[none]" );
+        out.println( "</b></font><br>" );
+    }
+
+    public int doEndTag() throws JspException
+    {
+        HttpServletRequest outerRequest = ( HttpServletRequest ) pageContext.getRequest();        
+        ScopedRequest scopedRequest = 
+                ScopedServletUtils.getScopedRequest( outerRequest, null, pageContext.getServletContext(), _portletID );
+        scopedRequest.persistAttributes();
+        
+        pageContext.removeAttribute( "mockCurrentUrl" );
+
+        return super.doEndTag();
+    }
+
+    public String getPortletID()
+    {
+        return _portletID;
+    }
+
+    public void setPortletID( String portletID )
+    {
+        _portletID = portletID;
+    }
+
+    public String getPageFlowURI()
+    {
+        return _pageFlowURI;
+    }
+
+    public void setPageFlowURI( String pageFlowURI )
+    {
+        _pageFlowURI = pageFlowURI;
+    }
+
+    public String getListenTo()
+    {
+        return _listenTo;
+    }
+
+    public void setListenTo( String listenTo )
+    {
+        _listenTo = listenTo;
+    }
+
+    public String getStrutsModulePath()
+    {
+        return _strutsModulePath;
+    }
+
+    public void setStrutsModulePath( String strutsModulePath )
+    {
+        _strutsModulePath = strutsModulePath;
+    }
+
+    public void release()
+    {
+        _listenTo = null;
+    }
+
+    public boolean isVerbose()
+    {
+        return _verbose;
+    }
+
+    public void setVerbose( boolean verbose )
+    {
+        _verbose = verbose;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/models/UserInfo.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/models/UserInfo.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package models;
+
+public class UserInfo
+{
+    private String username;
+    private String password;
+    private String favColor;
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public void setUsername( String username )
+    {
+        this.username = username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword( String password )
+    {
+        this.password = password;
+    }
+
+    public String getFavColor()
+    {
+        return favColor;
+    }
+
+    public void setFavColor( String favColor )
+    {
+        this.favColor = favColor;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/moduleConfigLocator/Locator1.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/moduleConfigLocator/Locator1.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package moduleConfigLocator;
+
+import org.apache.beehive.netui.pageflow.DynamicSubappActionServlet;
+
+
+public class Locator1 implements DynamicSubappActionServlet.ModuleConfigLocator
+{
+    public String getModuleConfigPath( String moduleName )
+    {
+        return "/miniTests/moduleConfigLocator/locator1-" + moduleName.substring( 1 ) + ".xml";
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/moduleConfigLocator/Locator2.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/moduleConfigLocator/Locator2.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package moduleConfigLocator;
+
+import org.apache.beehive.netui.pageflow.DynamicSubappActionServlet;
+
+
+public class Locator2 implements DynamicSubappActionServlet.ModuleConfigLocator
+{
+    public String getModuleConfigPath( String moduleName )
+    {
+        return "/miniTests/moduleConfigLocator/locator2-" + moduleName.substring( 1 ) + ".xml";
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test/databinding/beans/b40682.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/org/apache/beehive/netui/test/databinding/beans/b40682.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+
+package org.apache.beehive.netui.test.databinding.beans;
+
+import java.io.Serializable;
+
+public class b40682
+    implements java.io.Serializable
+{
+    public static class Report
+        implements Serializable
+    {
+        private int _number;
+        private String _url;
+        private String _text;
+        private Company[] _companies;
+
+        public int getNumber()
+        {
+            return _number;
+        }
+
+        public void setNumber(int number)
+        {
+            _number = number;
+        }
+
+        public String getUrl()
+        {
+            return _url;
+        }
+
+        public void setUrl(String url)
+        {
+            _url = url;
+        }
+
+        public String getText()
+        {
+            return _text;
+        }
+
+        public void setText(String text)
+        {
+            _text = text;
+        }
+
+        public Company[] getCompanies()
+        {
+            return _companies;
+        }
+
+        public void setCompanies(Company[] companies)
+        {
+            _companies = companies;
+        }
+    }
+
+    public static class Company
+        implements Serializable
+    {
+        private String _symbol;
+        private String _status;
+
+        public Company() {}
+
+        public Company(String symbol, String status)
+        {
+            _symbol = symbol;
+            _status = status;
+        }
+
+        public String getStatus()
+        {
+            return _status;
+        }
+
+        public void setStatus(String status)
+        {
+            _status = status;
+        }
+        
+        public String getSymbol()
+        {
+            return _symbol;
+        }
+
+        public void setSymbol(String symbol)
+        {
+            _symbol = symbol;
+        }
+    }
+
+}
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowUtils/ValidationMessages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowUtils/ValidationMessages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+msg1 = This message has no arguments.
+msg2 = This message has a single argument: <b>{0}</b>.
+msg3 = This message has three arguments: <b>{0}</b>, <b>{1}</b>, and <b>{2}</b>.
+
+errors.header = <font color="red"><ul>
+errors.prefix = <li>
+errors.suffix = </li>
+errors.footer = </ul></font>
+
+error.prefix = <font color="red">
+error.suffix = </font>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test12/messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test12/messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+index.title=Test 12
+index.heading=Test12
+
+errors.header=<br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Correction(s) required:</span><ul>
+errors.footer=</ul></td></tr></table>
+
+error.fld1=<li class="error">Field1 had an invalid value.</li>
+error.fld2=<li class="error">Field2 had an invalid value.</li>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test23/messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageInput/test23/messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+index.title=Test 23
+index.heading=Test23
+
+errors.header=<br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+errors.footer=</ul></td></tr></table>
+
+error.forced=<li class="error">Forced an error.</li>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/bundle1.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/bundle1.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+message1=This is message 1 text from bundle1.properties.
+messageWithSubs=start {0} middle {1} end
+multi.word.key=This is a message with a multi-word key separated by dots
+multi space key=This is a message with multiple words separated by spaces
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/bundle1_de.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/bundle1_de.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1 @@
+message1=Ein message von Deutschland.
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/grid.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/grid.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,6 @@
+productid.title=Product ID
+name_title=Name
+price_title=Price
+details_title=Test Details Link
+instock_title=In Stock
+name_id_title=Product Name, Product ID
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/netui-typeconverter.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/netui-typeconverter.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+#
+# Sample / Test type converters
+#
+# Format:
+# [type to convert to]=[implementation of the interface org.apache.beehive.netui.util.type.TypeConverter which performs the conversion]
+#
+databinding.type.Person=databinding.type.Person$PersonTypeConverter

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/resources/bundle2.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/resources/bundle2.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+message1=This is message 1 text from bundle2.properties
+message2=This is message 2 text from bundle2.properties
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/resources/strangeName.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/resources/strangeName.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1 @@
+message1=This is message 1 text.
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/struts/NamedStrutsMessages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/struts/NamedStrutsMessages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1 @@
+myStrutsMessage=Hello from Struts i18n interop that is not the default for this Struts 1.1 module.
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/struts/StrutsMessages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/properties/struts/StrutsMessages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1 @@
+myStrutsMessage=Hello from Struts i18n interop
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/qaUtil/PageLogger.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/qaUtil/PageLogger.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package qaUtil;
+
+import org.apache.beehive.netui.pageflow.FormData;
+
+import java.io.FileOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
+import java.lang.System;
+
+/**
+ *
+ */
+public class PageLogger implements Serializable
+    {
+    private String _testNa;
+    private int _pgCnter = 0;
+    private static File _directory = new File("");  // The default is an empty string.
+
+    /**
+     *
+     */
+    public PageLogger(String name)
+        {
+        _testNa = name;
+        return;
+        }
+
+    /**
+     *
+     */
+    public void logPage(String page)
+        {
+        FileOutputStream logStream = null;
+        try
+            {
+            ++_pgCnter;
+            File logFile = new File(_directory, (_testNa + "_" + _pgCnter + ".log"));
+//            System.out.println("Log file: " + logFile.getAbsoluteFile());
+            logStream = new FileOutputStream(logFile);
+            logStream.write(page.getBytes());
+            }
+        catch (Throwable e)
+            {
+            System.err.println("Encountered exception while logging to file.");
+            e.printStackTrace();
+            }
+        finally
+            {
+            if (logStream != null)
+                {
+                try
+                    {
+                    logStream.close();
+                    }
+                catch (IOException e)
+                    {
+                    System.err.println("Encountered exception while closing log file.");
+                    e.printStackTrace();
+                    ; // We tried.
+                    }
+                }
+            }
+        return;
+        }
+
+    /**
+     *
+     */
+    public void setDir(String directroy)
+        {
+        File tmpDir = new File(directroy);
+        if (tmpDir.isDirectory() == false)
+            {
+            System.out.println("The \"directroy\" parameter must point to an existing directory!");
+            }
+        _directory = tmpDir;
+        return;
+        }
+
+    /**
+     *
+     */
+    public String getDir()
+        {
+        return _directory.getAbsolutePath();
+        }
+
+    /**
+     * LogForm
+     */
+    public static class LogForm extends FormData
+        {
+        private String _pageText;
+
+        public void setPageText(String thePage)
+            { _pageText = thePage; }
+
+        public String getPageText()
+            { return _pageText; }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/resources/application.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/resources/application.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1 @@
+error.text.validate=Validation Error, type in "pass"
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnTo/test63/messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnTo/test63/messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+index.title=Test 23
+index.heading=Test23
+
+errors.header=<br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+errors.footer=</ul></td></tr></table>
+
+error.mustChange=<li class="error">Please change the values of String 1 & String 2.</li>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnToTest/Messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/returnToTest/Messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+anError=not null, ok?
+
+error.prefix=<font color="red">
+error.suffix=</font>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassA.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassA.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import java.io.Serializable;
+import shared.ClassB;
+
+/*******************************************************************************
+ * ClassA
+ ******************************************************************************/
+public class ClassA implements Serializable
+   {
+   private ClassB _b    = new ClassB();
+   private String _str  = "Class A string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassB getClassB()
+      { return _b; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassB.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassB.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassC;
+
+/*******************************************************************************
+ * ClassB
+ ******************************************************************************/
+public class ClassB
+   {
+   private ClassC _c    = new ClassC();
+   private String _str  = "Class B string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassC getClassC()
+      { return _c; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassC.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassC.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassD;
+
+/*******************************************************************************
+ * ClassC
+ ******************************************************************************/
+public class ClassC
+   {
+   private ClassD _d    = new ClassD();
+   private String _str  = "Class C string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassD getClassD()
+      { return _d; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassD.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassD.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassE;
+
+/*******************************************************************************
+ * ClassD
+ ******************************************************************************/
+public class ClassD
+   {
+   private ClassE _e    = new ClassE();
+   private String _str  = "Class D string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassE getClassE()
+      { return _e; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassE.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassE.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassF;
+
+/*******************************************************************************
+ * ClassE
+ ******************************************************************************/
+public class ClassE
+   {
+   private ClassF _f    = new ClassF();
+   private String _str  = "Class E string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassF getClassF()
+      { return _f; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassF.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassF.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassG;
+
+/*******************************************************************************
+ * ClassF
+ ******************************************************************************/
+public class ClassF
+   {
+   private ClassG _g    = new ClassG();
+   private String _str  = "Class F string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassG getClassG()
+      { return _g; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassG.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassG.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassH;
+
+/*******************************************************************************
+ * ClassG
+ ******************************************************************************/
+public class ClassG
+   {
+   private ClassH _h    = new ClassH();
+   private String _str  = "Class G string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassH getClassH()
+      { return _h; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassH.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassH.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassI;
+
+/*******************************************************************************
+ * ClassH
+ ******************************************************************************/
+public class ClassH
+   {
+   private ClassI _i    = new ClassI();
+   private String _str  = "Class H string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassI getClassI()
+      { return _i; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassI.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassI.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassJ;
+
+/*******************************************************************************
+ * ClassI
+ ******************************************************************************/
+public class ClassI
+   {
+   private ClassJ _j    = new ClassJ();
+   private String _str  = "Class I string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassJ getClassJ()
+      { return _j; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassJ.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassJ.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import shared.ClassK;
+
+/*******************************************************************************
+ * ClassJ
+ ******************************************************************************/
+public class ClassJ
+   {
+   private ClassK _k    = new ClassK();
+   private String _str  = "Class J string value.";
+   private int    _int  = 999999;
+
+   // Constructor
+   //---------------------------------------------------------------------------
+   public ClassK getClassK()
+      { return _k; }
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassK.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/ClassK.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+/*******************************************************************************
+ * ClassK
+ ******************************************************************************/
+public class ClassK
+   {
+   private String _str  = "Class K string value.";
+   private int    _int  = 999999;
+
+   // String value setter/getter
+   //---------------------------------------------------------------------------
+   public String getStringValue()
+      { return _str; }
+   public void setStringValue(String inVal)
+      { _str = inVal; }
+
+   // Int value setter/getter
+   //---------------------------------------------------------------------------
+   public int getIntValue()
+      { return _int; }
+   public void setIntValue(int inVal)
+      { _int = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/FormA.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/FormA.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import javax.servlet.http.HttpSession;
+
+/**
+ * FormA
+ *
+ * This class used to maintain a static counter for each instance of this class
+ * so that tests could destinguish different classes.  This functionality was
+ * moved to the QaTrace class.  There are some legacy things left here to keep
+ * older tests from breaking.
+ */
+public class FormA extends FormData
+    {
+    public  static  final   String  STR_VAL1    = "String 1 value";
+    public  static  final   String  STR_VAL2    = "String 2 value";
+    private                 String  _str1       = STR_VAL1;
+    private                 String  _str2       = STR_VAL2;
+    private                 int     _int1       = 1;
+    private                 int     _int2       = 2;
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * Constructor
+     *
+     * Keep this constructor else the older tests will break.  The constructor that
+     * takes an HttpSession is the one that should be called.
+     */
+    public FormA()
+        {
+        super();
+        System.out.println(">>> FormA() - No QaTrace.");
+        return;
+        }
+
+    /**
+     * Constructor
+     */
+    public FormA(HttpSession session) throws Exception
+        {
+        super();
+        _log = QaTrace.getTrace(session);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("FormA.(HttpSession):" + _cnt);
+        return;
+        }
+
+    // String1 getter/setter
+    //---------------------------------------------------------------------------
+    public void setString1(String inVal)
+        { _str1 = inVal; }
+    public String getString1()
+        { return _str1; }
+
+    // String2 getter/setter
+    //---------------------------------------------------------------------------
+    public void setString2(String inVal)
+        { _str2 = inVal; }
+    public String getString2()
+        { return _str2; }
+
+    // Int1 getter/setter
+    //---------------------------------------------------------------------------
+    public void setInt1(int inVal)
+        { _int1 = inVal; }
+    public int getInt1()
+        { return _int1; }
+
+    // Int2 getter/setter
+    //---------------------------------------------------------------------------
+    public void setInt2(int inVal)
+        { _int2 = inVal; }
+    public int getInt2()
+        { return _int2; }
+
+    // Counter getter
+    //---------------------------------------------------------------------------
+    public String getCounter()
+        {
+        Integer cntI = new Integer(_cnt);
+        String cntS = cntI.toString();
+        return cntS; }
+
+    /**
+     * Reset the class counter
+     * Keep for the older tests.
+     */
+    public static void resetCounter()
+        {
+        return;
+        }
+    }
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/QaTrace.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/shared/QaTrace.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,208 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package shared;
+
+import java.util.Vector;
+
+import java.util.Hashtable;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import javax.servlet.http.HttpSession;
+
+/**
+ * This QaTrace class is sort of a singleton.  I say sort of because there can be more
+ * then one instance at a time but only one instance per session.
+ *
+ * The Class serves two purposes:
+ * 1) It store String trace messages that tests want to log.  Each trace message is
+ *    written to System.out which should be the console and then it is save in a
+ *    Vector so that the whole sequence of messages can be retrieved at any point.
+ * 2) It also is used to count the number of instances of a class.  There are times
+ *    during testing when it is handly to know if two objects are the same or different
+ *    instances.  Doing a toString() on the class works but is not reproducable from
+ *    test run to test run.  So in the constructor of a class it can call to obtain
+ *    an integer value that uniquely identifies itself.
+ */
+public class QaTrace extends FormData
+    {
+    // Static
+    public static final String QA_TRACE = "QaTrace";
+    private static Object _lockClass = new Object();
+
+    // Instance
+    private Object _lockTrace = new Object();
+    private Vector _traceVec = new Vector();
+
+    private Object _lockInstance = new Object();
+    private Hashtable _instanceTable = new Hashtable();
+
+    private boolean _logToConsole = false;
+
+    /**
+     * Constructor
+     * Since QaTrace is basically a singleton (only one per session) the constructor
+     * is private.  You retrieve the one instance by calling the static method
+     * getTrace().
+     */
+    private QaTrace()
+        {
+        super();
+        }
+
+    /**
+     * Method which accepts the session as a parameter and returns the one instance
+     * of the QaTrace object for the session.  Logging to the console will be
+     * uneffected.  If it's on it will remain on, if off it will remain off.
+     *
+     * @param session the current session.
+     * @return The one instance of QaTrace.
+     */
+    public static QaTrace getTrace(HttpSession session) throws Exception
+        {
+        QaTrace trace = getIt(session);
+        return trace;
+        }
+
+    /**
+     * Method which accepts the session and boolean as parameters and returns
+     * the one instance of the QaTrace object for the session and turns on or
+     * off console logging based on the value of the boolean.
+     *
+     * @param session the current session.
+     * @param logToConsole <code>true</code> will console logging on.
+     *        <code>false</code> will turn console logging off.
+     * @return The one instance of QaTrace.
+     */
+    public static QaTrace getTrace(HttpSession session, boolean logToConsole) throws Exception
+        {
+        QaTrace trace = getIt(session);
+        trace._logToConsole = logToConsole;
+        return trace;
+        }
+
+    /*
+     * Method which accpets the session and returns the one instance of the
+     * QaTrace object for the session.  If an instance of QaTrace is in the session
+     * it is simply returned.  If no instance exists, one is instanciated and
+     * placed in the session then returned.
+     */
+    private static QaTrace getIt(HttpSession session) throws Exception
+        {
+        if (session == null)
+            {
+            throw new Exception("The session parameter can not be null!");
+            }
+        synchronized (_lockClass)
+            {
+            QaTrace trace = (QaTrace) session.getAttribute(QA_TRACE);
+            if (trace == null)
+                {
+                trace = new QaTrace();
+                session.setAttribute(QA_TRACE, trace);
+                }
+            return trace;
+            }
+        }
+
+    /**
+     * Method accepts a message string and logs it as a trace point.  Side effects:
+     * The trace vector is locked to log the message then released and if console
+     * logging is on the message will be written to System.out.
+     *
+     * @param traceMessage the message that is to be logged.
+     */
+    public void tracePoint(String traceMessage)
+        {
+        synchronized (_lockTrace)
+            {
+            String tmpStr = ">>> " + traceMessage;
+            if (_logToConsole == true) System.out.println(tmpStr);
+            _traceVec.add(tmpStr);
+            }
+        return;
+        }
+
+    /**
+     * Method returns the trace point vector.
+     *
+     * @return The trace point vector.
+     */
+    public Vector getTracePoints()
+        {
+        synchronized (_lockTrace)
+            {
+            return _traceVec;
+            }
+        }
+
+    /**
+     * Method that will clear all the trace point in the trace point vector.
+     */
+    public void clearTracePoints()
+        {
+        synchronized (_lockTrace)
+            {
+            _traceVec.clear();
+            }
+        return;
+        }
+
+    /**
+     * Method accepts an Object and increments a counter that is unique for
+     * the Object type.  This counter can be used to uniquely identify an instance
+     * of a Class.  Using the Objects reference is not reproducable for testing
+     * purposes as the Object reference will change from test run to test run.  This
+     * count is reproducable from run to run.
+     *
+     * @param caller the calling object.
+     * @return <code>int</code> the value of the counter for this Object type.
+     */
+    public int newClass(Object caller)
+        {
+        int cnt;
+        synchronized (_lockInstance)
+            {
+            String na = caller.getClass().getName();
+            Integer cntI = (Integer) _instanceTable.get(na);
+            if (cntI == null) cntI = new Integer(0);
+            cnt = cntI.intValue();
+            cnt++;
+            _instanceTable.put(na, new Integer(cnt));
+            }
+        return cnt;
+        }
+
+    /**
+     * Method accepts an Object and returns the counter value for the Object type.
+     *
+     * @param caller the calling object.
+     * @return <code>int</code> the value of the counter for this Object type.
+     */
+    public int getClassCnter(Object caller)
+        {
+        synchronized (_lockInstance)
+            {
+            String na = caller.getClass().getName();
+            Integer cnt = (Integer) _instanceTable.get(na);
+            if (cnt == null) cnt = new Integer(0);
+            int icnt = cnt.intValue();
+            return icnt;
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test4/Form2.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test4/Form2.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package strutsMerge.test4;
+
+import org.apache.beehive.netui.pageflow.FormData;
+
+/***************************************************************************
+ * Form bean
+ **************************************************************************/
+public class Form2 extends org.apache.beehive.netui.pageflow.FormData
+    {
+    public static final String  DEFAULT_FORM_VALUE  = "Form2 default value";
+    private String field1 = DEFAULT_FORM_VALUE;
+
+    public Form2()
+        {
+        super();
+        System.out.println(">>> Form2.constructor - instance: ("
+                           + this.toString() + ").");
+        }
+    public void setField1(String inField1)
+        {
+        System.out.println(">>> Form2.setField1 - instance: (" + this.toString()
+                           + ")\n\told value: (" + this.field1
+                           + ")\n\tnew value: (" + inField1 + ").");
+        this.field1 = inField1;
+        }
+    public String getField1()
+        {
+        System.out.println(">>> Form2.getField1 - instance: (" + this.toString()
+                           + ")\n\tfield1 value: (" + this.field1 + ").");
+        return this.field1;
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test7/Form1.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test7/Form1.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package strutsMerge.test7;
+
+import org.apache.beehive.netui.pageflow.FormData;
+
+/***************************************************************************
+ * Form bean
+ **************************************************************************/
+public class Form1 extends org.apache.beehive.netui.pageflow.FormData
+    {
+    public static final String  DEFAULT_FORM_VALUE  = "Form1 default value";
+    private String field1 = DEFAULT_FORM_VALUE;
+
+    public Form1()
+        {
+        super();
+        System.out.println(">>> Form1.constructor - instance: ("
+                           + this.toString() + ").");
+        }
+    public void setField1(String inField1)
+        {
+        System.out.println(">>> Form1.setField1 - instance: (" + this.toString()
+                           + ")\n\told value: (" + this.field1
+                           + ")\n\tnew value: (" + inField1 + ").");
+        this.field1 = inField1;
+        }
+    public String getField1()
+        {
+        System.out.println(">>> Form1.getField1 - instance: (" + this.toString()
+                           + ")\n\tfield1 value: (" + this.field1 + ").");
+        return this.field1;
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test7/Struts1.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/strutsMerge/test7/Struts1.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package strutsMerge.test7;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import strutsMerge.test7.Form1;
+
+public final class Struts1 extends Action
+    {
+    public ActionForward execute(ActionMapping inMapping
+                                 ,ActionForm inForm
+                                 ,HttpServletRequest inRequest
+                                 ,HttpServletResponse inResponse)
+                                 throws Exception
+        {
+        // Get the form bean and take the last name value
+        //----------------------------------------------------------------------
+        strutsMerge.test7.Form1 frm = (strutsMerge.test7.Form1) inForm;
+        String fldValue = frm.getField1();
+        System.out.println(">>> Struts1.execute - form instance: ("
+                           + inForm.toString() + ").");
+
+        // Forward control to the specified success target
+        //----------------------------------------------------------------------
+        return(inMapping.findForward("gotoStrutsDone"));
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/util/SerializableTestClass.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/util/SerializableTestClass.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package util;
+
+import java.io.Serializable;
+
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ozzy
+ * Date: Jun 12, 2003
+ * Time: 10:23:47 AM
+ * To change this template use Options | File Templates.
+ */
+public class SerializableTestClass implements Serializable {
+
+    private String data = "this cluster stuff is a cluster f*@!";
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test54/messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test54/messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+index.title=Test 23
+index.heading=Test23
+
+errors.header=<br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+errors.footer=</ul></td></tr></table>
+
+error.mustChange=<li class="error">You must change the values of String 1 & String 2.</li>
+error.error2=<li class="error">Test54 Error message #2.</li>
+error.error3=<li class="error">Test54 Error message #3.</li>
+error.error4=<li class="error">Test54 Error message #4.</li>
+error.error5=<li class="error">Test54 Error message #5.</li>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test56/messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test56/messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+index.title=Test 23
+index.heading=Test23
+
+errors.header=<br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+errors.footer=</ul></td></tr></table>
+
+error.mustChange=<li class="error">You must change the values of String 1 & String 2.</li>
+error.error2=<li class="error">Test54 Error message #2.</li>
+error.error3=<li class="error">Test54 Error message #3.</li>
+error.error4=<li class="error">Test54 Error message #4.</li>
+error.error5=<li class="error">Test54 Error message #5.</li>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test57/messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test57/messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+index.title=Test 23
+index.heading=Test23
+
+errors.header=<br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+errors.footer=</ul></td></tr></table>
+
+error.mustChange=<li class="error">You must change the values of String 1 & String 2.</li>
+error.error2=<li class="error">Test54 Error message #2.</li>
+error.error3=<li class="error">Test54 Error message #3.</li>
+error.error4=<li class="error">Test54 Error message #4.</li>
+error.error5=<li class="error">Test54 Error message #5.</li>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test58/messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/valFwdErr/test58/messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+index.title=Test 23
+index.heading=Test23
+
+errors.header=<br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+errors.footer=</ul></td></tr></table>
+
+error.mustChange=<li class="error">You must change the values of String 1 & String 2.</li>
+error.addError=<li class="error">This error message was added the ActionErrors object directly from the page flow.</li>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/basic/Messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/basic/Messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+badEmail=Bad email address.
+badZip=The zip code has to be exactly {0} characters.
+
+errors.header=<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+errors.prefix=<li>
+errors.suffix=
+errors.footer=</ul></font>
+
+error.prefix=<font color="Red">
+error.suffix=</font>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/validator/Messages.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/validation/validator/Messages.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+errors.header=<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+errors.prefix=<li>
+errors.suffix=
+errors.footer=</ul></font>
+
+error.prefix=<font color="Red">
+error.suffix=</font>
+
+errors.required={0} is required.
+errors.integer={0} must be an integer.
+
+email.displayName=The email address
+age.displayName=The age

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/CustomerProfile.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/CustomerProfile.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+
+<CUSTOMERPROFILE xmlns="http://openuri.org/customerProfileLocal">
+  <CUSTOMER>
+    <NAME>John Kay</NAME>
+    <ADDRESS>Center Street</ADDRESS>
+    <CITY>Plano</CITY>
+    <STATE>TX</STATE>
+    <ZIP>75023</ZIP>
+    <PHONE>4081231234</PHONE>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T08:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1000</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_0</ORDERID>
+    </ORDER>
+    <ORDER>
+      <ORDER_DATE>2002-03-07T08:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1500</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_1</ORDERID>
+    </ORDER>
+    <PROMOTION>
+      <PROMOTION_NAME>Wireless Upsell</PROMOTION_NAME>
+      <PROMOTION_DESC>Family Holiday Connect</PROMOTION_DESC>
+      <STATE>TX</STATE>
+      <FROM_DATE>2001-11-22T09:00:00-05:00</FROM_DATE>
+      <TO_DATE>2002-12-31T10:00:00-05:00</TO_DATE>
+      <PRICE>49.99</PRICE>
+    </PROMOTION>
+    <CUSTID>CUSTOMER_1</CUSTID>
+  </CUSTOMER>
+    <CUSTOMER>
+    <NAME>Jack Black</NAME>
+    <ADDRESS>North First Street</ADDRESS>
+    <CITY>San Jose</CITY>
+    <STATE>CA</STATE>
+    <ZIP>93151</ZIP>
+    <PHONE>4081231234</PHONE>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T10:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1000</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_0</ORDERID>
+    </ORDER>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T11:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1500</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_1</ORDERID>
+    </ORDER>
+    <PROMOTION>
+      <PROMOTION_NAME>Wireless Upsell</PROMOTION_NAME>
+      <PROMOTION_DESC>Family Holiday Connect</PROMOTION_DESC>
+      <STATE>TX</STATE>
+      <FROM_DATE>2001-11-22T12:00:00-05:00</FROM_DATE>
+      <TO_DATE>2002-12-31T13:00:00-05:00</TO_DATE>
+      <PRICE>49.99</PRICE>
+    </PROMOTION>
+    <CUSTID>CUSTOMER_2</CUSTID>
+  </CUSTOMER>
+</CUSTOMERPROFILE>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/CustomerProfile_SerializeXML.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/CustomerProfile_SerializeXML.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+
+<CUSTOMERPROFILE xmlns="http://openuri.org/customerProfileLocal">
+  <CUSTOMER>
+    <NAME>John Kay</NAME>
+    <ADDRESS>Center Street</ADDRESS>
+    <CITY>Plano</CITY>
+    <STATE>TX</STATE>
+    <ZIP>75023</ZIP>
+    <PHONE>4081231234</PHONE>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T08:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1000</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_0</ORDERID>
+    </ORDER>
+    <ORDER>
+      <ORDER_DATE>2002-03-07T08:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1500</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_1</ORDERID>
+    </ORDER>
+    <PROMOTION>
+      <PROMOTION_NAME>Wireless Upsell</PROMOTION_NAME>
+      <PROMOTION_DESC>Family Holiday Connect</PROMOTION_DESC>
+      <STATE>TX</STATE>
+      <FROM_DATE>2001-11-22T09:00:00-05:00</FROM_DATE>
+      <TO_DATE>2002-12-31T10:00:00-05:00</TO_DATE>
+      <PRICE>49.99</PRICE>
+    </PROMOTION>
+    <CUSTID>CUSTOMER_1</CUSTID>
+  </CUSTOMER>
+    <CUSTOMER>
+    <NAME>Jack Black</NAME>
+    <ADDRESS>North First Street</ADDRESS>
+    <CITY>San Jose</CITY>
+    <STATE>CA</STATE>
+    <ZIP>93151</ZIP>
+    <PHONE>4081231234</PHONE>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T10:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1000</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_0</ORDERID>
+    </ORDER>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T11:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1500</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_1</ORDERID>
+    </ORDER>
+    <PROMOTION>
+      <PROMOTION_NAME>Wireless Upsell</PROMOTION_NAME>
+      <PROMOTION_DESC>Family Holiday Connect</PROMOTION_DESC>
+      <STATE>TX</STATE>
+      <FROM_DATE>2001-11-22T12:00:00-05:00</FROM_DATE>
+      <TO_DATE>2002-12-31T13:00:00-05:00</TO_DATE>
+      <PRICE>49.99</PRICE>
+    </PROMOTION>
+    <CUSTID>CUSTOMER_2</CUSTID>
+  </CUSTOMER>
+</CUSTOMERPROFILE>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/bikeCatalog.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/bikeCatalog.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+<?xml version="1.0"?> 
+<catalog xmlns="http://www.openuri.org/catalog">
+    <product type="road-frame">
+        <name>Widget X21</name>
+        <price>3000.00</price>
+        <image>widget_x21.jpg</image>
+    </product>
+    <product type="road-frame">
+        <name>Sight 123</name>
+        <price>1200.00</price>
+        <image>sight_123.jpg</image>
+    </product>
+    <product type="mountain-frame">
+        <name>Widget Ti Frame</name>
+        <price>2600.00</price>
+        <image>widget_ti_frame.jpg</image>
+    </product>
+    <product type="road-part">
+        <name>View 276</name>
+        <price>150.00</price>
+        <image>view_276_pedal.jpg</image>
+    </product>
+    <product type="mountain-part">
+        <name>Rim 652</name>
+        <price>50.00</price>
+        <image>rim_652_black_mountain_rim.jpg</image>
+    </product>
+    <product type="mountain-part">
+        <name>Rim 272</name>
+        <price>65.00</price>
+        <image>rim_272_silver_mountain_rim.jpg</image>
+    </product>
+    <product type="mountain-part">
+        <name>Expensive Crankset</name>
+        <price>220.00</price>
+        <image>expensive_crankset.jpg</image>
+    </product>
+    <product type="mountain-part">
+        <name>Widget Rear Derailleur</name>
+        <price>100.00</price>
+        <image>widget_rear_derailleur.jpg</image>
+    </product>
+</catalog>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/portfolio.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/src/xml/portfolio.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+<?xml version="1.0"?> 
+<portfolio xmlns="http://www.openuri.org/customerPortfolio">
+  <stocks>
+    <stock exchange='nasdaq'>
+        <symbol>BEAS</symbol>
+        <name>BEA Systems</name>
+        <price>14.35</price>
+        <web>http://www.bea.com</web>
+        <shares>500</shares>
+    </stock>
+    <stock exchange='nasdaq'>
+        <symbol>CSCO</symbol>
+        <name>Cisco Systems</name>
+        <price>19.42</price>
+        <web>http://www.cisco.com</web>
+        <shares>400</shares>
+    </stock>
+    <stock exchange='nyse'>
+        <symbol exchange='nyse'>GE</symbol>
+        <name>General Electric</name>
+        <price>59.42</price>
+        <web>http://www.ge.com</web>
+        <shares>300</shares>
+    </stock>
+    <stock exchange='nasdaq'>
+        <symbol>RHAT</symbol>
+        <name>RedHat Systems</name>
+        <price>18.20</price>
+        <web>http://www.redhat.com</web>
+        <shares>200</shares>
+    </stock>
+    <stock exchange='nyse'>
+        <symbol exchange='nyse'>YHOO</symbol>
+        <name>Yahoo Inc</name>
+        <price>48.16</price>
+        <web>http://www.yahoo.com</web>
+        <shares>100</shares>
+    </stock>
+  </stocks>
+</portfolio>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-bean.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-bean.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>bean</shortname>
+<uri>http://jakarta.apache.org/struts/tags-bean</uri>
+<tag>
+<name>cookie</name>
+<tagclass>org.apache.struts.taglib.bean.CookieTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.CookieTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>define</name>
+<tagclass>org.apache.struts.taglib.bean.DefineTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.DefineTei</teiclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>toScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>header</name>
+<tagclass>org.apache.struts.taglib.bean.HeaderTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.HeaderTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>include</name>
+<tagclass>org.apache.struts.taglib.bean.IncludeTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.IncludeTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>message</name>
+<tagclass>org.apache.struts.taglib.bean.MessageTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>arg0</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg1</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg2</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg3</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>arg4</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>key</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>page</name>
+<tagclass>org.apache.struts.taglib.bean.PageTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.PageTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>parameter</name>
+<tagclass>org.apache.struts.taglib.bean.ParameterTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.ParameterTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>resource</name>
+<tagclass>org.apache.struts.taglib.bean.ResourceTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.ResourceTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>input</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>size</name>
+<tagclass>org.apache.struts.taglib.bean.SizeTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.SizeTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>struts</name>
+<tagclass>org.apache.struts.taglib.bean.StrutsTag</tagclass>
+<teiclass>org.apache.struts.taglib.bean.StrutsTei</teiclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>formBean</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>mapping</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>write</name>
+<tagclass>org.apache.struts.taglib.bean.WriteTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>filter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>format</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>formatKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ignore</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+</taglib>
+
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+
+<struts-config>
+
+    <form-beans>
+        <form-bean name="TestTagForm" type="test.TestTagForm">
+            <form-property name="textBox" type="java.lang.String"/>
+            <form-property name="checkBox1" type="java.lang.Boolean"/>
+            <form-property name="checkBox2" type="java.lang.Boolean"/>
+            <form-property name="select" type="[Ljava.lang.String"/>
+            <form-property name="radioGroup" type="java.lang.String"/>
+            <form-property name="hidden" type="java.lang.String"/>
+        </form-bean>
+        <form-bean name="DataboundTagTestForm" type="databinding.struts.SimpleTagTestForm">
+            <form-property name="textProperty" type="java.lang.String"/>
+            <form-property name="booleanProperty" type="java.lang.Boolean"/>
+        </form-bean>
+    </form-beans>
+
+    <global-exceptions>
+    </global-exceptions>
+
+    <global-forwards>
+    </global-forwards>
+
+    <action-mappings>
+
+        <action path="/TestTags"
+                type="test.TestTagAction"
+                name="TestTagForm"
+                scope="session"
+                >
+            <forward name="index" path="/tags/tagtest.jsp"/>
+        </action>
+
+        <action path="/NavTree"
+                type="test.NavTreeAction"
+                scope="session"
+                >
+            <forward name="index" path="/index.jsp"/>
+        </action>
+
+        <action path="/DataboundTagTest" type="databinding.struts.SimpleTagTestAction" name="DataboundTagTestForm">
+            <forward name="postback" path="/tags/databoundTagTest.jsp"/>
+        </action>
+
+        <action path="/DataboundTagTest_NoXScript" type="databinding.struts.SimpleTagTestAction" name="DataboundTagTestForm">
+            <forward name="postback" path="/tags/databoundTagTestNoXScript.jsp"/>
+        </action>
+    </action-mappings>
+
+    <controller processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor"/>
+
+
+    <message-resources null="false" parameter="errors.RootMessages" key="rootMessages"/>
+
+  <!--
+  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
+    <set-property
+        property="pathnames"
+        value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
+  </plug-in>
+  -->
+
+</struts-config>
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-html.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-html.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2972 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>html</shortname>
+<uri>http://jakarta.apache.org/struts/tags-html</uri>
+<tag>
+<name>base</name>
+<tagclass>org.apache.struts.taglib.html.BaseTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>target</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>server</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>button</name>
+<tagclass>org.apache.struts.taglib.html.ButtonTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>cancel</name>
+<tagclass>org.apache.struts.taglib.html.CancelTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>checkbox</name>
+<tagclass>org.apache.struts.taglib.html.CheckboxTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>errors</name>
+<tagclass>org.apache.struts.taglib.html.ErrorsTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>file</name>
+<tagclass>org.apache.struts.taglib.html.FileTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>accept</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>form</name>
+<tagclass>org.apache.struts.taglib.html.FormTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>action</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>enctype</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>focus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>focusIndex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>method</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onreset</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onsubmit</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>target</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>frame</name>
+<tagclass>org.apache.struts.taglib.html.FrameTag</tagclass>
+<attribute>
+<name>action</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>frameborder</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>frameName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>longdesc</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>marginheight</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>marginwidth</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>noresize</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scrolling</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>hidden</name>
+<tagclass>org.apache.struts.taglib.html.HiddenTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>write</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>html</name>
+<tagclass>org.apache.struts.taglib.html.HtmlTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>xhtml</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>image</name>
+<tagclass>org.apache.struts.taglib.html.ImageTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>align</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>border</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>pageKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>src</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>srcKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>img</name>
+<tagclass>org.apache.struts.taglib.html.ImgTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>align</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>border</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>height</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>hspace</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>imageName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ismap</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>lowsrc</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>pageKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>src</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>srcKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>usemap</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>vspace</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>width</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>javascript</name>
+<tagclass>org.apache.struts.taglib.html.JavascriptValidatorTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>cdata</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>dynamicJavascript</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>formName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>method</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>src</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>staticJavascript</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>htmlComment</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>link</name>
+<tagclass>org.apache.struts.taglib.html.LinkTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>action</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>linkName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>target</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messages</name>
+<tagclass>org.apache.struts.taglib.html.MessagesTag</tagclass>
+<teiclass>org.apache.struts.taglib.html.MessagesTei</teiclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>footer</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>multibox</name>
+<tagclass>org.apache.struts.taglib.html.MultiboxTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>option</name>
+<tagclass>org.apache.struts.taglib.html.OptionTag</tagclass>
+<attribute>
+<name>bundle</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>key</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>locale</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>options</name>
+<tagclass>org.apache.struts.taglib.html.OptionsTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>filter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>labelName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>labelProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>optionsCollection</name>
+<tagclass>org.apache.struts.taglib.html.OptionsCollectionTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>filter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>label</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>password</name>
+<tagclass>org.apache.struts.taglib.html.PasswordTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>redisplay</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>radio</name>
+<tagclass>org.apache.struts.taglib.html.RadioTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>idName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>reset</name>
+<tagclass>org.apache.struts.taglib.html.ResetTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>rewrite</name>
+<tagclass>org.apache.struts.taglib.html.RewriteTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>select</name>
+<tagclass>org.apache.struts.taglib.html.SelectTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>multiple</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>submit</name>
+<tagclass>org.apache.struts.taglib.html.SubmitTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>text</name>
+<tagclass>org.apache.struts.taglib.html.TextTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>maxlength</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>size</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>textarea</name>
+<tagclass>org.apache.struts.taglib.html.TextareaTag</tagclass>
+<attribute>
+<name>accesskey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>alt</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>altKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>cols</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>disabled</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexed</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onblur</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onchange</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>ondblclick</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onfocus</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeydown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeypress</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onkeyup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousedown</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmousemove</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseout</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseover</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>onmouseup</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>readonly</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>rows</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>style</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleClass</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>styleId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>tabindex</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>title</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>titleKey</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>xhtml</name>
+<tagclass>org.apache.struts.taglib.html.XhtmlTag</tagclass>
+<bodycontent>empty</bodycontent>
+</tag>
+</taglib>
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-logic.tld
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/struts-logic.tld	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,642 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+
+
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
+<taglib>
+<tlibversion>1.0</tlibversion>
+<jspversion>1.1</jspversion>
+<shortname>logic</shortname>
+<uri>http://jakarta.apache.org/struts/tags-logic</uri>
+<tag>
+<name>empty</name>
+<tagclass>org.apache.struts.taglib.logic.EmptyTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>equal</name>
+<tagclass>org.apache.struts.taglib.logic.EqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>forward</name>
+<tagclass>org.apache.struts.taglib.logic.ForwardTag</tagclass>
+<bodycontent>empty</bodycontent>
+<attribute>
+<name>name</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>greaterEqual</name>
+<tagclass>org.apache.struts.taglib.logic.GreaterEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>greaterThan</name>
+<tagclass>org.apache.struts.taglib.logic.GreaterThanTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>iterate</name>
+<tagclass>org.apache.struts.taglib.logic.IterateTag</tagclass>
+<teiclass>org.apache.struts.taglib.logic.IterateTei</teiclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>collection</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>id</name>
+<required>true</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>indexId</name>
+<required>false</required>
+<rtexprvalue>false</rtexprvalue>
+</attribute>
+<attribute>
+<name>length</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>offset</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>type</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>lessEqual</name>
+<tagclass>org.apache.struts.taglib.logic.LessEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>lessThan</name>
+<tagclass>org.apache.struts.taglib.logic.LessThanTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>match</name>
+<tagclass>org.apache.struts.taglib.logic.MatchTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>location</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messagesNotPresent</name>
+<tagclass>org.apache.struts.taglib.logic.MessagesNotPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>messagesPresent</name>
+<tagclass>org.apache.struts.taglib.logic.MessagesPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>message</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notEmpty</name>
+<tagclass>org.apache.struts.taglib.logic.NotEmptyTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notEqual</name>
+<tagclass>org.apache.struts.taglib.logic.NotEqualTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notMatch</name>
+<tagclass>org.apache.struts.taglib.logic.NotMatchTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>location</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>value</name>
+<required>true</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>notPresent</name>
+<tagclass>org.apache.struts.taglib.logic.NotPresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>user</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>present</name>
+<tagclass>org.apache.struts.taglib.logic.PresentTag</tagclass>
+<bodycontent>JSP</bodycontent>
+<attribute>
+<name>cookie</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>header</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>parameter</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>role</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>user</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+<tag>
+<name>redirect</name>
+<tagclass>org.apache.struts.taglib.logic.RedirectTag</tagclass>
+<attribute>
+<name>anchor</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>forward</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>href</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>name</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>page</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramId</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramName</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramProperty</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>paramScope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>property</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>scope</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+<attribute>
+<name>transaction</name>
+<required>false</required>
+<rtexprvalue>true</rtexprvalue>
+</attribute>
+</tag>
+</taglib>
+
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/strutsValidator-merge-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/strutsValidator-merge-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+  <form-beans/>
+  <global-exceptions/>
+  <global-forwards/>
+  <action-mappings>
+  </action-mappings>
+
+  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
+    <set-property property="pathnames"
+        value="/WEB-INF/validator-rules.xml,/WEB-INF/strutsValidator-validation.xml"/>
+  </plug-in>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/strutsValidator-validation.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/strutsValidator-validation.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<form-validation>
+    <formset>
+        <form name="myForm">
+            <field property="email" depends="required">
+                <arg0 key="email.displayName"/>
+            </field>
+            <field property="age" depends="required,integer">
+                <arg0 key="age.displayName"/>
+            </field>
+        </form>
+    </formset>  
+</form-validation>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/tiles-defs.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/tiles-defs.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+ <!DOCTYPE tiles-definitions PUBLIC
+       "-//Apache Software Foundation//DTD Tiles Configuration//EN"
+       "http://jakarta.apache.org/struts/dtds/tiles-config.dtd">
+
+
+<!--
+     This is a blank Tiles definition file with a commented example.
+-->
+
+<tiles-definitions>
+
+    <!-- sample tiles definitions
+    <definition name=".mainLayout" path="/common/layouts/classicLayout.jsp">
+        <put name="title"  value="Sample Page Title" />
+        <put name="header" value="/common/header.jsp" />
+        <put name="menu"   value=".mainMenu" />
+        <put name="footer" value="/common/footer.jsp" />
+        <put name="body"   value=".portal.body" />
+    </definition>
+
+    <definition name=".mainMenu" path="/common/layouts/vboxLayout.jsp" >
+        <putList name="list" >
+            <add value=".menu.links" />
+            <add value=".menu.taglib.references" />
+            <add value=".menu.printer.friendly" />
+            <add value=".menu.old.documents" />
+      </putList>
+    </definition>
+
+    <definition name="aPage" extends=".mainLayout">
+        <put name="title"  value="Another Title" />
+        <put name="body"   value=".aPage.body" />
+    </definition>
+
+    end samples -->
+
+    <definition name="${YOUR_DEFINITION_HERE}">
+    </definition>
+
+</tiles-definitions>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/tomcat-web.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/tomcat-web.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE web-app PUBLIC
+    "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
+    "http://java.sun.com/dtd/web-app_2_3.dtd" >
+<web-app>
+   <!-- Standard Action Servlet Configuration (with debugging) -->
+   <servlet>
+      <servlet-name>action</servlet-name>
+      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
+      <init-param>
+         <param-name>application</param-name>
+         <param-value>miscJpf.test13.test13</param-value>
+      </init-param>
+      <init-param>
+         <param-name>application</param-name>
+         <param-value>miscJpf.test13.test13</param-value>
+      </init-param>
+      <init-param>
+         <param-name>debug</param-name>
+         <param-value>2</param-value>
+      </init-param>
+      <init-param>
+         <param-name>detail</param-name>
+         <param-value>2</param-value>
+      </init-param>
+      <init-param>
+         <param-name>validate</param-name>
+         <param-value>true</param-value>
+      </init-param>
+      <init-param>
+         <param-name>config/miscJpf/test13</param-name>
+         <param-value>/WEB-INF/src/miscJpf/test13/struts-config-test13.xml</param-value>
+      </init-param>
+      <load-on-startup>2</load-on-startup>
+   </servlet>
+
+   <!-- Standard Action Servlet Mapping -->
+   <servlet-mapping>
+      <servlet-name>action</servlet-name>
+      <url-pattern>*.do</url-pattern>
+   </servlet-mapping>
+
+   <!-- The Usual Welcome File List -->
+   <welcome-file-list>
+      <welcome-file>/miscJpf/test13/StartTest.jsp</welcome-file>
+   </welcome-file-list>
+
+   <!-- Struts Tag Library Descriptors -->
+   <taglib>
+      <taglib-uri>struts-bean.tld</taglib-uri>
+      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
+   </taglib>
+
+   <taglib>
+      <taglib-uri>struts-html.tld</taglib-uri>
+      <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
+   </taglib>
+
+   <taglib>
+      <taglib-uri>struts-logic.tld</taglib-uri>
+      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
+   </taglib>
+
+</web-app>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/validator-rules.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/validator-rules.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1044 @@
+<!DOCTYPE form-validation PUBLIC
+          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
+          "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
+<!--
+
+   This file contains the default Struts Validator pluggable validator
+   definitions.  It should be placed somewhere under /WEB-INF and
+   referenced in the struts-config.xml under the plug-in element
+   for the ValidatorPlugIn.
+
+      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
+        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
+                                                  /WEB-INF/validation.xml"/>
+      </plug-in>
+
+   These are the default error messages associated with
+   each validator defined in this file.  They should be
+   added to your projects ApplicationResources.properties
+   file or you can associate new ones by modifying the
+   pluggable validators msg attributes in this file.
+
+   # Struts Validator Error Messages
+   errors.required={0} is required.
+   errors.minlength={0} can not be less than {1} characters.
+   errors.maxlength={0} can not be greater than {1} characters.
+   errors.invalid={0} is invalid.
+
+   errors.byte={0} must be a byte.
+   errors.short={0} must be a short.
+   errors.integer={0} must be an integer.
+   errors.long={0} must be a long.
+   errors.float={0} must be a float.
+   errors.double={0} must be a double.
+
+   errors.date={0} is not a date.
+   errors.range={0} is not in the range {1} through {2}.
+   errors.creditcard={0} is an invalid credit card number.
+   errors.email={0} is an invalid e-mail address.
+
+-->
+
+<form-validation>
+
+   <global>
+
+      <validator name="required"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateRequired"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+                  msg="errors.required">
+
+         <javascript><![CDATA[
+            function validateRequired(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oRequired = new required();
+                for (x in oRequired) {
+                	var field = form[oRequired[x][0]];
+                	
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'file' ||
+                        field.type == 'select-one' ||
+                        field.type == 'radio' ||
+                        field.type == 'password') {
+                        
+                        var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+							if (si >= 0) {
+								value = field.options[si].value;
+							}
+						} else {
+							value = field.value;
+						}
+                        
+                        if (trim(value).length == 0) {
+                        
+	                        if (i == 0) {
+	                            focusField = field;
+	                        }
+	                        fields[i++] = oRequired[x][1];
+	                        isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return isValid;
+            }
+            
+            // Trim whitespace from left and right sides of s.
+            function trim(s) {
+                return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
+            }
+            
+            ]]>
+         </javascript>
+
+      </validator>
+
+      <validator name="requiredif"
+                 classname="org.apache.struts.validator.FieldChecks"
+                 method="validateRequiredIf"
+                 methodParams="java.lang.Object,
+                               org.apache.commons.validator.ValidatorAction,
+                               org.apache.commons.validator.Field,
+                               org.apache.struts.action.ActionErrors,
+                               org.apache.commons.validator.Validator,
+                               javax.servlet.http.HttpServletRequest"
+                 msg="errors.required">
+      </validator>
+
+      <validator name="minlength"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateMinLength"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.minlength">
+
+         <javascript><![CDATA[
+            function validateMinLength(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oMinLength = new minlength();
+                for (x in oMinLength) {
+                    var field = form[oMinLength[x][0]];
+                    
+                    if (field.type == 'text' ||
+                        field.type == 'textarea') {
+                        
+                        var iMin = parseInt(oMinLength[x][2]("minlength"));
+                        if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oMinLength[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return isValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="maxlength"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateMaxLength"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.maxlength">
+
+         <javascript><![CDATA[
+            function validateMaxLength(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oMaxLength = new maxlength();
+                for (x in oMaxLength) {
+                    var field = form[oMaxLength[x][0]];
+                    
+                    if (field.type == 'text' ||
+                        field.type == 'textarea') {
+                        
+                        var iMax = parseInt(oMaxLength[x][2]("maxlength"));
+                        if (field.value.length > iMax) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oMaxLength[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return isValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="mask"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateMask"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.invalid">
+
+         <javascript><![CDATA[
+            function validateMask(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oMasked = new mask();
+                for (x in oMasked) {
+                    var field = form[oMasked[x][0]];
+                    
+                    if ((field.type == 'text' || 
+                         field.type == 'textarea') && 
+                         (field.value.length > 0)) {
+                        
+                        if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oMasked[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return isValid;
+            }
+
+            function matchPattern(value, mask) {
+               return mask.exec(value);
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="byte"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateByte"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.byte"
+       jsFunctionName="ByteValidations">
+
+         <javascript><![CDATA[
+            function validateByte(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oByte = new ByteValidations();
+                for (x in oByte) {
+                	var field = form[oByte[x][0]];
+                	
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'select-one' ||
+						field.type == 'radio') {
+
+						var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+							if (si >= 0) {
+								value = field.options[si].value;
+							}
+						} else {
+							value = field.value;
+						}
+                        
+                        if (value.length > 0) {
+                            if (!isAllDigits(value)) {
+                                bValid = false;
+                                if (i == 0) {
+                                    focusField = field;
+                                }
+                                fields[i++] = oByte[x][1];
+
+                            } else {
+
+	                            var iValue = parseInt(value);
+	                            if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
+	                                if (i == 0) {
+	                                    focusField = field;
+	                                }
+	                                fields[i++] = oByte[x][1];
+	                                bValid = false;
+	                            }
+                            }
+						}
+						
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return bValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="short"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateShort"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.short"
+       jsFunctionName="ShortValidations">
+
+         <javascript><![CDATA[
+            function validateShort(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oShort = new ShortValidations();
+                for (x in oShort) {
+                	var field = form[oShort[x][0]];
+                	
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'select-one' ||
+                        field.type == 'radio') {
+                        
+                        var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+							if (si >= 0) {
+								value = field.options[si].value;
+							}
+						} else {
+							value = field.value;
+						}
+                        
+                        if (value.length > 0) {
+                            if (!isAllDigits(value)) {
+                                bValid = false;
+                                if (i == 0) {
+                                    focusField = field;
+                                }
+                                fields[i++] = oShort[x][1];
+
+                            } else {
+                        
+	                            var iValue = parseInt(value);
+	                            if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
+	                                if (i == 0) {
+	                                    focusField = field;
+	                                }
+	                                fields[i++] = oShort[x][1];
+	                                bValid = false;
+	                            }
+	                       }
+                       }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return bValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="integer"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateInteger"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.integer"
+       jsFunctionName="IntegerValidations">
+
+         <javascript><![CDATA[
+            function validateInteger(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oInteger = new IntegerValidations();
+                for (x in oInteger) {
+                	var field = form[oInteger[x][0]];
+
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'select-one' ||
+                        field.type == 'radio') {
+                        
+                        var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+						    if (si >= 0) {
+							    value = field.options[si].value;
+						    }
+						} else {
+							value = field.value;
+						}
+                        
+                        if (value.length > 0) {
+                        
+                            if (!isAllDigits(value)) {
+                                bValid = false;
+                                if (i == 0) {
+	                                focusField = field;
+	                            }
+						        fields[i++] = oInteger[x][1];
+						        
+                            } else {
+	                            var iValue = parseInt(value);
+	                            if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
+	                                if (i == 0) {
+	                                    focusField = field;
+	                                }
+	                                fields[i++] = oInteger[x][1];
+	                                bValid = false;
+	                           }
+                           }
+                       }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return bValid;
+            }
+
+            function isAllDigits(argvalue) {
+                argvalue = argvalue.toString();
+                var validChars = "0123456789";
+                var startFrom = 0;
+                if (argvalue.substring(0, 2) == "0x") {
+                   validChars = "0123456789abcdefABCDEF";
+                   startFrom = 2;
+                } else if (argvalue.charAt(0) == "0") {
+                   validChars = "01234567";
+                   startFrom = 1;
+                } else if (argvalue.charAt(0) == "-") {
+                    startFrom = 1;
+                }
+                
+                for (var n = startFrom; n < argvalue.length; n++) {
+                    if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
+                }
+                return true;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="long"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateLong"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.long"/>
+
+
+      <validator name="float"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateFloat"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.float"
+       jsFunctionName="FloatValidations">
+
+         <javascript><![CDATA[
+            function validateFloat(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oFloat = new FloatValidations();
+                for (x in oFloat) {
+                	var field = form[oFloat[x][0]];
+                	
+                    if (field.type == 'text' ||
+                        field.type == 'textarea' ||
+                        field.type == 'select-one' ||
+                        field.type == 'radio') {
+                        
+                    	var value = '';
+						// get field's value
+						if (field.type == "select-one") {
+							var si = field.selectedIndex;
+							if (si >= 0) {
+							    value = field.options[si].value;
+							}
+						} else {
+							value = field.value;
+						}
+                        
+                        if (value.length > 0) {
+                            // remove '.' before checking digits
+                            var tempArray = value.split('.');
+                            var joinedString= tempArray.join('');
+
+                            if (!isAllDigits(joinedString)) {
+                                bValid = false;
+                                if (i == 0) {
+                                    focusField = field;
+                                }
+                                fields[i++] = oFloat[x][1];
+
+                            } else {
+	                            var iValue = parseFloat(value);
+	                            if (isNaN(iValue)) {
+	                                if (i == 0) {
+	                                    focusField = field;
+	                                }
+	                                fields[i++] = oFloat[x][1];
+	                                bValid = false;
+	                            }
+                            }
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                   focusField.focus();
+                   alert(fields.join('\n'));
+                }
+                return bValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="double"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateDouble"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.double"/>
+
+
+      <validator name="date"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateDate"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.date"
+       jsFunctionName="DateValidations">
+
+         <javascript><![CDATA[
+            function validateDate(form) {
+               var bValid = true;
+               var focusField = null;
+               var i = 0;
+               var fields = new Array();
+               oDate = new DateValidations();
+               for (x in oDate) {
+                   var value = form[oDate[x][0]].value;
+                   var datePattern = oDate[x][2]("datePatternStrict");
+                   if ((form[oDate[x][0]].type == 'text' ||
+                        form[oDate[x][0]].type == 'textarea') &&
+                       (value.length > 0) &&
+                       (datePattern.length > 0)) {
+                     var MONTH = "MM";
+                     var DAY = "dd";
+                     var YEAR = "yyyy";
+                     var orderMonth = datePattern.indexOf(MONTH);
+                     var orderDay = datePattern.indexOf(DAY);
+                     var orderYear = datePattern.indexOf(YEAR);
+                     if ((orderDay < orderYear && orderDay > orderMonth)) {
+                         var iDelim1 = orderMonth + MONTH.length;
+                         var iDelim2 = orderDay + DAY.length;
+                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+                         if (iDelim1 == orderDay && iDelim2 == orderYear) {
+                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
+                         } else if (iDelim1 == orderDay) {
+                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
+                         } else if (iDelim2 == orderYear) {
+                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
+                         } else {
+                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
+                         }
+                         var matched = dateRegexp.exec(value);
+                         if(matched != null) {
+                            if (!isValidDate(matched[2], matched[1], matched[3])) {
+                               if (i == 0) {
+                                   focusField = form[oDate[x][0]];
+                               }
+                               fields[i++] = oDate[x][1];
+                               bValid =  false;
+                            }
+                         } else {
+                            if (i == 0) {
+                                focusField = form[oDate[x][0]];
+                            }
+                            fields[i++] = oDate[x][1];
+                            bValid =  false;
+                         }
+                     } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
+                         var iDelim1 = orderDay + DAY.length;
+                         var iDelim2 = orderMonth + MONTH.length;
+                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+                         if (iDelim1 == orderMonth && iDelim2 == orderYear) {
+                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
+                         } else if (iDelim1 == orderMonth) {
+                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
+                         } else if (iDelim2 == orderYear) {
+                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
+                         } else {
+                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
+                         }
+                         var matched = dateRegexp.exec(value);
+                         if(matched != null) {
+                             if (!isValidDate(matched[1], matched[2], matched[3])) {
+                                 if (i == 0) {
+                                     focusField = form[oDate[x][0]];
+                                 }
+                                 fields[i++] = oDate[x][1];
+                                 bValid =  false;
+                              }
+                         } else {
+                             if (i == 0) {
+                                 focusField = form[oDate[x][0]];
+                             }
+                             fields[i++] = oDate[x][1];
+                             bValid =  false;
+                         }
+                     } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
+                         var iDelim1 = orderYear + YEAR.length;
+                         var iDelim2 = orderMonth + MONTH.length;
+                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+                         if (iDelim1 == orderMonth && iDelim2 == orderDay) {
+                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
+                         } else if (iDelim1 == orderMonth) {
+                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
+                         } else if (iDelim2 == orderDay) {
+                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
+                         } else {
+                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
+                         }
+                         var matched = dateRegexp.exec(value);
+                         if(matched != null) {
+                             if (!isValidDate(matched[3], matched[2], matched[1])) {
+                                 if (i == 0) {
+                                     focusField = form[oDate[x][0]];
+                                  }
+                                  fields[i++] = oDate[x][1];
+                                  bValid =  false;
+                              }
+                          } else {
+                              if (i == 0) {
+                                  focusField = form[oDate[x][0]];
+                              }
+                              fields[i++] = oDate[x][1];
+                              bValid =  false;
+                          }
+                     } else {
+                         if (i == 0) {
+                             focusField = form[oDate[x][0]];
+                         }
+                         fields[i++] = oDate[x][1];
+                         bValid =  false;
+                     }
+                  }
+               }
+               if (fields.length > 0) {
+                  focusField.focus();
+                  alert(fields.join('\n'));
+               }
+               return bValid;
+            }
+
+	    function isValidDate(day, month, year) {
+	        if (month < 1 || month > 12) {
+                    return false;
+                }
+                if (day < 1 || day > 31) {
+                    return false;
+                }
+                if ((month == 4 || month == 6 || month == 9 || month == 11) &&
+                    (day == 31)) {
+                    return false;
+                }
+                if (month == 2) {
+                    var leap = (year % 4 == 0 &&
+                               (year % 100 != 0 || year % 400 == 0));
+                    if (day>29 || (day == 29 && !leap)) {
+                        return false;
+                    }
+                }
+                return true;
+            }]]>
+         </javascript>
+
+      </validator>
+
+<!-- range is deprecated use intRange instead -->
+      <validator name="range"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateIntRange"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends="integer"
+                  msg="errors.range">
+
+         <javascript><![CDATA[
+            function validateRange(form) {
+                return validateIntRange(form);
+            }]]>
+         </javascript>
+
+      </validator>
+
+      <validator name="intRange"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateIntRange"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends="integer"
+                  msg="errors.range">
+
+         <javascript><![CDATA[
+            function validateIntRange(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oRange = new intRange();
+                for (x in oRange) {
+                    var field = form[oRange[x][0]];
+                    
+                    if ((field.type == 'text' ||
+                         field.type == 'textarea') &&
+                        (field.value.length > 0)) {
+                        
+                        var iMin = parseInt(oRange[x][2]("min"));
+                        var iMax = parseInt(oRange[x][2]("max"));
+                        var iValue = parseInt(field.value);
+                        if (!(iValue >= iMin && iValue <= iMax)) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oRange[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                    focusField.focus();
+                    alert(fields.join('\n'));
+                }
+                return isValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+      <validator name="floatRange"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateFloatRange"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends="float"
+                  msg="errors.range">
+
+         <javascript><![CDATA[
+            function validateFloatRange(form) {
+                var isValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oRange = new floatRange();
+                for (x in oRange) {
+                    var field = form[oRange[x][0]];
+                    
+                    if ((field.type == 'text' ||
+                         field.type == 'textarea') &&
+                        (field.value.length > 0)) {
+                        
+                        var fMin = parseFloat(oRange[x][2]("min"));
+                        var fMax = parseFloat(oRange[x][2]("max"));
+                        var fValue = parseFloat(field.value);
+                        if (!(fValue >= fMin && fValue <= fMax)) {
+                            if (i == 0) {
+                                focusField = field;
+                            }
+                            fields[i++] = oRange[x][1];
+                            isValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                    focusField.focus();
+                    alert(fields.join('\n'));
+                }
+                return isValid;
+            }]]>
+         </javascript>
+
+      </validator>
+
+      <validator name="creditCard"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateCreditCard"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.creditcard">
+
+         <javascript><![CDATA[
+            function validateCreditCard(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oCreditCard = new creditCard();
+                for (x in oCreditCard) {
+                    if ((form[oCreditCard[x][0]].type == 'text' ||
+                         form[oCreditCard[x][0]].type == 'textarea') &&
+                        (form[oCreditCard[x][0]].value.length > 0)) {
+                        if (!luhnCheck(form[oCreditCard[x][0]].value)) {
+                            if (i == 0) {
+                                focusField = form[oCreditCard[x][0]];
+                            }
+                            fields[i++] = oCreditCard[x][1];
+                            bValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                    focusField.focus();
+                    alert(fields.join('\n'));
+                }
+                return bValid;
+            }
+
+            /**
+             * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
+             */
+            function luhnCheck(cardNumber) {
+                if (isLuhnNum(cardNumber)) {
+                    var no_digit = cardNumber.length;
+                    var oddoeven = no_digit & 1;
+                    var sum = 0;
+                    for (var count = 0; count < no_digit; count++) {
+                        var digit = parseInt(cardNumber.charAt(count));
+                        if (!((count & 1) ^ oddoeven)) {
+                            digit *= 2;
+                            if (digit > 9) digit -= 9;
+                        };
+                        sum += digit;
+                    };
+                    if (sum == 0) return false;
+                    if (sum % 10 == 0) return true;
+                };
+                return false;
+            }
+
+            function isLuhnNum(argvalue) {
+                argvalue = argvalue.toString();
+                if (argvalue.length == 0) {
+                    return false;
+                }
+                for (var n = 0; n < argvalue.length; n++) {
+                    if ((argvalue.substring(n, n+1) < "0") ||
+                        (argvalue.substring(n,n+1) > "9")) {
+                        return false;
+                    }
+                }
+                return true;
+            }]]>
+         </javascript>
+
+      </validator>
+
+
+      <validator name="email"
+            classname="org.apache.struts.validator.FieldChecks"
+               method="validateEmail"
+         methodParams="java.lang.Object,
+                       org.apache.commons.validator.ValidatorAction,
+                       org.apache.commons.validator.Field,
+                       org.apache.struts.action.ActionErrors,
+                       javax.servlet.http.HttpServletRequest"
+              depends=""
+                  msg="errors.email">
+
+         <javascript><![CDATA[
+            function validateEmail(form) {
+                var bValid = true;
+                var focusField = null;
+                var i = 0;
+                var fields = new Array();
+                oEmail = new email();
+                for (x in oEmail) {
+                    if ((form[oEmail[x][0]].type == 'text' ||
+                         form[oEmail[x][0]].type == 'textarea') &&
+                        (form[oEmail[x][0]].value.length > 0)) {
+                        if (!checkEmail(form[oEmail[x][0]].value)) {
+                            if (i == 0) {
+                                focusField = form[oEmail[x][0]];
+                            }
+                            fields[i++] = oEmail[x][1];
+                            bValid = false;
+                        }
+                    }
+                }
+                if (fields.length > 0) {
+                    focusField.focus();
+                    alert(fields.join('\n'));
+                }
+                return bValid;
+            }
+
+            /**
+             * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
+             * http://javascript.internet.com
+             */
+            function checkEmail(emailStr) {
+               if (emailStr.length == 0) {
+                   return true;
+               }
+               var emailPat=/^(.+)@(.+)$/;
+               var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
+               var validChars="\[^\\s" + specialChars + "\]";
+               var quotedUser="(\"[^\"]*\")";
+               var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
+               var atom=validChars + '+';
+               var word="(" + atom + "|" + quotedUser + ")";
+               var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
+               var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
+               var matchArray=emailStr.match(emailPat);
+               if (matchArray == null) {
+                   return false;
+               }
+               var user=matchArray[1];
+               var domain=matchArray[2];
+               if (user.match(userPat) == null) {
+                   return false;
+               }
+               var IPArray = domain.match(ipDomainPat);
+               if (IPArray != null) {
+                   for (var i = 1; i <= 4; i++) {
+                      if (IPArray[i] > 255) {
+                         return false;
+                      }
+                   }
+                   return true;
+               }
+               var domainArray=domain.match(domainPat);
+               if (domainArray == null) {
+                   return false;
+               }
+               var atomPat=new RegExp(atom,"g");
+               var domArr=domain.match(atomPat);
+               var len=domArr.length;
+               if ((domArr[domArr.length-1].length < 2) ||
+                   (domArr[domArr.length-1].length > 3)) {
+                   return false;
+               }
+               if (len < 2) {
+                   return false;
+               }
+               return true;
+            }]]>
+         </javascript>
+
+      </validator>
+
+   </global>
+
+</form-validation>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/web.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/WEB-INF/web.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+    version="2.4">
+
+    <!-- Make sure the secure forwards are turned on -->
+    <context-param>
+       <param-name>jpf-secure-forwards</param-name>
+       <param-value>true</param-value>
+    </context-param>
+
+    <!--
+    <context-param>
+        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
+        <param-value>client</param-value>
+    </context-param>
+
+    <context-param>
+        <description>
+            Set this flag to true if you want the JavaServer Faces
+            Reference Implementation to validate the XML in your
+            faces-config.xml resources against the DTD.  Default
+            value is false.
+        </description>
+        <param-name>com.sun.faces.validateXml</param-name>
+        <param-value>true</param-value>
+    </context-param>
+
+    <context-param>
+        <description>
+            Set this flag to true if you want the JavaServer Faces
+            Reference Implementation to verify that all of the application
+            objects you have configured (components, converters,
+            renderers, and validators) can be successfully created.
+            Default value is false.
+        </description>
+        <param-name>com.sun.faces.verifyObjects</param-name>
+        <param-value>true</param-value>
+    </context-param>
+  -->
+
+  <!-- Test Recorder Filter -->
+  <filter>
+    <filter-name>TestRecorderFilter</filter-name>
+    <filter-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter</filter-class>
+      <init-param>
+          <param-name>webapp</param-name>
+          <param-value>coreWeb</param-value>
+      </init-param>
+  </filter>
+
+  <filter>
+    <filter-name>PageFlowJspFilter</filter-name>
+    <filter-class>org.apache.beehive.netui.pageflow.PageFlowJspFilter</filter-class>
+  </filter>
+
+  <filter-mapping>
+    <filter-name>TestRecorderFilter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+
+  <filter-mapping>
+    <filter-name>PageFlowJspFilter</filter-name>
+    <url-pattern>*.jsp</url-pattern>
+    <dispatcher>FORWARD</dispatcher>
+  </filter-mapping>
+
+    <!--
+  <listener>
+      <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
+  </listener>
+    -->
+
+  <!-- Test Recorder Servlet (control channel) -->
+  <servlet>
+    <servlet-name>TestRecorderServlet</servlet-name>
+    <servlet-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet</servlet-class>
+  </servlet>
+
+  <!-- Struts Action Servlet / PageFlowController Configuration (with debugging) -->
+  <servlet>
+    <servlet-name>action</servlet-name>
+    <servlet-class>org.apache.beehive.netui.pageflow.DynamicSubappActionServlet</servlet-class>
+
+    <init-param>
+      <param-name>config</param-name>
+      <param-value>/WEB-INF/struts-config.xml</param-value>
+    </init-param>
+
+    <init-param>
+      <param-name>config/-global</param-name>
+      <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config--global.xml</param-value>
+    </init-param>
+
+    <init-param>
+      <param-name>moduleConfigLocators</param-name>
+      <param-value>moduleConfigLocator.Locator1,moduleConfigLocator.Locator2</param-value>
+    </init-param>
+
+         <!--
+            The <init-param> entry below is for Test13 which is a pure 100%
+            struts test.  The "application" param points to a properties file
+            that contains the tests error messages.  This is valid in struts.
+         -->
+        <init-param>
+            <param-name>application</param-name>
+            <param-value>miscJpf.test13.test13</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/formBeanTest1</param-name>
+            <param-value>/WEB-INF/src/formBean/test1/struts-config-formBean.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/interOp/tests</param-name>
+            <param-value>/WEB-INF/interOp/struts-config-tests.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/formBeanTest2</param-name>
+            <param-value>/WEB-INF/src/formBean/test2/struts-config-formBean.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/miscJpf/test13</param-name>
+            <param-value>/WEB-INF/src/miscJpf/test13/struts-config-test13.xml</param-value>
+        </init-param>
+
+    <init-param>
+      <param-name>debug</param-name>
+      <param-value>2</param-value>
+    </init-param>
+    <init-param>
+      <param-name>detail</param-name>
+      <param-value>2</param-value>
+    </init-param>
+    <load-on-startup>2</load-on-startup>
+  </servlet>
+
+  <!-- Struts Action Servlet Mapping -->
+
+  <!-- Note that because Struts takes the *last* mapping here as the extension to add to
+       actions posted from forms, we must have *.do come after *.jpf. -->
+  <servlet-mapping>
+    <servlet-name>action</servlet-name>
+    <url-pattern>*.jpf</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
+    <servlet-name>action</servlet-name>
+    <url-pattern>*.do</url-pattern>
+  </servlet-mapping>
+
+  <!-- Faces Servlet -->
+  <!--
+  <servlet>
+      <servlet-name>Faces Servlet</servlet-name>
+      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+      <load-on-startup> 1 </load-on-startup>
+  </servlet>
+  -->
+
+  <!-- TestRecorder Control Servlet -->
+  <servlet-mapping>
+    <servlet-name>TestRecorderServlet</servlet-name>
+    <url-pattern>/testRecorder</url-pattern>
+  </servlet-mapping>
+
+  <!-- 
+       This mapping identifies a jsp page as having JSF content.  If a
+       request comes to the server for foo.faces, the container will
+       send the request to the FacesServlet, which will expect a
+       corresponding foo.jsp page to exist containing the content.
+  <servlet-mapping>
+      <servlet-name>Faces Servlet</servlet-name>
+      <url-pattern>*.faces</url-pattern>
+  </servlet-mapping>
+  -->
+
+  <welcome-file-list>
+    <welcome-file>index.jsp</welcome-file>
+  </welcome-file-list>
+
+  <error-page>
+    <error-code>500</error-code>
+    <location>/error.jsp</location>
+  </error-page>
+
+    <jsp-config>
+      <taglib>
+          <taglib-uri>beehive-netui-tags-html.tld</taglib-uri>
+          <taglib-location>/WEB-INF/beehive-netui-tags-html.tld</taglib-location>
+      </taglib>
+      <taglib>
+          <taglib-uri>beehive-netui-tags-databinding.tld</taglib-uri>
+          <taglib-location>/WEB-INF/beehive-netui-tags-databinding.tld</taglib-location>
+      </taglib>
+      <taglib>
+          <taglib-uri>beehive-netui-tags-template.tld</taglib-uri>
+          <taglib-location>/WEB-INF/beehive-netui-tags-template.tld</taglib-location>
+      </taglib>
+      <taglib>
+          <taglib-uri>beehive-netui-tags-datagrid.tld</taglib-uri>
+          <taglib-location>/WEB-INF/beehive-netui-tags-datagrid.tld</taglib-location>
+      </taglib>
+      <!-- Mock Portal -->
+      <taglib>
+          <taglib-uri>mockportal.tld</taglib-uri>
+          <taglib-location>/WEB-INF/mockportal.tld</taglib-location>
+      </taglib>
+      <!-- Struts Tag Library Descriptors -->
+      <taglib>
+          <taglib-uri>struts-bean.tld</taglib-uri>
+          <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
+      </taglib>
+      <taglib>
+          <taglib-uri>struts-html.tld</taglib-uri>
+          <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
+      </taglib>
+        <taglib>
+            <taglib-uri>struts-logic.tld</taglib-uri>
+            <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
+        </taglib>
+    </jsp-config>
+
+   <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>Secure PageFlow - all</web-resource-name>
+        <url-pattern>/security/secure.do</url-pattern>
+        <url-pattern>/security/back_secure.do</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+  <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>Unsecure PageFlow - begin</web-resource-name>
+        <url-pattern>/security/unsecure.do</url-pattern>
+        <url-pattern>/security/back_unsecure.do</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>NONE</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+
+  <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>miniTests-pageFlowUtils-secure</web-resource-name>
+        <url-pattern>/miniTests/pageFlowUtils/secure/*</url-pattern>
+        <url-pattern>/miniTests/pageFlowUtils/secureFoo.do</url-pattern>
+        <url-pattern>*.pageFlowUtilsSecure</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+  <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>miniTests-pageFlowUtils-unsecure</web-resource-name>
+        <url-pattern>/miniTests/pageFlowUtils/unsecure/*</url-pattern>
+        <url-pattern>/miniTests/pageFlowUtils/unsecureFoo.do</url-pattern>
+        <url-pattern>*.pageFlowUtilsUnsecure</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>NONE</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+
+  <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>for SecureLinks test</web-resource-name>
+        <url-pattern>/tags/secureLinks/secure/*</url-pattern>
+        <url-pattern>/tags/secureLinks/linkToSecure/secureAction.do</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+
+  <security-role>
+      <description>Test role for /miniTests/roles</description>
+      <role-name>GoodRole1</role-name>
+  </security-role>
+  <security-role>
+      <description>Test role for /miniTests/roles</description>
+      <role-name>GoodRole2</role-name>
+  </security-role>
+  <security-role>
+      <description>Test role for /miniTests/roles</description>
+      <role-name>BadRole</role-name>
+  </security-role>
+
+    <!-- Security constraints for the jpfSecurity tests -->
+    <security-constraint>
+       <web-resource-collection>
+          <web-resource-name>Jpf Security on - filters</web-resource-name>
+          <url-pattern>/jpfSecurity/test1/secure1.do</url-pattern>
+          <url-pattern>/jpfSecurity/test2/secure1.do</url-pattern>
+          <url-pattern>/jpfSecurity/test3/secure1.do</url-pattern>
+          <url-pattern>/pageInput/test11/secure1.do</url-pattern>
+          <url-pattern>/miscJpf/bug38484/action1.do</url-pattern>
+          <url-pattern>/jpfScopedForms/test50/secure1.do</url-pattern>
+          <url-pattern>/resources/images/secureButton.jpg</url-pattern>
+          <url-pattern>/scopedJpf/jpfTest3/jpf1/begin.do</url-pattern>
+          <url-pattern>/scopedJpf/jpfTest3/jpf2/Jpf2.jpf</url-pattern>
+          <url-pattern>/singletonJpf/jpfTest9/jpf2/Jpf2.jpf</url-pattern>
+
+          </web-resource-collection>
+       <user-data-constraint>
+          <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+       </user-data-constraint>
+    </security-constraint>
+    <security-constraint>
+       <display-name>Security Constraints</display-name>
+       <web-resource-collection>
+          <web-resource-name>Jpf Security off - filters</web-resource-name>
+          <url-pattern>/jpfSecurity/test1/action2.do</url-pattern>
+          <url-pattern>/resources/jsp/done.jsp</url-pattern>
+          <url-pattern>/resources/jsp/error.jsp</url-pattern>
+          <url-pattern>/pageInput/test11/action2.do</url-pattern>
+          <url-pattern>/miscJpf/bug38484/action2.do</url-pattern>
+          <url-pattern>/jpfScopedForms/test50/action2.do</url-pattern>
+          <url-pattern>/scopedJpf/jpfTest3/jpf1/unsecure.do</url-pattern>
+          <url-pattern>/scopedJpf/jpfTest3/jpf2/unsecure.do</url-pattern>
+          <url-pattern>/singletonJpf/jpfTest9/jpf1/Jpf1.jpf</url-pattern>
+          </web-resource-collection>
+       <user-data-constraint>
+          <transport-guarantee>NONE</transport-guarantee>
+       </user-data-constraint>
+    </security-constraint>
+
+</web-app>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Begin</title>
+</head>
+<body>
+<h4>Directly Bind to a {pageFlow}</h4>
+<p style="color:green">
+This test will directly bind a textBox to a pageFlow.  When the form is submitted, the page flow will be updated.
+The results page will also directly bind to the pageFlow to get the value posted.  There is a default value specified 
+which should be shown when the form is first displayed.  The value of the default is '<b>Default</b>'.
+</p>
+<netui:form action="/next1">
+<netui:textBox dataSource="pageFlow.string" defaultValue="${pageFlow.default}"/>
+<br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b13789;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.Map;
+import java.util.ArrayList;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+
+public class Controller extends PageFlowController
+{
+    private String _string = null;
+
+    public String getString() {
+	return _string;
+    }
+    public void setString(String string) {
+	_string = string;
+    }
+
+    private String _def = "Default";
+
+    public String getDefault() {
+	return _def;
+    }
+    public void setDefault(String def) {
+	_def = def;
+    }
+	
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="next1" path="Page1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "next1",
+                path = "Page1.jsp") 
+        })
+    public Forward next1()
+    {
+	return new Forward("next1");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Page1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13789/Page1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Page1</title>
+</head>
+<body>
+<p style="color:green">
+This page directly binds to the page flow using a label
+</p>
+<hr>
+Label: <netui:label value="${pageFlow.string}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Begin</title>
+</head>
+<body>
+<h4>binding directly to a pageFlow</h4>
+<p style="color:green">
+This test binds a textbox value directly to a pageflow property.  The value is found from a property
+on the page flow.  The action called by the form takes a form bean which is ignored.  This is almost the exact same
+test as <b>13803</b>, except there the action does not have a form bean. The value then updates that property.  
+The results page shows the updated value.
+</p>
+<netui:form action="next1">
+    <netui:textBox dataSource="pageFlow.string"/>
+    <br>
+    <netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b13797;
+
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/bugs/b13797/Controller.jpf'/>", 
+        "<pageflow-object id='action:next1.do#bugs.b13797.Controller.FormBean'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='page:Page1.jsp'/>", 
+        "<pageflow-object id='forward:path#next1#Page1.jsp#@action:next1.do#bugs.b13797.Controller.FormBean@'/>", 
+        "<pageflow-object id='page:Begin.jsp'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:next1.do#bugs.b13797.Controller.FormBean@'>", 
+        "  <property value='204,170,170,136' name='elbowsX'/>", 
+        "  <property value='221,221,83,83' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='formbean:FormBean'/>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    private String _string = "String";
+
+    public String getString() {
+        return _string;
+    }
+    
+    public void setString(String string) {
+	_string = string;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "next1",
+                path = "Page1.jsp") 
+        })
+    public Forward next1(FormBean bean)
+    {
+        return new Forward("next1");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    public static class FormBean extends FormData
+    {
+        private String name;
+
+        public String getName()
+        { return this.name; }
+
+        public void setName(String name)
+        { this.name = name; }
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Page1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13797/Page1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Page1</title>
+</head>
+<body>
+<p style="color:green">
+This is the results posted from the form.  It must match what was entered in the textbox.
+</p>
+<hr>
+String Value = '<netui:label value="${pageFlow.string}"/>'
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Begin</title>
+</head>
+<body>
+<h4>Direct Binding without Form</h4>
+<p style="color:green">
+This test will post a form that binds directly to the page flow.  The action called does not take a form bean
+so the only way to post back information is through the form bean.  This is very similar to <b>b13797</b>.
+</p>
+<netui:form action="/next1">
+    <netui:textBox dataSource="pageFlow.string"/>
+    <br>
+    <netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,76 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b13803;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/bugs/b13803/Controller.jpf'/>", 
+        "<pageflow-object id='action:next1.do'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='page:Page1.jsp'/>", 
+        "<pageflow-object id='forward:path#next1#Page1.jsp#@action:next1.do@'/>", 
+        "<pageflow-object id='page:Begin.jsp'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='action:/next1.do'/>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:/next1.do@'/>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    private String _string = "String";
+    
+    public String getString() 
+    {
+        return _string;
+    }
+    public void setString(String string) 
+    {
+        _string = string;
+    }
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "next1",
+                path = "Page1.jsp") 
+        })
+    public Forward next1()
+    {
+        return new Forward("next1");
+    }
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Page1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13803/Page1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Page1</title>
+</head>
+<body>
+<h4>Results</h4>
+<p style="color:green">This binds to the results that should have been posted by the form.  You should see the results here
+</p>
+PageFlow.String: <netui:label value="${pageFlow.string}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13881/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13881/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Checkbox test</title>
+</head>
+<body>
+<h4>Checkbox Tests</h4>
+<netui:form action="/next">
+Checkbox from form: <netui:checkBox dataSource="actionForm.checkBox1" /><br />
+True Checkbox from form: <netui:checkBox dataSource="actionForm.checkBox2" /><br />
+<br />
+Checkbox from page flow: <netui:checkBox dataSource="pageFlow.checkBox" /><br />
+True Checkbox from page flow: <netui:checkBox dataSource="pageFlow.checkBox2" /><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+Checkbox from Form: <netui:label value="${pageFlow.form.checkBox1}" /><br />
+True Checkbox Form: <netui:label value="${pageFlow.form.checkBox2}" /><br />
+<br />
+Checkbox from Page Flow: <netui:label value="${pageFlow.checkBox}" /><br />
+True Checkbox from Page Flow: <netui:label value="${pageFlow.checkBox2}" /><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13881/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b13881/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,111 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b13881;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.*;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private Form _form = new Form();
+    private boolean _formCheckBox = false;
+    private boolean _formCheckBox2 = true;
+
+    public Form getForm() {
+	return _form;
+    }
+    public void setForm(Form form) {
+	_form = form;
+    }
+
+    public boolean getCheckBox() {
+	return _formCheckBox;
+    }
+    public void setCheckBox(boolean formCheckbox) {
+	_formCheckBox = formCheckbox;
+    }
+
+    public boolean getCheckBox2() {
+	return _formCheckBox2;
+    }
+    public void setCheckBox2(boolean formCheckbox) {
+	_formCheckBox2 = formCheckbox;
+    }
+
+    public static class Form extends FormData {
+	boolean _checkBox1;
+	boolean _checkBox2 = true;
+
+	public Form() {
+	    super();
+	}
+
+	public boolean getCheckBox1() {
+	    return _checkBox1;
+	}
+	public void setCheckBox1(boolean checkbox) {
+	    _checkBox1 = checkbox;
+	}
+
+	public boolean getCheckBox2() {
+	    return _checkBox2;
+	}
+	public void setCheckBox2(boolean checkbox) {
+	    _checkBox2 = checkbox;
+	}
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward next(Form form)
+    {
+	_form.setCheckBox1(form.getCheckBox1());
+	_form.setCheckBox2(form.getCheckBox2());
+	return new Forward("begin",_form);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title>Exceptions</title>
+</head>
+<body>
+<h4>Exceptions</h3>
+<netui:anchor action="throwGlobal">Global To Method</netui:anchor><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b14259;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:catch type="Controller.MyException"
+ *            method="globalHandler"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = Controller.MyException.class,
+            method = "globalHandler") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _message;
+    public String getMessage()
+    {
+        return _message;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin()
+    {
+	_message = "";
+        return new Forward( "begin" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwGlobal()
+        throws Exception
+    {
+        throw new MyException("Global Exception being Thrown");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward goHome()
+    {
+        return new Forward( "begin" );
+    }
+
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="ErrorPage.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage",
+                path = "ErrorPage.jsp") 
+        })
+    protected Forward globalHandler(MyException ex, String actionName,
+					  String message, Object form)
+    {
+        _message = "caught " + ex + " in globalHandler";
+        return new Forward( "errorPage" );
+    }
+
+    public static class MyException extends Exception
+    {
+	public MyException() {
+	    super();
+	}
+	public MyException(String msg) {
+	    super(msg);
+	}
+	public String toString() {
+	    return "[MyException]";
+	}
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/ErrorPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14259/ErrorPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Error Page</title>
+</head>
+<body>
+<h4>Report Exception</h4>
+Page Flow Message: <netui:label value="${pageFlow.message}"/><br />
+Exception Tag Message <hr/><netui:exceptions showMessage="true"/><hr />
+Exception Tag No StackTrace<hr/><netui:exceptions showStackTrace="false"/><hr/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14683/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14683/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Hit a JSP Directly</title>
+</head>
+<body>
+<h4>Hit a JSP Directly</h4>
+<p style="color:green">
+In this example, we hit the JSP directly before the page flow is created.  There is a label which binds to 
+a page flow variable.  The JSP filter needs to insure that the page flow is created.  Below you should see the 
+value '<b>String</b>'.  This is the only page of the test.
+</p>
+Value: '<netui:label value="${pageFlow.data}" />'
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14683/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14683/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b14683;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.*;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/bugs/b14683/Controller.jpf'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='page:Begin.jsp'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:begin.do@'/>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    public String getData() {
+        return "String";
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14754/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14754/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Array Type Binding</title>
+</head>
+<body>
+<h4>Array Type Binding</h4>
+<p style="color:green">
+This will bind a label to the 4th element of an array inside a page flow.  The value should be '<b>5</b>'.   This is the only page
+hit during this test.
+</p>
+Element [4]: <netui:label value="${pageFlow.foo[4]}" />
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14754/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14754/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b14754;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/bugs/b14754/Controller.jpf'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='page:Begin.jsp'/>", 
+        "<pageflow-object id='forward:path#page#Begin.jsp#@action:begin.do@'/>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    String[] _values = {"1", "2", "3", "4", "5", "6"};
+    
+    public String[] getFoo() {
+        return _values;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin(){
+        return new Forward("page");
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14764/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14764/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title>Compound Expressions</title>
+</head>
+<body>
+<h4>Compound Expression</h4>
+<p style="color:green">
+This test demonstrates binding to multiple page flow variables inside
+the same label.  The value should be 'lastname, firstname', where the
+names are bound to page flow variables.  This is the only page hit in 
+this test.
+</p>
+Name: <netui:label value="${pageFlow.lastName}, ${pageFlow.firstName}" />
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14764/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14764/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b14764;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    String _last = "Blow";
+    String _first = "Joe";
+
+    public String getFirstName() {
+	return _first;
+    }
+    public String getLastName() {
+	return _last;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin(){
+        return new Forward("page");
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14781/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14781/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Select Binding to PageFlow</title>
+</head>
+<body>
+<h4>Select Binding to PageFlow</h4>
+<p style="color:green">
+This is a test of the select binding directly to the page flow.  The
+dataSource, optionsDataSource and defaultValue all come from the page flow.
+This page then posts the form in a postback to the same page.  You should
+option selected below the form.
+</p>
+<netui:form action="postback">
+Select Box: <netui:select dataSource="pageFlow.selected"
+ optionsDataSource="${pageFlow.options}" defaultValue="${pageFlow.defaultValue}"/>
+ <br>
+<netui:button type="submit">Submit</netui:button>
+</netui:form><br>
+Selected: <netui:label value="${pageFlow.selected}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14781/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14781/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,76 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b14781;
+
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String _selected = null;
+    String[] _options = {"Option 1", "Option 2", "Option 3", "Option 4"};
+    String _defaultValue = _options[2];
+
+    public String getSelected() {
+	return _selected;
+    }
+    public void setSelected(String selected) {
+	_selected = selected;
+    }
+
+    public String[] getOptions() {
+	return _options;
+    }
+    
+    public String getDefaultValue() {
+	return _defaultValue;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14787/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14787/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Default Value Test</title>
+</head>
+<body>
+<netui:form action="/postback">
+Select Box: <netui:select dataSource="pageFlow.selected"
+ optionsDataSource="${pageFlow.options}" defaultValue="${pageFlow.defaultValue}"/><br />
+Textbox 1: <netui:textBox dataSource="pageFlow.text1" defaultValue="${pageFlow.text1Default}"/><br />
+Textbox 2: <netui:textBox dataSource="pageFlow.text2" defaultValue="${pageFlow.text2Default}"/> (null data source) <br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form><br />
+<b>Actual PageFlowController values</b><br/>
+text2Default: <netui:label value="${pageFlow.text2Default}"/><br/>
+text2: <netui:label value="${pageFlow.text2}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14787/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14787/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,111 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b14787;
+
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+
+    String[] _options = {"Option 1", "Option 2", "Option 3", "Option 4"};
+    String _defaultValue = _options[2];
+    String _selected = _options[3];
+
+    String _text1 = "text1";
+    String _text1Default = "text1Default";
+
+    String _text2 = null;
+    String _text2Default = "text2Default";
+
+
+    public String getSelected() {
+	return _selected;
+    }
+    public void setSelected(String selected) {
+	_selected = selected;
+    }
+
+    public String[] getOptions() {
+	return _options;
+    }
+    
+    public String getDefaultValue() {
+	return _defaultValue;
+    }
+
+    public String getText1() {
+	return _text1;
+    }
+    public void setText1(String text1) {
+	_text1 = text1;
+    }
+
+    public String getText1Default() {
+	return _text1Default;
+    }
+
+    public String getText2() {
+	return _text2;
+    }
+    public void setText2(String text2) {
+	_text2 = text2;
+    }
+
+    public String getText2Default() {
+	return _text2Default;
+    }
+
+    public static class Form extends FormData 
+    {
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14826/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14826/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<netui:form action="/postback">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <netui:select multiple="true" dataSource="pageFlow.selected"
+    optionsDataSource="${pageFlow.options}"
+    defaultValue="${pageFlow.defaultValue}"/>
+  </td></tr>
+<netui:button type="submit">Submit</netui:button>
+</td></tr>
+</table>
+</netui:form>
+<br />
+<b>Select 1:</b><br />
+<db:repeater dataSource="pageFlow.selected">
+<db:repeaterItem>
+  <netui:label value="${container.item}"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14826/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b14826/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b14826;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _options = {"Option 1", "Option 2", "Option 3", "Option 4"};
+    String[] _selected = {"Option 2", "Option 4"};
+    String[] _selected2 = {"Option 1", "Option 3"};
+    String _defaultValue = _options[2];
+    ArrayList _colOptions;
+
+    public String[] getSelected() {
+	return _selected;
+    }
+    public void setSelected(String[] selected) {
+	_selected = selected;
+    }
+
+    public String[] getSelected2() {
+	return _selected2;
+    }
+    public void setSelected2(String[] selected) {
+	_selected2 = selected;
+    }
+
+    public String[] getOptions() {
+	return _options;
+    }
+
+    public ArrayList getColOptions() {
+	return _colOptions;
+    }
+    
+    public String getDefaultValue() {
+	return _defaultValue;
+    }
+
+
+    public static class Form extends FormData {
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_colOptions = new ArrayList();
+	_colOptions.add("Option 1");
+	_colOptions.add("Option 2");
+	_colOptions.add("Option 3");
+	_colOptions.add("Option 4");
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15095/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15095/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>check box bug</title>
+</head>
+<netui:form action="/postback">
+   Checkbox <netui:checkBox dataSource="actionForm.check" defaultValue="${pageFlow.defaultCheck}"/><br />
+   <netui:button type="submit">Submit</netui:button>
+</netui:form>
+<hr />
+Value: <netui:label value="${pageFlow.value}"/>
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15095/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15095/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15095;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    // CheckBox
+    private boolean _defaultCheck = true;
+    public boolean getDefaultCheck() {
+	return _defaultCheck;
+    }
+
+    private String _value = "";
+    public String getValue() {
+	return _value;
+    }
+
+    public static class Form extends FormData
+    {
+	// Checkbox
+	private String _check;
+	public void setCheck(String check) {
+	    _check = check;
+	}
+	public String getCheck() {
+	    return _check;
+	}
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin(){
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward postback(Form form)
+    {
+        _value = form.getCheck();
+        return new Forward("begin",form);
+    }
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15174/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15174/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Bug 25</title>
+</head>
+<body>
+<netui:anchor action="/postback">Postback through Action
+<netui:parameter name="foo" value="bar"/><br />
+</netui:anchor>
+<netui:anchor href="hrefPostback.do">Postback through URL
+<netui:parameter name="foo" value="baz"/><br />
+</netui:anchor>
+<hr />
+Action: <netui:label value="${pageFlow.action}"/><br />
+Foo: <netui:label value="${pageFlow.foo}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15174/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15174/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15174;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String _action;
+    public String getAction() {
+	return _action;
+    }
+
+    String _foo;
+    public String getFoo() {
+	return _foo;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	HttpServletRequest req = getRequest();
+	_action = "postback";
+	_foo = req.getParameter("foo");
+	if (_foo == null)
+	    _foo = "[Not Found]";
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward hrefPostback()
+    {
+	HttpServletRequest req = getRequest();
+	_foo = req.getParameter("foo");
+	if (_foo == null)
+	    _foo = "[Not Found]";
+	_action = "hrefPostback";
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_action = "begin";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15175/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15175/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Form Parameters</title>
+</head>
+<body>
+<netui:form action="postback">
+<netui:parameter name="foo" value="form-parameter-bar"/><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<hr />
+Action: <netui:label value="${pageFlow.action}"/><br />
+Foo: <netui:label value="${pageFlow.foo}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15175/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15175/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,74 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15175;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String _action;
+    public String getAction() {
+	return _action;
+    }
+
+    String _foo;
+    public String getFoo() {
+	return _foo;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	HttpServletRequest req = getRequest();
+	_action = "postback";
+	_foo = req.getParameter("foo");
+	if (_foo == null)
+	    _foo = "[Not Found]";
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_action = "begin";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Test of Anchor</title>
+</head>
+<body>
+<h4>Anchor Tests</h4>
+<netui:anchor forward="myForward">Forward</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15234;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ * @jpf:forward name="myForward" path="myForward.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp"),
+        @Jpf.Forward(
+            name = "myForward",
+            path = "myForward.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/myForward.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15234/myForward.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>myForward</title>
+</head>
+<body>
+<h4>My Forward</h4>
+<netui:anchor forward="begin">Home</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Passing a Bad Form</title>
+</head>
+<body>
+<h4>Passing a Bad Form</h4>    
+<netui:anchor action="getUserInfo">Get User</netui:anchor>
+<hr />
+User: <netui:label value="${pageFlow.user}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15392;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    public static class Form extends FormData
+    {
+    }
+
+    Form _userInfo = new Form();
+
+    private String _user;
+    public String getUser() {
+	return _user;
+    }
+    public void setUser(String user) {
+	_user = user;
+    }
+    
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward done(bugs.b15392.nesting.Controller.Form form)
+    {
+	_user = "Name: " + form.getLastName() + ", " + form.getFirstName();
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nesting/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nesting/Controller.jpf") 
+        })
+    public Forward getUserInfo()
+    {
+	return new Forward("nest",_userInfo);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_user = "Not Defined";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/nesting/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/nesting/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<hr />
+<netui:form action="submit">
+First Name: <netui:textBox dataSource="firstName"/><br />
+Last Name: <netui:textBox dataSource="lastName"/><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/nesting/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15392/nesting/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15392.nesting;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    nested = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    public static class Form extends FormData
+    {
+	String _lastName;
+	String _firstName;
+
+	public String getLastName() {
+	    return _lastName;
+	}
+	public void setLastName(String lastName) {
+	    _lastName = lastName;
+	}
+
+	public String getFirstName() {
+	    return _firstName;
+	}
+	public void setFirstName(String firstName) {
+	    _firstName = firstName;
+	}
+	
+	public String toString() {
+	    return _lastName + ", " + _firstName;
+	}
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="done" return-form-type="Form"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "done",
+                outputFormBeanType = Form.class) 
+        })
+    public Forward submit(Form form)
+    {
+	return new Forward("done",form);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin(Form form)
+    {
+	return new Forward("begin",form);
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15430/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15430/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Checkbox Binding Errors</title>
+</head>
+<body>
+<h4>Checkbox Binding Errors</h4>
+<p style="color:green">
+This test contains two binding errors. One binds to the actionForm and one 
+binds to the pageFlow.  These errors should be seend in the page.  This is the only page of the test.
+</p>
+<netui:form action="/next">
+Checkbox from form: <netui:checkBox dataSource="actionForm.bad" /><br />
+True Checkbox from form: <netui:checkBox dataSource="actionForm.checkBox2" /><br />
+<br />
+Checkbox from page flow: <netui:checkBox dataSource="pageFlow.bad" /><br />
+True Checkbox from page flow: <netui:checkBox dataSource="pageFlow.checkBox2" /><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+Checkbox from Form: <netui:label value="${pageFlow.form.checkBox1}" /><br />
+True Checkbox Form: <netui:label value="${pageFlow.form.checkBox2}" /><br />
+<br />
+Checkbox from Page Flow: <netui:label value="${pageFlow.checkBox}" /><br />
+True Checkbox from Page Flow: <netui:label value="${pageFlow.checkBox2}" /><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15430/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15430/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15430;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.*;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private Form _form = new Form();
+    private boolean _formCheckBox = false;
+    private boolean _formCheckBox2 = true;
+
+    public Form getForm() {
+	return _form;
+    }
+    public void setForm(Form form) {
+	_form = form;
+    }
+
+    public boolean getCheckBox() {
+	return _formCheckBox;
+    }
+    public void setCheckBox(boolean formCheckbox) {
+	_formCheckBox = formCheckbox;
+    }
+
+    public boolean getCheckBox2() {
+	return _formCheckBox2;
+    }
+    public void setCheckBox2(boolean formCheckbox) {
+	_formCheckBox2 = formCheckbox;
+    }
+
+    public static class Form extends FormData {
+	boolean _checkBox1;
+	boolean _checkBox2 = true;
+
+	public boolean getCheckBox1() {
+	    return _checkBox1;
+	}
+	public void setCheckBox1(boolean checkbox) {
+	    _checkBox1 = checkbox;
+	}
+
+	public boolean getCheckBox2() {
+	    return _checkBox2;
+	}
+	public void setCheckBox2(boolean checkbox) {
+	    _checkBox2 = checkbox;
+	}
+    }
+
+    @Jpf.Action(
+        )
+    public Forward next(Form form)
+    {
+	_form.setCheckBox1(form.getCheckBox1());
+	_form.setCheckBox2(form.getCheckBox2());
+	return new Forward("begin",form);
+    }
+
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15454/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15454/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<netui:form action="/postback">
+<db:repeater dataSource="pageFlow.info">
+<db:repeaterItem>
+  <netui:textBox dataSource="container.item"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+<b>Results:</b><br />
+<db:repeater dataSource="pageFlow.info">
+<db:repeaterItem>
+  <netui:label value="${container.item}"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15454/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15454/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15454;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _info = {"Option 1", "Option 2", "Option 3", "Option 4"};
+
+    public String[] getInfo() {
+	return _info;
+    }
+    public void setInfo(String[] info) {
+	_info = info;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15574/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15574/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<netui:form action="/postback">
+<b>Bound to the page flow</b><br />
+<db:repeater dataSource="pageFlow.info">
+<db:repeaterItem>
+  <netui:textBox dataSource="container.item"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+<b>Bound to the form</b><br />
+<db:repeater dataSource="pageFlow.info">
+<db:repeaterItem>
+  <netui:textBox dataSource="container.item"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+<b>Results:</b><br />
+<db:repeater dataSource="pageFlow.info">
+<db:repeaterItem>
+  <netui:label value="${container.item}"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15574/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15574/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15574;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _info = {"1", "2", "3", "4"};
+
+    public String[] getInfo() {
+	return _info;
+    }
+    public void setInfo(String[] info) {
+	_info = info;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15590/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15590/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<netui:form action="/postback">
+<b>Bound to the form</b><br />
+Name <netui:textBox dataSource="actionForm.name"/><br />
+<db:repeater dataSource="actionForm.strings">
+<db:repeaterItem>
+  <netui:textBox dataSource="container.item"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+<b>Results:</b><br />
+<db:repeater dataSource="pageFlow.strings">
+<db:repeaterItem>
+  <netui:label value="${container.item}"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15590/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15590/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15590;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    public static class Form extends FormData
+    {
+    String[] _strings = new String[4];
+	String _name = "Name";
+
+	public Form() {
+	    super();
+	}
+
+	public Form(String[] strings) {
+	    _strings = strings;
+	}
+	
+	public String[] getStrings() {
+	    return _strings;
+	}
+	public void setStrings(String[] strings) {
+	    _strings = strings;
+	}
+
+	public String getName() {
+	    return _name;
+	}
+	public void setName(String name) {
+	    _name = name;
+	}
+    }
+
+    String[] _strings = {"String 1", "String 2", "String 3", "String 4"};
+    public String[] getStrings() {
+	return _strings;
+    }
+    public void setStrings(String[] strings) {
+	_strings = strings;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+	_strings = form.getStrings();
+        return new Forward("begin",form);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin",new Form(_strings));
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15642/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15642/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<netui:form action="/postback">
+Checkbox <netui:checkBox dataSource="actionForm.checked"/><br />
+Checkbox PageFlowController <netui:checkBox dataSource="pageFlow.checked"/><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15642/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15642/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15642;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    public static class Form extends FormData
+    {
+	boolean _check;
+
+	public void setChecked(boolean check) {
+	    _check = check;
+	}
+	public boolean isChecked() {
+	    return _check;
+	}
+    }
+
+    boolean _check;
+
+    public void setChecked(boolean check) {
+	_check = check;
+    }
+    public boolean isChecked() {
+	return _check;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin",form);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15964/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15964/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Parameter Test</title>
+</head>
+<body>
+<netui:anchor action="postback">Postback
+<netui:parameter name="foo" value="param-foo"/>
+<netui:parameter name="bar" value="param-bar"/>
+<netui:parameter name="baz" value="param-baz"/>
+</netui:anchor>
+<hr />
+Foo <netui:label value="${param.foo}"/><br />
+Bar <netui:label value="${param.bar}"/><br />
+Baz <netui:label value="${param.baz}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15964/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b15964/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b15964;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16092/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16092/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Repeater Error</title>
+</head>
+<h4>Repeater Error</h4>
+<b>With repeaterItem</b><br />
+<db:repeater dataSource="pageFlow.checks">
+    <db:repeaterItem>
+       Value: <netui:label value="${container.item}"/><br />
+    </db:repeaterItem>
+</db:repeater>
+<hr />
+<b>Without repeaterItem</b><br />
+<db:repeater dataSource="pageFlow.checks">
+       Value: <netui:label value="${container.item}"/><br />
+</db:repeater>
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16092/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16092/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b16092;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private String[] _checks = {};
+    public String[] getChecks() {
+	return _checks;
+    }
+    public void setChecks(String[] checks) {
+	_checks = checks;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin(){
+        return new Forward("begin");
+    }
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16451/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16451/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Post A Form</title>
+<!-- target -->
+<netui:base />
+</head>
+<body>
+<h4>Post A Form</h4>
+<netui:form action="postback" style="border: solid 1pt;padding: 10pt">
+Text:<netui:textBox dataSource="actionForm.foo"/><br />
+<netui:button>Submit</netui:button>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16451/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b16451/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b16451;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    public static class Form extends FormData
+    {
+        private String _foo;
+        public String getFoo() {
+            return _foo;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17287/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17287/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Cell Repeater</title>
+</head>
+<body>
+<b>Error in Cell Repeater - Invalid rows value</b>
+<%
+    try
+    {
+%>
+<db:cellRepeater dataSource="pageFlow.data" rows="${pageFlow.rows}">
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+<%
+    }
+    catch(Exception e)
+    {
+        if(e instanceof javax.servlet.jsp.el.ELException)
+            out.write("success -- caught ELException; assumed to be related to invalid String to int type conversion");
+        else out.write("fail -- exception was not servlet exception");      
+    }
+%>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17287/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17287/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b17287;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private int[] _data = {1,2,3,4,5,6,7,8,9,10};
+
+    public int[] getData()
+    {
+	    return _data;
+    }
+
+    private String _rows = "foobar";
+    
+    public String getRows() {
+        return _rows;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17461/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17461/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Padding Repeater Errors</title>
+</head>
+<body>
+<h4>Padding Repeater Errors</h4>
+<b>Binding Errors</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad minRepeat="${min}" maxRepeat="${max}" padText="${text}"/>
+</db:repeater>
+<hr />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17461/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b17461/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b17461;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _strings = {"String 1", "String 2", "String 3", "String 4"};
+    public String[] getStrings() {
+	return _strings;
+    }
+    public void setStrings(String[] strings) {
+	_strings = strings;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18025/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18025/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+package bugs.b18025;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller
+    extends PageFlowController
+{
+    private final String finalString = "a final string";
+    private String nonFinalString = "a non-final string";
+
+    public String getFinalString() {
+        return finalString;
+    }
+
+    public void setNonFinalString(String nfs) {
+        nonFinalString = nfs;
+    }
+    public String getNonFinalString() {
+        return nonFinalString;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18025/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18025/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>final property test</title>
+</head>
+<body>
+<br/>
+A final string: <b>'<netui:label value="${pageFlow.finalString}"/>'</b>
+<br/>
+A non-final string: <b>'<netui:label value="${pageFlow.nonFinalString}"/>'</b>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18067/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18067/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Format bug</title>
+</head>
+<body>
+<h4>Format bug</h4>
+<netui:label value="${pageFlow.letters}">
+        <netui:formatString pattern="$##-#####-#" truncate="true"/>
+</netui:label>
+<br />
+<netui:label value="${pageFlow.letters}">
+        <netui:formatString pattern="$$#-#####-#" truncate="true"/>
+</netui:label>
+<hr />
+<b>Should be</b><br />
+#A-BCDEF-G<br />
+$A-BCDEF-G<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18067/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18067/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b18067;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+    public String getLetters() {
+        return _letters;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18068/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18068/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Format Error</title>
+</head>
+<body>
+<h4>Format Error -- Should report an error for an invalid type</h4>
+<netui:label value="12345.67">
+     <netui:formatNumber language="EN" country = "US" type="foo"
+     pattern="#.00"/>
+</netui:label>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18068/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b18068/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b18068;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b22957/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b22957/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b22957;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * 
+ */
+public class Controller extends PageFlowController
+{
+    private String lastAction = null;
+    public String getLastAction() {
+        return lastAction;
+    }
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        lastAction = "begin";
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward foo()
+    {
+        lastAction = "foo";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b22957/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b22957/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 22957
+        </title>
+    </head>
+    <netui:body>
+         <netui:form action="foo"> 
+            <netui:anchor formSubmit="true">Create</netui:anchor> 
+        </netui:form>
+        <netui:label value="${pageFlow.lastAction}"/>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Thu Apr 24 08:42:38 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b28421;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control DbStuff
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:defaultContent.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:template.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:defaultContent.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:template.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends org.apache.beehive.netui.pageflow.PageFlowController
+{
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/defaultContent.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/defaultContent.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,6 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<b>This is the default content.</b>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="template.jsp">
+   <netui-template:setAttribute name="title" value="Bug Index"/>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28421/template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            <netui-template:attribute name="title" defaultValue="Unknown Page"></netui-template:attribute>
+        </title>
+    </head>
+    <body>
+        <h4>
+            <netui-template:attribute name="title" defaultValue="Unknown Page"></netui-template:attribute>
+        </h4>
+        <netui-template:includeSection name="content" defaultPage="defaultContent.jsp">
+        </netui-template:includeSection>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28633/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28633/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+<body>
+<h4>Visibility Error</h4>
+<p style="color:green">
+This tests the default binding of an expression in the visible tag.  The default is 'false' so
+the text "This is text..." should not be visible below.  This is a single page test.
+</p>
+<hr>
+<netui-template:visible visible="${foo}">
+This is text...
+</netui-template:visible>
+</body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Thu Apr 24 08:42:38 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b28774;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control DbStuff
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:defaultContent.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:template.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:defaultContent.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:template.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends org.apache.beehive.netui.pageflow.PageFlowController
+{
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug1/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug1/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Thu Apr 24 08:42:38 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b28774.bug1;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control DbStuff
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:defaultContent.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:template.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:defaultContent.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:template.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends org.apache.beehive.netui.pageflow.PageFlowController
+{
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug1/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug1/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="bad.jsp">
+   <netui-template:setAttribute name="title" value="Index"/>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug2/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug2/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Thu Apr 24 08:42:38 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b28774.bug2;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control DbStuff
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:defaultContent.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:template.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:defaultContent.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:template.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends org.apache.beehive.netui.pageflow.PageFlowController
+{
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug2/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/bug2/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="../template.jsp">
+   <netui-template:setAttribute name="title" value="Index"/>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/defaultContent.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/defaultContent.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,6 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<b>This is the default content.</b>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="../bad.jsp">
+   <netui-template:setAttribute name="title" value="Index"/>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28774/template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            <netui-template:attribute name="title" defaultValue="Unknown Page"></netui-template:attribute>
+        </title>
+    </head>
+    <body>
+        <h4>
+            <netui-template:attribute name="title" defaultValue="Unknown Page"></netui-template:attribute>
+        </h4>
+        <netui-template:includeSection name="content" defaultPage="/bugs/b28774/defaultContent.jsp">
+        </netui-template:includeSection>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Thu Apr 24 08:42:38 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b28775;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control DbStuff
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:defaultContent.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:template.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:defaultContent.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:template.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends org.apache.beehive.netui.pageflow.PageFlowController
+{
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Thu Apr 24 08:42:38 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b28775.bug1;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control DbStuff
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:defaultContent.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:template.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:defaultContent.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:template.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends org.apache.beehive.netui.pageflow.PageFlowController
+{
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="template.jsp">
+   <netui-template:setAttribute name="title" value="Index"/>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/bug1/template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            <netui-template:attribute name="title" defaultValue="Unknown Page"></netui-template:attribute>
+        </title>
+    </head>
+    <body>
+        <h4>
+            <netui-template:attribute name="title" defaultValue="Unknown Page"></netui-template:attribute>
+        </h4>
+        <netui-template:includeSection name="content" defaultPage="../defaultContent.jsp">
+        </netui-template:includeSection>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/defaultContent.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/defaultContent.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,6 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<b>This is the default content.</b>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="template.jsp">
+   <netui-template:setAttribute name="title" value="Index"/>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b28775/template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            <netui-template:attribute name="title" defaultValue="Unknown Page"></netui-template:attribute>
+        </title>
+    </head>
+    <body>
+        <h4>
+            <netui-template:attribute name="title" defaultValue="Unknown Page"></netui-template:attribute>
+        </h4>
+        <netui-template:includeSection name="content" defaultPage="bad.jsp">
+        </netui-template:includeSection>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b30458/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b30458/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b30458;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String[] _stuff = {"Foo", "Bar", "Baz", "Blee"};
+
+    public String[] getStuff() {return _stuff;}
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b30458/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b30458/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 30458
+        </title>
+    </head>
+    <netui:body>
+        <netui-data:getData resultId="foo" value="${ pageFlow.stuff}" />
+        <netui-data:repeater dataSource="pageContext.foo">
+            <netui-data:repeaterHeader><table cellspacing="0" cellpadding="4" border="1"
+                class="tablebody" ></netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+        </netui-data:repeater>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33322/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33322/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b33322;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private int foo = 12;
+    public int getFoo() {
+        return foo;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new org.apache.beehive.netui.pageflow.Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33322/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33322/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 33322
+        </title>
+    </head>
+    <netui:body>
+    <netui:label value="${pageFlow.foo}"><netui:formatNumber pattern="999.00.999"/></netui:label><br />
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33704/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33704/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b33704;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private java.util.Calendar foo;
+    public java.util.Calendar getFoo() {
+        return foo;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        foo = java.util.Calendar.getInstance();
+        foo.set(2003,4,23);
+        return new org.apache.beehive.netui.pageflow.Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33704/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33704/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 33322
+        </title>
+    </head>
+    <body>
+    Date: <netui:label value="${pageFlow.foo}"><netui:formatDate pattern="MM/dd/yyyy"/></netui:label><br />
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33807/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33807/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,52 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b33807;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+
+    public static class Foo implements java.io.Serializable{
+        public String toString() {return "FOO";}
+    }
+
+    private Foo foo;
+    public Foo getFoo() {
+        return foo;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        foo = new Foo();
+        return new org.apache.beehive.netui.pageflow.Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33807/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b33807/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 33322
+        </title>
+    </head>
+    <netui:body>
+    Date: <netui:label value="${pageFlow.foo}"><netui:formatDate pattern="MM/dd/yyyy"/></netui:label><br />
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34263/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34263/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,361 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b34263;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/bugs/b34263/Controller.jpf"/>
+ * <pageflow-object id="page:begin.jsp">
+ *   <property value="280" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:bugs.b34263.Controller.Search"/>
+ * <pageflow-object id="formbeanprop:bugs.b34263.Controller.Search#query#java.lang.String"/>
+ * <pageflow-object id="formbean:bugs.b34263.Controller.Name"/>
+ * <pageflow-object id="formbeanprop:bugs.b34263.Controller.Name#firstName#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:bugs.b34263.Controller.Name#lastName#java.lang.String"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#begin#begin.jsp#@action:begin.do@">
+ *   <property value="136,190,190,244" name="elbowsX"/>
+ *   <property value="112,112,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="begin" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:EnterName.do#bugs.b34263.Controller.Name">
+ *   <property value="440" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:EnterSearch.do#bugs.b34263.Controller.Search">
+ *   <property value="440" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:EnterAdvancedSearch.do#bugs.b34263.Controller.Search">
+ *   <property value="440" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:DeleteName.do#bugs.b34263.Controller.Name">
+ *   <property value="440" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:begin.jsp@#@action:EnterName.do#bugs.b34263.Controller.Name@">
+ *   <property value="316,360,360,404" name="elbowsX"/>
+ *   <property value="112,112,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:begin.jsp@#@action:DeleteName.do#bugs.b34263.Controller.Name@">
+ *   <property value="316,360,360,404" name="elbowsX"/>
+ *   <property value="123,123,172,172" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:begin.jsp@#@action:EnterSearch.do#bugs.b34263.Controller.Search@">
+ *   <property value="316,360,360,404" name="elbowsX"/>
+ *   <property value="123,123,252,252" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:begin.jsp@#@action:EnterAdvancedSearch.do#bugs.b34263.Controller.Search@">
+ *   <property value="316,360,360,404" name="elbowsX"/>
+ *   <property value="123,123,332,332" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:begin.jsp@#@action:begin.do@">
+ *   <property value="244,190,190,136" name="elbowsX"/>
+ *   <property value="101,101,101,101" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#begin.do#@action:EnterName.do#bugs.b34263.Controller.Name@">
+ *   <property value="476,476,136,136" name="elbowsX"/>
+ *   <property value="101,156,156,101" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#begin.do#@action:DeleteName.do#bugs.b34263.Controller.Name@">
+ *   <property value="476,476,306,136" name="elbowsX"/>
+ *   <property value="172,123,123,123" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#begin.do#@action:EnterSearch.do#bugs.b34263.Controller.Search@">
+ *   <property value="476,476,306,136" name="elbowsX"/>
+ *   <property value="252,123,123,123" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#begin.do#@action:EnterAdvancedSearch.do#bugs.b34263.Controller.Search@">
+ *   <property value="476,476,306,136" name="elbowsX"/>
+ *   <property value="332,123,123,123" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ * 
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/bugs/b34263/Controller.jpf'/>",
+        "<pageflow-object id='page:begin.jsp'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:bugs.b34263.Controller.Search'/>",
+        "<pageflow-object id='formbeanprop:bugs.b34263.Controller.Search#query#java.lang.String'/>",
+        "<pageflow-object id='formbean:bugs.b34263.Controller.Name'/>",
+        "<pageflow-object id='formbeanprop:bugs.b34263.Controller.Name#firstName#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:bugs.b34263.Controller.Name#lastName#java.lang.String'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#begin#begin.jsp#@action:begin.do@'>",
+        "  <property value='136,190,190,244' name='elbowsX'/>",
+        "  <property value='112,112,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='begin' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:EnterName.do#bugs.b34263.Controller.Name'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:EnterSearch.do#bugs.b34263.Controller.Search'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:EnterAdvancedSearch.do#bugs.b34263.Controller.Search'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:DeleteName.do#bugs.b34263.Controller.Name'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:begin.jsp@#@action:EnterName.do#bugs.b34263.Controller.Name@'>",
+        "  <property value='316,360,360,404' name='elbowsX'/>",
+        "  <property value='112,112,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:begin.jsp@#@action:DeleteName.do#bugs.b34263.Controller.Name@'>",
+        "  <property value='316,360,360,404' name='elbowsX'/>",
+        "  <property value='123,123,172,172' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:begin.jsp@#@action:EnterSearch.do#bugs.b34263.Controller.Search@'>",
+        "  <property value='316,360,360,404' name='elbowsX'/>",
+        "  <property value='123,123,252,252' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:begin.jsp@#@action:EnterAdvancedSearch.do#bugs.b34263.Controller.Search@'>",
+        "  <property value='316,360,360,404' name='elbowsX'/>",
+        "  <property value='123,123,332,332' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:begin.jsp@#@action:begin.do@'>",
+        "  <property value='244,190,190,136' name='elbowsX'/>",
+        "  <property value='101,101,101,101' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#begin.do#@action:EnterName.do#bugs.b34263.Controller.Name@'>",
+        "  <property value='476,476,136,136' name='elbowsX'/>",
+        "  <property value='101,156,156,101' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#begin.do#@action:DeleteName.do#bugs.b34263.Controller.Name@'>",
+        "  <property value='476,476,306,136' name='elbowsX'/>",
+        "  <property value='172,123,123,123' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#begin.do#@action:EnterSearch.do#bugs.b34263.Controller.Search@'>",
+        "  <property value='476,476,306,136' name='elbowsX'/>",
+        "  <property value='252,123,123,123' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#begin.do#@action:EnterAdvancedSearch.do#bugs.b34263.Controller.Search@'>",
+        "  <property value='476,476,306,136' name='elbowsX'/>",
+        "  <property value='332,123,123,123' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    public boolean advanced = true;
+    public boolean verbose = false;
+    
+   /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="begin.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.do") 
+        })
+    protected Forward EnterName(Name form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="begin.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.do") 
+        })
+    protected Forward EnterSearch(Search form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="begin.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.do") 
+        })
+    protected Forward EnterAdvancedSearch(Search form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="begin.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.do") 
+        })
+    protected Forward DeleteName(Name form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class Search extends FormData
+    {
+        private java.lang.String query;
+
+
+        public void setQuery(java.lang.String query)
+        {
+            this.query = query;
+        }
+
+        public java.lang.String getQuery()
+        {
+            return this.query;
+        }
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class Name extends FormData
+    {
+        private java.lang.String lastName;
+
+        private java.lang.String firstName;
+
+
+        public void setFirstName(java.lang.String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public java.lang.String getFirstName()
+        {
+            return this.firstName;
+        }
+
+        public void setLastName(java.lang.String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public java.lang.String getLastName()
+        {
+            return this.lastName;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34263/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34263/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 34263
+        </title>
+    </head>
+    <netui:body>
+        <netui:form action="EnterName" focus="" tagId="FormOne">
+            <table>
+                <tr>
+                    <td>LastName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.lastName"></netui:textBox>
+                    </td>
+                </tr>
+                <tr>
+                    <td>FirstName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.firstName"></netui:textBox>
+                    </td>
+                </tr>
+            </table>
+            <netui:button value="Enter" tagId="NameEnter"></netui:button>
+            <netui:button type="submit" value="Delete" action="DeleteName" tagId="NameDelete"></netui:button>
+        </netui:form>
+        <netui:form action="EnterSearch" focus="" tagId="FormTwo">
+            <table>
+                <tr>
+                    <td>Query:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.query"></netui:textBox>
+                    </td>
+                </tr>
+            </table>
+            <netui:button value="Enter Search" tagId="SearchEnter"></netui:button>
+            <netui:button type="submit" value="Advanced Search..." action="EnterAdvancedSearch" tagId="SearchAdvanced"></netui:button>
+        </netui:form>
+        <netui:form action="begin" focus="" tagId="FormThree">
+            <table></table>
+            Advanced: <netui:checkBox dataSource="pageFlow.advanced"></netui:checkBox>
+            <br>
+            Verbose: <netui:checkBox dataSource="pageFlow.verbose"></netui:checkBox>
+            <br>
+            <netui:button value="Enter" tagId="CustomizeUpdate"></netui:button>
+            <netui:button type="submit" tagId="CustomizeReset" value="Reset"></netui:button>
+        </netui:form>
+        <netui:form action="begin" focus="" tagId="FormFour">
+            <netui:button value="Misc One" tagId="MiscOne"></netui:button>
+            <netui:button type="submit" value="Misc Two" tagId="MiscTwo"></netui:button>
+        </netui:form>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34566/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34566/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,172 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Thu Aug 14 12:39:07 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b34566;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/b34566b/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:postForm.do#b34566b.Controller.NameForm">
+ *   <property value="380" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:begin.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="81,81,81,81" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:postForm.do#b34566b.Controller.NameForm@">
+ *   <property value="276,310,310,344" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:b34566b.Controller.NameForm#name#java.lang.String"/>
+ * <pageflow-object id="formbean:b34566b.Controller.NameForm"/>
+ * <pageflow-object id="forward:path#success#begin.do#@action:postForm.do#b34566b.Controller.NameForm@">
+ *   <property value="416,416,253,91" name="elbowsX"/>
+ *   <property value="92,56,56,56" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="North_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/b34566b/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postForm.do#b34566b.Controller.NameForm'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='81,81,81,81' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postForm.do#b34566b.Controller.NameForm@'>",
+        "  <property value='276,310,310,344' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:b34566b.Controller.NameForm#name#java.lang.String'/>",
+        "<pageflow-object id='formbean:b34566b.Controller.NameForm'/>",
+        "<pageflow-object id='forward:path#success#begin.do#@action:postForm.do#b34566b.Controller.NameForm@'>",
+        "  <property value='416,416,253,91' name='elbowsX'/>",
+        "  <property value='92,56,56,56' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='North_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="begin.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.do") 
+        })
+    protected Forward postForm(NameForm form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameForm extends FormData
+    {
+        private String name;
+
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public String getName()
+        {
+            return this.name;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34566/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34566/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <netui:anchor action="begin">
+            Postback
+            <netui:parameter name="name" value="value"></netui:parameter>
+            <netui:parameter name="name" value="value"></netui:parameter>
+        </netui:anchor>
+        <netui:form action="postForm">
+            <table class="tablebody">
+                <tr class="tablehead">
+                    <td>Name:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.name"></netui:textBox>
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <netui:anchor formSubmit="true">
+                Submit
+                <netui:parameter name="name" value="value"></netui:parameter>
+                <netui:parameter name="name" value="value"></netui:parameter>
+                
+            </netui:anchor>
+            
+        </netui:form>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,146 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package bugs.b34998;
+
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/bugs/b34998/Controller.jpf'/>", 
+        "<pageflow-object id='formbean:Name'/>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='100' name='x'/>", 
+        "  <property value='120' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:EnterName.do#bugs.b34998.Controller.Name'>", 
+        "  <property value='280' name='x'/>", 
+        "  <property value='240' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:begin.jsp'>", 
+        "  <property value='280' name='x'/>", 
+        "  <property value='120' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:results.jsp'>", 
+        "  <property value='460' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#results.jsp#@action:EnterName.do#bugs.b34998.Controller.Name@'>", 
+        "  <property value='316,370,370,424' name='elbowsX'/>", 
+        "  <property value='232,232,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:begin.jsp@#@action:begin.do@'>", 
+        "  <property value='244,190,190,136' name='elbowsX'/>", 
+        "  <property value='101,101,101,101' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:begin.jsp@#@action:EnterName.do#bugs.b34998.Controller.Name@'>", 
+        "  <property value='280,280,280,280' name='elbowsX'/>", 
+        "  <property value='164,180,180,196' name='elbowsY'/>", 
+        "  <property value='South_1' name='fromPort'/>", 
+        "  <property value='North_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#begin#begin.jsp#@action:begin.do@'>", 
+        "  <property value='136,190,190,244' name='elbowsX'/>", 
+        "  <property value='112,112,112,112' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='begin' name='label'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    private String text;
+    public String getText() {
+        return text;
+    }
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward EnterName(Name form)
+    {
+        text = form.getText();
+        char[] c = text.toCharArray();
+        StringBuffer sb = new StringBuffer();
+        for (int i=0;i<c.length;i++) {
+            if (c[i] == '\r') {
+                if (c[i+1] == '\n')
+                    sb.append("<br/>");
+                else {
+                    sb.append("[Funny Char Sequence:");
+                    sb.append("" + (int) c[i]);
+                    sb.append(" ");
+                    sb.append("" + (int) c[i+1]);
+                    sb.append("]");
+                }
+                continue;
+            }
+            sb.append(c[i]);
+        }
+        text = sb.toString();
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class Name extends FormData
+    {
+        private java.lang.String text;
+
+        public void setText(java.lang.String text)
+        {
+            this.text = text;
+        }
+
+        public java.lang.String getText()
+        {
+            return this.text;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 34998
+        </title>
+    </head>
+    <netui:body>
+        <h4>Bug 34998</h4>
+        <p style="color:green">
+        This test simply posts a textArea and the sets a text property on the pageFlow.  The results
+        will then display that value.  The resulting text should be exactly the same as entered into the textArea.
+        </p>
+        <netui:form action="EnterName" focus="" tagId="FormOne">
+            <table>
+                <tr>
+                    <td>Text:</td>
+                    <td>
+                    <netui:textArea dataSource="actionForm.text"></netui:textArea>
+                    </td>
+                </tr>
+            </table>
+            <netui:button value="Enter"></netui:button>
+        </netui:form>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b34998/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 34998
+        </title>
+    </head>
+    <body>
+       <netui:content value="${pageFlow.text}" />
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+package bugs.b35037;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/foo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/foo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<% if ( true ) throw new ServletException( "hello" ); %>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,8 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="foo.jsp">
+   <netui-template:section name="bodySection"></netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037b/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037b/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+package bugs.b35037b;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do"/>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@"/>
+ * <pageflow-object id="page:index.jsp"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'/>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'/>",
+        "<pageflow-object id='page:index.jsp'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037b/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35037b/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+<body>
+<netui-template:template templatePage="foo.jsp">
+   <netui-template:section name="bodySection"></netui-template:section>
+</netui-template:template>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+package bugs.b35084;
+
+import org.apache.beehive.netui.pageflow.FormData;
+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;
+
+
+/**
+ */
+public class Controller extends PageFlowController
+{
+    private String _name = "foo";
+    public void setName(String name) {
+        _name = name;
+    }
+    public String getName() {
+        return _name;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "lastName.jsp") 
+        })
+    public Forward start(NameActionForm form)
+    {
+        return new Forward( "success", form);
+    }
+          
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "confirm",
+                path = "done.jsp") 
+        })
+    public Forward next(NameActionForm form)
+    {
+        return new Forward("confirm");
+    }
+
+    public static class NameActionForm extends org.apache.beehive.netui.pageflow.FormData
+    {
+        private java.lang.String firstname;
+        private java.lang.String lastname;
+
+        public void setLastname(java.lang.String lastname)
+        { this.lastname = lastname; }
+
+        public java.lang.String getLastname()
+        { return this.lastname; }
+
+        public void setFirstname(java.lang.String firstname)
+        { this.firstname = firstname; }
+
+        public java.lang.String getFirstname()
+        { return this.firstname; }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/done.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/done.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+
+<%@page contentType="text/html;charset=UTF-8" language="java"%>
+<%@taglib prefix="netui" uri="beehive-netui-tags-html.tld"%>
+<html>
+  <head>
+    <netui:base/>
+  </head>
+  <body>
+    <netui:label value="${pageFlow.name}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <netui:base/>
+    </head>
+     <body style="margin:0">
+        <netui:anchor action="start">Start</netui:anchor>
+     </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/lastName.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084/lastName.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@page contentType="text/html;charset=UTF-8" language="java"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<html>
+  <head>
+    <netui:base/>
+  </head>
+  <body style="margin:0">
+   <netui:form action="next" focus="lastname">
+        <table border="0" style="font-size:10">
+            <tr>
+                <td>
+                    Text: <netui:textBox dataSource="actionForm.lastname" defaultValue="${actionForm.lastname}" />   
+                </td>
+            </tr>
+            <tr>
+                <td>         
+                    <netui:imageAnchor action="begin" src="../../resources/images/back.gif" formSubmit="true" />
+                    !!!!
+                    <netui:imageAnchor action="next" src="../../resources/images/insert.gif" formSubmit="true" />
+                </td>
+            </tr>
+        </table>
+    </netui:form>         
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,77 @@
+package bugs.b35084b;
+
+import org.apache.beehive.netui.pageflow.FormData;
+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;
+
+
+/**
+ */
+public class Controller extends PageFlowController
+{
+    public String name = "foo";
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="lastName.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "lastName.jsp") 
+        })
+    public Forward start(NameActionForm form)
+    {
+        return new Forward( "success", form);
+    }
+          
+    /**
+     * @jpf:action
+     * @jpf:forward name="confirm" path="done.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "confirm",
+                path = "done.jsp") 
+        })
+    public Forward next(NameActionForm form)
+    {
+        return new Forward("confirm");
+    }
+
+    public static class NameActionForm extends org.apache.beehive.netui.pageflow.FormData
+    {
+        private java.lang.String firstname;
+        private java.lang.String lastname;
+
+        public void setLastname(java.lang.String lastname)
+        { this.lastname = lastname; }
+
+        public java.lang.String getLastname()
+        { return this.lastname; }
+
+        public void setFirstname(java.lang.String firstname)
+        { this.firstname = firstname; }
+
+        public java.lang.String getFirstname()
+        { return this.firstname; }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/done.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/done.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+
+<%@page contentType="text/html;charset=UTF-8" language="java"%>
+<%@taglib prefix="netui" uri="netui-tags-html.tld"%>
+<html>
+  <head>
+    <netui:base/>
+  </head>
+  <body>
+    <netui:label value="${pageFlow.name}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <netui:base/>
+    </head>
+     <body style="margin:0">
+        <netui:anchor action="start">Start</netui:anchor>
+     </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/lastName.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35084b/lastName.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@page contentType="text/html;charset=UTF-8" language="java"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<html>
+  <head>
+    <netui:base/>
+  </head>
+  <body style="margin:0">
+   <netui:form action="next" focus="lastname">
+        <table border="0" style="font-size:10">
+            <tr>
+                <td>
+                    Text: <netui:textBox dataSource="actionForm.lastname" defaultValue="${actionForm.lastname}" />   
+                </td>
+            </tr>
+            <tr>
+                <td>         
+                    <netui:imageAnchor action="beginbogus" src="../../resources/images/back.gif" formSubmit="true" />
+                    !!!!
+                    <netui:imageAnchor action="next" src="../../resources/images/insert.gif" formSubmit="true" />
+                </td>
+            </tr>
+        </table>
+    </netui:form>         
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35094/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35094/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+package bugs.b35094;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    
+    private int foo=27;
+    public int getFoo() {
+        return foo;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35094/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35094/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+    <p>
+        New Web Application Page
+        <netui:image src="../../resources/images/handlerightmiddle.gif">
+            <netui:parameter name="name" value="${pageFlow.foo}"></netui:parameter>this is content inside of the Image tag
+        </netui:image>
+        </p>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,181 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Wed Jun 11 14:35:08 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b35261;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/bugs/b35261/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="260" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,170,170,224" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestDone.do">
+ *   <property value="540" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/bugs/b35261/nest/nestController.jpf@#@action:nestDone.do@">
+ *   <property value="540,540,540,540" name="elbowsX"/>
+ *   <property value="156,150,150,144" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/bugs/b35261/nest/nestController.jpf">
+ *   <property value="540" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:nestDone.do@">
+ *   <property value="504,400,400,296" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nest.do">
+ *   <property value="280" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/bugs/b35261/nest/nestController.jpf#@action:nest.do@">
+ *   <property value="316,410,410,504" name="elbowsX"/>
+ *   <property value="192,192,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/bugs/b35261/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,170,170,224' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestDone.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/bugs/b35261/nest/nestController.jpf@#@action:nestDone.do@'>",
+        "  <property value='540,540,540,540' name='elbowsX'/>",
+        "  <property value='156,150,150,144' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/bugs/b35261/nest/nestController.jpf'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:nestDone.do@'>",
+        "  <property value='504,400,400,296' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nest.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/bugs/b35261/nest/nestController.jpf#@action:nest.do@'>",
+        "  <property value='316,410,410,504' name='elbowsX'/>",
+        "  <property value='192,192,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward nestDone()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/bugs/b35261/nest/nestController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/bugs/b35261/nest/nestController.jpf") 
+        })
+    protected Forward nest()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="nest">Nest</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/nest/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/nest/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            New Web Application Page
+        </p>
+        <netui:anchor action="done">
+            Exit nest
+        </netui:anchor><br>
+        <netui:anchor action="nest">Nest Again</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/nest/nestController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b35261/nest/nestController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,223 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Wed Jun 11 14:35:28 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b35261.nest;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/bugs/b35261/nest/nestController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:done.do">
+ *   <property value="400" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:done.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:nestDone">
+ *   <property value="560" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#nestDone#@action:done.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nest.do">
+ *   <property value="240" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#done#nestController.jpf#@action:nest.do@">
+ *   <property value="204,180,180,156" name="elbowsX"/>
+ *   <property value="212,212,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestDone.do">
+ *   <property value="120" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:nestController.jpf@#@action:nestDone.do@">
+ *   <property value="120,120,120,120" name="elbowsX"/>
+ *   <property value="144,160,160,176" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:nestController.jpf">
+ *   <property value="120" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:nest.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="144,160,160,176" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/bugs/b35261/nest/nestController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:done.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:nestDone'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#nestDone#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nest.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#done#nestController.jpf#@action:nest.do@'>",
+        "  <property value='204,180,180,156' name='elbowsX'/>",
+        "  <property value='212,212,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestDone.do'>",
+        "  <property value='120' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:nestController.jpf@#@action:nestDone.do@'>",
+        "  <property value='120,120,120,120' name='elbowsX'/>",
+        "  <property value='144,160,160,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:nestController.jpf'>",
+        "  <property value='120' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:nest.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,160,160,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class nestController extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        System.err.println(PageFlowUtils.getNestingPageFlow(getRequest()));
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestDone") 
+        })
+    public Forward done()
+    {
+        return new Forward( "done" );
+    }
+    
+   /**
+     * @jpf:action
+     * @jpf:forward name="done" path="nestController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                path = "nestController.jpf") 
+        })
+    public Forward nest()
+    {
+        return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,246 @@
+package bugs.b36628;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.Globals;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+
+/**
+ * @jpf:controller
+ * @jpf:catch type="java.lang.NoSuchFieldException"
+ *            method="handleIt" message-key="theMessage"
+ * @jpf:catch type="java.lang.IllegalArgumentException"
+ *            method="handleIt2" message-key="theMessage"
+ *            
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/b36628/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:throwRT.do">
+ *   <property value="420" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:throwIA.do">
+ *   <property value="420" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwIA.do@">
+ *   <property value="276,330,330,384" name="elbowsX"/>
+ *   <property value="103,103,212,212" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwRT.do@">
+ *   <property value="276,330,330,384" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:error.jsp@#@action:begin.do@">
+ *   <property value="80,80,80,80" name="elbowsX"/>
+ *   <property value="196,170,170,144" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:error.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:error2.jsp@#@action:begin.do@">
+ *   <property value="124,120,120,116" name="elbowsX"/>
+ *   <property value="232,232,103,103" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:error2.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:foo/error.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+
+ 
+ 
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = java.lang.NoSuchFieldException.class,
+            method = "handleIt",
+            messageKey = "theMessage"),
+        @Jpf.Catch(
+            type = java.lang.IllegalArgumentException.class,
+            method = "handleIt2",
+            messageKey = "theMessage") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/b36628/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:throwRT.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:throwIA.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwIA.do@'>",
+        "  <property value='276,330,330,384' name='elbowsX'/>",
+        "  <property value='103,103,212,212' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwRT.do@'>",
+        "  <property value='276,330,330,384' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:error.jsp@#@action:begin.do@'>",
+        "  <property value='80,80,80,80' name='elbowsX'/>",
+        "  <property value='196,170,170,144' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:error.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:error2.jsp@#@action:begin.do@'>",
+        "  <property value='124,120,120,116' name='elbowsX'/>",
+        "  <property value='232,232,103,103' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:error2.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:foo/error.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+ public class Controller extends PageFlowController
+{
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+ protected Forward begin()
+    {
+        return new Forward("success");
+    }
+    
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage1" path="error.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage1",
+                path = "error.jsp") 
+        })
+    protected Forward handleIt(NoSuchFieldException ex, String actionName,
+					  String message, Object form)
+    {
+        ActionErrors errors = new ActionErrors();
+        errors.add("name", new ActionError("theMessage")); 
+        getRequest().setAttribute(Globals.ERROR_KEY,errors);
+        return new Forward( "errorPage1" );
+    }
+    
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage2" path="error2.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage2",
+                path = "error2.jsp") 
+        })
+    protected Forward handleIt2(IllegalArgumentException ex, String actionName,
+					  String message, Object form)
+    {
+        ActionErrors errors = new ActionErrors();
+        errors.add("name", new ActionError("theMessageTwo")); 
+        getRequest().setAttribute(Globals.ERROR_KEY,errors);
+        return new Forward( "errorPage2" );
+    }
+
+     /**
+      * @jpf:action
+      */
+    @Jpf.Action(
+        )
+     protected Forward throwRT()
+        throws NoSuchFieldException
+     {
+        if (true)
+           throw new NoSuchFieldException("No Such Field Excpetion Was Thrown");
+        return new Forward("success");
+    }
+    
+     /**
+      * @jpf:action
+      */
+    @Jpf.Action(
+        )
+     protected Forward throwIA()
+     {
+        if (true)
+           throw new IllegalArgumentException("Illegal Argument Was Thrown");
+        return new Forward("success");
+    }
+    
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <h4>Error One</h4>
+        <netui:anchor action="begin">Home</netui:anchor><br>
+        <netui:errors/><br>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/error2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/error2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <h4>Error Two</h4>
+       <netui:anchor action="begin">Home</netui:anchor><br>
+        <netui:error value="name"/><br/>
+     </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="throwRT">Throw Runtime Exception</netui:anchor>
+        <br>
+        <netui:anchor action="throwIA">Throw Illegal Argument Exception</netui:anchor>
+        <br>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,308 @@
+package bugs.b36628b;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.Globals;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+
+/**
+ * @jpf:controller
+ * @jpf:catch type="java.lang.NoSuchFieldException"
+ *            method="handleIt" message-key="theMessage"
+ * @jpf:catch type="java.lang.IllegalAccessException"
+ *            method="handleIt3" message-key="theMessage"
+ * @jpf:catch type="java.lang.IllegalArgumentException"
+ *            method="handleIt2" message-key="theMessage"
+ * @jpf:message-resources resources="global.b36628"
+ *            
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/b36628b/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:throwRT.do">
+ *   <property value="420" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:throwIA.do">
+ *   <property value="420" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:throwIAc.do">
+ *   <property value="420" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwRT.do@">
+ *   <property value="276,330,330,384" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwIA.do@">
+ *   <property value="276,330,330,384" name="elbowsX"/>
+ *   <property value="103,103,212,212" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwIAc.do@">
+ *   <property value="276,330,330,384" name="elbowsX"/>
+ *   <property value="103,103,152,152" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:error.jsp@#@action:begin.do@">
+ *   <property value="80,80,80,80" name="elbowsX"/>
+ *   <property value="196,170,170,144" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:error.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:error2.jsp@#@action:begin.do@">
+ *   <property value="124,120,120,116" name="elbowsX"/>
+ *   <property value="232,232,103,103" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:error2.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:foo/error.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+
+ 
+ 
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = java.lang.NoSuchFieldException.class,
+            method = "handleIt",
+            messageKey = "theMessage"),
+        @Jpf.Catch(
+            type = java.lang.IllegalAccessException.class,
+            method = "handleIt3",
+            messageKey = "theMessage"),
+        @Jpf.Catch(
+            type = java.lang.IllegalArgumentException.class,
+            method = "handleIt2",
+            messageKey = "theMessage") 
+    },
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "global.b36628") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/b36628b/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:throwRT.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:throwIA.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:throwIAc.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwRT.do@'>",
+        "  <property value='276,330,330,384' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwIA.do@'>",
+        "  <property value='276,330,330,384' name='elbowsX'/>",
+        "  <property value='103,103,212,212' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwIAc.do@'>",
+        "  <property value='276,330,330,384' name='elbowsX'/>",
+        "  <property value='103,103,152,152' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:error.jsp@#@action:begin.do@'>",
+        "  <property value='80,80,80,80' name='elbowsX'/>",
+        "  <property value='196,170,170,144' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:error.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:error2.jsp@#@action:begin.do@'>",
+        "  <property value='124,120,120,116' name='elbowsX'/>",
+        "  <property value='232,232,103,103' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:error2.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:foo/error.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+ public class Controller extends PageFlowController
+{
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+ protected Forward begin()
+    {
+        return new Forward("success");
+    }
+    
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage1" path="error.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage1",
+                path = "error.jsp") 
+        })
+    protected Forward handleIt(NoSuchFieldException ex, String actionName,
+					  String message, Object form)
+    {
+        ActionErrors errors = new ActionErrors();
+        errors.add("name", new ActionError("theMessage")); 
+        getRequest().setAttribute(Globals.ERROR_KEY,errors);
+        return new Forward( "errorPage1" );
+    }
+    
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage2" path="error2.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage2",
+                path = "error2.jsp") 
+        })
+    protected Forward handleIt2(IllegalArgumentException ex, String actionName,
+					  String message, Object form)
+    {
+        ActionErrors errors = new ActionErrors();
+        errors.add("name", new ActionError("theMessageTwo")); 
+        getRequest().setAttribute(Globals.ERROR_KEY,errors);
+        return new Forward( "errorPage2" );
+    }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage3" path="foo/error.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage3",
+                path = "foo/error.jsp") 
+        })
+    protected Forward handleIt3(IllegalAccessException ex, String actionName,
+					  String message, Object form)
+    {
+        ActionErrors errors = new ActionErrors();
+        errors.add("name", new ActionError("theMessageTwo")); 
+        getRequest().setAttribute(Globals.ERROR_KEY,errors);
+        return new Forward( "errorPage3" );
+    }
+    
+     /**
+      * @jpf:action
+      */
+    @Jpf.Action(
+        )
+     protected Forward throwRT()
+        throws NoSuchFieldException
+     {
+        if (true)
+           throw new NoSuchFieldException("No Such Field Exception Was Thrown");
+        return new Forward("success");
+    }
+    
+     /**
+      * @jpf:action
+      */
+    @Jpf.Action(
+        )
+     protected Forward throwIA()
+     {
+        if (true)
+           throw new IllegalArgumentException("Illegal Argument Was Thrown");
+        return new Forward("success");
+    }
+    
+     /**
+      * @jpf:action
+      */
+    @Jpf.Action(
+        )
+     protected Forward throwIAc()
+        throws IllegalAccessException
+     {
+        if (true)
+           throw new IllegalAccessException("Illegal Access Was Thrown");
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <h4>Error One</h4>
+        <netui:anchor action="begin">Home</netui:anchor><br>
+        <netui:errors/><br>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/error2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/error2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <h4>Error Two</h4>
+       <netui:anchor action="begin">Home</netui:anchor><br>
+        <netui:error value="name"/><br/>
+     </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/foo/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/foo/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Other Errors</h4>
+        <netui:anchor href="..\Controller.jpf">Home</netui:anchor><br>
+        <netui:errors/><br>
+        <netui:error value="name"/><br>
+        
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b36628b/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="throwRT">Throw Runtime Exception</netui:anchor>
+        <br>
+        <netui:anchor action="throwIA">Throw Illegal Argument Exception</netui:anchor>
+        <br>
+        <netui:anchor action="throwIAc">Throw Illegal Access Exception</netui:anchor>
+        <br>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37240/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37240/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,124 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Wed Jul 02 13:50:21 MDT 2003
+//  By: ekoneil
+// -----------------------------------------------------------------------------
+package bugs.b37240;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/selectTest/Controller.jpf'/>",
+        "<pageflow-object id='action:postback.do#selectTest.Controller.SelectedValueForm'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postback.do#selectTest.Controller.SelectedValueForm@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,160,160,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:postback.do#selectTest.Controller.SelectedValueForm@'>",
+        "  <property value='229,229,229,229' name='elbowsX'/>",
+        "  <property value='176,160,160,144' name='elbowsY'/>",
+        "  <property value='North_0' name='fromPort'/>",
+        "  <property value='South_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:selectTest.Controller.SelectedValueForm#selectedValue#java.lang.String'/>",
+        "<pageflow-object id='formbean:selectTest.Controller.SelectedValueForm'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:selectTest.Controller.SelectedValueForm#selectedValue2#java.lang.String[]'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+    private transient Map options = null;
+    
+    private transient Object defaultValue = new Integer(3);
+    private Integer[] multiDefaults = new Integer[] {new Integer(2), new Integer(4)};
+    
+    public Map getOptions() {return options;}
+    public Object getDefaultValue() {return defaultValue;}
+    public Integer[] getMultiDefaults() {
+        return multiDefaults;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward postback(SelectedValueForm form)
+    {
+        return new Forward("success");   
+    }
+    
+    protected void onCreate()
+    {
+        if(options == null)
+        {
+            options = new LinkedHashMap();
+            
+            options.put(new Integer(1), "First Choice");
+            options.put(new Integer(2), "Second Choice");
+            options.put(new Integer(3), "Third Choice");
+            options.put(new Integer(4), "Fourth Choice");
+            options.put(new Integer(5), "Fifth Choice");   
+        }   
+    }
+    
+    public static class SelectedValueForm
+        extends FormData
+    {
+        private String selectedValue;
+        
+        public String getSelectedValue() {return selectedValue;}
+        
+        public void setSelectedValue(String selectedValue) {this.selectedValue = selectedValue;}  
+              
+        private String selectedValue2[];
+        
+        public String[] getSelectedValue2() {return selectedValue2;}
+        
+        public void setSelectedValue2(String[] selectedValue2) {this.selectedValue2 = selectedValue2;}        
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37240/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37240/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        New Web Application Page
+        <netui:form action="postback" focus="">
+        <br/>
+            Select:
+            <netui:select dataSource="actionForm.selectedValue" 
+                          optionsDataSource="${pageFlow.options}"
+                          defaultValue="${pageFlow.defaultValue}"/>
+        <br/>
+        <br/>
+            Multi Select:
+            <netui:select dataSource="actionForm.selectedValue2" multiple="true" optionsDataSource="${pageFlow.options}"
+                          defaultValue="${pageFlow.multiDefaults}" size="5"></netui:select>
+            <br>
+            <netui:button value="postback"></netui:button>
+        </netui:form>
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,131 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Thu Aug 07 09:17:50 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b37374;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/b37374/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submitIt.do#b37374.Controller.TopForm'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:submitIt.do#b37374.Controller.TopForm@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:results.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#results.jsp#@action:submitIt.do#b37374.Controller.TopForm@'>",
+        "  <property value='364,230,230,96' name='elbowsX'/>",
+        "  <property value='92,92,32,32' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:b37374.Controller.TopForm#detectedWebsites#b37374.Controller.Websites[]'/>",
+        "<pageflow-object id='formbean:b37374.Controller.TopForm'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        TopForm tf = new TopForm();
+        Websites[] ws = new Websites[3];
+        tf.setDetectedWebsites(ws);
+        
+        for (int i=0;i<ws.length;i++) {
+            if (i == 1)
+                continue;
+            ws[i] = new Websites();
+            ws[i].setDomainOwner("results.jsp");
+        }
+        
+        
+        return new Forward( "success", tf);
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward submitIt(TopForm form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class TopForm extends FormData
+    {
+        private Websites[] detectedWebsites;
+
+
+        public void setDetectedWebsites(Websites[] detectedWebsites)
+        {
+            this.detectedWebsites = detectedWebsites;
+        }
+
+        public Websites[] getDetectedWebsites()
+        {
+            return this.detectedWebsites;
+        }
+    }
+    
+    public static class Websites implements java.io.Serializable {
+        private String _domainOwner;
+
+        public String getDomainOwner() {return _domainOwner;}
+        public void setDomainOwner(String domainOwner) {_domainOwner = domainOwner;}
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-databinding"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <netui:form action="submitIt">
+        <table>
+        <netui-databinding:repeater dataSource="actionForm.detectedWebsites"> 
+        <netui-databinding:repeaterItem> 
+            <tr> <td> 
+                <netui:anchor href="${container.item.domainOwner}"> 
+                    <netui:content value="${container.item.domainOwner}"/> 
+                </netui:anchor> 
+            </td> 
+            </tr> 
+        </netui-databinding:repeaterItem> 
+        </netui-databinding:repeater> 
+        </table>
+        </netui:form>
+        <hr />
+        <netui:form action="submitIt">
+        <table>
+        <netui-databinding:repeater dataSource="actionForm.detectedWebsites"> 
+        <netui-databinding:repeaterItem> 
+            <tr> <td> 
+                <netui:imageAnchor href="${container.item.domainOwner}" src="/coreWeb/resources/images/bar-background.gif"/> 
+            </td> 
+            </tr> 
+        </netui-databinding:repeaterItem> 
+        </netui-databinding:repeater> 
+        </table>
+        </netui:form>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37374/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin">Home</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37913/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37913/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+package bugs.b37913;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+
+    public String[] stringValues;
+    public ArrayList listValues;
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        stringValues = new String[0];
+        listValues = new ArrayList();
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37913/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b37913/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>String Values - Full Repeater</h4>
+        <netui-data:repeater dataSource="pageFlow.stringValues">
+            <netui-data:repeaterHeader>
+                <ul>
+            </netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <li><netui:label value="${container.item}"></netui:label></li>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+        </netui-data:repeater>
+        <hr />
+        <h4>String Values - Simple Repeater</h4>
+        <ul>
+        <netui-data:repeater dataSource="pageFlow.stringValues">
+            <li><netui:label value="${container.item}"></netui:label></li>
+        </netui-data:repeater>
+        </ul>
+        <hr />
+        <h4>List Values - Full Repeater</h4>
+        <netui-data:repeater dataSource="pageFlow.listValues">
+            <netui-data:repeaterHeader>
+                <ul>
+            </netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <li><netui:label value="${container.item}"></netui:label></li>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+        </netui-data:repeater>
+        <hr />
+        <h4>List Values - Simple Repeater</h4>
+        <ul>
+        <netui-data:repeater dataSource="pageFlow.listValues">
+            <li><netui:label value="${container.item}"></netui:label></li>
+         </netui-data:repeater>
+        </ul>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+package bugs.b38182;
+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;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    public String[] getRadioOptions() {
+        return radioOptions;
+    }
+    public String[] getSelectOptions() {
+        return selectOptions;
+    }
+    private String[] radioOptions = {"Radio 1", "Radio 2", "Radio 3"};
+    private String[] selectOptions = {"Option 1", "Option 2", "Option 3"};
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward submitForm(Form form)
+    {
+        return new Forward("success");
+    }
+
+    public static class Form extends FormData
+    {
+        public String textBox;
+        public String textArea;
+        public String[] select = {"Option Two"}; 
+        public String selectTwo = "Option Seven";
+        public String[] selectThree = {"Option One"};
+        public String radioGroup = "Radio Three";
+        public String radioGroup2 = "Radio 2";
+     }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <netui:body>
+        <br/>
+        <netui:form action="submitForm">
+            <hidden name="foo" value="bar"/>
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Select/Options Source</td>
+                    <td>
+                        <netui:select dataSource="actionForm.selectThree"
+                                optionsDataSource="${pageFlow.selectOptions}"
+                                disabled="true" />
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38182/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+    <h4>Request:</h4>
+    <%
+    request.setAttribute("parameterNames",request.getParameterNames());
+    java.util.Enumeration e = request.getParameterNames();
+    while (e.hasMoreElements()) {
+       System.err.println("Element:" + e.nextElement());
+    }
+    %>
+    <netui-data:repeater dataSource="request.parameterNames">
+        <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+        <netui-data:repeaterItem><li><netui:label value="${container.item}"/></li>
+            </netui-data:repeaterItem>
+        <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+    </netui-data:repeater>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38183/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38183/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+package bugs.b38183;
+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;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+
+    public String[] data = {"Radio 1", "Radio 2", "Radio 3"};
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38183/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38183/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+<%
+    try
+    {
+%>
+    <body>
+      <netui-data:repeater dataSource="pageFlow.data">
+      <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+      <netui-data:repeaterItem><li><netui:label value="${container.foo}"/></li>
+        </netui-data:repeaterItem>
+      <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+      </netui-data:repeater>
+<%
+    }
+    catch(Exception e)
+    {
+        if(e instanceof javax.servlet.jsp.el.ELException)
+            out.write("success -- caught ELException; assumed to be related to missing {container.foo}");
+        else out.write("fail -- exception was not servlet exception");
+    }
+%>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38184/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38184/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+package bugs.b38184;
+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 java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Collections;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    transient public Enumeration e;
+    public ArrayList list;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        list = new ArrayList();
+        list.add("One");
+        list.add("Two");
+        list.add("Three");
+        e = Collections.enumeration(list);
+        return new Forward( "success" );
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38184/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b38184/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+      <h4>List</h4>
+      <netui-data:repeater dataSource="pageFlow.list">
+      <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+      <netui-data:repeaterItem><li><netui:label value="${container.item}"/></li>
+        </netui-data:repeaterItem>
+      <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+      </netui-data:repeater>
+      <hr />
+      <h4>Enumeration</h4>
+      <netui-data:repeater dataSource="pageFlow.e">
+      <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+      <netui-data:repeaterItem><li><netui:label value="${container.item}"/></li>
+        </netui-data:repeaterItem>
+      <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+      </netui-data:repeater>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39363/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39363/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+/**
+ *
+ */
+package bugs.b39363;
+
+// java imports
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+import java.util.List;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+
+// external imports
+
+/**
+ * @jpf:forward name="index" path="index.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "index",
+            path = "index.jsp") 
+    })
+public class Controller
+    extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        ListForm form = new ListForm();
+        List list = new ArrayList();
+        list.add("foo1");
+        list.add("bar1");
+        form.setList(list);
+        
+        return new Forward("index", form);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(ListForm form)
+    {
+        return new Forward("index");
+    }
+
+    public static class ListForm
+        extends FormData
+    {
+        private List list = null;
+
+        public List getList()
+        {
+            return list;
+        }
+        
+        public void setList(List list)
+        {
+            this.list = list;
+        }
+
+        public void reset(org.apache.struts.action.ActionMapping mapping,
+                          javax.servlet.http.HttpServletRequest request)
+        {
+            list = new ArrayList();
+            // need to fill the list for the number of items
+            // that might show up here
+            list.add(null);
+            list.add(null);
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39363/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39363/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>List Update Test</title>
+  </head>
+
+  <body>
+    <h1>List Update Test</h1>
+
+<netui:form action="postback">
+
+<b>List Data</b><br/>
+<netui-data:repeater dataSource="actionForm.list">
+    <netui-data:repeaterHeader><table><tr><td>List</td></tr></netui-data:repeaterHeader>
+    <netui-data:repeaterItem>
+      <tr><td>
+      <netui:textBox dataSource="container.item"/>
+      </td></tr>
+    </netui-data:repeaterItem>
+    <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+</netui-data:repeater>
+  <br/>
+  <br/>
+  <netui:button>Submit</netui:button>
+</netui:form>
+<br/>
+<br/>
+<br>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39434/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39434/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Sep 02 12:49:58 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.b39434;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/b39434/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/b39434/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+        public String[] stringDates = {"2003-7-4","2012-8-10"}; 
+
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39434/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39434/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        From Label: ("08/28/2003"):
+        <netui:label value="08/28/2003"> 
+            <netui:formatDate pattern="MM/dd/yyyy"/> 
+        </netui:label> <br />
+        From Label: ("08/28/03"):
+        <netui:label value="08/28/03"> 
+            <netui:formatDate pattern="MM/dd/yyyy"/> 
+        </netui:label>  <br />
+        From Label: ("08/28/72"):
+        <netui:label value="08/28/72"> 
+            <netui:formatDate pattern="MM/dd/yyyy"/> 
+        </netui:label>  <br />
+        From Label: ("08282003"):
+        <netui:label value="08282003"> 
+            <netui:formatDate pattern="MM/dd/yyyy"/> 
+        </netui:label> <br />
+        From Label: ("082803"):
+        <netui:label value="082803"> 
+            <netui:formatDate pattern="MM/dd/yyyy"/> 
+        </netui:label>  <br />
+        From Label: ("082872"):
+        <netui:label value="082872"> 
+            <netui:formatDate pattern="MM/dd/yyyy"/> 
+        </netui:label>  <br />
+        Repeater from String: 
+        <netui-data:repeater dataSource="pageFlow.stringDates"> 
+          <netui-data:repeaterItem> 
+             <netui:label value="${container.item}"> 
+              <netui:formatDate pattern="MM/dd/yy"/> 
+             </netui:label> 
+          </netui-data:repeaterItem> 
+        </netui-data:repeater> 
+
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39552/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39552/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,137 @@
+package bugs.b39552;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "success",
+            path = "index.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/bugs/b39552/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postback.do#bugs.b39552.Controller.PostbackForm'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postback.do#bugs.b39552.Controller.PostbackForm@'>",
+        "  <property value='276,300,300,324' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:bugs.b39552.Controller.PostbackForm#selectedItems#java.lang.String[]'/>",
+        "<pageflow-object id='formbean:bugs.b39552.Controller.PostbackForm'/>",
+        "<pageflow-object id='forward:path#success#index.jsp'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+    private Map jpfMap = null;
+    private Map jpfRadio = null;
+    private Map jpfCheck = null;
+
+    public Map getJpfMap() {
+        return jpfMap;
+    }
+    public Map getJpfRadio() {
+        return jpfRadio;
+    }
+    public Map getJpfCheck() {
+        return jpfCheck;
+    }
+    
+    protected void onCreate()
+    {
+        jpfMap = new LinkedHashMap();
+        jpfMap.put("1", "Option 1");
+        jpfMap.put("2", "Option 2");
+        jpfMap.put("3", "Option 3");
+        jpfMap.put("4", "Option 4");
+        jpfMap.put("5", "Option 5");
+        
+        jpfRadio = new LinkedHashMap();
+        jpfRadio.put("1", "Option 1");
+        jpfRadio.put("2", "Option 2");
+        jpfRadio.put("3", "Option 3");
+        jpfRadio.put("4", "Option 4");
+        jpfRadio.put("5", "Option 5");
+        
+        jpfCheck = new LinkedHashMap();
+        jpfCheck.put("1", "Option 1");
+        jpfCheck.put("2", "Option 2");
+        jpfCheck.put("3", "Option 3");
+        jpfCheck.put("4", "Option 4");
+        jpfCheck.put("5", "Option 5");
+   }
+    
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward postback(PostbackForm form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class PostbackForm extends FormData
+    {
+        private String[] selectedItems;
+
+        public void setSelectedItems(String[] selectedItems)
+        {
+            this.selectedItems = selectedItems;
+        }
+
+        public String[] getSelectedItems()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.selectedItems == null || this.selectedItems.length == 0)
+            {
+                this.selectedItems = new String[1];
+            }
+
+            return this.selectedItems;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39552/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39552/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Multi Select
+        </title>
+    </head>
+    <body>
+        <p>
+        MultiSelect <br/>
+        <br/>
+        <netui:form action="postback">
+            <table>
+                <tr valign="top">
+                    <td>SelectedItems:</td>
+                    <td>
+                    <netui:select optionsDataSource="${pageFlow.jpfMap}" dataSource="actionForm.selectedItems"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Radio Button Group Items:</td>
+                    <td>
+                    <netui:radioButtonGroup optionsDataSource="${pageFlow.jpfRadio}" dataSource="actionForm.selectedItems"/>
+                    </td>
+                </tr>
+                
+                <tr valign="top">
+                    <td>CheckBox Group Items:</td>
+                    <td>
+                    <netui:checkBoxGroup optionsDataSource="${pageFlow.jpfCheck}" dataSource="actionForm.selectedItems"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="postback" type="submit"/>
+        </netui:form>
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,154 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Aug 26 13:16:21 CDT 2003
+//  By: ksantiy
+// -----------------------------------------------------------------------------
+package bugs.b39820;
+
+import org.apache.beehive.netui.pageflow.FormData;
+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.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/SampleFlow/SampleFlowController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:theAction.do#SampleFlow.SampleFlowController.theFormBean'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:sample.jsp@#@action:theAction.do#SampleFlow.SampleFlowController.theFormBean@'>",
+        "  <property value='336,360,360,384' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:sample.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:sampleResult.jsp@#@action:begin.do@'>",
+        "  <property value='384,300,300,216' name='elbowsX'/>",
+        "  <property value='152,152,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:sampleResult.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#sample.jsp#@action:begin.do@'>",
+        "  <property value='216,240,240,264' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#sampleResult.jsp#@action:theAction.do#SampleFlow.SampleFlowController.theFormBean@'>",
+        "  <property value='420,420,420,420' name='elbowsX'/>",
+        "  <property value='104,110,110,116' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:SampleFlow.SampleFlowController.theFormBean#prop1#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:SampleFlow.SampleFlowController.theFormBean#prop2#java.lang.String'/>",
+        "<pageflow-object id='formbean:SampleFlow.SampleFlowController.theFormBean'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController {
+    
+    private String prop1;
+    private String prop2;
+    private String formValue;
+
+    public String getProp1() {
+        return prop1;
+    }
+    public String getProp2() {
+        return prop2;
+    }
+    public String getFormValue() {
+        return formValue;
+    }
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "sample.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "sampleResult.jsp") 
+        })
+    protected Forward theAction(theFormBean form) {
+        prop1 = form.getProp1();
+        prop2 = form.getProp2();
+        HttpServletRequest req = getRequest();
+        formValue = req.getParameter("form");
+        return new Forward("success");
+    }
+
+
+
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class theFormBean extends FormData
+    {
+        private String prop2;
+
+        private String prop1;
+
+
+        public void setProp1(String prop1)
+        {
+            this.prop1 = prop1;
+        }
+
+        public String getProp1()
+        {
+            return this.prop1;
+        }
+
+        public void setProp2(String prop2)
+        {
+            this.prop2 = prop2;
+        }
+
+        public String getProp2()
+        {
+            return this.prop2;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/sample.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/sample.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>Sample Application Page</title>
+    </head>
+    <netui:body>
+        <H4>Try different combination, and observe the result.</H4>
+        <netui:form action="theAction" tagId="tagId1" >
+            <netui:parameter name="form" value="Form 1"/>
+            <table>
+                <tr>
+                    <td><netui:label value="Prop1:"></netui:label></td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.prop1"></netui:textBox>
+                    </td>
+                </tr>
+            </table>
+            <netui:anchor formSubmit="true">
+                Foo
+                <netui:parameter name="prop2" value="foo"></netui:parameter>
+            </netui:anchor>
+            <netui:anchor formSubmit="true">
+                Bar
+                <netui:parameter name="prop2" value="bar"></netui:parameter>
+            </netui:anchor>
+        </netui:form>
+        
+        <netui:form action="theAction" tagId="tagId2"  >
+            <netui:parameter name="form" value="Form 2"/>
+            <table>
+                <tr>
+                    <td><netui:label value="Prop1:"></netui:label></td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.prop1"></netui:textBox>
+                    </td>
+                </tr>
+            </table>
+            <netui:anchor formSubmit="true">
+                Not Foo
+                <netui:parameter name="prop2" value="not foo"></netui:parameter>
+            </netui:anchor>
+            <netui:anchor formSubmit="true">
+                Not Bar
+                <netui:parameter name="prop2" value="not bar"></netui:parameter>
+            </netui:anchor>
+        </netui:form>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/sampleResult.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b39820/sampleResult.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>Sample Application Resutl Page</title>
+    </head>
+    <body>
+        Prop1: <netui:label value="${pageFlow.prop1}"></netui:label><br>
+        Prop2: <netui:label value="${pageFlow.prop2}"></netui:label><br>
+        Form: <netui:label value="${pageFlow.formValue}"></netui:label><br>
+        <p>
+        <netui:anchor action="begin">back</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+package bugs.b40031;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/b40031/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:post.do">
+ *   <property value="340" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:results.jsp">
+ *   <property value="460" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#results.jsp#@action:post.do@">
+ *   <property value="376,400,400,424" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:post.do@">
+ *   <property value="276,290,290,304" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/b40031/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:post.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:results.jsp'>",
+        "  <property value='460' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#results.jsp#@action:post.do@'>",
+        "  <property value='376,400,400,424' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do@'>",
+        "  <property value='276,290,290,304' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    String foo = "From the page";   
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward post()
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("string1",foo);
+        f.addPageInput("string2",foo);
+        return f;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="post">Post</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40031/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="string1" type="java.lang.String"/>
+<netui-data:declarePageInput name="string2" type="java.lang.String"/>
+<netui-data:declarePageInput name="" type="java.lang.String"/>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        string 1:<netui:label value="${pageInput.string1}"/> <br/>
+        string 2:<netui:label value="${pageInput.string2}"/> <br/>
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40596/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40596/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+<netui:anchor href="index.jsp">
+  Link
+  <netui:parameter name="foo" value="bar"/>
+  <netui:parameter name="123" value="456"/>
+  <netui:parameter name="123" value="qwe"/>
+  <netui:parameter name="abc" value="def"/>
+</netui:anchor>
+<br/>
+<br/>
+<hr/>
+<%
+java.util.Set set = request.getParameterMap().entrySet();
+pageContext.setAttribute("set", set);
+%>
+<netui-data:repeater dataSource="pageContext.set">
+
+    <netui:label value="${container.item.key}"/><br/>
+
+    <netui-data:repeater dataSource="container.item.value">
+        &nbsp;&nbsp;<netui:label value="${container.item}"/><br/>
+    </netui-data:repeater>
+
+</netui-data:repeater>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40862/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40862/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+/*
+ *
+ */
+package bugs.b40862;
+
+import org.apache.beehive.netui.test.databinding.beans.b40682.Report;
+import org.apache.beehive.netui.test.databinding.beans.b40682.Company;
+
+// java imports
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.Serializable;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+
+// external imports
+
+/**
+ *
+ */
+public class Controller
+    extends PageFlowController
+{
+    private Report[] reports = null;
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        initReports();
+
+        return new Forward("index", "reports", reports);
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward editCompanies()
+    {
+        return new Forward("index");
+    }
+
+    private void initReports()
+    {
+        reports = new Report[4];
+
+        reports[0] = new Report();
+        reports[0].setNumber(0);
+        reports[0].setCompanies(new Company[] {new Company("RHAT", "Up"), new Company("SUNW", "Down")});
+        reports[0].setUrl("http://nyc-db-07.jpmorganchase.com/IBGCMWEB.NSF/GCMRCDSSpreadWidenersNACurrent?ReadForm");
+        reports[0].setText("CDS Spread Wideners Report - NA");
+
+        reports[1] = new Report();
+        reports[1].setNumber(1);
+        reports[1].setCompanies(null);
+        reports[1].setUrl("http://nyc-db-07.jpmorganchase.com/IBGCMWEB.NSF/GCMRCDSSpreadWidenersEMEACurrent?ReadForm");
+        reports[1].setText("CDS Spread Wideners Report - EMEA");
+
+        reports[2] = new Report();
+        reports[2].setNumber(2);
+        reports[2].setCompanies(null);
+        reports[2].setUrl("http://nyc-db-07.jpmorganchase.com/IBGCMWEB.NSF/GCMRCDSSpreadWidenersEMEACurrent?ReadForm");
+        reports[2].setText("CDS Spread Wideners Report - BARFOO");
+
+        reports[3] = new Report();
+        reports[3].setNumber(3);
+        reports[3].setCompanies(null);
+        reports[3].setUrl("http://nyc-db-07.jpmorganchase.com/IBGCMWEB.NSF/GCMRCDSSpreadWidenersEMEACurrent?ReadForm");
+        reports[3].setText("CDS Spread Wideners Report - FOOBAR");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40862/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40862/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ page import="org.apache.beehive.netui.test.databinding.beans.b40682.Report" %>
+<%@ page import="org.apache.beehive.netui.test.databinding.beans.b40682.Company" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+
+
+
+<table cellpadding="0" width="100%" cellspacing="0">
+    <tr>
+            <td height="215" valign="top" class="Overline">
+                  <table width="100%" border="0" cellpadding="2" cellspacing="0" class="portaltext">
+                    <!--DWLayoutTable-->
+                    <tr>
+                      <td valign="top"> <p><strong>Reports &amp; Research</strong>
+                          <span class="hightlite">(<em>Web</em> Notes Login Required)</span>
+                          <br />
+
+                            <netui-data:getData resultId="reports" value="${pageInput.reports}"></netui-data:getData>
+
+                            <netui-data:repeater dataSource="pageInput.reports">
+                                <netui-data:repeaterHeader></netui-data:repeaterHeader>
+                                <netui-data:repeaterItem>
+                                    <p>
+                                        <netui:anchor href="${container.item.url}">
+                                            <netui:label value="${container.item.text}"/>
+                                        </netui:anchor>
+                                    &nbsp;&nbsp;
+                                        <netui:anchor action="editCompanies">
+                                            edit
+                                            <netui:parameter name="reportNo" value="${container.item.number}"/>
+                                        </netui:anchor>
+                                    <p>
+                                    <!-- If there is a list of companies, render them here -->
+                                    <netui-data:getData resultId="companies" value="${container.item.companies}"></netui-data:getData>
+                                    <netui-data:getData resultId="url" value="${container.item.url}"></netui-data:getData>
+                                    <netui-data:getData resultId="text" value="${container.item.text}"></netui-data:getData>
+
+                                    <%
+                                        Report[] reports = (Report[]) pageContext.getAttribute("reports");
+                                        Company[] companies = (Company[]) pageContext.getAttribute("companies");
+                                        String url = (String) pageContext.getAttribute("url");
+                                        String text = (String) pageContext.getAttribute("text");
+
+                                        if (companies != null)
+                                        {
+                                    %>
+                                    <table border=1>
+                                        <tr>
+                                    <%
+                                            for (int i=0; i < companies.length; i++ )
+                                                if ( companies[i] != null && !companies[i].getSymbol().equals("") )
+                                                {
+                                                    if ( !companies[i].getStatus().equals("Down") )
+                                                    {
+                                    %>
+                                        <td><font color="red"><%=companies[i].getSymbol()%></font></td>
+                                    <%
+                                                    }
+                                                    else
+                                                    {
+                                    %>
+                                        <td><font color="blue"><%=companies[i].getSymbol()%></font></td>
+                                    <%
+                                                    }
+                                                }
+                                    %>
+                                        </tr>
+                                    </table>
+                                    <%
+                                        }
+                                    %>
+                                </netui-data:repeaterItem>
+                                <netui-data:repeaterFooter></netui-data:repeaterFooter>
+                            </netui-data:repeater>
+
+                        </td>
+                    </tr>
+                  </table>
+                </td>
+        </tr>
+
+</table>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,207 @@
+package bugs.b40999;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/accesskeyGroups/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="420" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:post.do#accesskeyGroups.Controller.MyBean">
+ *   <property value="200" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:page2.jsp@#@action:begin.do@">
+ *   <property value="336,360,360,384" name="elbowsX"/>
+ *   <property value="272,272,163,163" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:page2.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="384,360,360,336" name="elbowsX"/>
+ *   <property value="152,152,52,52" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#page2.jsp#@action:post.do#accesskeyGroups.Controller.MyBean@">
+ *   <property value="236,250,250,264" name="elbowsX"/>
+ *   <property value="152,152,272,272" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:accesskeyGroups.Controller.MyBean#type#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:accesskeyGroups.Controller.MyBean#attributes#java.lang.String[]"/>
+ * <pageflow-object id="formbean:accesskeyGroups.Controller.MyBean"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:post.do#accesskeyGroups.Controller.MyBean@">
+ *   <property value="264,240,240,216" name="elbowsX"/>
+ *   <property value="52,52,52,52" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/accesskeyGroups/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:post.do#accesskeyGroups.Controller.MyBean'>",
+        "  <property value='200' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:page2.jsp@#@action:begin.do@'>",
+        "  <property value='336,360,360,384' name='elbowsX'/>",
+        "  <property value='272,272,163,163' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:page2.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='384,360,360,336' name='elbowsX'/>",
+        "  <property value='152,152,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#page2.jsp#@action:post.do#accesskeyGroups.Controller.MyBean@'>",
+        "  <property value='236,250,250,264' name='elbowsX'/>",
+        "  <property value='152,152,272,272' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:accesskeyGroups.Controller.MyBean#type#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:accesskeyGroups.Controller.MyBean#attributes#java.lang.String[]'/>",
+        "<pageflow-object id='formbean:accesskeyGroups.Controller.MyBean'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do#accesskeyGroups.Controller.MyBean@'>",
+        "  <property value='264,240,240,216' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    
+    public String altText = "PageFlow Text for Alt";
+    public String[] types = {"foo","bar","baz"};
+    public String[] colors = {"red","blue","yellow"}; 
+    public String[] attributes = {"fenders", "wheels", "windows"};
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="page2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "page2.jsp") 
+        })
+    protected Forward post(MyBean form)
+    {
+        return new Forward("success","form",form);
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class MyBean extends FormData
+    {
+        private String[] attributes;
+
+        private String color;
+
+        private boolean disabled;
+
+        private String name;
+
+        private String type;
+
+        private String description;
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType()
+        {
+            return this.type;
+        }
+
+        public void setAttributes(String[] attributes)
+        {
+            this.attributes = attributes;
+        }
+
+        public String[] getAttributes()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.attributes == null || this.attributes.length == 0)
+            {
+                this.attributes = new String[1];
+            }
+
+            return this.attributes;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <br>
+        <netui:form action="post">
+            <table>
+                <tr valign="top">
+                    <td>Attributes:</td>
+                    <td>
+                    <netui:checkBoxGroup dataSource="actionForm.attributes[0]" optionsDataSource="${colors}"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <netui:radioButtonGroup dataSource="actionForm.type" optionsDataSource="${colors}"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="post" type="submit"/>
+        </netui:form>
+        <br>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/page2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b40999/page2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="form" type="accesskey.Controller.MyBean"/>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin" accessKey="H">Home</netui:anchor><br/>
+        <b>Attributes:</b><br/>
+        <netui-data:repeater dataSource="pageInput.form.attributes">
+            <netui-data:repeaterHeader><ol></netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <li>
+                    <netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label>
+                </li>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></ol></netui-data:repeaterFooter>
+        </netui-data:repeater><br>
+        <b>Type:</b> <netui:label value="${pageInput.form.type}"></netui:label><br/>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b41391/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b41391/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,185 @@
+package bugs.b41391;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.Map;
+import java.util.LinkedHashMap;
+
+/**
+ * Controller for testing the interaction of the ignoreNulls attribute and the repeater's padding
+ * feature.
+ *
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/Controller.jpf"/>
+ * <pageflow-object id="page:index.jsp">
+ *   <property name="x" value="220"/>
+ *   <property name="y" value="80"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:error.jsp">
+ *   <property name="x" value="220"/>
+ *   <property name="y" value="160"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do">
+ *   <property name="x" value="60"/>
+ *   <property name="y" value="80"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property name="elbowsY" value="72,72,72,72"/>
+ *   <property name="elbowsX" value="96,140,140,184"/>
+ *   <property name="toPort" value="West_1"/>
+ *   <property name="fromPort" value="East_1"/>
+ *   <property name="label" value="index"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/Controller.jpf'/>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property name='x' value='220'/>",
+        "  <property name='y' value='80'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:error.jsp'>",
+        "  <property name='x' value='220'/>",
+        "  <property name='y' value='160'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property name='x' value='60'/>",
+        "  <property name='y' value='80'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property name='elbowsY' value='72,72,72,72'/>",
+        "  <property name='elbowsX' value='96,140,140,184'/>",
+        "  <property name='toPort' value='West_1'/>",
+        "  <property name='fromPort' value='East_1'/>",
+        "  <property name='label' value='index'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    public String[] _nullArray = null;
+    public String[] _emptyArray = null;
+    public String[] _sparseArray_lastNull = null;
+    public String[] _sparseArray_firstNull = null;
+    public String[] _denseArray = null;
+    public String[] _sparseArray_endsNull = null;
+    public String[] _sparseArray_oddNull = null;
+    public String[] _sparseArray_evenNull = null;
+    public String[] _sparseArray_middleNonNull = null;
+    
+    public Map _testMap = null;
+
+    public String[] getNullArray() {return _nullArray;}
+    public String[] getEmptyArray() {return _emptyArray;}
+    public String[] getSparseArray_lastNull() {return _sparseArray_lastNull;}
+    public String[] getSparseArray_firstNull() {return _sparseArray_firstNull;}
+    public String[] getDenseArray() {return _denseArray;}
+    public String[] getSparseArray_endsNull() {return _sparseArray_endsNull;}
+    public String[] getSparseArray_oddNull() {return _sparseArray_oddNull;}
+    public String[] getSparseArray_evenNull() {return _sparseArray_evenNull;}
+    public String[] getSparseArray_middleNonNull() {return _sparseArray_middleNonNull;}
+    public Map getTestMap() {return _testMap;}
+
+    protected void onCreate()
+    {
+        // all null
+        _emptyArray = new String[5];
+
+        // all non-null
+        _denseArray = new String[5];
+        
+        // 0, 2, 4 non-null; 1, 3 null
+        _sparseArray_firstNull = new String[5];
+
+        // 1, 3 non-null; 0, 2, 4 null
+        _sparseArray_lastNull = new String[5];
+
+        // 0, 4 null; 1, 2, 3 non-null
+        _sparseArray_endsNull = new String[5];
+
+        // 0, 2, 4 non-null; 1, 3 null
+        _sparseArray_oddNull = new String[5];
+
+        // 1, 3 non-null; 0, 2, 4 null
+        _sparseArray_evenNull = new String[5];
+
+        // 2 non-null; 0, 1, 3, 4 null
+        _sparseArray_middleNonNull = new String[5];
+        
+        for(int i = 0; i < 5; i++)
+        {
+            String val = "String: " + i;
+            if(i == 0)
+            {
+                _sparseArray_lastNull[i] = val;
+                _sparseArray_firstNull[i] = null;
+            }
+            else if(i == 4)
+            {
+                _sparseArray_firstNull[i] = val;
+                _sparseArray_lastNull[i] = null;
+            }
+            else
+            {
+                _sparseArray_lastNull[i] = val;
+                _sparseArray_firstNull[i] = val;
+            }
+            
+            if(i == 2)
+            {
+                _sparseArray_middleNonNull[i] = val;
+            }
+
+            if(i % 2 == 0)
+            {
+                _sparseArray_oddNull[i] = val;
+            }
+            else
+            {
+                _sparseArray_evenNull[i] = val;
+            }
+            
+            if(i > 0 && i < 4)
+                _sparseArray_endsNull[i] = val;
+            
+            _denseArray[i] = val;
+        }
+
+        _testMap = new LinkedHashMap();
+        _testMap.put("Null Array", _nullArray);
+        _testMap.put("Empty Array", _emptyArray);
+        _testMap.put("Dense Array", _denseArray);
+        _testMap.put("SparseArray_firstNull", _sparseArray_firstNull);
+        _testMap.put("SparseArray_lastNull", _sparseArray_lastNull);
+        _testMap.put("SparseArray_endsNull", _sparseArray_endsNull);
+        _testMap.put("SparseArray_oddNull", _sparseArray_oddNull);
+        _testMap.put("SparseArray_evenNull", _sparseArray_evenNull);
+        _testMap.put("SpraseArray_middleNonNull", _sparseArray_middleNonNull);
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+    
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b41391/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b41391/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,162 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>Repeater Test</title>
+  </head>
+  <body>
+    <p>
+      <b>Repeater Test</b>
+      <br/>
+      <br/>
+<netui-data:getData resultId="testMap" value="${pageFlow.testMap}"/>
+<%
+java.util.Map map = ((java.util.Map)pageContext.getAttribute("testMap"));
+java.util.Iterator iterator = map.keySet().iterator();
+while(iterator.hasNext())
+{
+    String text = (String)iterator.next();
+    pageContext.setAttribute("text", text);
+    if(map.get(text) != null)
+        pageContext.setAttribute("array", map.get(text));
+
+%>
+<h1><netui:label value="${pageScope.text}"/></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+<netui-data:repeater dataSource="pageContext.array">
+    <netui-data:repeaterHeader>
+        <ol>
+    </netui-data:repeaterHeader>
+    <netui-data:repeaterItem>
+        <li><netui:label value="${container.item}" defaultValue="&nbsp;"/></li>
+    </netui-data:repeaterItem>
+    <netui-data:repeaterFooter>
+        </ol>
+    </netui-data:repeaterFooter>
+</netui-data:repeater>
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        <netui-data:repeater dataSource="pageContext.array">
+            <netui-data:repeaterHeader>
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            </netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter>
+                <tr><td>End Table</td></tr>
+                </table>
+            </netui-data:repeaterFooter>
+        </netui-data:repeater>
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        <netui-data:repeater dataSource="pageContext.array" ignoreNulls="true">
+            <netui-data:repeaterHeader>
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            </netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter>
+                <tr><td>End Table</td></tr>
+                </table>
+            </netui-data:repeaterFooter>
+        </netui-data:repeater>
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        <netui-data:repeater dataSource="pageContext.array">
+            <netui-data:repeaterHeader>
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            </netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter>
+                <tr><td>End Table</td></tr>
+                </table>
+            </netui-data:repeaterFooter>
+            <netui-data:pad minRepeat="10">
+                <tr><td><netui:label value="Pad text: ${container.index}"/></td></tr>
+            </netui-data:pad>
+        </netui-data:repeater>
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        <netui-data:repeater dataSource="pageContext.array" ignoreNulls="true">
+            <netui-data:repeaterHeader>
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            </netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter>
+                <tr><td>End Table</td></tr>
+                </table>
+            </netui-data:repeaterFooter>
+            <netui-data:pad minRepeat="10">
+                <tr><td><netui:label value="Pad text: ${container.index}"/></td></tr>
+            </netui-data:pad>
+        </netui-data:repeater>
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        <netui-data:repeater dataSource="pageContext.array">
+            <netui-data:repeaterHeader>
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            </netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter>
+                <tr><td>End Table</td></tr>
+                </table>
+            </netui-data:repeaterFooter>
+            <netui-data:pad maxRepeat="1">
+                <tr><td><netui:label value="Pad text: ${container.index}"/></td></tr>
+            </netui-data:pad>
+        </netui-data:repeater>
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        <netui-data:repeater dataSource="pageContext.array" ignoreNulls="true">
+            <netui-data:repeaterHeader>
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            </netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter>
+                <tr><td>End Table</td></tr>
+                </table>
+            </netui-data:repeaterFooter>
+            <netui-data:pad maxRepeat="1">
+                <tr><td><netui:label value="Pad text: ${container.index}"/></td></tr>
+            </netui-data:pad>
+        </netui-data:repeater>
+        <hr/>
+<%
+     }
+%>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42065/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42065/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+package bugs.b42065;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/b42065/Controller.jpf"/>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/b42065/Controller.jpf'/>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+    private  Integer[] checkOptions = {new Integer(40), null, new Integer(32), new Integer(10)};
+    private Integer[] value = {null, new Integer(32)};
+    private Integer radioValue = new Integer(32); 
+
+    public Integer[] getCheckOptions() {
+        return checkOptions;
+    }
+    public Integer[] getValue() {
+        return value;
+    }
+    public Integer getRadioValue() {
+        return radioValue;
+    }
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+       return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42065/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42065/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:checkBoxGroup dataSource="pageFlow.value" optionsDataSource="${pageFlow.checkOptions}"></netui:checkBoxGroup><br/>
+        <netui:radioButtonGroup dataSource="pageFlow.radioValue" optionsDataSource="${pageFlow.checkOptions}"></netui:radioButtonGroup><br/>
+        <netui:select dataSource="pageFlow.value" optionsDataSource="${pageFlow.checkOptions}"></netui:select><br/>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42486/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42486/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+/*
+ *
+ */
+package bugs.b42486;
+
+// java imports
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.*;
+
+// external imports
+
+/**
+ *
+ */
+public class Controller
+    extends PageFlowController
+{
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("index");
+    }
+
+    public Iterator getFoo() 
+    { 
+        LinkedHashMap map = new LinkedHashMap(); 
+        map.put( "a", "b" ); 
+        return map.entrySet().iterator(); 
+    } 
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42486/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42486/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Radar 42486 Repro</title>
+  </head>
+  <body>
+    <b>Radar 42486 Repro</b>
+
+<netui-data:repeater dataSource="pageFlow.foo"> 
+    <netui-data:repeaterHeader><ol></netui-data:repeaterHeader>
+    <netui-data:repeaterItem> 
+        <li><netui:label value="${container.item.key}"/> & <netui:label value="${container.item.value}"/></li>
+    </netui-data:repeaterItem> 
+    <netui-data:repeaterFooter></ol></netui-data:repeaterFooter>
+</netui-data:repeater> 
+
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42558/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42558/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+/*
+ *
+ */
+package bugs.b42558;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+// external imports
+
+public class Controller
+    extends PageFlowController
+{
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("index");
+    }
+
+    public String sayHello(String name)
+    {
+        //return "Hello, " + name + "!";
+        throw new RuntimeException("Something bad happened.");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42558/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b42558/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>B42558 Repro</title>
+  </head>
+
+  <body>
+    <h1>B42558 Repro</h1>
+
+<netui-data:callPageFlow method="sayHello" resultId="helloText" failOnError="true">
+    <netui-data:methodParameter value="Homer"/>
+</netui-data:callPageFlow>
+
+<br/>
+Page Flow said: <netui:label value="${pageScope.helloText}"/>
+<br/>
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b43011/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b43011/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+package bugs.b43011;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller 
+    extends PageFlowController
+{
+
+    public String field1 = "foo";
+    
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward postback()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b43011/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/b43011/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            New Web Application Page
+        </p>
+<netui:form action="postback">
+    <netui:textBox dataSource="pageFlow.field1"/><br/>
+    <netui:textBox dataSource="pageFlow.field1"/><br/>
+    <netui:button>POST</netui:button>
+</netui:form>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Wed Aug 27 09:36:05 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package bugs.cr121496;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ */
+public class Controller extends PageFlowController
+{
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+    
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+    
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward post()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <netui:form action="post">
+            <netui:anchor formSubmit="true">
+                <netui:parameter name="prop2" value="foo"></netui:parameter>
+                Foo</netui:anchor>
+            <netui:anchor formSubmit="true">
+                <netui:parameter name="prop2" value="bar"></netui:parameter>
+                Bar</netui:anchor>
+        </netui:form>
+        <hr/>
+        <netui:form action="post">
+            <netui:anchor formSubmit="true">
+                <netui:parameter name="prop2" value="not foo"></netui:parameter>
+                Foo</netui:anchor>
+            <netui:anchor formSubmit="true">
+                <netui:parameter name="prop2" value="not bar"></netui:parameter>
+                Bar</netui:anchor>
+        </netui:form>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr121496/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin">Home</netui:anchor><br>
+        Prop2: <netui:label value="${param.prop2}"></netui:label> 
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr124972/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr124972/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+package bugs.cr124972;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/cr124972/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:next.do">
+ *   <property value="420" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:next.do@">
+ *   <property value="276,330,330,384" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:next.do@">
+ *   <property value="384,330,330,276" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/cr124972/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:next.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:next.do@'>",
+        "  <property value='276,330,330,384' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:next.do@'>",
+        "  <property value='384,330,330,276' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward next()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr124972/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr124972/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+        <netui:base />
+    </head>
+    <body>
+    <netui:anchor action="next">
+            <netui:parameter name="foo" value="This is a value with spaces and '&' and '?' in it"/>
+            Next</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr132760/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr132760/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,65 @@
+package bugs.cr132760;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+        value = { 
+            "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+            "<view-properties>", 
+            "<pageflow-object id='action:begin.do'>", 
+            "  <property value='80' name='x'/>", 
+            "  <property value='100' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+            "  <property value='116,150,150,184' name='elbowsX'/>", 
+            "  <property value='92,92,92,92' name='elbowsY'/>", 
+            "  <property value='East_1' name='fromPort'/>", 
+            "  <property value='West_1' name='toPort'/>", 
+            "  <property value='index' name='label'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='page:index.jsp'>", 
+            "  <property value='220' name='x'/>", 
+            "  <property value='100' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='action:post.do'>", 
+            "  <property value='340' name='x'/>", 
+            "  <property value='100' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do@'>", 
+            "  <property value='256,280,280,304' name='elbowsX'/>", 
+            "  <property value='92,92,92,92' name='elbowsY'/>", 
+            "  <property value='East_1' name='fromPort'/>", 
+            "  <property value='West_1' name='toPort'/>", 
+            "</pageflow-object>", 
+            "</view-properties>"
+        }
+    )
+public class Controller extends PageFlowController
+{
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+         
+    
+    @Jpf.Action()    
+    protected Forward post()    
+    {
+       Forward success = new Forward("success");
+       
+       return success;
+    }
+
+         }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr132760/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr132760/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+    <p style="color:#339900;">This test will result in an error message because there is a &lt;netui:button> that
+    points to an action that doesn't exist.  This is reported as an error.
+    <hr>
+        <netui:form action="post">
+            <netui:button type="submit" action="buttonPost" value="Post"></netui:button>
+        </netui:form>
+        
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr137279/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr137279/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+package bugs.cr137279;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tags.tree.TreeElement;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+        value = { 
+            "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+            "<view-properties>", 
+            "<pageflow-object id='action:begin.do'>", 
+            "  <property value='80' name='x'/>", 
+            "  <property value='100' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+            "  <property value='116,150,150,184' name='elbowsX'/>", 
+            "  <property value='92,92,92,92' name='elbowsY'/>", 
+            "  <property value='East_1' name='fromPort'/>", 
+            "  <property value='West_1' name='toPort'/>", 
+            "  <property value='success' name='label'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='page:index.jsp'>", 
+            "  <property value='220' name='x'/>", 
+            "  <property value='100' name='y'/>", 
+            "</pageflow-object>", 
+            "</view-properties>"
+        }
+    )
+public class Controller extends PageFlowController
+{
+    public TreeElement tree;
+    public TreeElement treeTwo;
+    public TreeElement treeThree;
+    
+    @Jpf.Action(
+        forwards={
+        @Jpf.Forward(name = "index", path = "index.jsp")}
+    )
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr137279/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr137279/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+        <p style="color:#339900;">This test demonstrates two bad action errors within a &lt;netui:richTree>.  There are
+        three trees.  The first is a working tree.  The second has a bad selectionAction in the &lt;richTree>
+        tag.  The third has a bad action the first &lt;node> contained inside the tree.  The second
+        and third should result in errors being displayed.
+        <hr>
+        <netui:richTree selectionAction="begin"  dataSource="pageFlow.tree" tagId="treeOne">
+            <netui:treeItem>
+                <netui:treeLabel>1.0</netui:treeLabel>
+                <netui:treeItem>1.1</netui:treeItem>
+                <netui:treeItem>1.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        <hr>
+        <h4>Tree Action Error</h4>
+        <netui:richTree selectionAction="badAction" dataSource="pageFlow.treeTwo" tagId="treeTwo">
+            <netui:treeItem>
+                <netui:treeLabel>1.0</netui:treeLabel>
+                <netui:treeItem>1.1</netui:treeItem>
+                <netui:treeItem>1.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        <hr>
+        <h4>TreeNode Action Error</h4>
+        <netui:richTree selectionAction="begin" dataSource="pageFlow.treeThree" tagId="treeThree">
+            <netui:treeItem>
+                <netui:treeLabel>1.0</netui:treeLabel>
+                <netui:treeItem action="badAction">1.1</netui:treeItem>
+                <netui:treeItem>1.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        <hr>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr176508/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr176508/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,92 @@
+package bugs.cr176508;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:postback.do'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+        "  <property value='116,150,150,184' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='index' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:postback.do@'>", 
+        "  <property value='344,300,300,256' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postback.do@'>", 
+        "  <property value='256,300,300,344' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    public Object[] getOptions() {
+        return options;
+    }
+    public String[] getSelectVals() {
+        return selectVals;
+    }
+    public String[] getOptionsTwo() {
+        return optionsTwo;
+    }
+    public Object[] getSelectValsTwo() {
+        return selectValsTwo;
+    }
+                           
+    
+    private Object[] options = {new Integer(1), new Integer(2), new Integer(3)};
+    private String[] selectVals = {"1","3"};
+    
+    private String[] optionsTwo = {"1","2","3"};
+    private Object[] selectValsTwo = {new Integer(1), new Integer(3)};
+    
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+    @Jpf.Action(forwards = { 
+        @Jpf.Forward(name = "success", path = "index.jsp")
+    })    
+    protected Forward postback()    
+    {
+       Forward forward = new Forward("success");
+       
+       return forward;
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr176508/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr176508/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+        <p style="color:#339900;">This test verifies that within a select box the proper options are selected based upon
+        the values of the dataSource.  The test will compare an Integer to a String and then the
+        other way around. In both cases (1) and (3) should be selected.  Postback on the
+        second select doesn't work correctly because the array type is Integer.
+        <hr>
+        <netui:form action="postback">
+            <netui:select dataSource="pageFlow.selectVals" optionsDataSource="${pageFlow.options}" multiple="true" size="3"></netui:select><br><br>
+            <netui:select dataSource="pageFlow.selectValsTwo" optionsDataSource="${pageFlow.optionsTwo}" multiple="true" size="3"></netui:select><br>
+            <netui:button type="submit" value="Submit"></netui:button>
+        </netui:form>
+        
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr180865/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr180865/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+package bugs.cr180865;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:postback.do'>", 
+        "  <property value='440' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+        "  <property value='116,140,140,164' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='index' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postback.do@'>", 
+        "  <property value='256,330,330,404' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:postback.do@'>", 
+        "  <property value='404,330,330,256' name='elbowsX'/>", 
+        "  <property value='81,81,81,81' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+
+
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "index.jsp")
+})
+        protected Forward postback()        {
+        Forward forward = new Forward("success");
+        
+                return forward;
+    }
+             }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr180865/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr180865/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html runAtClient="true">
+    <head>
+        <netui:base/>
+        <netui:scriptHeader divPanelSupport="true" />
+    <body>
+        <p style="color:#339900;">This is a test of the &lt;divPanel>.  There are three links which change the currently
+        displayed page.  Each 'page' contains a link.  When the link is pressed, we hit the postback
+        link and redisplay the page.  What should happen is that the current page inside the &lt;divPanel>
+        should still be the same one that was posted back.
+        <hr>
+        <netui:anchor clientAction='divpanel.showPage("page1");'>page One</netui:anchor>&nbsp;&nbsp;&nbsp;
+        <netui:anchor clientAction='divpanel.showPage("page2");'>page Two</netui:anchor>&nbsp;&nbsp;&nbsp;
+        <netui:anchor clientAction='divpanel.showPage("page3");'>page Three</netui:anchor>
+        <hr>
+        <netui-template:divPanel tagId="divpanel">
+            <netui-template:section name="page1">
+                Page One<br>
+                <netui:anchor action="postback">postback</netui:anchor>
+            </netui-template:section>
+            
+            <netui-template:section name="page2">            
+                Page Two<br>
+                <netui:anchor action="postback">postback</netui:anchor>
+            </netui-template:section>
+            
+            <netui-template:section name="page3">            
+                Page Three<br>
+                <netui:anchor action="postback">postback</netui:anchor>
+            </netui-template:section>
+        </netui-template:divPanel>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr183774/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr183774/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,94 @@
+package bugs.cr183774;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+        "  <property value='116,140,140,164' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='index' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:testAction.do#cr183774.Controller.FooForm'>", 
+        "  <property value='340' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:testAction.do@'>", 
+        "  <property value='256,280,280,304' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:testAction.do@'>", 
+        "  <property value='304,280,280,256' name='elbowsX'/>", 
+        "  <property value='81,81,81,81' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='formbean:FooForm'/>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+
+
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "index.jsp")
+})
+        protected Forward testAction(bugs.cr183774.Controller.FooForm form)        {
+        Forward success = new Forward("success");
+        
+                return success;
+    }
+
+    public static class FooForm extends FormData
+    {
+        private String foo;
+
+        private String bar;
+
+        public String getFoo()
+        { return this.foo; }
+
+        public void setFoo(String foo)
+        { this.foo = foo; }
+
+        public String getBar()
+        { return this.bar; }
+
+        public void setBar(String bar)
+        { this.bar = bar; }
+    }
+                }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr183774/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/bugs/cr183774/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+    <p style="color:#009900;">This test contains two hidden fields inside a form with the tagId attribute set.  The
+    result should be an id attribute set in the resulting html.  No need to postback.
+    <hr>
+    <netui:form action="testAction">
+            <netui:hidden dataSource="actionForm.bar" tagId="barId"/>
+            <netui:hidden dataSource="actionForm.foo" tagId="fooId"/>
+            <netui:button type="submit" value="TestAction"></netui:button>
+        </netui:form>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/checkboxDemo/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/checkboxDemo/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<html>
+<head>
+<title>Checkbox Demo</title>
+</head>
+<body>
+<h4>Checkbox Demo</h4>
+<netui:form action="/postback">
+<db:repeater dataSource="pageFlow.fileInfo.files">
+<db:repeaterHeader>
+<table>
+</db:repeaterHeader>
+<db:repeaterItem>
+<tr><td><netui:label value="${container.item.file}"/></td><td>
+<td><netui:checkBox dataSource="container.item.selected"/></td></tr>
+</db:repeaterItem>
+<db:repeaterFooter>
+</table>
+</db:repeaterFooter>
+</db:repeater>
+<br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<b>Results:</b><br />
+<db:repeater dataSource="pageFlow.fileInfo.files">
+<db:repeaterHeader>
+<ul>
+</db:repeaterHeader>
+<db:repeaterItem>
+    <db:callMethod object="${pageFlow}" method="displayElement" resultId="result">
+       <db:methodParameter value="${container.item.selected}"/>
+    </db:callMethod>
+    <c:if test="${pageScope.result == 'include'}">
+       <li><netui:label value="${container.item.file}"/></li>
+    </c:if>
+</db:repeaterItem>
+<db:repeaterFooter>
+</ul>
+</db:repeaterFooter>
+</db:repeater>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/checkboxDemo/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/checkboxDemo/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package checkboxDemo;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import javax.servlet.ServletRequest;
+import org.apache.struts.action.ActionMapping;
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    public Form fileInfo;
+
+    public static class FileInfo implements java.io.Serializable
+    {
+        private String _file;
+        private boolean _selected;
+
+        public String getFile() {return _file;}
+        public void setFile(String file) {_file = file;}
+        public boolean getSelected() {return _selected;}
+        public void setSelected(boolean selected) {_selected = selected;}
+    }
+
+    public static class Form extends FormData
+    {
+        public Form() {
+            files = new FileInfo[6];
+        }
+        public FileInfo[] files;
+
+        public void reset(ActionMapping mapping, ServletRequest request) {
+            files = new FileInfo[6];
+        }
+    }
+
+    public String displayElement(boolean type)
+    {
+        return (type) ? "include" : "exclude";
+    }
+
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin",form);
+    }
+
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        Form f = new Form();
+        f.files = new FileInfo[5];
+        for (int i=0;i<f.files.length;i++) {
+            f.files[i] = new FileInfo();
+            f.files[i].setFile("File-" + i);
+        }
+        fileInfo = f;
+        return new Forward("begin",f);
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,77 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri May 09 14:33:27 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package controlTests.callingPageFlow;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <view-properties>
+ *   <pageflow-object id="action:begin.do">
+ *     <property value="80" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:index.jsp">
+ *     <property value="240" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<view-properties>",
+        "  <pageflow-object id='action:begin.do'>",
+        "    <property value='80' name='x'/>",
+        "    <property value='100' name='y'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='page:index.jsp'>",
+        "    <property value='240' name='x'/>",
+        "    <property value='100' name='y'/>",
+        "  </pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    public String callableMethod(String str) {
+        return "Calling callableMethod(String) '" + str + "'";
+    }
+    
+    public String callableMethod(int i) {
+        return "Calling callableMethod(int) '" + i + "'";
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/Controller.jpf.disabled
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/Controller.jpf.disabled	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,77 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri May 09 14:33:27 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package controlTests.callingPageFlow;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <view-properties>
+ *   <pageflow-object id="action:begin.do">
+ *     <property value="80" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:index.jsp">
+ *     <property value="240" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<view-properties>",
+        "  <pageflow-object id='action:begin.do'>",
+        "    <property value='80' name='x'/>",
+        "    <property value='100' name='y'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='page:index.jsp'>",
+        "    <property value='240' name='x'/>",
+        "    <property value='100' name='y'/>",
+        "  </pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    public String callableMethod(String str) {
+        return "Calling callableMethod(String) '" + str + "'";
+    }
+    
+    public String callableMethod(int i) {
+        return "Calling callableMethod(int) '" + i + "'";
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/callingPageFlow/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui-data:callPageFlow method="callableMethod" resultId="call1"><netui-data:methodParameter type="java.lang.String" value="String"></netui-data:methodParameter></netui-data:callPageFlow>
+        <netui:label value="${pageScope.call1}"></netui:label> <br><netui-data:callPageFlow method="callableMethod" resultId="call2"><netui-data:methodParameter type="int" value="2"></netui-data:methodParameter></netui-data:callPageFlow>
+        <netui:label value="${pageScope.call2}"></netui:label>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/getData/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/getData/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package controlTests.getData;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String[] _stuff = {"Foo", "Bar", "Baz", "Blee"};
+
+    public String[] getStuff() {return _stuff;}
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/getData/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/controlTests/getData/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            GetData Test
+        </title>
+    </head>
+    <body>
+        <netui-data:getData resultId="foo" value="${pageFlow.stuff}" />
+        <netui-data:repeater dataSource="pageContext.foo">
+            <netui-data:repeaterHeader><table cellspacing="0" cellpadding="4" border="1"
+                class="tablebody" ></netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+        </netui-data:repeater>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,110 @@
+package databinding.anybean;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+        value = { 
+            "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+            "<view-properties>", 
+            "<pageflow-object id='formbean:Customer'/>", 
+            "<pageflow-object id='action:begin.do'>", 
+            "  <property value='80' name='x'/>", 
+            "  <property value='100' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+            "  <property value='116,140,140,164' name='elbowsX'/>", 
+            "  <property value='92,92,92,92' name='elbowsY'/>", 
+            "  <property value='East_1' name='fromPort'/>", 
+            "  <property value='West_1' name='toPort'/>", 
+            "  <property value='index' name='label'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='action:showAnyBeanForm.do'>", 
+            "  <property value='320' name='x'/>", 
+            "  <property value='220' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='forward:path#success#updateAnyBean.jsp#@action:showAnyBeanForm.do@'>", 
+            "  <property value='320,320,320,320' name='elbowsX'/>", 
+            "  <property value='264,280,280,296' name='elbowsY'/>", 
+            "  <property value='South_1' name='fromPort'/>", 
+            "  <property value='North_1' name='toPort'/>", 
+            "  <property value='success' name='label'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='action:updateAnyBean.do#Customer'>", 
+            "  <property value='320' name='x'/>", 
+            "  <property value='460' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='forward:path#success#updateAnyBean.jsp#@action:updateAnyBean.do#Customer@'>", 
+            "  <property value='320,375,375,356' name='elbowsX'/>", 
+            "  <property value='504,504,332,332' name='elbowsY'/>", 
+            "  <property value='South_1' name='fromPort'/>", 
+            "  <property value='East_1' name='toPort'/>", 
+            "  <property value='success' name='label'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='page:index.jsp'>", 
+            "  <property value='220' name='x'/>", 
+            "  <property value='100' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='page:updateAnyBean.jsp'>", 
+            "  <property value='320' name='x'/>", 
+            "  <property value='340' name='y'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='action-call:@page:index.jsp@#@action:showAnyBeanForm.do@'>", 
+            "  <property value='231,231,257,284' name='elbowsX'/>", 
+            "  <property value='144,212,212,212' name='elbowsY'/>", 
+            "  <property value='South_2' name='fromPort'/>", 
+            "  <property value='West_1' name='toPort'/>", 
+            "</pageflow-object>", 
+            "<pageflow-object id='action-call:@page:updateAnyBean.jsp@#@action:updateAnyBean.do#Customer@'>", 
+            "  <property value='320,320,320,320' name='elbowsX'/>", 
+            "  <property value='384,400,400,416' name='elbowsY'/>", 
+            "  <property value='South_1' name='fromPort'/>", 
+            "  <property value='North_1' name='toPort'/>", 
+            "</pageflow-object>", 
+            "</view-properties>"
+        }
+    )
+public class Controller extends PageFlowController
+{
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "updateAnyBean.jsp")})    
+    protected Forward showAnyBeanForm()    
+    {   
+       Forward forward = new Forward("success");
+       
+       return forward;
+    }
+
+    @Jpf.Action(forwards = { 
+        @Jpf.Forward(name = "success", path = "updateAnyBean.jsp")
+    })    
+    protected Forward updateAnyBean(Customer form)    
+    {
+       Forward forward = new Forward("success");
+       forward.addActionOutput("name", form.getName());
+       return forward;
+    }
+    
+    public static class Customer
+    {
+        private String _name = null;
+        
+        public String getName() {return _name;}
+        public void setName(String name) {_name = name;}
+    }
+}
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+        <netui:anchor action="showAnyBeanForm">AnyBean Form</netui:anchor>
+        <br/>
+        <br/>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/updateAnyBean.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/anybean/updateAnyBean.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="postedForm" type="databinding.anybean.Controller.Customer"/>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+        <netui:form action="updateAnyBean">
+            <table>
+                <tr valign="top">
+                    <td>Name:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.name"/>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            &nbsp;
+            <netui:button type="submit" value="updateAnyBean"/>
+        </netui:form>
+        <br/>
+        <br/>
+        POSTed value: <netui:label value="${pageInput.name}"/>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basic/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basic/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+/*
+ *
+ */
+package databinding.bundle.basic;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.Globals;
+
+// external imports
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(name = "index", path = "index.jsp")
+    }
+)
+public class Controller 
+    extends PageFlowController
+{
+    @Jpf.Action()
+    public Forward begin()
+    {
+        System.out.println("JPF messages: " + getRequest().getAttribute(Globals.MESSAGES_KEY));
+        return new Forward("index");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basic/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basic/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page language="java" %>
+<%@ page import="java.util.Map"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple Bundle Tests</title>
+  </head>
+  <body>
+    <b>Simple Bundle Tests</b>
+    <netui-data:declareBundle name="myBundle" bundlePath="properties.bundle1"/>
+    <p>
+    <netui:label value="${bundle.myBundle.message1}"/><br/>
+    <br/>
+    Multi-word message key: <netui:label value="${bundle.myBundle['multi.word.key']}"/><br/>
+    <br/>
+    </p>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicerror/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicerror/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+/*
+ *
+ */
+package databinding.bundle.basicerror;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.Globals;
+
+// external imports
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(name = "index", path = "index.jsp")
+    }
+)
+public class Controller 
+    extends PageFlowController
+{
+    @Jpf.Action()
+    public Forward begin()
+    {
+        System.out.println("JPF messages: " + getRequest().getAttribute(Globals.MESSAGES_KEY));
+        return new Forward("index");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicerror/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicerror/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" %>
+<%@ page import="java.util.Map"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple Bundle Tests</title>
+  </head>
+  <body>
+    <b>Simple Bundle Error Tests</b>
+    <p>
+    <netui-data:declareBundle name="default" bundlePath="properties.bundle1"/>
+    </p>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicnojpf/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/basicnojpf/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            Bundle Test
+        </title>
+    </head>
+    <body>
+       <netui-data:declareBundle name="foo"
+                bundlePath="error/Errors"/>
+       <netui-data:declareBundle name="bar"
+                bundlePath="error/Text"/>
+        Bundle Messages:
+        <ul>
+        <li><b>[</b><netui:label value='${bundle["foo"].BundleString}'/><b>]</b>
+        <li><b>[</b><netui:label value='${bundle["bar"].BundleString}'/><b>]</b>
+        <li><b>[</b><netui:label value='${bundle["foo"].BundleString2}'/><b>]</b>
+        <li><b>[</b><netui:label value='${bundle["bar"].BundleString2}'/><b>]</b>
+        <li><b>[</b><netui:label value='${bundle["foo"].$$}'/><b>]</b>
+        <li><b>[</b><netui:label value='${bundle["bar"].$$}'/><b>]</b>
+        </ul>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundle/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundle/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+/*
+ *
+ */
+package databinding.bundle.declarebundle;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.Globals;
+
+// external imports
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(name = "index", path = "index.jsp")
+    }
+)
+public class Controller 
+    extends PageFlowController
+{
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        System.out.println("JPF messages: " + getRequest().getAttribute(Globals.MESSAGES_KEY));
+        return new Forward("index");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundle/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundle/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<netui-data:declareBundle name="bundle1" bundlePath="properties/bundle1"/>
+<netui-data:declareBundle language="de" name="germanBundle1" bundlePath="properties/bundle1"/>
+<netui-data:declareBundle name="bundle2" bundlePath="properties.resources.bundle2"/>
+<netui-data:declareBundle name="!@$%%^&" bundlePath="properties/resources/strangeName"/>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Bundle Binding Tests</title>
+  </head>
+  <body>
+    <b>Bundle Binding Tests</b>
+    <br/>
+    bundle.bundle1.message1: <netui-html:label value="${bundle.bundle1.message1}"/><br/>
+    bundle.germanBundle1.message1: <netui-html:label value="${bundle.germanBundle1.message1}"/><br/>
+    bundle["!@$%%^&"].message1: <netui-html:label value='${bundle["!@$%%^&"].message1}'/><br/>
+    bundle["bundle2"].message1: <netui-html:label value='${bundle["bundle2"].message1}'/><br/>
+    bundle.bundle2.message2: <netui-html:label value='${bundle.bundle2.message2}'/><br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundleerror/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundleerror/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+/*
+ *
+ */
+package databinding.bundle.declarebundleerror;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.Globals;
+
+// external imports
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(name = "index", path = "index.jsp")
+    })
+public class Controller 
+    extends PageFlowController
+{
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        System.out.println("JPF messages: " + getRequest().getAttribute(Globals.MESSAGES_KEY));
+        return new Forward("index");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundleerror/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/declarebundleerror/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>declareBundle Binding Error Tests</title>
+    <netui-data:declareBundle name="bundle1" bundlePath="properties/bundle1"/>
+    <netui-data:declareBundle language="de" name="germanBundle1" bundlePath="properties/bundle1"/>
+    <netui-data:declareBundle name="bundle2" bundlePath="properties.resources.bundle2"/>
+    <netui-data:declareBundle name="!@$%%^&" bundlePath="properties/resources/strangeName"/>
+  </head>
+  <body>
+    <b>Bundle Binding Tests</b>
+<b>Empty declareBundle.name attribute</b><br/>
+<netui-data:declareBundle name="" bundlePath="/properties/nonExistent"/>
+<br/>
+<br/>
+<b>Empty declareBundle.bundlePath attribute</b><br/>
+<netui-data:declareBundle name="foo" bundlePath=""/>
+<br/>
+<b>Empty declareBundle.bundlePath and declareBundle.name attributes</b><br/>
+<netui-data:declareBundle name="foo" bundlePath=""/>
+<br/>
+<%
+    pageContext.setAttribute("bundle", new java.util.ArrayList());
+%>
+<b>Whacking the BundleContext.KEY attribute with another type</b><br/>
+<netui-data:declareBundle name="foo" bundlePath="/properties/foo"/>
+<br/>
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/struts/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/struts/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+/*
+ *
+ */
+package databinding.bundle.struts;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.Globals;
+
+// external imports
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(name = "index", path = "index.jsp")
+    },
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "properties.struts.StrutsMessages"),
+        @Jpf.MessageResource(
+            bundleKey = "namedStrutsMessages",
+            name = "properties.struts.NamedStrutsMessages") 
+    })
+public class Controller 
+    extends PageFlowController
+{
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        System.out.println("JPF messages: " + getRequest().getAttribute(Globals.MESSAGES_KEY));
+        return new Forward("index");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/struts/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/bundle/struts/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" %>
+<%@ page import="org.apache.beehive.netui.script.common.BundleMap,org.apache.struts.Globals"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Struts Interop i18n Tests</title>
+  </head>
+  <body>
+    <b>Struts Interop i18n Tests</b>
+    <p>
+    default bundle: <netui:label value="${bundle.default.myStrutsMessage}"/><br/>
+    double quotes: <netui:label value="${bundle[\"namedStrutsMessages/databinding/bundle/struts\"].myStrutsMessage}"/><br/>
+    single quotes: <netui:label value="${bundle['namedStrutsMessages/databinding/bundle/struts'].myStrutsMessage}"/><br/>
+    <br/>
+    <br/>
+    </p>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+/*
+ *
+ */
+package databinding.callMethod.callMethod;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+// external imports
+
+/**
+ *
+ */
+public class Controller
+    extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+    public String saySomething()
+    {
+        return "Something! -- anon. Page Flow Controller";
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>callMethod Tag Test</title>
+  </head>
+  <body>
+    <b>callMethod Tag Test</b>
+<netui-data:callMethod object="${pageFlow}" method="saySomething" resultId="whatWasSaid"/>
+<netui:label value="${pageScope.whatWasSaid}"/>
+<br/>
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/variousMethods.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callMethod/variousMethods.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,65 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Various callMethod Test</title>
+  </head>
+  <body>
+    <b>Various callMethod Test</b>
+<%
+    databinding.callMethod.CallMethodType cm = new databinding.callMethod.CallMethodType();
+request.setAttribute("callMethodType", cm);
+%>
+<b>Calls on an arbitrary Java object with callMethod</b>
+<br/>
+<!-- test 1 -->
+<netui-data:callMethod object="${requestScope.callMethodType}" resultId="publicMethod" method="publicMethod"/>
+<netui:label value="${pageScope.publicMethod}"/>
+<br/>
+<br/>
+<!-- test 2 -->
+<netui-data:callMethod object="${requestScope.callMethodType}" resultId="protectedMethod" method="protectedMethod"/>
+<netui:label value="${pageScope.protectedMethod}"/>
+<br/>
+<br/>
+<!-- test 3 -->
+<netui-data:callMethod object="${requestScope.callMethodType}" resultId="privateMethod" method="privateMethod"/>
+<netui:label value="${pageScope.privateMethod}"/>
+<br/>
+<br/>
+<!-- test 4 -->
+<netui-data:callMethod object="${requestScope.callMethodType}" resultId="publicStaticMethod" method="publicStaticMethod"/>
+<netui:label value="${pageScope.publicStaticMethod}"/>
+<br/>
+<br/>
+<!-- test 5 -->
+<netui-data:callMethod object="${requestScope.callMethodType}" resultId="publicMethodZeroArg" method="publicMethodZeroArg"/>
+<netui:label value="${pageScope.publicMethodZeroArg}"/>
+<br/>
+<br/>
+<!-- test 6 -->
+<netui-data:callMethod object="${requestScope.callMethodType}" resultId="publicMethodOneArg" method="publicMethodOneArg">
+    <netui-data:methodParameter value="123"/>
+</netui-data:callMethod>
+<netui:label value="${pageScope.publicMethodOneArg}"/>
+<br/>
+<br/>
+<!-- test 7 -->
+<netui-data:callMethod object="${requestScope.callMethodType}" resultId="publicMethodTwoArg" method="publicMethodTwoArg">
+    <netui-data:methodParameter value="123"/>
+    <netui-data:methodParameter value="456"/>
+</netui-data:callMethod>
+<netui:label value="${pageScope.publicMethodTwoArg}"/>
+<br/>
+<br/>
+<br/>
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Wed Sep 10 12:14:17 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Wed Sep 10 12:43:31 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,174 @@
+/*
+ *
+ */
+package databinding.callMethod.callPageFlow;
+
+// java imports
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.Serializable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+// external imports
+
+/**
+ *
+ */
+public class Controller
+    extends PageFlowController
+{
+    private String defaultText = "Some Default Text";
+
+    private Cart cart = null;
+
+    public String getDefaultText()
+    {
+        return defaultText;
+    }
+
+    public String echo(String echo)
+    {
+        return echo;
+    }
+
+    public Cart getCart()
+    {
+        return cart;
+    }
+
+    public Double sumCartItems(List items)
+    {
+        if(items == null) return new Double(0);
+
+        double sum = 0;
+        for(int i = 0; i < items.size(); i++)
+        {
+            LineItem item = (LineItem)items.get(i);
+            sum += item.getQuantity() * item.getPrice();
+        }
+
+        return new Double(sum);
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="SumTest" path="sumTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "SumTest",
+                path = "sumTest.jsp") 
+        })
+    public Forward SumTest()
+    {
+        if(cart == null)
+            cart = initCart();
+
+        return new Forward("SumTest");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="SimpleTest" path="simpleTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "SimpleTest",
+                path = "simpleTest.jsp") 
+        })
+    public Forward SimpleTest()
+    {
+        return new Forward("SimpleTest");
+    }
+
+    /**
+     * @jpf:action 
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        cart = initCart();
+        return new Forward("index");
+    }
+
+    private Cart initCart()
+    {
+        Cart c = new Cart();
+        c.addItem(new LineItem("Product A", 3, 9.95, 1, true));
+        c.addItem(new LineItem("Product C", 2, 19.95, 2, false));
+        c.addItem(new LineItem("Product B", 5, 29.95, 3, true));
+        c.addItem(new LineItem("Product D", 1, 39.95, 4, true));
+        c.addItem(new LineItem("Product E", 3, 59.95, 3, false));
+        c.addItem(new LineItem("Product F", 2, 1.95, 2, false));
+        c.addItem(new LineItem("Product G", 2, 4.95, 2, true));
+
+        return c;
+    }
+
+    public static class Cart
+        implements Serializable
+    {
+        private List items = null;
+        
+        public void addItem(LineItem item)
+        {
+            if(items == null) items = new ArrayList();
+
+            items.add(item);
+        }
+
+        public List getLineItemList()
+        {
+            return items;
+        }
+
+        public LineItem[] getLineItemArray()
+        {
+            if(items == null) return null;
+            else return (LineItem[])items.toArray();
+        }
+    }
+
+    public static class LineItem
+        implements Serializable
+    {
+        public static final int NOT_SHIPPED = 1;
+        public static final int IN_TRANSIT = 2;
+        public static final int ARRIVED = 3;
+        public static final int UNKNOWN = 4;
+
+        private String name = null;
+        private int quantity = 0;
+        private double price = 0.0;
+        private int shipState = NOT_SHIPPED;
+        private boolean inStock = false;
+
+        public LineItem(String name, int quantity, double price, int shipState, boolean inStock)
+        {
+            this.name = name;
+            this.quantity = quantity;
+            this.price = price;
+            this.shipState = shipState;
+            this.inStock = inStock;
+        }
+
+        public String getName() {return name;}
+        public double getPrice() {return price;}
+        public int getQuantity() {return quantity;}
+        public int getShipState() {return shipState;}
+        public boolean getInStock() {return inStock;}
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Call Page Flow Tests</title>
+  </head>
+
+  <body>
+    <b>Call Page Flow Tests</b><br/>
+<netui:anchor action="SimpleTest.do">SimpleTest</netui:anchor><br/>
+<netui:anchor action="SumTest.do">SumTest</netui:anchor><br/>
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/simpleTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/simpleTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple JSP -&gt; JPF Test</title>
+  </head>
+
+  <body>
+    <b>Call Page Flow Tests</b><br/>
+<netui-data:callPageFlow resultId="jpfText" method="getDefaultText"/>
+PageFlow defaultText = <netui:label value="${pageScope.jpfText}"/><br/>
+<br/>
+
+<netui-data:callPageFlow resultId="jpfSaid" method="echo">
+    <netui-data:methodParameter value="Hello JSP Page"/>
+</netui-data:callPageFlow>
+
+PageFlow said: <netui:label value="${pageScope.jpfSaid}"/><br/>
+<br/>
+<br/>
+<netui:anchor action="begin">Home</netui:anchor>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/sumTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/callPageFlow/sumTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple JSP -&gt; JPF Test</title>
+    <link rel="stylesheet" href="../default.css" type="text/css"/>
+  </head>
+
+  <body>
+    <b>Call Page Flow Tests</b><br/>
+<netui-data:callPageFlow resultId="cart" method="getCart"/>
+
+<netui-data:repeater dataSource="pageFlow.cart.lineItemList">
+    <netui-data:repeaterHeader>
+        <table class="table">
+        <tr class="tablehead"><td>Name</td><td>Quantity</td><td>Price</td></tr>
+    </netui-data:repeaterHeader>
+    <netui-data:repeaterItem>
+        <tr class="row">
+        <td><netui:label value="${container.item.name}"/></td>
+        <td><center><netui:label value="${container.item.quantity}"/></center></td>
+        <td><netui:label value="${container.item.price}">
+                <netui:formatNumber pattern="$#,###,###.00"/>
+            </netui:label>
+        </td>
+        </tr>
+    </netui-data:repeaterItem>
+    <netui-data:repeaterFooter>
+        <tr>
+            <td></td>
+            <td>Sum:</td>
+            <td>
+            <netui-data:callPageFlow resultId="cartSum" method="sumCartItems">
+                <netui-data:methodParameter value="${pageFlow.cart.lineItemList}"/>
+            </netui-data:callPageFlow>
+            <netui:label value="${pageScope.cartSum}">
+                <netui:formatNumber pattern="$#,###,###.00"/>
+            </netui:label>
+            </td>
+         </tr>
+        </table>
+    </netui-data:repeaterFooter>
+</netui-data:repeater>
+<br/>
+<br/>
+<netui:anchor action="begin">Home</netui:anchor>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/overloading/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/overloading/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+/*
+ *
+ */
+package databinding.callMethod.overloading;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+// external imports
+
+/**
+ * @jpf:forward name="index" path="index.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "index",
+            path = "index.jsp") 
+    })
+public class Controller
+    extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("index");
+    }
+
+    public String foo(Integer oInt)
+    {
+        return "called the method: foo(Integer oInt)";
+    }
+
+    public String foo(int pInt)
+    {
+        return "called the method: foo(int pInt)";
+    }
+
+    public String foo()
+    {
+        return "called the method: foo()";
+    }
+
+    public String foo(String oString)
+    {
+        return "called the method: foo(String oString)";
+    }
+
+    public String foo(String oString, Integer pInt)
+    {
+        return "called the method: foo(String oString, Integer pInt)";
+    }
+
+    public String foo(String oString, int pInt)
+    {
+        return "called the method: foo(String oString, int pInt)";
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/overloading/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/overloading/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>CallMethod Overloading Test</title>
+  </head>
+
+  <body>
+    <b>CallMethod Overloading Test</b>
+<br/>
+<br/>
+<b>foo()</b>
+<netui-data:callPageFlow method="foo" resultId="test1"/>
+<netui-html:label value="${pageScope.test1}"/>
+<br/>
+<b>foo(Integer)</b>
+<netui-data:callPageFlow method="foo" resultId="test2">
+    <netui-data:methodParameter value="42" type="java.lang.Integer"/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test2}"/>
+<br/>
+<b>foo(int)</b>
+<netui-data:callPageFlow method="foo" resultId="test3">
+    <netui-data:methodParameter value="42" type="int"/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test3}"/>
+<br/>
+<br/>
+<b>foo(String, int)</b>
+<netui-data:callPageFlow method="foo" resultId="test4">
+    <netui-data:methodParameter value="null" type="java.lang.String"/>
+    <netui-data:methodParameter value="42" type="int"/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test4}"/>
+<br/>
+<br/>
+<b>foo(String, Integer)</b>
+<netui-data:callPageFlow method="foo" resultId="test5">
+    <netui-data:methodParameter value="null" type="java.lang.String"/>
+    <netui-data:methodParameter value="42" type="java.lang.Integer"/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test5}"/>
+<br/>
+<br/>
+<b>foo(String)</b>
+<netui-data:callPageFlow method="foo" resultId="test6">
+    <netui-data:methodParameter value="42" type="java.lang.String"/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test6}"/>
+<br/>
+<br/>
+<b>Error tests</b>
+<br/>
+<b>foo(int)</b>
+<netui-data:callPageFlow method="foo" resultId="test100">
+    <netui-data:methodParameter type="java.lang.STring" value="42"/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test100}"/>
+<br/>
+<br/>
+<b>foo(String, int)</b>
+<netui-data:callPageFlow method="foo" resultId="test101">
+    <netui-data:methodParameter value="42" type="int"/>
+    <netui-data:methodParameter value="asdf" type="java.lang.String"/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test101}"/>
+<br/>
+<br/>
+<b>foo(Integer)</b>
+<netui-data:callPageFlow method="foo" resultId="test102">
+    <netui-data:methodParameter value="42" type="FooBar"/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test102}"/>
+<br/>
+<br/>
+<b>foo(?)</b>
+<netui-data:callPageFlow method="foo" resultId="test103">
+    <netui-data:methodParameter value="42" type=""/>
+</netui-data:callPageFlow>
+<netui-html:label value="${pageScope.test103}"/>
+<br/>
+<br/>
+    <hr>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/returnNull/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/returnNull/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+/*
+ *
+ */
+package databinding.callMethod.returnNull;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+// external imports
+
+/**
+ *
+ */
+public class Controller
+    extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("index");
+    }
+
+    public String getNullValue()
+    {
+        return null;
+    }
+
+    public String getNonNullValue()
+    {
+        return "Hello World!";
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/returnNull/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/callMethod/returnNull/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>CallMethod Null Return Test</title>
+  </head>
+
+  <body>
+    <b>CallMethod Null Return Test</b><br/>
+    <br/>
+<b>Non-Null return value</b><br/>
+<netui-data:callPageFlow method="getNonNullValue" resultId="jpfSays"/>
+\${pageScope.jpfSays}: <netui:label value="${pageScope.jpfSays}"/>
+
+<br/>
+<br/>
+<b>Null return value</b><br/>
+<netui-data:callMethod object="${pageFlow}" method="getNullValue" resultId="jpfSays"/>
+\${pageScope.jpfSays}: <netui:label value="${pageScope.jpfSays}"/>
+<br/>
+<br/>
+    <b>Via code:</b> <%= pageContext.getAttribute("jpfSays") %>
+
+    <hr>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/cellRepeater/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/cellRepeater/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,161 @@
+<%@ page language="java" %>
+<%@ page import="org.apache.beehive.netui.util.HtmlExceptionFormatter" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Cell Repeater</title>
+    <link rel="stylesheet" href="../default.css" type="text/css"/>
+  </head>
+
+  <body>
+    <b>Cell Repeater</b>
+<%
+Integer[] smallItemArray = new Integer[4];
+for(int i = 0; i < smallItemArray.length; i++)
+{
+    smallItemArray[i] = new Integer(i);
+}
+pageContext.setAttribute("smallItemArray", smallItemArray);
+String[] itemArray = new String[17];
+for(int i = 0; i < itemArray.length; i++)
+{
+    itemArray[i] = new String("" + i);
+}
+pageContext.setAttribute("itemArray", itemArray);
+
+String[] zeroArray = new String[0];
+pageContext.setAttribute("zeroArray", zeroArray);
+
+pageContext.setAttribute("columnsStr", "4");
+pageContext.setAttribute("rowsStr", "5");
+pageContext.setAttribute("badRowsStr", "abcd");
+%>
+<br/>
+<b><%= itemArray.length %> Item Array</b>
+<br/>
+<br/>
+<b>4x5 with <%= itemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" rows="4" columns="5" 
+                         tableClass="table" cellClass="cell" alternatingCellClass="altCell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>4x5 with <%= itemArray.length %> items and databound row / column sizes</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" rows="${pageScope.rowsStr}" 
+                         columns="${pageScope.columnsStr}" 
+                         tableClass="table" cellClass="cell" alternatingCellClass="altCell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>4x5 (vert) with <%= itemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" rows="4" columns="5" verticalRepeat="true" 
+                         tableClass="table" cellClass="altCell" alternatingCellClass="cell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>Small <%= smallItemArray.length %> Item Array</b><br/>
+<br/>
+<b>1x5 with <%= smallItemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.smallItemArray" rows="1" columns="5">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>1x5 (vert) with <%= smallItemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.smallItemArray" rows="1" columns="5" verticalRepeat="true">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>5x1 with <%= smallItemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.smallItemArray" rows="5" columns="1">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>5x1 (vert) with <%= smallItemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.smallItemArray" rows="5" columns="1" verticalRepeat="true">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>1x1 with <%= smallItemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.smallItemArray" rows="1" columns="1">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>1x1 (vert) with <%= smallItemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.smallItemArray" rows="1" columns="1" verticalRepeat="true">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>2x2 (horiz) with <%= smallItemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.smallItemArray" rows="2" columns="2">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>2x2 (vert) with <%= smallItemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.smallItemArray" rows="2" columns="2" verticalRepeat="true">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>Zero Item Array</b>
+<br/>
+<netui-data:cellRepeater dataSource="pageContext.zeroArray" rows="4" columns="5">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<netui-data:cellRepeater dataSource="pageContext.zeroArray" rows="4" columns="5" verticalRepeat="true">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<b>Zero Item Array with styles</b>
+<br/>
+<netui-data:cellRepeater dataSource="pageContext.zeroArray" rows="4" columns="5"
+                         tableClass="table" cellClass="cell" alternatingCellClass="altCell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>NULL Array</b>
+<br/>
+<netui-data:cellRepeater dataSource="pageContext.nullArray" rows="4" columns="5">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>NULL Array with styles</b>
+<br/>
+<netui-data:cellRepeater dataSource="pageContext.nullArray" rows="4" columns="5"
+                         tableClass="table" cellClass="cell" alternatingCellClass="altCell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<netui-data:cellRepeater dataSource="pageContext.nullArray" rows="4" columns="5" verticalRepeat="true">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>4x5 (vert) with <%= itemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" rows="4" 
+                         verticalRepeat="true" tableClass="table" cellClass="altCell" alternatingCellClass="cell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>4x5 (vert) with <%= itemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" rows="2" 
+                         verticalRepeat="true" tableClass="table" cellClass="altCell" alternatingCellClass="cell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>4x5 (vert) with <%= itemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" columns="2" 
+                         verticalRepeat="true" tableClass="table" cellClass="altCell" alternatingCellClass="cell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<b>4x5 (vert) with <%= itemArray.length %> items</b><br/>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" columns="2" 
+                         verticalRepeat="false" tableClass="table" cellClass="altCell" alternatingCellClass="cell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<br/>
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/cellrepeatererror/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/cellrepeatererror/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+<%@ page language="java" %>
+<%@ page import="org.apache.beehive.netui.util.HtmlExceptionFormatter" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Cell Repeater</title>
+    <link rel="stylesheet" href="../default.css" type="text/css"/>
+  </head>
+
+  <body>
+    <b>Cell Repeater</b>
+<%
+Integer[] smallItemArray = new Integer[4];
+for(int i = 0; i < smallItemArray.length; i++)
+{
+    smallItemArray[i] = new Integer(i);
+}
+pageContext.setAttribute("smallItemArray", smallItemArray);
+String[] itemArray = new String[17];
+for(int i = 0; i < itemArray.length; i++)
+{
+    itemArray[i] = new String("" + i);
+}
+pageContext.setAttribute("itemArray", itemArray);
+
+String[] zeroArray = new String[0];
+pageContext.setAttribute("zeroArray", zeroArray);
+
+pageContext.setAttribute("columnsStr", "4");
+pageContext.setAttribute("rowsStr", "5");
+pageContext.setAttribute("badRowsStr", "abcd");
+%>
+<br/>
+<b><%= itemArray.length %> Item Array</b>
+<br/>
+<br/>
+<b>Expected Failures</b><br/>
+<% try{ %>
+<netui-data:cellRepeater dataSource="pageContext.nullArray" rows="-42" columns="5">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<%}catch(Exception e){out.write(HtmlExceptionFormatter.format("Expected failure, rows < 0", e, false));}%>
+<hr/>
+<% try { %>
+<br/>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" 
+                         verticalRepeat="false" tableClass="table" cellClass="altCell" alternatingCellClass="cell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<% }catch(Exception e)
+{out.write(HtmlExceptionFormatter.format("Expected failure, missing rows and columns", e, false));} %>
+<hr/>
+<%try{%>
+<netui-data:cellRepeater dataSource="pageContext.itemArray" rows="${pageScope.badRowsStr}" 
+                         columns="${pageScope.columnsStr}" 
+                         tableClass="table" cellClass="cell" alternatingCellClass="altCell">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<br/>
+<%}catch(Exception e){out.write(HtmlExceptionFormatter.format("Expected failure, rows expression evaluates to NaN", e, false));}
+%>
+<hr/>
+<%try{%>
+<br/>
+<netui-data:cellRepeater dataSource="pageContext.nullArray" rows="5" columns="-42">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<%}catch(Exception e){out.write(HtmlExceptionFormatter.format("Expected failure, columns < 0", e, false));}%>
+<hr/>
+<% try{ %>
+<netui-data:cellRepeater dataSource="globalApp.noCellRepeaterProperty" rows="-42" columns="5">
+    Item: <netui-html:label value="${container.item}"/>
+</netui-data:cellRepeater>
+<%}catch(Exception e){out.write(HtmlExceptionFormatter.format("Expected failure, rows < 0", e, false));}%>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/controls/methodTest/MethodTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/controls/methodTest/MethodTest.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package databinding.controls.methodTest;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+
+@ControlInterface
+public interface MethodTest
+{
+    public String publicMethod();
+    public String publicMethodZeroArg();
+    public String publicMethodOneArg(int value1);
+    public String publicMethodTwoArg(int value1, int value2);
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/controls/methodTest/MethodTestImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/controls/methodTest/MethodTestImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+/*
+ *
+ */
+package databinding.controls.methodTest;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+
+@ControlImplementation
+public class MethodTestImpl
+{
+    public String publicMethod() {return "public method";}
+    public String publicMethodZeroArg() {return "public method: zero arg";}
+    public String publicMethodOneArg(int value1) {return "public method: value1: " + value1;}
+    public String publicMethodTwoArg(int value1, int value2) {return "public method: value1: " + value1 + " value2: " + value2;}
+}
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+/*
+ *
+ */
+package databinding.datagrid.basic;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+// external imports
+
+/**
+ *
+ */
+public class Controller
+    extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="actionTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "actionTest.jsp") 
+        })
+    public Forward postback()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/actionTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/actionTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<netui-template:template templatePage="../site/template.jsp">
+    <netui-template:setAttribute name="title" value="Basic Data Grid"/>
+    <netui-template:section name="body">
+    <p>
+<%@ include file="../util/portfolioXmlBean.jsp" %>
+<br/>
+<br/>
+<netui-datagrid:dataGrid dataSource="pageContext.stocks" name="portfolio">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="index.jsp" filterAction="index.jsp">
+        <netui-datagrid:literalColumn headerText="Symbol" value="${container.item.symbol}" sortExpression="symbol"/>
+        <netui-datagrid:anchorColumn action="postback" headerText="Web" value="${container.item.name}" sortExpression="web">
+            <netui-datagrid:parameter name="symbol" value="${container.item.symbol}"/>
+            <netui-datagrid:parameter name="rowid" value="${container.index}"/>
+        </netui-datagrid:anchorColumn>
+        <netui-datagrid:literalColumn sortable="false" headerText="Price" value="${container.item.price}"/>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+<br/>
+<br/>
+<%-- hack for dealing with problems in Tomcat 2.3 with JSP 2.0 features --%>
+<%-- <debug:sortFilterPage namespace="portfolio"/> --%>
+<% request.setAttribute("namespace", "portfolio"); %>
+<%@ include file="../util/sortFilterPage.jsp" %>
+<br/>
+<br/>
+<netui:anchor href="index.jsp">Reset</netui:anchor>
+<br/>
+    </p>
+    </netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/anchorParams.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/anchorParams.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<netui-template:template templatePage="../site/template.jsp">
+    <netui-template:setAttribute name="title" value="Basic Data Grid"/>
+    <netui-template:section name="body">
+    <p>
+<%@ include file="../util/portfolioXmlBean.jsp" %>
+<br/>
+<br/>
+<netui-datagrid:dataGrid dataSource="${pageScope.stocks}" name="portfolio">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="index.jsp" filterAction="index.jsp">
+        <netui-datagrid:literalColumn headerText="Symbol" value="${container.item.symbol}" sortExpression="symbol"/>
+        <netui-datagrid:anchorColumn headerText="Web" href="${container.item.web}" value="${container.item.name}" sortExpression="web">
+            <netui:parameter name="symbol" value="${container.item.symbol}"/>
+            <netui:parameter name="rowid" value="${container.index}"/>
+        </netui-datagrid:anchorColumn>
+        <netui-datagrid:literalColumn sortable="false" headerText="Price" value="${container.item.price}"/>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+<br/>
+<br/>
+<%-- hack for dealing with problems in Tomcat 2.3 with JSP 2.0 features --%>
+<%-- <debug:sortFilterPage namespace="portfolio"/> --%>
+<% request.setAttribute("namespace", "portfolio"); %>
+<%@ include file="../util/sortFilterPage.jsp" %>
+<br/>
+<br/>
+<netui:anchor href="index.jsp">Reset</netui:anchor>
+<br/>
+    </p>
+    </netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/formatting.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/formatting.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<netui-template:template templatePage="../site/template.jsp">
+    <netui-template:setAttribute name="title" value="Basic Data Grid"/>
+    <netui-template:section name="body">
+    <p>
+<%@ include file="../util/portfolioXmlBean.jsp" %>
+<br/>
+<br/>
+<netui-datagrid:dataGrid dataSource="pageContext.stocks" name="portfolio">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="index.jsp" filterAction="index.jsp">
+        <netui-datagrid:literalColumn headerText="Symbol" value="${container.item.symbol}" sortExpression="symbol"/>
+        <netui-datagrid:anchorColumn headerText="Web" href="${container.item.web}" value="${container.item.name}" sortExpression="web"/>
+        <netui-datagrid:literalColumn sortable="false" headerText="Price" value="${container.item.price}">
+            <netui:formatNumber pattern="$#,###,###.##" type="currency"/>
+        </netui-datagrid:literalColumn>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+<br/>
+<br/>
+<%-- hack for dealing with problems in Tomcat 2.3 with JSP 2.0 features --%>
+<%-- <debug:sortFilterPage namespace="portfolio"/> --%>
+<% request.setAttribute("namespace", "portfolio"); %>
+<%@ include file="../util/sortFilterPage.jsp" %>
+<br/>
+<br/>
+<netui:anchor href="index.jsp">Reset</netui:anchor>
+<br/>
+    </p>
+    </netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/group.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/group.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<netui-template:template templatePage="../site/template.jsp">
+    <netui-template:setAttribute name="title" value="Data Grid Grouping Test"/>
+    <netui-template:section name="body">
+    <p>
+<%@ include file="../util/bikeCatalogXmlBean.jsp" %>
+<br/>
+<br/>
+<b>Group One</b>
+<br/>
+<netui-datagrid:dataGrid dataSource="pageContext.products" name="bikeParts">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="image.jsp" filterAction="image.jsp" groupDepth="1">
+        <netui-datagrid:literalColumn headerText="Category" value="${container.item.type}" sortExpression="type"/>
+        <netui-datagrid:literalColumn headerText="Name" value="${container.item.name}" sortExpression="name"/>
+        <netui-datagrid:literalColumn headerText="Price" value="${container.item.price}" sortExpression="price"/>
+        <netui-datagrid:imageColumn sortable="false" filterable="false" headerText="Price" 
+                                    src="../resources/image/{container.item.image}" 
+                                    height="50" width="50"/>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+<br/>
+<br/>
+<b>Group Two</b>
+<br/>
+<netui-datagrid:dataGrid dataSource="pageContext.products" name="bikeParts">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="image.jsp" filterAction="image.jsp" groupDepth="1">
+        <netui-datagrid:literalColumn headerText="Category" value="${container.item.type}" sortExpression="type"/>
+        <netui-datagrid:literalColumn headerText="Name" value="${container.item.name}" sortExpression="name"/>
+        <netui-datagrid:literalColumn headerText="Price" value="${container.item.price}" sortExpression="price"/>
+        <netui-datagrid:imageColumn sortable="false" filterable="false" headerText="Price" 
+                                    src="../resources/image/{container.item.image}" 
+                                    height="50" width="50"/>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+<%-- hack for dealing with problems in Tomcat 2.3 with JSP 2.0 features --%>
+<%-- <debug:sortFilterPage namespace="bikeParts"/> --%>
+<% request.setAttribute("namespace", "bikeParts"); %>
+<%@ include file="../util/sortFilterPage.jsp" %>
+<br/>
+<br/>
+</p>
+    </netui-template:section>
+</netui-template:template>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/image.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/image.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<netui-template:template templatePage="../site/template.jsp">
+    <netui-template:setAttribute name="title" value="Data Grid Image Test"/>
+    <netui-template:section name="body">
+    <p>
+<%@ include file="../util/bikeCatalogXmlBean.jsp" %>
+<br/>
+<br/>
+<netui-datagrid:dataGrid dataSource="pageContext.products" name="bikeParts">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="image.jsp" filterAction="image.jsp">
+        <netui-datagrid:literalColumn headerText="Name" value="${container.item.name}" sortExpression="name"/>
+        <netui-datagrid:literalColumn headerText="Price" value="${container.item.price}" sortExpression="price"/>
+        <netui-datagrid:imageColumn sortable="false" filterable="false" headerText="Price" 
+                                    src="../resources/image/{container.item.image}" 
+                                    height="50" width="50"/>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+<br/>
+<br/>
+<netui-datagrid:dataGrid dataSource="pageContext.products" name="bikeParts2">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="image.jsp" filterAction="image.jsp">
+        <netui-datagrid:literalColumn headerText="Name" value="${container.item.name}" sortExpression="name"/>
+        <netui-datagrid:literalColumn headerText="Price" value="${container.item.price}" sortExpression="price"/>
+        <netui-datagrid:imageColumn sortable="false" filterable="false" headerText="Price" 
+                                    src="../resources/image/{container.item.image}" 
+                                    value="Image:"
+                                    height="50" width="50"/>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+<br/>
+<br/>
+<%-- hack for dealing with problems in Tomcat 2.3 with JSP 2.0 features --%>
+<%-- <debug:sortFilterPage namespace="bikeParts"/> --%>
+<% request.setAttribute("namespace", "bikeParts"); %>
+<%@ include file="../util/sortFilterPage.jsp" %>
+<br/>
+<br/>
+<netui:anchor href="image.jsp">Reset</netui:anchor>
+<br/>
+</p>
+    </netui-template:section>
+</netui-template:template>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/basic/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<netui-template:template templatePage="../site/template.jsp">
+    <netui-template:setAttribute name="title" value="Basic Data Grid"/>
+    <netui-template:section name="body">
+    <p>
+<%@ include file="../util/portfolioXmlBean.jsp" %>
+<br/>
+<br/>
+<netui-datagrid:dataGrid dataSource="pageContext.stocks" name="portfolio">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="index.jsp" filterAction="index.jsp">
+        <netui-datagrid:literalColumn headerText="Symbol" value="${container.item.symbol}" sortExpression="symbol"/>
+        <netui-datagrid:anchorColumn headerText="Web" href="${container.item.web}" value="${container.item.name}" sortExpression="web">
+            <netui-datagrid:parameter name="rowid" value="${container.index}"/>
+            <netui-datagrid:parameter name="symbol" value="${container.item.symbol}"/>
+        </netui-datagrid:anchorColumn>
+        <netui-datagrid:literalColumn sortable="false" headerText="Price" value="${container.item.price}">
+            <netui:formatNumber pattern="$#,###,###.00" type="currency"/>
+        </netui-datagrid:literalColumn>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+<br/>
+<br/>
+<netui:anchor href="index.jsp">Reset</netui:anchor>
+<br/>
+    </p>
+    </netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/site/css/default.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/site/css/default.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+body, table
+{
+  font-family: Helvetica, sans-serif;
+  font-size: 14px; 
+  font-style: normal; 
+  font-weight: normal; 
+}
+
+table.datagrid {
+  border: 1px solid #666;
+  width: 80%;
+  margin: 20px 0 20px 0;
+}
+
+th.datagrid-header-cell, td.datagrid-data-cell
+{
+  padding: 2px 4px 2px 4px;
+  text-align: left;
+  vertical-align: top;
+}
+
+tr.datagrid-header
+{
+  background-color: #5f7797;
+  color: #ffffff;
+}
+
+tr.datagrid-even
+{
+  background-color: #ffffff;
+}
+
+tr.datagrid-odd
+{
+  background-color:#bfc4cb;
+}
+
+td.datagrid-data-sorted, th.datagrid-header-sorted
+{
+  background-color: #99bb99;
+}
+
+a.sortable 
+{
+  color:#ffffff;
+}
+
+table.debug
+{
+  border: 1px solid #aaaa;
+  width: 20%;
+  margin: 20px 0 20px 0;
+}
+
+th.debug
+{
+  background-color: #dddddd;
+}
+
+hr.debug
+{
+  width: 80%;
+  color: #444444;
+  height: 3px;
+  border-style: dashed;
+}
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/site/template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/site/template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template" %>
+
+<netui:html>
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="<%=request.getContextPath()%>/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <netui:base/>
+  <body>
+    <p>
+    <b><netui-template:attribute name="title"/></b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        <netui-template:includeSection name="body"/>
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><netui:anchor href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</netui:anchor></td></tr>
+    </table>
+    </p>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/bikeCatalogXmlBean.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/bikeCatalogXmlBean.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+
+<%--
+    Create a portfolio XMLBean in pageContext.products
+--%>
+
+<%
+try
+{
+    java.io.InputStream is = pageContext.getServletContext().getResourceAsStream("WEB-INF/classes/xml/bikeCatalog.xml");
+    org.openuri.catalog.CatalogDocument cd = org.openuri.catalog.CatalogDocument.Factory.parse(is);
+    pageContext.setAttribute("products", cd.getCatalog().getProductArray());
+}
+catch(Exception e)
+{
+    out.write("exception: " + e.toString());
+}
+%>  

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/portfolioXmlBean.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/portfolioXmlBean.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+
+<%--
+    Create a portfolio XMLBean in pageContext.stocks
+--%>
+
+<%
+try
+{
+    java.io.InputStream is = pageContext.getServletContext().getResourceAsStream("WEB-INF/classes/xml/portfolio.xml");
+    org.openuri.customerPortfolio.PortfolioDocument pd = org.openuri.customerPortfolio.PortfolioDocument.Factory.parse(is);
+    pageContext.setAttribute("stocks", pd.getPortfolio().getStocks().getStockArray());
+}
+catch(Exception e)
+{
+    out.write("exception: " + e.toString());
+}
+%>  

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/sortFilterPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/datagrid/util/sortFilterPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page import="org.apache.beehive.netui.datagrid.model.IFilter" %>
+<%@ page import="org.apache.beehive.netui.datagrid.model.ISort" %>
+<%@ page import="org.apache.beehive.netui.datagrid.services.FilterService" %>
+<%@ page import="org.apache.beehive.netui.datagrid.services.SortService" %>
+<p>
+<hr class="debug"/>
+<b>Debug Sort / Filter / Page for Data Grid <i><netui:content value="${requestScope.namespace}"/></i></b>
+<br/>
+<br/>
+<%
+String namespace = (String)request.getAttribute("namespace");
+SortService sortService = SortService.getInstance(request, namespace);
+ISort[] sorts = sortService.getSorts();
+pageContext.setAttribute("sorts", sorts);
+%>
+<netui-data:repeater dataSource="pageContext.sorts" defaultText="No sorts available">
+    <netui-data:repeaterHeader>
+        <b>Sorts</b><br/>
+        <table class="debug"><tr><th class="debug">Expression</th><th class="debug">Direction</th></tr> 
+    </netui-data:repeaterHeader>
+    <netui-data:repeaterItem>
+        <tr><td><netui:label value="${container.item.sortExpression}"/></td><td><netui:label value="${container.item.direction}"/></td></tr>
+    </netui-data:repeaterItem>
+    <netui-data:repeaterFooter>
+        </table>
+    </netui-data:repeaterFooter>
+</netui-data:repeater>
+<br/>
+<%
+FilterService filterService = FilterService.getInstance(request, namespace);
+IFilter[] filters = filterService.getFilters();
+pageContext.setAttribute("filters", filters);
+%>
+<%-- the line below should go away when the repeater has a better defaultValue support --%>
+<b>Filters:</b>
+<netui-data:repeater dataSource="pageContext.filters" defaultText="No filters available">
+    <netui-data:repeaterHeader>
+        <b>Filters</b><br/>
+        <table class="debug"><tr><th class="debug">Expression</th><th class="debug">Operation</th><th class="debug">Value</th></tr> 
+    </netui-data:repeaterHeader>
+    <netui-data:repeaterItem>
+        <tr>
+            <td><netui:label value="${container.item.filterExpression}"/></td>
+            <td><netui:label value="${container.item.operation}"/></td>
+            <td><netui:label value="${container.item.value}"/></td>
+        </tr>
+    </netui-data:repeaterItem>
+    <netui-data:repeaterFooter>
+        </table>
+    </netui-data:repeaterFooter>
+</netui-data:repeater>
+<br/>
+<b>Page:</b>
+<br/>
+<hr class="debug"/>
+</p>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/expressions/simple.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/expressions/simple.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>JSP-only Expression Test</title>
+  </head>
+<%
+    pageContext.setAttribute("stringAttr", "Hello World!");
+%>
+  <body>
+    <b>JSP-only Expression Test</b>
+<br/>
+<netui:label value="\{pageScope.stringAttr}"/><br/>
+<netui:label value="${pageScope.stringAttr}"/><br/>
+<netui:label value="\\\{pageScope.stringAttr}"/><br/>
+<netui:label value="\\\\\{pageScope.stringAttr}"/><br/>
+<br/>
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/globalApp/nojpf/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/globalApp/nojpf/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Global App Binding -- no JPF</title>
+  </head>
+
+  <body>
+    <b>Global App Binding -- no JPF</b>
+<br/>
+<br/>
+The Global.app says: <netui:label value="${globalApp.sayHello}"/>
+<br/>
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/jstl/smoke.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/jstl/smoke.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,9 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<html>
+  <body>
+    <c:out value="foobar!!!"/>
+  </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/message/message.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/message/message.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Message Test</title>
+  </head>
+  <body>
+    <b>Message Test</b>
+
+<!-- TEST 1 -->
+<%
+    pageContext.setAttribute("message", new String("Start Message {0} Middle Message {1} End Message"));
+%>
+<netui-data:message value="${pageScope.message}" resultId="endMessage">
+    <netui-data:messageArg value="Arg1"/>
+    <netui-data:messageArg value="Arg2"/>
+</netui-data:message>
+<br/>
+Test 1: <netui:label value="${pageScope.endMessage}"/>
+
+<!-- TEST 2 -->
+<%
+    pageContext.setAttribute("message", new String("No Substitution"));
+%>
+<netui-data:message value="${pageScope.message}" resultId="endMessage">
+    <netui-data:messageArg value="Arg1"/>
+    <netui-data:messageArg value="Arg2"/>
+</netui-data:message>
+<br/>
+Test 2: <netui:label value="${pageScope.endMessage}"/>
+
+<!-- TEST 3 -->
+<%
+    pageContext.setAttribute("message", new String("{-1} {1} {2}"));
+%>
+<netui-data:message value="${pageScope.message}" resultId="endMessage">
+    <netui-data:messageArg value="Arg1"/>
+    <netui-data:messageArg value="Arg2"/>
+</netui-data:message>
+<br/>
+Test 3: <netui:label value="${pageScope.endMessage}"/>
+
+<!-- TEST 4 -->
+<%
+    pageContext.setAttribute("message", new String("foo"));
+%>
+<netui-data:message value="${pageScope.message}" resultId="endMessage">
+    <netui-data:messageArg value="Arg1"/>
+    <netui-data:messageArg value="Arg2"/>
+</netui-data:message>
+<br/>
+Test 4: <netui:label value="${pageScope.endMessage}"/>
+
+<!-- TEST 5 -->
+<netui-data:declareBundle name="bundle1" bundlePath="properties.bundle1"/>
+<netui-data:message value="${bundle.bundle1.messageWithSubs}" resultId="endMessage">
+    <netui-data:messageArg value="Arg1"/>
+    <netui-data:messageArg value="Arg2"/>
+</netui-data:message>
+<br/>
+Test 5: <netui:label value="${pageScope.endMessage}"/>
+
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/arrayRepeater.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/arrayRepeater.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+<%@ page language="java"%>
+<%@ page import="
+  java.util.List,
+  java.util.ArrayList,
+  databinding.SimpleJavaBean" 
+%>
+
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-databinding"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+
+<%
+    if(request.getAttribute("multiItemDataSource") == null)
+    {
+        SimpleJavaBean[] multiItemDataSource = new SimpleJavaBean[10];
+
+        for(int i = 0; i < multiItemDataSource.length; i++)
+        {
+            multiItemDataSource[i] = new SimpleJavaBean(i);
+
+            request.setAttribute("multiItemDataSource", multiItemDataSource);
+        }
+    }
+
+    if(request.getAttribute("singleItemDataSource") == null)
+    {
+        SimpleJavaBean[] singleItemDataSource = new SimpleJavaBean[1];
+        singleItemDataSource[0] = new SimpleJavaBean(0);
+        request.setAttribute("singleItemDataSource", singleItemDataSource);
+    }
+
+    if(request.getAttribute("zeroItemDataSource") == null)
+        request.setAttribute("zeroItemDataSource", (new SimpleJavaBean[0]));
+%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>Array Repeater Tests</title>
+</head>
+<body>
+
+<%@ include file="repeaterBody.jsp" %>
+
+<address><a href="mailto:ekoneil@bea.com">Report Problems</a></address>
+<!-- Created: Wed Aug 07 10:07:00 Mountain Daylight Time 2002 -->
+<!-- hhmts start -->
+Last modified: Sun Jun 27 21:02:24 Mountain Standard Time 2004
+<!-- hhmts end -->
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Repeater Data Structure Tests</title>
+  </head>
+
+  <body>
+    <b>Repeater Data Structure Tests</b>
+<br/>
+<br/>
+<netui:anchor href="arrayRepeater.jsp">Array Repeater</netui:anchor><br/>
+<netui:anchor href="listRepeater.jsp">List Repeater</netui:anchor><br/>
+<netui:anchor href="vectorRepeater.jsp">Vector Repeater</netui:anchor><br/>
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Thu Aug 14 14:24:33 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Thu Aug 14 14:25:26 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/listRepeater.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/listRepeater.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<%@ page language="java"%>
+<%@ page import="
+  java.util.List,
+  java.util.ArrayList,
+  databinding.SimpleJavaBean" 
+%>
+
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-databinding"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+
+<%
+    if(request.getAttribute("multiItemDatasource") == null)
+    {
+        List multiItemDataSource = new ArrayList();  
+
+        for(int i = 0; i < 10; i++)
+        {
+            multiItemDataSource.add(new SimpleJavaBean(i));
+        }
+        request.setAttribute("multiItemDataSource", multiItemDataSource);
+    }
+
+    if(request.getAttribute("singleItemDataSource") == null)
+    {
+        List singleItemDataSource = new ArrayList();
+        singleItemDataSource.add(new SimpleJavaBean(0));
+        request.setAttribute("singleItemDataSource", singleItemDataSource);
+    }
+
+    if(request.getAttribute("zeroItemDataSource") == null)
+        request.setAttribute("zeroItemDataSource", new ArrayList());
+%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>List Repeater Tests</title>
+</head>
+<body>
+
+<%@ include file="repeaterBody.jsp" %>
+
+<address><a href="mailto:ekoneil@bea.com">Report Problems</a></address>
+<!-- Created: Wed Aug 07 10:07:00 Mountain Daylight Time 2002 -->
+<!-- hhmts start -->
+Last modified: Sun Jun 27 21:02:41 Mountain Standard Time 2004
+<!-- hhmts end -->
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/repeaterBody.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/repeaterBody.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,182 @@
+<%@ page import="java.util.ArrayList,java.util.List" %>
+<!-- 
+A generic page that will consume data from some data source 
+This page expects the following data structures:
+
+- multiItemDataSource
+- singleItemDataSource
+- zeroItemDataSource
+- nullItemDataSource
+
+ -->
+<hr/>
+<b>Data Structures</b><br/>
+<%
+out.write("request.getAttribute(\"multiItemDataSource\"): " +
+      (request.getAttribute("multiItemDataSource") == null ? "null" :
+      "not null.  type: " + request.getAttribute("multiItemDataSource").getClass().getName() + "<br/>"));
+out.write("request.getAttribute(\"singleItemDataSource\"): " +
+      (request.getAttribute("singleItemDataSource") == null ? "null" :
+      "not null.  type: " + request.getAttribute("singleItemDataSource").getClass().getName() + "<br/>"));
+out.write("request.getAttribute(\"zeroItemDataSource\"): " +
+      (request.getAttribute("zeroItemDataSource") == null ? "null" :
+      "not null.  type: " + request.getAttribute("zeroItemDataSource").getClass().getName() + "<br/>"));
+out.write("request.getAttribute(\"nullItemDataSource\"): " +
+      (request.getAttribute("nullItemDataSource") == null ? "null" :
+      "not null.  type: " + request.getAttribute("nullItemDataSource").getClass().getName() + "<br/>"));
+%>
+<hr/>    
+<p><b>Repeater Test</b>
+<table><tr><td><a href="index.jsp">Data Structures Home</a></td></tr></table>
+<br>
+<h3>Body Content Tests</h3>
+<%
+List dataSources = new ArrayList();
+dataSources.add("multiItemDataSource");
+dataSources.add("singleItemDataSource");
+dataSources.add("zeroItemDataSource");
+dataSources.add("nullItemDataSource");
+for(int i = 0; i < dataSources.size(); i++)
+{
+    String currentSource = (String)dataSources.get(i);
+    out.write("<br/><br/><h2>Data Set: " + currentSource + "</h2><br/><br/>");
+//     List foo = (List)request.getAttribute(currentSource);
+//     if(foo != null)
+//     {
+//         for(int j = 0; j < foo.size(); j++)
+//         {
+//             System.out.println("foo[" + j + "]: " + foo.get(j));
+//         }
+//     }
+
+    if(request.getAttribute(currentSource) != null)
+        pageContext.setAttribute("currentSource", request.getAttribute(currentSource));
+%>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+<netui-databinding:repeater dataSource="pageContext.currentSource">
+        <tr>
+            <td><netui-html:label value="${container.item.textProperty}"/></td>
+            <td><center><netui-html:label value="${container.item.index}"/></center></td>
+            <td><netui-html:textBox dataSource="container.item.index" size="7"/></td>
+        </tr>
+</netui-databinding:repeater>
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+<netui-databinding:repeater dataSource="pageContext.currentSource">
+    <netui-databinding:repeaterItem>
+        <tr>
+            <td><netui-html:label value="${container.item.textProperty}"/></td>
+            <td><center><netui-html:label value="${container.item.index}"/></center></td>
+            <td><netui-html:textBox dataSource="container.item.index" size="7"/></td>
+        </tr>
+    </netui-databinding:repeaterItem>
+</netui-databinding:repeater>
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+<netui-databinding:repeater dataSource="pageContext.currentSource">
+    <netui-databinding:repeaterHeader>
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    </netui-databinding:repeaterHeader>
+    <netui-databinding:repeaterItem>
+        <tr>
+            <td><netui-html:label value="${container.item.textProperty}"/></td>
+            <td><center><netui-html:label value="${container.item.index}"/></center></td>
+            <td><netui-html:textBox dataSource="container.item.index" size="7"/></td>
+        </tr>
+    </netui-databinding:repeaterItem>
+</netui-databinding:repeater>
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+<netui-databinding:repeater dataSource="pageContext.currentSource">
+    <netui-databinding:repeaterItem>
+        <tr>
+            <td><netui-html:label value="${container.item.textProperty}"/></td>
+            <td><center><netui-html:label value="${container.item.index}"/></center></td>
+            <td><netui-html:textBox dataSource="container.item.index" size="7"/></td>
+        </tr>
+    </netui-databinding:repeaterItem>
+    <netui-databinding:repeaterFooter>
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    </netui-databinding:repeaterFooter>
+</netui-databinding:repeater>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+<netui-databinding:repeater dataSource="pageContext.currentSource">
+    <netui-databinding:repeaterHeader>
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    </netui-databinding:repeaterHeader>
+    <netui-databinding:repeaterItem>
+        <tr>
+            <td><netui-html:label value="${container.item.textProperty}"/></td>
+            <td><center><netui-html:label value="${container.item.index}"/></center></td>
+            <td><netui-html:textBox dataSource="container.item.index" size="7"/></td>
+        </tr>
+    </netui-databinding:repeaterItem>
+    <netui-databinding:repeaterFooter>
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    </netui-databinding:repeaterFooter>
+</netui-databinding:repeater>
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+<netui-databinding:repeater dataSource="pageContext.currentSource">
+    <netui-databinding:repeaterHeader>
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    </netui-databinding:repeaterHeader>
+        <tr>
+            <td><netui-html:label value="${container.item.textProperty}"/></td>
+            <td><center><netui-html:label value="${container.item.index}"/></center></td>
+            <td><netui-html:textBox dataSource="container.item.index" size="7"/></td>
+        </tr>
+</netui-databinding:repeater>
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+<netui-databinding:repeater dataSource="pageContext.currentSource">
+        <tr>
+            <td><netui-html:label value="${container.item.textProperty}"/></td>
+            <td><center><netui-html:label value="${container.item.index}"/></center></td>
+            <td><netui-html:textBox dataSource="container.item.index" size="7"/></td>
+        </tr>
+    <netui-databinding:repeaterFooter>
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    </netui-databinding:repeaterFooter>
+</netui-databinding:repeater>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+<netui-databinding:repeater dataSource="pageContext.currentSource">
+    <netui-databinding:repeaterHeader>
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    </netui-databinding:repeaterHeader>
+        <tr>
+            <td><netui-html:label value="${container.item.textProperty}"/></td>
+            <td><center><netui-html:label value="${container.item.index}"/></center></td>
+            <td><netui-html:textBox dataSource="container.item.index" size="7"/></td>
+        </tr>
+    <netui-databinding:repeaterFooter>
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    </netui-databinding:repeaterFooter>
+</netui-databinding:repeater>
+</table>
+<%}%>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/vectorRepeater.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/dataStructures/vectorRepeater.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+<%@ page language="java"%>
+<%@ page import="
+  java.util.List,
+  java.util.Vector,
+  databinding.SimpleJavaBean" 
+%>
+
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-databinding"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+
+<%
+    if(request.getAttribute("multiItemDatasource") == null)
+    {
+        List multiItemDataSource = new Vector();  
+
+        for(int i = 0; i < 10; i++)
+        {
+            multiItemDataSource.add(new SimpleJavaBean(i));
+
+            request.setAttribute("multiItemDataSource", multiItemDataSource);
+        }
+    }
+
+    if(request.getAttribute("singleItemDataSource") == null)
+    {
+        List singleItemDataSource = new Vector();
+        singleItemDataSource.add(new SimpleJavaBean(0));
+        request.setAttribute("singleItemDataSource", singleItemDataSource);
+    }
+
+    if(request.getAttribute("zeroItemDataSource") == null)
+        request.setAttribute("zeroItemDataSource", new Vector());
+%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>List Repeater Tests</title>
+</head>
+<body>
+
+<%@ include file="repeaterBody.jsp" %>
+
+<address><a href="mailto:ekoneil@bea.com">Report Problems</a></address>
+<!-- Created: Wed Aug 07 10:07:00 Mountain Daylight Time 2002 -->
+<!-- hhmts start -->
+Last modified: Sun Jun 27 21:02:55 Mountain Standard Time 2004
+<!-- hhmts end -->
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/nested/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/nested/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+/*
+ *
+ */
+package databinding.repeater.nested;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+// external imports
+
+/**
+ *
+ */
+public class Controller
+    extends PageFlowController
+{
+    private Data[] dataArray = null;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        dataArray = new Data[5];
+        for(int i = 0; i < dataArray.length; i++)
+        {
+            dataArray[i] = new Data(i);
+        }
+
+        return new Forward("success", "data", dataArray);
+    }
+
+    public static class Data
+        implements java.io.Serializable
+    {
+        private String _name = null;
+        private int[] _vals;
+        
+        public Data(int index)
+        {
+            _name = "Name: " + index;
+            _vals = new int[5];
+            for(int i = 0; i < 5; i++)
+            {
+                _vals[i] = index*10 + index;
+            }
+        }
+
+        public String getName() {return _name;}
+        public int[] getNumbers() {return _vals;}
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<html>
+  <head>
+    <title>Nested Repeaters</title>
+  </head>
+
+  <body>
+    <b>Nested Repeaters</b>
+<table>
+<netui-data:repeater dataSource="pageInput.data">
+    <tr><td><netui:label value="${container.item.name}"/></td></tr>
+    <tr>
+        <td>
+        <table>
+        <netui-data:repeater dataSource="container.item.numbers">
+            <tr><td><netui:label value="${container.item}"/></td></tr>
+        </netui-data:repeater>
+        </table> 
+        </td>
+    </tr>
+</netui-data:repeater>
+</table>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/pad/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/pad/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+/*
+ *
+ */
+package databinding.repeater.pad;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import databinding.SimpleJavaBean;
+
+// external imports
+
+/**
+ *
+ */
+public class Controller
+    extends PageFlowController
+{
+    private transient SimpleJavaBean[] _simpleBeans = null;
+
+    public SimpleJavaBean[] getSimpleJavaBeans()
+    {
+        return _simpleBeans;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        _simpleBeans = init();
+
+        return new Forward("index");
+    }
+
+    private SimpleJavaBean[] init()
+    {
+        SimpleJavaBean[] beans = new SimpleJavaBean[10];
+
+        for(int i = 0; i < beans.length; i++)
+        {
+            beans[i] = new SimpleJavaBean(i);
+        }
+
+        return beans;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/pad/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/pad/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,142 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple Pad Test</title>
+  </head>
+  <body>
+<br/>Note, this data set is a 10 item, non-null dataset.<br/>
+<b>max=10</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="10" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=10, min=10</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="10" minRepeat="10" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=11, min=10</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="11" minRepeat="10" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=22, min=10</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="22" minRepeat="10" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>min=11</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad minRepeat="11" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>min=15</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad minRepeat="15" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>min=15, bodyContent pad</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad minRepeat="15">FOO<br/></netui-data:pad>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>min=15, empty pad</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad minRepeat="15"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=8, min=5</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="8" minRepeat="5" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=5, min=5</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="5" minRepeat="5" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=2, min=2</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="2" minRepeat="2" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=2, min=1</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="2" minRepeat="1" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=1, min=1</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="1" minRepeat="1" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>min=1</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad minRepeat="1" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>max=1</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad maxRepeat="1" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<b>min=0, max=5</b><br/>
+<netui-data:repeater dataSource="pageFlow.simpleJavaBeans">
+    <netui-data:pad minRepeat="0" maxRepeat="5" padText="FOO<br/>"/>
+    <netui-data:repeaterItem>
+        <b>array[<netui-html:label value="${container.item.index}"/>] = <netui-html:label value="${container.item.textProperty}"/></b><br/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+<br/>
+<hr/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/simple/defaultText.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/simple/defaultText.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+<%
+    String[] ary = new String[5];
+for(int i = 0; i < ary.length; i++)
+{
+    ary[i] = "This is String [" + i + "]";
+}
+pageContext.setAttribute("stringArray", ary);
+
+pageContext.setAttribute("emptyList", new java.util.ArrayList());
+pageContext.setAttribute("emptyArray", new String[0]);
+pageContext.setAttribute("tenArrayAllNull", new String[10]);
+%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Default Text Test</title>
+  </head>
+  <body>
+    <h1>Default Text Test</h1>
+<br/>
+<b>defaultText attribute; null dataSource</b><br/>
+<netui-data:repeater dataSource="pageContext.nullArray" defaultText="<b>No Data To Display</b>">
+  <li><netui-html:label value="${container.item}"/></li>
+</netui-data:repeater>
+<br/>
+<br/>
+<b>defaultText attribute; emptyArray (zero length) dataSource</b><br/>
+<netui-data:repeater dataSource="pageContext.emptyArray" defaultText="<b>No Data To Display</b>">
+  <li><netui-html:label value="${container.item}"/></li>
+</netui-data:repeater>
+<br/>
+<br/>
+<b>defaultText attribute; tenArrayAllNull (10 length all null) dataSource</b><br/>
+<netui-data:repeater dataSource="pageContext.tenArrayAllNull" defaultText="<b>No Data To Display</b>">
+  <li><netui-html:label value="${container.item}"/></li>
+</netui-data:repeater>
+<br/>
+<br/>
+<b>defaultText attribute; tenArrayAllNull (10 length all null) dataSource, ignoreNulls</b><br/>
+<netui-data:repeater dataSource="pageContext.tenArrayAllNull" ignoreNulls="true" defaultText="<b>No Data To Display</b>">
+  <li><netui-html:label value="${container.item}"/></li>
+</netui-data:repeater>
+<br/>
+<br/>
+<b>defaultText attribute; header; item; footer; non-null, empty dataSource</b><br/>
+<netui-data:repeater dataSource="pageContext.nullArray" defaultText="<b>No Data To Display</b>">
+    <netui-data:repeaterHeader><table border=1></netui-data:repeaterHeader>
+    <netui-data:repeaterItem><netui-html:label value="${container.item}"/><br/></netui-data:repeaterItem>
+    <netui-data:repeaterHeader></table></netui-data:repeaterHeader>
+</netui-data:repeater>
+<br/>
+<br/>
+<b>defaultText attribute; non-null (5 length String[]) dataSource</b><br/>
+<netui-data:repeater dataSource="pageContext.stringArray" defaultText="<b>No Data To Display</b>">
+  <li><netui-html:label value="${container.item}"/></li>
+</netui-data:repeater>
+<br/>
+<br/>
+<b>defaultText attribute; emptyArray (zero length) dataSource, header/item/footer</b><br/>
+<netui-data:repeater dataSource="pageContext.emptyArray" defaultText="<b>No Data To Display</b>">
+    <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+    <netui-data:repeaterItem><li><netui-html:label value="${container.item}"/></li></netui-data:repeaterItem>
+    <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+</netui-data:repeater>
+<br/>
+<br/>
+<b>defaultText attribute; tenArrayAllNull (10 length all null) dataSource, header/item/footer</b><br/>
+<netui-data:repeater dataSource="pageContext.tenArrayAllNull" defaultText="<b>No Data To Display</b>">
+    <netui-data:repeaterHeader>HEADER<br/><ul></netui-data:repeaterHeader>
+    <netui-data:repeaterItem><li><netui-html:label value="${container.item}"/></li></netui-data:repeaterItem>
+    <netui-data:repeaterFooter></ul>FOOTER<br/></netui-data:repeaterFooter>
+</netui-data:repeater>
+<br/>
+<br/>
+<b>defaultText attribute; tenArrayAllNull (10 length all null) dataSource, ignoreNulls</b><br/>
+<netui-data:repeater dataSource="pageContext.tenArrayAllNull" ignoreNulls="true" defaultText="<b>No Data To Display</b>">
+    <netui-data:repeaterHeader>HEADER<br/><ul></netui-data:repeaterHeader>
+    <netui-data:repeaterItem><li><netui-html:label value="${container.item}"/></li></netui-data:repeaterItem>
+    <netui-data:repeaterFooter></ul>FOOTER<br/></netui-data:repeaterFooter>
+</netui-data:repeater>
+<br/>
+<br/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/simple/ignoreNulls.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/repeater/simple/ignoreNulls.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,65 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Ignore Nulls Test</title>
+  </head>
+
+  <body>
+    <h1>Ignore Nulls Test</h1>
+<br/>
+<br/>
+<%
+pageContext.setAttribute("emptyArray", new String[] {});
+pageContext.setAttribute("denseArray", new String[] {"one", "two", "three"});
+pageContext.setAttribute("sparseArray", new String[] {"one", null, "two", null, "three", null, null});
+%>
+
+<!-- dense array -->
+<br/>
+<b>denseArray, ignoreNulls=true</b><br/>
+<ul>
+<netui-data:repeater dataSource="pageContext.denseArray" ignoreNulls="true">
+    <li><netui:label value="${container.item}"/></li>
+</netui-data:repeater>
+</ul>
+<br/>
+<br/>
+<b>denseArray, ignoreNulls=false</b><br/>
+<ul>
+<netui-data:repeater dataSource="pageContext.denseArray" ignoreNulls="false">
+    <li><netui:label value="${container.item}"/></li>
+</netui-data:repeater>
+</ul>
+<br/>
+
+<!-- sparse array -->
+<br/>
+<b>sparseArray, ignoreNulls=true</b><br/>
+<ul>
+<netui-data:repeater dataSource="pageContext.sparseArray" ignoreNulls="true">
+    <li><netui:label value="${container.item}"/></li>
+</netui-data:repeater>
+</ul>
+<br/>
+<br/>
+<b>sparseArray, ignoreNulls=false</b><br/>
+<ul>
+<netui-data:repeater dataSource="pageContext.sparseArray" ignoreNulls="false">
+    <li><netui:label value="${container.item}"/></li>
+</netui-data:repeater>
+</ul>
+<br/>
+
+
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Thu Jul 24 13:35:16 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Thu Jul 24 15:12:12 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/simplerepeater/simpleRepeater.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/simplerepeater/simpleRepeater.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<netui:html>
+  <head>
+    <title>Simple Repeater Test</title>
+  </head>
+<%
+    String[] strings = {"foo", "bar", "baz", "blee"};
+pageContext.setAttribute("strings", strings);
+%>
+  <body>
+    <b>Simple Repeater Test</b>
+<br/>
+<netui-data:repeater dataSource="pageContext.strings">
+    <netui-data:repeaterHeader>
+        <table>
+    </netui-data:repeaterHeader>
+    <netui-data:repeaterItem>
+        <tr>
+        <td>
+             <netui:label value="${container.item}"/>
+        </td>
+        </tr>
+    </netui-data:repeaterItem>
+    <netui-data:repeaterFooter>
+        </table>
+    </netui-data:repeaterFooter>
+</netui-data:repeater>
+
+    some random whitespace
+    <br/>
+
+    dashes ---- dashes    and dots ... dots
+
+        <br/>
+
+    <hr>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/typeConverter/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/typeConverter/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+/*
+ *
+ */
+package databinding.typeConverter;
+
+// java imports
+
+// internal imports
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import databinding.type.Person;
+
+// external imports
+
+/**
+ * @jpf:forward name="index" path="index.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "index",
+            path = "index.jsp") 
+    })
+public class Controller
+    extends PageFlowController
+{
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        PersonForm form = new PersonForm();
+        return new Forward("index", form);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(PersonForm form)
+    {
+        return new Forward("index");
+    }
+
+    public static class PersonForm
+        extends FormData
+    {
+        private Person person = null;
+        
+        public PersonForm()
+        {
+        }
+
+        public Person getPerson()
+        {
+            return person;
+        }
+
+        public void setPerson(Person person)
+        {
+            this.person = person;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/typeConverter/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/typeConverter/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui-html"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Person Type Converter Test</title>
+  </head>
+
+  <body>
+    <h1>Person Type Converter Test</h1>
+<netui-html:form action="postback">
+<table>
+<tr><td><b>Current Person</b>:</td><td><netui-html:label value="${actionForm.person}"/></td></tr>
+<tr><td>New Person</td><td><netui-html:textBox dataSource="actionForm.person"/></td></tr>
+<tr><td colspan=2><netui-html:button>Submit</netui-html:button></td></tr>
+</table>
+</netui-html:form>
+
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Sat Feb 08 21:17:16 Mountain Standard Time 2003 -->
+<!-- hhmts start -->
+Last modified: Sat Feb 08 21:19:40 Mountain Standard Time 2003
+<!-- hhmts end -->
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/xmlBeans/serialize/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/xmlBeans/serialize/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+/*
+ *
+ */
+package databinding.xmlBeans.serialize;
+
+// java imports
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.InputStream;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+
+// external imports
+import org.openuri.customerprofile.schemas.CustomerProfile;
+
+/**
+ *
+ */
+public class Controller 
+    extends PageFlowController
+{
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+        throws Exception
+    {
+        // get data from somewhere
+        InputStream is = getClass().getClassLoader().getResourceAsStream("/xml/CustomerProfile_SerializeXML.xml");
+        
+        // load the XMLBean
+        CustomerProfile cp = CustomerProfile.Factory.parse(is);
+
+        return new Forward("index", "customerProfile", cp);
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/xmlBeans/serialize/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/databinding/xmlBeans/serialize/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>SerializeXML Tag Test</title>
+  </head>
+  <body>
+    <p>
+      <b>SerializeXML Tag Test</b>
+    <br/>
+    <br/>
+    <netui-data:serializeXML source="${pageInput.customerProfile}" divName="customerProfile"/>
+    <br/>
+    </p>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/demo/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/demo/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+/*
+ *
+ */
+package demo;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String[] animals = {"pig", "frog", "dog"};
+    private String[] frumpels = {"Bob", "Fred", "Pete"};
+    private String[] none = {""};
+
+    private String[] _results;
+    private String _name;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="demoResults" path="DemoResults.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "demoResults",
+                path = "DemoResults.jsp") 
+        })
+    public Forward DemoSubmit( DemoForm demoForm )
+    {
+        _name = demoForm.getName();
+
+        _results = none;
+        if (demoForm.getName().equals("animals"))
+	    _results = animals;
+        else if (demoForm.getName().equals("frumpels"))
+	    _results = frumpels;
+
+        return new Forward( "demoResults" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="demo" path="Demo.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "demo",
+                path = "Demo.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "demo" );
+    }
+
+
+    public static final class DemoForm extends FormData
+    {
+        private String _name = null;
+
+        public void setName( String name )
+        {
+            _name = name;
+        }
+
+        public String getName()
+        {
+            return _name;
+        }
+    }
+
+    public String[] getResults() {
+	return _results;
+    }
+
+    public void setResults(String[] results) {
+	_results = results;
+    }
+
+    public String getName() {
+        return _name;
+    }
+    public void setName(String n) {
+	_name = n;
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/demo/Demo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/demo/Demo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+
+<temp:template templatePage="/demo/DemoHeader.jsp">
+  <temp:setAttribute name="title" value="Demo" />
+  <temp:setAttribute name="pageTitle" value="New Hire Wizard - Name" />
+  <temp:section name="wizBody">
+
+<!-- The contents of the form -->
+<netui:form action="/DemoSubmit">
+<tr>
+  <td class="wizbody" colspan="3">Enter new hire's first and last name:</td>
+</tr>
+<tr>
+  <td class="wizbody" rowspan="2"><img src="images/_.gif" height="75" width="1"></td>
+  <td class="wizbody">Name</td>
+  <td class="wizbody"><netui:textBox dataSource="actionForm.name" />
+</tr>
+<tr>
+  <td class="wizbodyright" colspan="3" ><hr>
+    <netui:button type="submit">Next</netui:button>
+  </td>
+</netui:form>
+
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/demo/DemoHeader.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/demo/DemoHeader.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title><temp:attribute name="title"/></title>
+<link rel="stylesheet" href="/coreWeb/demo/default.css" type="text/css" />
+<netui:base />
+</head>
+<body>
+<table width="300" class="wiztable">
+  <tr>
+    <td class="wizhead" colspan="3"><b><temp:attribute name="pageTitle"/></b></td>
+  </tr>
+  <tr>
+    <temp:includeSection name="wizBody"/>
+  </tr>
+</table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/demo/DemoResults.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/demo/DemoResults.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+
+<temp:template templatePage="/demo/DemoHeader.jsp">
+  <temp:setAttribute name="title" value="Demo Results" />
+  <temp:setAttribute name="pageTitle" value="Demo Results" />
+  <temp:section name="wizBody">
+    </tr><tr>
+    <td class="wizbody" colspan="3">Name: <b><netui:label value="${pageFlow.name}"/></b></td>
+    </tr>
+    <db:repeater dataSource="pageFlow.results">
+        <db:repeaterItem>
+            <tr>
+                <td class="wizbody" colspan="3"><netui:label value="${container.item}"/></td>
+            </tr>
+        </db:repeaterItem>
+    </db:repeater>
+<tr>
+  <td class="wizbodyright" colspan="3" ><hr>
+    <netui:anchor action="begin">Back</netui:anchor>
+  </td>
+
+</td>
+
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/demo/default.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/demo/default.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+
+body
+{
+background-color: #ffffff; 
+background-image: url(images/header.gif); 
+background-repeat: no-repeat;
+margin-top: 86px;
+margin-left: 10px;
+margin-right: 10px;
+margin-bottom: 10px;
+}
+.wizbody, .wizbodyright
+{
+background-color: #F1F1F1;
+font-family: Helvetica, sans-serif; 
+font-size: 12px; 
+font-style: normal; 
+font-weight: normal; 
+color: #333333; 
+text-align: left;
+vertical-align: middle; 
+padding: 5px 10px 5px 10px;
+}
+.wizbody
+{
+text-align: left;
+}
+.wizbodyright
+{
+text-align: right;
+}
+table.wiztable
+{
+border-collapse: collapse;
+border-color: #999999;
+border-style: solid;
+border-width: 1px;
+}
+.wizhead
+{  
+background-color: #cccccc;
+font-family: Helvetica, sans-serif; 
+font-size: 12px; 
+font-style: normal;
+font-weight: normal; 
+color: #333333; 
+text-align: left;
+vertical-align: middle; 
+line-height: 18px;
+border-color: #999999;
+border-style: solid;
+border-width: 1px;
+padding-left: 10px;
+}
+
+.summaryTitle
+{  
+font-family: Helvetica, sans-serif; 
+font-size: 12px; 
+font-style: normal;
+font-weight: bold; 
+color: #0000FF; 
+text-align: left;
+vertical-align: middle; 
+line-height: 18px;
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/demo/images/_.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/demo/images/launch.jpg
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/directFormTest/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/directFormTest/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,272 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package directFormTest;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import java.io.Serializable;
+
+public class Controller extends PageFlowController
+{
+    private Form _form = new Form();
+    private ArrayList   _info;
+    private Info        _textBox;
+    private Info        _textArea;
+    private Info        _checkBox1;
+    private Info        _checkBox2;
+    private Info        _select;
+    private Info        _radio;
+
+    private Form _exposed = new Form();
+
+    public Form getExposed() {
+	return _exposed;
+    }
+    public void setExposed(Form exposed) {
+	_exposed = exposed;
+    }
+	
+    public ArrayList getInfo() {
+        return _info;
+    }
+    public void setInfo(ArrayList info) {
+        _info = info;
+    }
+        
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="formTest" path="formTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "formTest",
+                path = "formTest.jsp") 
+        })
+    public Forward submit(Form form)
+    {
+        if (_info == null)
+            createInfo();
+
+	try {
+            _textBox.setChange(" ");
+            _textArea.setChange(" ");
+            _checkBox1.setChange(" ");
+            _checkBox2.setChange(" ");
+            _select.setChange(" ");
+            _radio.setChange(" ");
+
+	    if (!_form.getText().equals(_exposed.getText())) {
+                _textBox.setChange("Change, old value '" +
+                                   _form.getText() + "' new value '" +
+                                   _exposed.getText() + "'");
+		_form.setText(_exposed.getText());
+	    }
+	    if (!_form.getTextArea().equals(_exposed.getTextArea())) {
+                _textArea.setChange("Change, old value '" +
+                                   _form.getTextArea() + "' new value '" +
+                                   _exposed.getTextArea() + "'");
+
+		_form.setTextArea(_exposed.getTextArea());
+	    }
+            if (_form.getCheckBox1() != _exposed.getCheckBox1()) {
+                _checkBox1.setChange("Changed");
+		_form.setCheckBox1(_exposed.getCheckBox1());
+            }
+            if (_form.getCheckBox2() != _exposed.getCheckBox2()) {
+                _checkBox2.setChange("Changed");
+		_form.setCheckBox2(_exposed.getCheckBox2());
+            }
+            if (!_form.getSelect().equals(_exposed.getSelect())) {
+                _select.setChange("Change, old value '" +
+                                   _form.getSelect() + "' new value '" +
+                                   _exposed.getSelect() + "'");
+		_form.setSelect(_exposed.getSelect());
+            }
+            if (!_form.getRadio().equals(_exposed.getRadio())) {
+                _radio.setChange("Change, old value '" +
+                                   _form.getRadio() + "' new value '" +
+                                   _exposed.getRadio() + "'");
+		_form.setRadio(_exposed.getRadio());
+            }
+            updateInfo();
+	    return new Forward( "formTest" );
+	}
+	catch (Exception e) {
+	    e.printStackTrace();
+	}
+	return new Forward( "formTest" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="formTest" path="formTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "formTest",
+                path = "formTest.jsp") 
+        })
+    public Forward begin()
+    {
+        if (_info == null)
+            createInfo();
+
+        return new Forward( "formTest" );
+    }
+
+    public static class Info implements Serializable {
+        private String _name;
+        private String _value;
+        private String _change;
+
+        public String getName() {
+            return _name;
+        }
+        public void setName(String name) {
+            _name = name;
+        }
+
+        public String getValue() {
+            return _value;
+        }
+        public void setValue(String value) {
+            _value = value;
+        }
+
+        public String getChange() {
+            return _change;
+        }
+        public void setChange(String change) {
+            _change = change;
+        }
+    }
+
+    public static class Form extends FormData
+    {
+	private String _text = "";
+	private String _textArea = "";
+        private boolean _checkBox1 = false;
+        private boolean _checkBox2 = false;
+        private String _select = "2";
+        private String _radio = "2";
+
+	public String getText() {
+	    return _text;
+	}
+	public void setText(String text) {
+	    _text = text;
+	}
+
+	public String getTextArea() {
+	    return _textArea;
+	}
+	public void setTextArea(String textArea) {
+	    _textArea = textArea;
+	}
+
+	public boolean getCheckBox1() {
+	    return _checkBox1;
+	}
+	public void setCheckBox1(boolean checkBox1) {
+	    _checkBox1 = checkBox1;
+	}
+
+	public boolean getCheckBox2() {
+	    return _checkBox2;
+	}
+	public void setCheckBox2(boolean checkBox2) {
+	    _checkBox2 = checkBox2;
+	}
+
+	public String getSelect() {
+	    return _select;
+	}
+	public void setSelect(String select) {
+	    _select = select;
+	}
+
+	public String getRadio() {
+	    return _radio;
+	}
+	public void setRadio(String radio) {
+	    _radio = radio;
+	}
+        
+    }
+
+    private void updateInfo()
+    {
+        _textBox.setValue(_form.getText());
+        _textArea.setValue(_form.getTextArea());
+        _checkBox1.setValue("" + _form.getCheckBox1());
+        _checkBox2.setValue("" + _form.getCheckBox2());
+        _select.setValue(_form.getSelect());
+        _radio.setValue(_form.getRadio());
+    }
+
+    private void createInfo()
+    {
+        Info inf;
+        _info = new ArrayList();
+
+        // TextBox
+        _textBox = new Info();
+        _textBox.setName("TextBox");
+        _textBox.setValue(_form.getText());
+        _info.add(_textBox);
+
+        // TextBox
+        _textArea = new Info();
+        _textArea.setName("TextArea");
+        _textArea.setValue(_form.getTextArea());
+        _info.add(_textArea);
+
+        // checkBox1
+        _checkBox1 = new Info();
+        _checkBox1.setName("Checkbox1");
+        _checkBox1.setValue(""+_form.getCheckBox1());
+        _info.add(_checkBox1);
+
+        // checkBox2
+        _checkBox2 = new Info();
+        _checkBox2.setName("Checkbox2");
+        _checkBox2.setValue(""+_form.getCheckBox2());
+        _info.add(_checkBox2);
+
+        // Select
+        _select = new Info();
+        _select.setName("Select");
+        _select.setValue(_form.getSelect());
+        _info.add(_select);
+
+        // Radio
+        _radio = new Info();
+        _radio.setName("Radio");
+        _radio.setValue(_form.getRadio());
+        _info.add(_radio);
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/directFormTest/formTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/directFormTest/formTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+
+<html>
+<head>
+<title>Form Test</title>
+<netui:base />
+</head>
+<body>
+  <h1>Form Test</h1>
+  <netui:form action="/submit">
+  <table width="100%">
+  <tr><td>TextBox</td><td><netui:textBox dataSource="pageFlow.exposed.text" /></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <netui:checkBox dataSource="pageFlow.exposed.checkBox1" /><br />
+        Checkbox2 <netui:checkBox dataSource="pageFlow.exposed.checkBox2" /></td>
+  </tr>
+  <tr><td>TextArea</td><td><netui:textArea dataSource="pageFlow.exposed.textArea" /></td>
+    <td>Select:</td>
+    <td><netui:select size="3" dataSource="pageFlow.exposed.select" multiple="false" >
+        <netui:selectOption value="1">Choice 1</netui:selectOption>
+        <netui:selectOption value="2">Choice 2</netui:selectOption>
+        <netui:selectOption value="3">Choice 3</netui:selectOption>
+    </netui:select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    <netui:radioButtonGroup dataSource="pageFlow.exposed.radio">
+        <netui:radioButtonOption value="1">Choice 1</netui:radioButtonOption><br>
+        <netui:radioButtonOption value="2">Choice 2</netui:radioButtonOption><br>
+        <netui:radioButtonOption value="3">Choice 3</netui:radioButtonOption>
+    </netui:radioButtonGroup>
+    </td>
+  </tr>
+  <tr><td colspan="4"><netui:button type="submit" >Change</netui:button></td></tr>
+  </table>
+  </netui:form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  <db:repeater dataSource="pageFlow.info">
+        <db:repeaterItem>
+        <tr>
+          <td width="100px" ><netui:label value="${container.item.name}"/></td>
+          <td width="300px"><netui:label value="${container.item.value}"/></td>
+          <td><netui:label value="${container.item.change}"/></td>
+        </tr>
+        </db:repeaterItem>
+  </db:repeater>
+  </table>
+</body>
+</html>
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<!--Generated by Weblogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="/resources/jsp/template.jsp">
+    <netui-template:setAttribute value="Error" name="title"/>
+    <netui-template:section name="bodySection">
+    <% response.setStatus( 200 ); %>
+    Internal Error:<br />
+    <span style="color:red;">
+    <netui:exceptions showMessage="true" showStackTrace="false"></netui:exceptions>
+    <span><br>
+    <span style="color:gray;font-size:10pt;font-family:arial;">
+    <netui:exceptions showMessage="false" showStackTrace="true"></netui:exceptions>
+    <span>
+    </netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/anchorError/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/anchorError/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<netui:html>
+<head>
+<title>Anchor Errors</title>
+<netui:base />
+</head>
+<netui:body>
+<h4>Anchor Errors</h4>
+<p style="color:green">
+This test verifies a set of errors that may occur within anchor tags.  There are a bunch of types 
+of errors.  Common errors include, calling an action that doesn't exist, setting more than one of
+<b>linkName</b>, <b>action</b>, <b>href</b>, and <b>clientAction</b>.  This test only displays
+this page.
+</p>
+<ul>
+<li><netui:anchor action="badAction">Navigate</netui:anchor> -- Bad Action </li>
+<li><netui:anchor action="begin" href="Begin.jsp">Navigate</netui:anchor> -- Action and Href Defined </li>
+<li><netui:anchor action="begin" clientAction="Begin.jsp">Navigate</netui:anchor> -- Action and ClientAction Defined </li>
+<li><netui:anchor action="begin" linkName="Foo">Navigate</netui:anchor> -- Action and linName Defined </li>
+</netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/anchorError/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/anchorError/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.anchorError;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/cellRepeaterError/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/cellRepeaterError/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Cell Repeater</title>
+<style type="text/css">
+.cellTable {
+        border: 1px solid red;
+        border-collapse: collapse;
+        empty-cells: show;
+} 
+.cellCell {
+        border: 1px solid red;
+} 
+</style>
+</head>
+<body>
+<b>Error in Cell Repeater - rows/cols</b>
+<db:cellRepeater 
+        dataSource="pageFlow.data" >
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+<hr />
+<b>Error in Cell Repeater - datasource</b>
+<db:cellRepeater 
+        dataSource="pageFlow.foo" rows="5">
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/cellRepeaterError/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/cellRepeaterError/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.cellRepeaterError;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    int[] _data = {1,2,3,4,5,6,7,8,9,10};
+    public int[] getData()
+    {
+	return _data;
+    }
+
+    String _rows = "foobar";
+    public String getRows() {
+        return _rows;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/expression/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/expression/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>In-line Expression Errors</title>
+</head>
+<body>
+<h4>In-line Expression Errors</h4>
+<p style="color:green">
+This test verifies that report binding errors to all dataSource attributes.  The errors are reported in-line.
+This test is dupicated by HtmlExpression which reports the errors at the end of the page.
+You only need to hit this page to see the errors.
+</p>
+<hr>
+<netui:form action="/postback">
+<table>
+<tr><td>Hidden</td><td><netui:hidden dataSource="pageFlow.hidden"/></td></tr>
+<tr><td>TextBox</td><td><netui:textBox dataSource="pageFlow.tbDataSource"/></td></tr>
+<tr><td>TextArea</td><td><netui:textArea dataSource="pageFlow.taDataSource"/></td></tr>
+<tr><td>Checkbox</td><td><netui:checkBox dataSource="pageFlow.cbDataSource"/></td></tr>
+<tr><td>Checkbox Group</td><td><netui:checkBoxGroup dataSource="pageFlow.cbgDataSource"/></td></tr>
+<tr><td>Radio Group</td><td><netui:radioButtonGroup dataSource="pageFlow.rgDataSource" /></td></tr>
+<tr><td>Select</td><td><netui:select dataSource="pageFlow.sDataSource" /></td></tr>
+</table>
+</netui:form>
+<hr />
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/expression/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/expression/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.expression;
+
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/forward/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/forward/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,9 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Link Submit</title>
+</head>
+<body>
+<netui:anchor action="/forward" >Forward</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/forward/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/forward/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.forward;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="forward" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "forward",
+                path = "Begin.jsp") 
+        })
+    public Forward forward()
+    {
+	return new org.apache.beehive.netui.pageflow.Forward("forwardError");
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new org.apache.beehive.netui.pageflow.Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/htmlExpression/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/htmlExpression/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<netui:html>
+<head>
+<title>Collected Expression Errors</title>
+</head>
+<netui:body>
+<h4>Collected Expression Errors</h4>
+<p style="color:green">
+This test verifies that report binding errors to all dataSource attributes.  The errors are reported
+at the bottom of the page. This is a replicated version of the Expression test which reports the
+errors in-line.  You only need to hit this page to see the errors.
+</p>
+<hr>
+<netui:form action="/postback">
+<table>
+<tr><td>Hidden</td><td><netui:hidden dataSource="pageFlow.hidden"/></td></tr>
+<tr><td>TextBox</td><td><netui:textBox dataSource="pageFlow.tbDataSource"/></td></tr>
+<tr><td>TextArea</td><td><netui:textArea dataSource="pageFlow.taDataSource"/></td></tr>
+<tr><td>Checkbox</td><td><netui:checkBox dataSource="pageFlow.cbDataSource"/></td></tr>
+<tr><td>Checkbox Group</td><td><netui:checkBoxGroup dataSource="pageFlow.cbgDataSource"/></td></tr>
+<tr><td>Radio Group</td><td><netui:radioButtonGroup dataSource="pageFlow.rgDataSource" /></td></tr>
+<tr><td>Select</td><td><netui:select dataSource="pageFlow.sDataSource" /></td></tr>
+</table>
+</netui:form>
+<hr />
+</netui:body>
+</netui:html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/htmlExpression/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/htmlExpression/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.htmlExpression;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/multipleDatasource/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/multipleDatasource/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<netui:html>
+<head>
+<title>Illegal Compound Expressions</title>
+</head>
+<netui:body>
+<h4>Illegal Compound Expression</h4>
+<netui:form action="postback">
+Hidden: <netui:hidden dataSource="pageFlow.lastName, {pageFlow.firstName}" /><br />
+TextBox: <netui:textBox dataSource="pageFlow.lastName, {pageFlow.firstName}" /><br/>
+TextArea: <netui:textArea dataSource="pageFlow.lastName, {pageFlow.firstName}" /><br/>
+Select: <netui:select dataSource="pageFlow.lastName, {pageFlow.firstName}" /><br/>
+Checkbox: <netui:checkBox dataSource="pageFlow.lastName, {pageFlow.firstName}" /><br/>
+CheckBoxGroup: <netui:checkBoxGroup dataSource="pageFlow.lastName, {pageFlow.firstName}" /><br/>
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</netui:body>
+</netui:html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/multipleDatasource/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/multipleDatasource/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.multipleDatasource;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    String _last = "Blow";
+    String _first = "Joe";
+
+    public String getFirstName() {
+	return _first;
+    }
+    public String getLastName() {
+	return _last;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="page" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin(){
+        return new Forward("page");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="page" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page",
+                path = "Begin.jsp") 
+        })
+    protected Forward postback(){
+        return new Forward("page");
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/radioButtonError/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/radioButtonError/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Radio Tests</title>
+</head>
+<body>
+<h4>Radio</h4>
+<netui:form action="/postback">
+<netui:radioButtonOption value="${pageFlow.radio1}"/><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+Selected: <netui:label value="${pageFlow.radioSelect}" />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/radioButtonError/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/radioButtonError/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,69 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.radioButtonError;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String _radio1 = "foo";
+    String _radios;
+
+    public String getRadio1() {
+	return _radio1;
+    }
+
+    public String getRadioSelect() {
+	return _radios;
+    }
+    public void setRadioSelect(String val) {
+	_radios = val;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterErrors/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterErrors/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Repeater Errors</title>
+</head>
+<body>
+<h4>Repeater Errors</h4>
+<br />
+<b>standalone repeaterItem</b></br>
+<db:repeaterItem>
+  <netui:label value="${container.item}"/><br />
+</db:repeaterItem>
+
+<b>standalone repeaterHeader</b></br>
+<db:repeaterHeader>
+  <table><tr>
+</db:repeaterHeader>
+
+<b>standalone repeaterFooter</b></br>
+<db:repeaterFooter>
+  <table><tr>
+</db:repeaterFooter>
+
+<b>Expression Error</b></br>
+<db:repeater dataSource="pageFlow.foo" >
+<db:repeaterItem>
+  <netui:label value="${container.item}"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterErrors/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterErrors/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.repeaterErrors;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _info = {"Option 1", "Option 2", "Option 3", "Option 4"};
+
+    public String[] getInfo() {
+	return _info;
+    }
+    public void setInfo(String[] info) {
+	_info = info;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterPadError/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterPadError/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Padding Repeater Errors</title>
+</head>
+<body>
+<h4>Padding Repeater Errors</h4>
+<b>Max and min = -1</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad maxRepeat="-1" minRepeat="-1"><td width="100pt">&nbsp</td></db:pad>
+</db:repeater>
+<hr />
+<b>max > min</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad minRepeat="16" maxRepeat="10"><td width="100pt">&nbsp</td></db:pad>
+</db:repeater>
+<hr />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterPadError/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/repeaterPadError/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.repeaterPadError;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _strings = {"String 1", "String 2", "String 3", "String 4"};
+    public String[] getStrings() {
+	return _strings;
+    }
+    public void setStrings(String[] strings) {
+	_strings = strings;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImage/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImage/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Image Errors</title>
+</head>
+<body>
+<h4>Image Errors</h4>
+Image specifying both a page and url: <netui:image page="foo" src="bar"/>
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImage/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImage/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ * * $Header:$
+ */
+package errors.tagImage;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImageHtml/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImageHtml/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<netui:html>
+<head>
+<title>Image Errors</title>
+</head>
+<netui:body>
+<h4>Image Errors</h4>
+Image specifying both a page and url: <netui:image page="foo" src="bar"/>
+</netui:body>
+</netui:html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImageHtml/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/tagImageHtml/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ * * $Header:$
+ */
+package errors.tagImageHtml;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/unhandledException/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/unhandledException/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,9 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Link Submit</title>
+</head>
+<body>
+<netui:anchor action="/forward" >Forward</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/errors/unhandledException/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/errors/unhandledException/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package errors.unhandledException;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	throw new RuntimeException("Runtime Error Occurred");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/except/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/except/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title>Exceptions</title>
+</head>
+<body>
+<h4>Exceptions</h3>
+<netui:anchor action="throwLocal">Local To Method</netui:anchor><br />
+<netui:anchor action="throwGlobal">Global To Method</netui:anchor><br />
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/except/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/except/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,142 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package except;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:catch type="except.Controller$MyException"
+ *            method="globalHandler"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = except.Controller.MyException.class,
+            method = "globalHandler") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _message;
+    public String getMessage()
+    {
+        return _message;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin()
+    {
+	_message = "";
+        return new Forward( "begin" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:catch type="except.Controller$MyException"
+     *            method="localHandler"
+     */
+    @Jpf.Action(
+        catches = {
+            @Jpf.Catch(
+                type = except.Controller.MyException.class,
+                method = "localHandler") 
+        })
+    protected Forward throwLocal()
+        throws Exception
+    {
+        throw new MyException();
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwGlobal()
+        throws Exception
+    {
+        throw new MyException();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward goHome()
+    {
+        return new Forward( "begin" );
+    }
+
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="ErrorPage.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage",
+                path = "ErrorPage.jsp") 
+        })
+    protected Forward globalHandler(MyException ex, String actionName,
+					  String message, Object form)
+    {
+        _message = "caught " + ex + " in globalHandler";
+        return new Forward( "errorPage" );
+    }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="ErrorPage.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage",
+                path = "ErrorPage.jsp") 
+        })
+    protected Forward localHandler(MyException ex, String actionName,
+                                           String message, Object form)
+    {
+        _message = "caught " + ex + " in localHandler";
+        return new Forward( "errorPage" );
+    }
+
+    public static class MyException extends Exception
+    {
+	public String toString() {
+	    return "[MyException]";
+	}
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/except/ErrorPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/except/ErrorPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Error Page</title>
+</head>
+<body>
+<h4>Report Exception</h4>
+Message <netui:label value="${pageFlow.message}"/><br />
+<netui:anchor action="goHome">Return</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+package formBean.test1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import formBean.test1.FormBeanTest1Form1;
+
+/**
+ * @jpf:controller struts-merge="/formBean/test1/merge-jpf-struts-config.xml"
+ */
+@Jpf.Controller(
+    strutsMerge = "/formBean/test1/merge-jpf-struts-config.xml")
+public class Jpf1 extends PageFlowController
+    {
+//    protected transient global.Global globalApp;
+//    protected static FormBeanTest1Form1 theForm = new FormBeanTest1Form1();
+    public static final String JPF_FORM_VALUE = "Jpf form value";
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoStruts" path="/formBeanTest1/strutsAction1.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoStruts",
+                path = "/formBeanTest1/strutsAction1.do") 
+        })
+    protected Forward jpfAction1(FormBeanTest1Form1 inForm)
+        {
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.jpfAction1 - ("
+                           + inForm.toString() + ").");
+        inForm.setField1(JPF_FORM_VALUE);
+        return new Forward("gotoStruts");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+    protected Forward jpfAction2(FormBeanTest1Form1 inForm)
+        {
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.jpfAction2 - ("
+                           + inForm.toString() + ").");
+        return new Forward("gotoPg3");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+     * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward jpfAction3(FormBeanTest1Form1 inForm)
+        {
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.jpfAction3 - form instance: ("
+                           + inForm.toString() + ").");
+        if (inForm.getField1().equals(Struts2.STRUTS2_FORM_VALUE) == true)
+            {
+            return new Forward("gotoDone");
+            }
+        return new Forward("gotoError");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>FormBean Test1</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test1 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <font color="blue">
+            <h3 align="center">Page Flow jsp page.</h3>
+        </font>
+        <center>
+            <netui:form action="jpfAction1">
+               Field1 value: <netui:label value="${actionForm.field1}"/>
+            </netui:form>
+            <br/>
+            <netui:anchor action="jpfAction1">Continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>FormBean Test1</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test1 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <font color="blue">
+            <h3 align="center">Page Flow jsp page.</h3>
+        </font>
+        <center>
+            <netui:form action="jpfAction3">
+               Field1 value: <netui:label value="${actionForm.field1}"/>
+            </netui:form>
+            <br/>
+            <netui:anchor action="jpfAction3">Continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>FormBean Test1</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test1 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test1/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions ================================== -->
+    <form-beans>
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================= -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================= -->
+    <action-mappings>
+        <action
+            path="/jpfAction1"
+            scope="session"
+            parameter="jpfAction1" >
+        </action>
+        <action
+            path="/jpfAction2"
+            scope="session"
+            parameter="jpfAction2" >
+        </action>
+        <action
+            path="/jpfAction3"
+            scope="session"
+            parameter="jpfAction3" >
+        </action>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+package formBean.test2;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import formBean.test2.FormBeanTest2Form1;
+
+/**
+ * @jpf:controller struts-merge="/formBean/test2/merge-jpf-struts-config.xml"
+ */
+@Jpf.Controller(
+    strutsMerge = "/formBean/test2/merge-jpf-struts-config.xml")
+public class Jpf1 extends PageFlowController
+   {
+   public static final String JPF_FORM_VALUE = "Jpf1 form value";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward begin()
+      {
+      ActionMapping mapping = getMapping();
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoStruts" path="/formBeanTest2/strutsAction3.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoStruts",
+                path = "/formBeanTest2/strutsAction3.do") 
+        })
+   protected Forward jpfAction1(FormBeanTest2Form1 inForm)
+      {
+      ActionMapping mapping = getMapping();
+      System.out.println(">>> Jpf1.jpfAction1 - ("
+                         + inForm.toString() + ").");
+      inForm.setField1(JPF_FORM_VALUE);
+      return new Forward("gotoStruts");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+   <head>
+      <title>FormBean Test2</title>
+    </head>
+   <body>
+      <h3 align="center">FormBean Test2 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <font color="blue">
+         <h3 align="center">Page Flow jsp page.</h3>
+      </font>
+      <center>
+         <netui:form action="jpfAction1">
+            <table>
+               <tr>
+                  <td>Field1 Value:</td>
+                  <td><netui:label value="${actionForm.field1}"/></td>
+               </tr>
+            </table>
+            <netui:button action="jpfAction1" value="continue" type="submit"/>
+         </netui:form>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>FormBean Test2</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test2 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="../../formBeanTest2/strutsAction1.do">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBean/test2/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions ================================== -->
+    <form-beans>
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================= -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================= -->
+    <action-mappings>
+        <action
+            path="/jpfAction1"
+            scope="session"
+            parameter="jpfAction1" >
+        </action>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,195 @@
+package formBeanRePost.test52;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static final String   _STR1    = "Jpf1 value 1";
+   private static final String   _STR2    = "Jpf1 value 2";
+   private static final String   _STR3    = "Jpf1 value 3";
+
+   private              String   _str     = _STR1;
+   public               FormA    _form1   = new FormA();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * inForm will be a new instance of the FormA formBean.  The value of
+    * inForm's string1 property will be the default value set in the FormA
+    * constructor.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoAction2" path="action2.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction2",
+                path = "action2.do") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      inForm.setString1(_STR2);                  // This value will be replace on the forward.
+      _str = _STR2;                              // This value should not be replaced on the forward.
+      return new Forward("gotoAction2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action2(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+
+      // The formbean should have been re-populated by struts from the request
+      // on the forward from action1 above replaceing string1 with the value
+      // in the request.
+      //------------------------------------------------------------------------
+      if (inForm.getString1().equals(_STR2) == true)
+         {
+         System.out.println("\t>>> Form bean was not re-populated as it should have been.");
+         return new Forward("gotoError");
+         }
+
+      // The pageFlow properties should not be re-populated by struts on the
+      // forward.  So _str should have the value set in action1 above.
+      //------------------------------------------------------------------------
+      if (_str.equals(_STR2) == false)
+         {
+         System.out.println("\t>>> _str: " + _str);
+         System.out.println("\t>>> The Page Flow value was re-populated and should not have been.");
+         return new Forward("gotoError");
+         }
+      _str = _STR1;        // Reset this for the next test.
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * inForm will be a new instance of the FormA formBean.  The value of
+    * inForm's string1 property will be the default value set in the FormA
+    * constructor.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoAction4" path="action4.do"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction4",
+                path = "action4.do") 
+        })
+   protected Forward action3(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action3");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      inForm.setString1(_STR2);
+      _str = _STR2;
+      return new Forward("gotoAction4");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action4(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action4");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+
+      // The formbean should have been re-populated by struts from the request
+      // on the forward from action1 above replaceing string1 with the value
+      // in the request.
+      //------------------------------------------------------------------------
+      if (inForm.getString1().equals(_STR2) == true)
+         {
+         System.out.println("\t>>> Form bean was not re-populated as it should have been.");
+         return new Forward("gotoError");
+         }
+
+      // The pageFlow properties should not be re-populated by struts on the
+      // forward.  So _str should have the value set in action1 above.
+      //------------------------------------------------------------------------
+      if (_str.equals(_STR2) == false)
+         {
+         System.out.println("\t>>> _str: " + _str);
+         System.out.println("\t>>> The Page Flow value was re-populated and should not have been.");
+         return new Forward("gotoError");
+         }
+      Forward fwd = new Forward("gotoPg3");
+      fwd.addOutputForm(inForm);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.done");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoDone");
+      }
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      {
+      return _str;
+      }
+   public void setString(String inVal)
+      {
+      _str = inVal;
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>FormBeanRePost Test52</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test52 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <netui:form action="action1">
+            <font color="blue">
+               Form String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <netui:textBox dataSource="pageFlow.string"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>FormBeanRePost Test52</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test52 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <netui:form action="action3">
+            <font color="blue">
+               Form String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <netui:textBox dataSource="pageFlow.string"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>FormBeanRePost Test52</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test52 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <netui:form action="finish">
+            <font color="blue">
+               Form String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <netui:textBox dataSource="pageFlow.string"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Finish...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test52/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>FormBeanRePost Test52</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test52 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,214 @@
+package formBeanRePost.test53;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+  * @jpf:catch type="java.lang.Throwable" method="exceptionHandler"
+ * @jpf:forward name="gotoError"          path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"           path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = java.lang.Throwable.class,
+            method = "exceptionHandler") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static final String   _STR1    = "Jpf1 value 1";
+   private static final String   _STR2    = "Jpf1 value 2";
+   private static final String   _STR3    = "Jpf1 value 3";
+
+   private              String   _str     = _STR1;
+   public               FormA    _form1   = new FormA();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * inForm will be a new instance of the FormA formBean.  The value of
+    * inForm's string1 property will be the default value set in the FormA
+    * constructor.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoAction2" path="action2.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction2",
+                path = "action2.do") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      inForm.setString1(_STR2);
+      _str = _STR2;
+      return new Forward("gotoAction2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoAction3" path="action3.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction3",
+                path = "action3.do") 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+
+      return new Forward("gotoAction3");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoAction4" path="action4.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction4",
+                path = "action4.do") 
+        })
+   protected Forward action3(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action3");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm.getString1().equals(_STR2) == true)
+         {
+         System.out.println("\t>>> Form bean was not re-populated as it should have been.");
+         return new Forward("gotoError");
+         }
+      if (_str.equals(_STR2) == false)
+         {
+         System.out.println("\t>>> _str: " + _str);
+         System.out.println("\t>>> The Page Flow value was re-populated and should not have been.");
+         return new Forward("gotoError");
+         }
+      Forward fwd = new Forward("gotoAction4");
+      fwd.addOutputForm(_form1);
+      return fwd;
+      }
+
+   /**
+    * The runtime should throw an exception here.  Action3 explicitly passed a
+    * form bean in the Forward to action4.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoAction5" path="action5.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction5",
+                path = "action5.do") 
+        })
+   protected Forward action4()
+      {
+      System.out.println(">>> Jpf1.action4");
+
+      return new Forward("gotoAction5");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action5(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action5");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm.getString1().equals(_STR2) == true)
+         {
+         System.out.println("\t>>> Form bean was not re-populated as it should have been.");
+         return new Forward("gotoError");
+         }
+      if (_str.equals(_STR2) == false)
+         {
+         System.out.println("\t>>> _str: " + _str);
+         System.out.println("\t>>> The Page Flow value was re-populated and should not have been.");
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.done");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoDone");
+      }
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      {
+      return _str;
+      }
+   public void setString(String inVal)
+      {
+      _str = inVal;
+      }
+   /**
+    * @jpf:exception-handler
+    * @jpf:forward name="exGotoAction5" path="action5.do"
+    */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "exGotoAction5",
+                path = "action5.do") 
+        })
+   public Forward exceptionHandler(java.lang.Throwable e
+                                   ,String actionName
+                                   ,String message
+                                   ,Object inForm
+                                  )
+      {
+      System.out.println(">>> Jpf1.exceptionHandler");
+      return new Forward("exGotoAction5");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>FormBeanRePost Test53</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test53 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <netui:form action="action1">
+            <font color="blue">
+               Form String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <netui:textBox dataSource="pageFlow.string"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>FormBeanRePost Test53</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test53 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <netui:form action="finish">
+            <font color="blue">
+               Form String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <netui:textBox dataSource="pageFlow.string"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Finish...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formBeanRePost/test53/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>FormBeanRePost Test53</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test53 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formTest/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formTest/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,260 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package formTest;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+import java.io.Serializable;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+public class Controller extends PageFlowController
+{
+    private Form _form = new Form();
+    private ArrayList   _info;
+    private Info        _textBox;
+    private Info        _textArea;
+    private Info        _checkBox1;
+    private Info        _checkBox2;
+    private Info        _select;
+    private Info        _radio;
+
+    public ArrayList getInfo() {
+        return _info;
+    }
+    public void setInfo(ArrayList info) {
+        _info = info;
+    }
+        
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "formTest",
+                path = "formTest.jsp") 
+        })
+    public Forward submit(Form form)
+    {
+        if (_info == null)
+            createInfo();
+
+	try {
+            _textBox.setChange(" ");
+            _textArea.setChange(" ");
+            _checkBox1.setChange(" ");
+            _checkBox2.setChange(" ");
+            _select.setChange(" ");
+            _radio.setChange(" ");
+
+	    if (!_form.getText().equals(form.getText())) {
+                _textBox.setChange("Change, old value '" +
+                                   _form.getText() + "' new value '" +
+                                   form.getText() + "'");
+		_form.setText(form.getText());
+	    }
+	    if (!_form.getTextArea().equals(form.getTextArea())) {
+                _textArea.setChange("Change, old value '" +
+                                   _form.getTextArea() + "' new value '" +
+                                   form.getTextArea() + "'");
+
+		_form.setTextArea(form.getTextArea());
+	    }
+            if (_form.getCheckBox1() != form.getCheckBox1()) {
+                _checkBox1.setChange("Changed");
+		_form.setCheckBox1(form.getCheckBox1());
+            }
+            if (_form.getCheckBox2() != form.getCheckBox2()) {
+                _checkBox2.setChange("Changed");
+		_form.setCheckBox2(form.getCheckBox2());
+            }
+            if (!_form.getSelect().equals(form.getSelect())) {
+                _select.setChange("Change, old value '" +
+                                   _form.getSelect() + "' new value '" +
+                                   form.getSelect() + "'");
+		_form.setSelect(form.getSelect());
+            }
+            if (!_form.getRadio().equals(form.getRadio())) {
+                _radio.setChange("Change, old value '" +
+                                   _form.getRadio() + "' new value '" +
+                                   form.getRadio() + "'");
+		_form.setRadio(form.getRadio());
+            }
+            updateInfo();
+	    return new Forward( "formTest" );
+	}
+	catch (Exception e) {
+	    e.printStackTrace();
+	}
+	return new Forward( "formTest" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "formTest",
+                path = "formTest.jsp") 
+        })
+    public Forward begin()
+    {
+        if (_info == null)
+            createInfo();
+
+        return new Forward( "formTest" );
+    }
+
+    public static class Info implements Serializable {
+        private String _name;
+        private String _value;
+        private String _change;
+
+        public String getName() {
+            return _name;
+        }
+        public void setName(String name) {
+            _name = name;
+        }
+
+        public String getValue() {
+            return _value;
+        }
+        public void setValue(String value) {
+            _value = value;
+        }
+
+        public String getChange() {
+            return _change;
+        }
+        public void setChange(String change) {
+            _change = change;
+        }
+    }
+
+    public static class Form extends FormData
+    {
+	private String _text = "";
+	private String _textArea = "";
+        private boolean _checkBox1 = false;
+        private boolean _checkBox2 = false;
+        private String _select = "2";
+        private String _radio = "2";
+
+	public String getText() {
+	    return _text;
+	}
+	public void setText(String text) {
+	    _text = text;
+	}
+
+	public String getTextArea() {
+	    return _textArea;
+	}
+	public void setTextArea(String textArea) {
+	    _textArea = textArea;
+	}
+
+	public boolean getCheckBox1() {
+	    return _checkBox1;
+	}
+	public void setCheckBox1(boolean checkBox1) {
+	    _checkBox1 = checkBox1;
+	}
+
+	public boolean getCheckBox2() {
+	    return _checkBox2;
+	}
+	public void setCheckBox2(boolean checkBox2) {
+	    _checkBox2 = checkBox2;
+	}
+
+	public String getSelect() {
+	    return _select;
+	}
+	public void setSelect(String select) {
+	    _select = select;
+	}
+
+	public String getRadio() {
+	    return _radio;
+	}
+	public void setRadio(String radio) {
+	    _radio = radio;
+	}
+        
+    }
+
+    private void updateInfo()
+    {
+        _textBox.setValue(_form.getText());
+        _textArea.setValue(_form.getTextArea());
+        _checkBox1.setValue("" + _form.getCheckBox1());
+        _checkBox2.setValue("" + _form.getCheckBox2());
+        _select.setValue(_form.getSelect());
+        _radio.setValue(_form.getRadio());
+    }
+
+    private void createInfo()
+    {
+        Info inf;
+        _info = new ArrayList();
+
+        // TextBox
+        _textBox = new Info();
+        _textBox.setName("TextBox");
+        _textBox.setValue(_form.getText());
+        _textBox.setChange(" ");
+        _info.add(_textBox);
+
+        // TextBox
+        _textArea = new Info();
+        _textArea.setName("TextArea");
+        _textArea.setValue(_form.getTextArea());
+        _textArea.setChange(" ");
+        _info.add(_textArea);
+
+        // checkBox1
+        _checkBox1 = new Info();
+        _checkBox1.setName("Checkbox1");
+        _checkBox1.setValue(""+_form.getCheckBox1());
+        _checkBox1.setChange(" ");
+        _info.add(_checkBox1);
+
+        // checkBox2
+        _checkBox2 = new Info();
+        _checkBox2.setName("Checkbox2");
+        _checkBox2.setValue(""+_form.getCheckBox2());
+        _checkBox2.setChange(" ");
+        _info.add(_checkBox2);
+
+        // Select
+        _select = new Info();
+        _select.setName("Select");
+        _select.setValue(_form.getSelect());
+        _select.setChange(" ");
+        _info.add(_select);
+
+        // Radio
+        _radio = new Info();
+        _radio.setName("Radio");
+        _radio.setValue(_form.getRadio());
+        _radio.setChange(" ");
+        _info.add(_radio);
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/formTest/formTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/formTest/formTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+
+<html>
+<head>
+<title>Form Test</title>
+<netui:base />
+</head>
+<body>
+  <h1>Form Test</h1>
+  <netui:form action="/submit">
+  <table width="100%">
+  <tr><td>TextBox</td><td><netui:textBox dataSource="actionForm.text" /></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <netui:checkBox dataSource="actionForm.checkBox1" /><br />
+        Checkbox2 <netui:checkBox dataSource="actionForm.checkBox2" /></td>
+  </tr>
+  <tr><td>TextArea</td><td><netui:textArea dataSource="actionForm.textArea" /></td>
+    <td>Select:</td>
+    <td><netui:select size="3" dataSource="actionForm.select" multiple="false" >
+        <netui:selectOption value="1">Choice 1</netui:selectOption>
+        <netui:selectOption value="2">Choice 2</netui:selectOption>
+        <netui:selectOption value="3">Choice 3</netui:selectOption>
+    </netui:select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    <netui:radioButtonGroup dataSource="actionForm.radio">
+        <netui:radioButtonOption value="1">Choice 1</netui:radioButtonOption><br>
+        <netui:radioButtonOption value="2">Choice 2</netui:radioButtonOption><br>
+        <netui:radioButtonOption value="3">Choice 3</netui:radioButtonOption>
+    </netui:radioButtonGroup>
+    </td>
+  </tr>
+  <tr><td colspan="4"><netui:button type="submit" >Change</netui:button></td></tr>
+  </table>
+  </netui:form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  <db:repeater dataSource="pageFlow.info">
+        <db:repeaterItem>
+        <tr>
+          <td width="100px" ><netui:label value="${container.item.name}"/></td>
+          <td width="300px"><netui:label value="${container.item.value}"/></td>
+          <td><netui:label value="${container.item.change}"/></td>
+        </tr>
+        </db:repeaterItem>
+  </db:repeater>
+  </table>
+</body>
+</html>
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/globalJpfs/nestReturn/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/globalJpfs/nestReturn/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Nest And Return</title>
+</head>
+<body>
+<h4>Nest And Return</h4>
+<netui:anchor action="/returnAction">Return</netui:anchor><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/globalJpfs/nestReturn/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/globalJpfs/nestReturn/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package globalJpfs.nestReturn;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="returnFromNestReturn"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnFromNestReturn") 
+        })
+    public Forward returnAction()
+    {
+	return new Forward("return");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/i18n/localeOverride/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/i18n/localeOverride/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+/*
+ *
+ */
+package i18n.localeOverride;
+
+// java imports
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.Locale;
+
+// internal imports
+import org.apache.beehive.netui.pageflow.*;
+
+// external imports
+import org.apache.struts.Globals;
+
+/**
+ * @jpf:forward name="index" path="index.jsp"
+ * @jpf:message-resources resources="properties.bundle1"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "index",
+            path = "index.jsp") 
+    },
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "properties.bundle1") 
+    })
+public class Controller 
+    extends PageFlowController
+{
+    private Locale defaultLocale = null;
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        defaultLocale = (Locale)getSession().getAttribute(Globals.LOCALE_KEY);
+
+        Locale germany = new Locale("de");
+        getSession().setAttribute(Globals.LOCALE_KEY, germany);
+
+        return new Forward("index");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward resetLocale()
+    {
+        getSession().setAttribute(Globals.LOCALE_KEY, defaultLocale);
+        return new Forward("index");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/i18n/localeOverride/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/i18n/localeOverride/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>i18n Override Test</title>
+  </head>
+  <body>
+    <b>i18n Override Test</b>
+<br/>
+<netui:label value="${bundle.default.message1}"/>
+<br/>
+<netui:anchor action="resetLocale">Reset Locale</netui:anchor>
+<br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,7 @@
+<html>
+<head>
+</head>
+<body>
+<jsp:forward page="index/controller.jpf" />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/index/Beehive.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/index/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/index/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,179 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2004-2004  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package index;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Category;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions;
+import org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+
+@Jpf.Controller (
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp")
+    },
+    singleton = true
+)
+public class Controller extends PageFlowController
+{
+    private final String TESTS = " Tests";
+    transient private TestDefinitions _td;
+    transient private Category[] _cats;
+    private String _cat = "drt";
+
+    public Iterator getCategories()
+    {
+        CatIterator it = new CatIterator(_cats,_cat);
+        return it;
+    }
+
+    public Iterator getTests()
+    {
+        TestIterator it = new TestIterator(_td.getCategories().getTests(_cat));
+        return it;
+    }
+
+    public String getTitle() {
+        Category c = _td.getCategories().getCategory(_cat);
+        String d = c.getDescription();
+        int pos = d.indexOf("Tests");
+        return c.getDescription() + ((pos != -1) ? "" : TESTS);
+    }
+
+
+    protected void onCreate()
+    {
+        TestDefinitions td = td = TestRecorderFilter.instance().getTestDefinitions();
+        if (td == null) {
+            System.err.println("Didn't find the test Definitions");
+        }
+        _td = td;
+        _cats = _td.getCategories().getCategories();
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp")
+        })
+    public Forward selectList()
+    {
+        String cat = getRequest().getParameter("target");
+        if (cat != null) {
+            _cat = cat;
+        }
+        return new Forward( "success" );
+    }
+
+    public class CatIterator implements Iterator
+    {
+        private Category[] _cats;
+        private int pos;
+        private Category _cat;
+        private String _selCat;
+
+        public CatIterator(Category[] cats, String selCat) {
+            _cats = cats;
+            _selCat = selCat;
+            pos = 0;
+        }
+
+        public String getName() {
+            return _cat.getName();
+        }
+
+        public String getDescription() {
+            return _cat.getDescription();
+        }
+
+        public String getSelection() {
+            return (_cat.getName().equals(_selCat)) ? "uberlink" : null;
+        }
+
+        public boolean hasNext()
+        {
+            return (pos < _cats.length);
+        }
+
+        public Object next()
+        {
+            _cat = _cats[pos++];
+            return this;
+        }
+
+        public void remove()
+        {
+            throw new RuntimeException("Iterator does not support remove.");
+        }
+    }
+
+    public class TestIterator implements Iterator
+    {
+        private List _list;
+        private int _cur;
+        private TestDefinition _test;
+
+        public TestIterator(List l)
+        {
+            _list = l;
+            _cur = 0;
+        }
+
+        public String getName()
+        {
+            return _test.getName();
+        }
+
+        public boolean isDiff()
+        {
+            File file = new File(_test.getResultDiffFilePath());
+            return file.exists();
+        }
+
+        public String getDescription()
+        {
+            return _test.getDescription();
+        }
+
+        //*********************************** ITERATOR ******************************************
+        public boolean hasNext()
+        {
+            return (_cur != _list.size());
+        }
+
+        public Object next()
+        {
+            _test = (TestDefinition) _list.get(_cur++);
+            return this;
+        }
+
+        public void remove()
+        {
+            throw new RuntimeException("Iterator does not support remove.");
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/index/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/index/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<netui:html>
+    <head>
+        <title>Beehive NetUI Tests</title>
+        <netui:base/>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .nameColumn {
+            width: 140pt;
+            vertical-align: top;
+            text-align: right;
+        }
+
+        .descrColumn {
+        }
+
+        .diffColumn {
+            width: 30pt;
+            text-align: center;
+            vertical-align: top;
+        }
+
+        .detailColumn {
+            width: 40pt;
+            text-align: center;
+            vertical-align: top;
+        }
+
+        </style>
+    </head>
+
+    <netui:body>
+    <div style="height:80px">
+        <netui:image style="z-index:1" src="Beehive.gif" />
+    <div class="title">Beehive NetUI Tests</div>
+    <div class="subTitle">${pageFlow.title}</div>
+    </div>
+    <hr>
+    <div id="navlist">
+    <ul>
+    <netui-data:repeater dataSource="pageFlow.categories">
+        <li><netui:anchor tagId="${container.item.selection}" action="selectList">${container.item.description}
+            <netui:parameter name="target" value="${container.item.name}" />
+            </netui:anchor></li>
+     </netui-data:repeater>
+    </ul>
+    </div>
+    <div id="content">
+     <netui-data:repeater dataSource="pageFlow.tests">
+         <netui-data:repeaterHeader><table border='1px' cellspacing='0'></netui-data:repeaterHeader>
+         <netui-data:repeaterItem>
+             <tr>
+             <td class="nameColumn"><netui:anchor href="/coreWeb/testRecorder?mode=displayLink">${container.item.name}
+                 <netui:parameter name="file" value="${container.item.name}"/>
+                 </netui:anchor></td>
+              <td class="descrColumn">${container.item.description}
+              </td>
+             <td class="diffColumn">
+                 <c:if test="${container.item.diff == true}">
+                 <netui:anchor href="/coreWeb/testRecorder?mode=diff">Diff
+                     <netui:parameter name="file" value="${container.item.name}"/>
+                 </netui:anchor>
+                 </c:if>
+             &nbsp;
+             </td>
+              <td class="detailColumn"><netui:anchor href="/coreWeb/testRecorder?mode=details">Details
+                 <netui:parameter name="file" value="${container.item.name}"/>
+                 </netui:anchor></td>
+            </tr>
+         </netui-data:repeaterItem>
+         <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+     </netui-data:repeater>
+    </div>
+    </netui:body>
+</netui:html>
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/index/linkDown.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/index/linkOver.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/index/style.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/index/style.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,147 @@
+ body {
+ 	font: 10pt/16pt Comic Sans MS;
+ 	color: #555753;
+ 	margin: 5px 10px 5px 5px;
+}
+
+/** Define the look of links **/
+a:link {
+	text-decoration: none;
+	color: #e18700;
+	}
+
+a:visited {
+	text-decoration: none;
+	color: #ffad30;
+	}
+
+a:hover, a:active {
+	text-decoration: underline;
+	color: #9685BA;
+}
+
+/** Define the title which is positioned at the top **/
+.title {
+    position: absolute;
+    left: 80px;
+    top: 20px;
+    font-family: "Comic Sans MS", Arial, Helvetica, sans-serif;
+    font-size: 20pt;
+    font-weight: bold;
+    margin:0px;
+    padding:0px;
+    color: white;
+    z-index: 3;
+}
+
+.subTitle {
+    position: absolute;
+    left: 100px;
+    top: 55px;
+    font-family: "Comic Sans MS", Arial, Helvetica, sans-serif;
+    font-size: 16pt;
+    font-weight: bold;
+    margin:0px;
+    padding:0px;
+    color: white;
+    z-index: 3;
+}
+
+/** This defines the left nav bar **/
+
+#content {
+    margin: 0px 10px 0px 120px
+}
+
+#navlist {
+   position: absolute;
+   left: 5px;
+   top: 100px;
+   width: 90px;
+}
+
+#navlist ul {
+   margin: 0;                   /* remove indent IE and Opera */
+   padding: 0;                  /* remove indent Mozilla and NN7 */
+   list-style-type: none;       /* turns off display of bullet */
+   font-family: "Comic Sans MS", Arial, Helvetica, sans-serif;
+   font-size: 14px;
+   font-weight: bold;
+}
+
+#navlist li {
+   margin: 0 0 3px 0;
+}
+
+#navlist a {
+   display: block;
+   padding: 1px 2px 0px 20px;
+   border: 1px solid #333;
+   width: 84px;
+   background-color: #999;
+   background-image: url(linkDown.gif);
+   text-decoration: none;
+}
+
+#navlist a:link, #navlist a:visited {
+	color: #FFFFFF;
+}
+
+#navlist a:hover {
+	border: 1px solid #333;
+	background-color: #FF6600;
+	background-image:  url(linkOver.gif);
+	color: #333;
+}
+
+#uberlink, #uberlink:link, #uberlink:visited, #uberlink:hover {
+	border: 1px solid #333;
+	background-color: #FF6600;
+	background-image:  url(linkOver.gif);
+	color: #333 !important;
+}
+
+
+
+/** This is the test recorder which we are going to put into the panel on the left side **/
+
+#netuiTestRecorder
+{
+    position: absolute;
+    left:5px;
+    top: 468px;
+    width: 103px;
+    background-color:#c0c0c0 !important;
+    padding: 2pt 0pt 2pt 2pt !important;
+    color: #e18700 !important;
+}
+
+#netuiTestRecorder span {
+    color: inherit !important;
+    font-size: 10pt;
+}
+
+#netuiTestRecorder a {
+    color: blue !important;
+    font-weight: normal !important;
+}
+
+#netuiTestRecorder a span {
+    color: inherit !important;
+    font-weight: normal !important;
+}
+
+#netuiTestRecorder hr {
+    display: none
+}
+
+#netuiTestRecorder a:visited, #netuiTestRecorder a:link {
+	text-decoration: none;
+	color: #e18700  !important;
+}
+
+#netuiTestRecorder a:hover, #netuiTestRecorder a:active {
+	text-decoration: underline;
+	color: #9685BA !important;
+}
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Controller1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Controller1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+package interOp.test1.Controller1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+//-------------------------------------------------------
+// See the TestHeader.jsp for the interop path
+//-------------------------------------------------------
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/interOp/test1/Controller1/Jpf1.jpf'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='action:/interOp/tests/test1/gotoStrutsJSP.do'/>", 
+        "<pageflow-object id='forward:path#struts1Do#/interOp/tests/test1/gotoStrutsJSP.do#@action:begin.do@'/>", 
+        "</view-properties>"
+    }
+)
+public class Jpf1 extends PageFlowController
+{
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "struts1Do",
+                path = "/interOp/tests/test1/gotoStrutsJSP.do") 
+        })
+    protected Forward begin()
+    {
+        System.out.println("In Page Flow 1");
+        return new Forward("struts1Do");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Controller2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Controller2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+package interOp.test1.Controller2;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+//-------------------------------------------------------
+// See the TestHeader.jsp for the interop path
+//-------------------------------------------------------
+public class Jpf2 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" path="/interOp/test1/Done.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                path = "/interOp/test1/Done.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println("In Page Flow 2");
+        return new Forward("done");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Done.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Done.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%------------------------------------------------------------%>
+<%-- The last file displayed in the test to show completion --%>
+<%------------------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "3"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Start.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Start.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%--------------------------------------------------%>
+<%-- Displays link for the user to start the test --%>
+<%--------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "1"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <a href="Controller1/Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Struts1/Struts1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/Struts1/Struts1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+
+<%-----------------------------------------%>
+<%-- Struts jsp page called from a Jpf1  --%>
+<%-----------------------------------------%>
+<html>
+    <% request.setAttribute("position", "2"); %>
+    <jsp:include page="../TestHeader.jsp"/>
+
+        <html:form action="/test1/gotoJpf2">
+            <center>
+                <html:submit>Goto Jpf2</html:submit>
+            </center>
+        </html:form>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/TestHeader.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test1/TestHeader.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%--------------------------------------------------------------------%>
+<%-- Header file that writes the path based on here the user is in  --%>
+<%-- test.  Also writes out the full path for the index.jsp page    --%>
+<%--------------------------------------------------------------------%>
+    <head>
+        <title>InterOp Test1</title>
+    </head>
+
+    <body>
+        <% if (request.getAttribute("position") != "Index") { %>
+           <h3>Interop Test1</h3>
+           <br/>
+        <% } %>
+
+        <% if (request.getAttribute("position") == "1") { %>
+            Start.jsp...
+        <%} else if (request.getAttribute("position") == "2") { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> /interOp/tests/gotoStrutsJSP.do -> Struts1.jsp ...
+        <%} else { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> /interOp/tests/gotoStrutsJSP.do -> Struts1.jsp ...
+                                               gotoJpf2.do -> Jpf2.jpf/begin.do -> Done.jsp
+        <% } %>
+
+        <% if (request.getAttribute("position") != "Index") { %>
+          <hr width="95%"/>
+          <br/>
+        <% } %>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Controller1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Controller1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+package interOp.test2.Controller1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+//-------------------------------------------------------
+// See the TestHeader.jsp for the interop path
+//-------------------------------------------------------
+public class Jpf1 extends PageFlowController
+{
+    protected global.Global ga; //= new global.Global();
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="jpf1.jsp" path="Jpf1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "jpf1.jsp",
+                path = "Jpf1.jsp") 
+        })
+    protected Forward begin()
+    {
+
+        System.out.println("Test2: In Jpf1.jpf");
+        return new Forward("jpf1.jsp");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Controller1/Jpf1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Controller1/Jpf1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<%-----------------------------------------%>
+<%-- Struts jsp page called from a Jpf1  --%>
+<%-----------------------------------------%>
+<html>
+    <% request.setAttribute("position", "2"); %>
+    <jsp:include page="../TestHeader.jsp"/>
+
+        <netui:form action="toLegacy">
+            <center>
+                <netui:button>Goto Global.app</netui:button>
+            </center>
+        </netui:form>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Done.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Done.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%------------------------------------------------------------%>
+<%-- The last file displayed in the test to show completion --%>
+<%------------------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "4"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Start.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Start.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%--------------------------------------------------%>
+<%-- Displays link for the user to start the test --%>
+<%--------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "1"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <a href="Controller1/Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Struts1/Struts1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/Struts1/Struts1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+
+<%-----------------------------------------%>
+<%-- Struts jsp page called from a Jpf1  --%>
+<%-----------------------------------------%>
+<html>
+    <% request.setAttribute("position", "3"); %>
+    <jsp:include page="../TestHeader.jsp"/>
+
+        <html:form action="/test2/gotoDone">
+            <center>
+                <html:submit>Goto Done</html:submit>
+            </center>
+        </html:form>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/TestHeader.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test2/TestHeader.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%--------------------------------------------------------------------%>
+<%-- Header file that writes the path based on here the user is in  --%>
+<%-- test.  Also writes out the full path for the index.jsp page    --%>
+<%--------------------------------------------------------------------%>
+    <head>
+        <title>InterOp Test2</title>
+    </head>
+
+    <body>
+        <% if (request.getAttribute("position") != "Index") { %>
+           <h3>Interop Test2</h3>
+           <br/>
+        <% } %>
+
+        <% if (request.getAttribute("position") == "1") { %>
+            Start.jsp...
+        <%} else if (request.getAttribute("position") == "2") { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> jpf1.jsp ...
+        <%} else if (request.getAttribute("position") == "3") { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> jpf1.jsp -> /global/Global/toLegacy.do -> /gotoStrutsJSP.do -> Struts1.jsp ...
+        <% } else { %>
+           Start.jsp ... Jpf1.jpf/begin.do -> jpf1.jsp -> /global/Global/toLegacy.do -> /gotoStrutsJSP.do -> Struts1.jsp ...
+                                               gotoDone -> Done.jsp
+        <% }
+        if (request.getAttribute("position") != "Index") { %>
+          <hr width="95%"/>
+          <br/>
+        <% } %>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Controller1/JpfNestable.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Controller1/JpfNestable.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+package interOp.test3.Controller1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control Connie
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class JpfNestable extends PageFlowController
+{
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="struts1Do" path="/interOp/tests/test3/gotoStrutsJSP.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "struts1Do",
+                path = "/interOp/tests/test3/gotoStrutsJSP.do") 
+        })
+    protected Forward begin()
+    {
+        System.out.println("In Page Flow 1");
+        return new Forward("struts1Do");
+    }
+
+    /**
+     * Note that executing this action destroys the nesting stack.
+     *
+     * @jpf:action
+     * @jpf:forward name="done" path="/interOp/test3/Done.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                path = "/interOp/test3/Done.jsp") 
+        })
+    public Forward done()
+    {
+        return new Forward( "done" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="done"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "done") 
+        })
+    public Forward exitProperly()
+    {
+        return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Done.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Done.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%------------------------------------------------------------%>
+<%-- The last file displayed in the test to show completion --%>
+<%------------------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "3"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Start.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Start.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%--------------------------------------------------%>
+<%-- Displays link for the user to start the test --%>
+<%--------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "1"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <a href="Controller1/JpfNestable.jpf">Start test</a>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Struts1/Struts1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/Struts1/Struts1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+
+<%-----------------------------------------%>
+<%-- Struts jsp page called from a Jpf1  --%>
+<%-----------------------------------------%>
+<html>
+    <% request.setAttribute("position", "2"); %>
+    <jsp:include page="../TestHeader.jsp"/>
+
+        <html:form action="/test3/gotoDone">
+            <center>
+                <html:submit>Goto Done</html:submit>
+            </center>
+        </html:form>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/TestHeader.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test3/TestHeader.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%--------------------------------------------------------------------%>
+<%-- Header file that writes the path based on here the user is in  --%>
+<%-- test.  Also writes out the full path for the index.jsp page    --%>
+<%--------------------------------------------------------------------%>
+    <head>
+        <title>InterOp Test3</title>
+    </head>
+
+    <body>
+        <% if (request.getAttribute("position") != "Index") { %>
+           <h3>Interop Test3</h3>
+           <br/>
+        <% } %>
+
+        <% if (request.getAttribute("position") == "1") { %>
+            Start.jsp...
+        <%} else if (request.getAttribute("position") == "2") { %>
+            Start.jsp ... JpfNestable.jpf/begin.do -> /interOp/tests/gotoStrutsJSP.do -> Struts1.jsp ...
+        <%} else { %>
+            Start.jsp ... JpfNestable.jpf/begin.do -> /interOp/tests/gotoStrutsJSP.do -> Struts1.jsp ...
+                                               JpfNestable/done.do -> Done.jsp
+        <% } %>
+
+        <% if (request.getAttribute("position") != "Index") { %>
+          <hr width="95%"/>
+          <br/>
+        <% } %>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Controller1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Controller1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+package interOp.test4.Controller1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+//-------------------------------------------------------
+// See the TestHeader.jsp for the interop path
+//-------------------------------------------------------
+public class Jpf1 extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="nestableDo" path="/interOp/test4/Controller2/JpfNestable.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nestableDo",
+                path = "/interOp/test4/Controller2/JpfNestable.jpf") 
+        })
+    protected Forward begin()
+    {
+        System.out.println("In Page Flow 1");
+        return new Forward("nestableDo");
+    }
+
+       /**
+     * @jpf:action
+     * @jpf:forward name="done" path="/interOp/test4/Done.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                path = "/interOp/test4/Done.jsp") 
+        })
+    public Forward jpf1Done()
+    {
+        return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Controller2/JpfNestable.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Controller2/JpfNestable.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+package interOp.test4.Controller2;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control Connie
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class JpfNestable extends PageFlowController
+{
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="struts1Do" path="/interOp/tests/test4/gotoStrutsJSP.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "struts1Do",
+                path = "/interOp/tests/test4/gotoStrutsJSP.do") 
+        })
+    protected Forward begin()
+    {
+        System.out.println("In Nestable Page Flow 2");
+        return new Forward("struts1Do");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="jpf1Done"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "jpf1Done") 
+        })
+    public Forward done()
+    {
+        System.out.println("In Nestable done");
+        return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Done.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Done.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%------------------------------------------------------------%>
+<%-- The last file displayed in the test to show completion --%>
+<%------------------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "3"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Start.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Start.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%--------------------------------------------------%>
+<%-- Displays link for the user to start the test --%>
+<%--------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "1"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <a href="Controller1/Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Struts1/Struts1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/Struts1/Struts1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+
+<%-----------------------------------------%>
+<%-- Struts jsp page called from a Jpf1  --%>
+<%-----------------------------------------%>
+<html>
+    <% request.setAttribute("position", "2"); %>
+    <jsp:include page="../TestHeader.jsp"/>
+
+        <html:form action="/test4/gotoDone">
+            <center>
+                <html:submit>Goto Done</html:submit>
+            </center>
+        </html:form>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/TestHeader.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test4/TestHeader.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%--------------------------------------------------------------------%>
+<%-- Header file that writes the path based on here the user is in  --%>
+<%-- test.  Also writes out the full path for the index.jsp page    --%>
+<%--------------------------------------------------------------------%>
+    <head>
+        <title>InterOp Test4</title>
+    </head>
+
+    <body>
+        <% if (request.getAttribute("position") != "Index") { %>
+           <h3>Interop Test4</h3>
+           <br/>
+        <% } %>
+
+        <% if (request.getAttribute("position") == "1") { %>
+            Start.jsp...
+        <%} else if (request.getAttribute("position") == "2") { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do ->
+                              /interOp/tests/test4/gotoStrutsJSP.do -> Struts1.jsp...
+        <%} else { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do ->
+                              /interOp/tests/test4/gotoStrutsJSP.do -> Struts1.jsp...
+                             JpfNestable/done.do -> Jpf1.jpf/done.do -> Done.jsp
+        <% } %>
+
+        <% if (request.getAttribute("position") != "Index") { %>
+          <hr width="95%"/>
+          <br/>
+        <% } %>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Controller1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Controller1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+package interOp.test5.Controller1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+//-------------------------------------------------------
+// See the TestHeader.jsp for the interop path
+//-------------------------------------------------------
+public class Jpf1 extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="nestableDo" path="/interOp/test5/Controller2/JpfNestable.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nestableDo",
+                path = "/interOp/test5/Controller2/JpfNestable.jpf") 
+        })
+    protected Forward begin()
+    {
+        System.out.println("In Page Flow 1");
+        return new Forward("nestableDo");
+    }
+
+       /**
+     * @jpf:action
+     * @jpf:forward name="done" path="/interOp/test5/Done.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                path = "/interOp/test5/Done.jsp") 
+        })
+    public Forward jpf1Done()
+    {
+        return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Controller2/JpfNestable.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Controller2/JpfNestable.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+package interOp.test5.Controller2;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * PageFlow class generated from control Connie
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class JpfNestable extends PageFlowController
+{
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="struts1Do" path="/interOp/tests/test5/gotoStrutsJSP.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "struts1Do",
+                path = "/interOp/tests/test5/gotoStrutsJSP.do") 
+        })
+    protected Forward begin()
+    {
+        System.out.println("In Nestable Page Flow 2");
+        return new Forward("struts1Do");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="done"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "done") 
+        })
+    public Forward exitProperly()
+    {
+        return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Done.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Done.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%------------------------------------------------------------%>
+<%-- The last file displayed in the test to show completion --%>
+<%------------------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "4"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Start.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Start.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%--------------------------------------------------%>
+<%-- Displays link for the user to start the test --%>
+<%--------------------------------------------------%>
+<html>
+    <% request.setAttribute("position", "1"); %>
+    <jsp:include page="TestHeader.jsp"/>
+        <center>
+            <a href="Controller1/Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Struts1/Struts1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Struts1/Struts1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+
+<%-----------------------------------------%>
+<%-- Struts jsp page called from a Jpf1  --%>
+<%-----------------------------------------%>
+<html>
+    <% request.setAttribute("position", "2"); %>
+    <jsp:include page="../TestHeader.jsp"/>
+
+        <html:form action="/test5/gotoGlobal">
+            <center>
+                <html:submit>Goto Global</html:submit>
+            </center>
+        </html:form>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Struts1/Struts2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/Struts1/Struts2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+
+<%-----------------------------------------%>
+<%-- Struts jsp page called from a Jpf1  --%>
+<%-----------------------------------------%>
+<html>
+    <% request.setAttribute("position", "3"); %>
+    <jsp:include page="../TestHeader.jsp"/>
+
+        <html:form action="/test5/gotoDone">
+            <center>
+                <html:submit>Goto JPF Done</html:submit>
+            </center>
+        </html:form>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/TestHeader.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/interOp/test5/TestHeader.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%--------------------------------------------------------------------%>
+<%-- Header file that writes the path based on here the user is in  --%>
+<%-- test.  Also writes out the full path for the index.jsp page    --%>
+<%--------------------------------------------------------------------%>
+    <head>
+        <title>InterOp Test5</title>
+    </head>
+
+    <body>
+        <% if (request.getAttribute("position") != "Index") { %>
+           <h3>Interop Test5</h3>
+           <br/>
+        <% } %>
+
+        <% if (request.getAttribute("position") == "1") { %>
+            Start.jsp...
+        <%} else if (request.getAttribute("position") == "2") { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do -> Struts1.jsp...
+        <%} else if (request.getAttribute("position") == "3") { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do -> Struts1.jsp...
+                              /global/Global/toStruts2 -> /gotoStrutsJSP2.do -> Struts2.jsp...
+        <% } else { %>
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do -> Struts1.jsp...
+                              /global/Global/toStruts2 -> /gotoStrutsJSP2.do -> Struts2.jsp...
+                             Jpf1.jpf/toDone.do -> Done.jsp
+        <% } if (request.getAttribute("position") != "Index") { %>
+          <hr width="95%"/>
+          <br/>
+        <% } %>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,352 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri Aug 08 17:31:48 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package javascript.jsAllScript;
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/jsAllScript/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="360" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:submit.do#jsAllScript.Controller.NameBean">
+ *   <property value="360" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:foobar.do#jsAllScript.Controller.NameBean">
+ *   <property value="360" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:baz.do#jsAllScript.Controller.NameBean">
+ *   <property value="360" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:imageSubmit.do#jsAllScript.Controller.NameBean">
+ *   <property value="360" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:baz.do#jsAllScript.Controller.NameBean@">
+ *   <property value="216,270,270,324" name="elbowsX"/>
+ *   <property value="123,123,212,212" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:submit.do#jsAllScript.Controller.NameBean@">
+ *   <property value="216,270,270,324" name="elbowsX"/>
+ *   <property value="112,112,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:begin.do@">
+ *   <property value="216,270,270,324" name="elbowsX"/>
+ *   <property value="101,101,43,43" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:imageSubmit.do#jsAllScript.Controller.NameBean@">
+ *   <property value="216,270,270,324" name="elbowsX"/>
+ *   <property value="123,123,272,272" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="180" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Results.jsp@#@action:begin.do@">
+ *   <property value="524,460,460,396" name="elbowsX"/>
+ *   <property value="132,132,32,32" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Results.jsp">
+ *   <property value="560" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="324,270,270,216" name="elbowsX"/>
+ *   <property value="32,32,112,112" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Results.jsp#@action:submit.do#jsAllScript.Controller.NameBean@">
+ *   <property value="396,460,460,524" name="elbowsX"/>
+ *   <property value="92,92,132,132" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Results.jsp#@action:foobar.do#jsAllScript.Controller.NameBean@">
+ *   <property value="396,460,460,524" name="elbowsX"/>
+ *   <property value="152,152,132,132" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Results.jsp#@action:baz.do#jsAllScript.Controller.NameBean@">
+ *   <property value="396,460,460,524" name="elbowsX"/>
+ *   <property value="212,212,132,132" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Results.jsp#@action:imageSubmit.do#jsAllScript.Controller.NameBean@">
+ *   <property value="396,460,460,524" name="elbowsX"/>
+ *   <property value="272,272,143,143" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:jsAllScript.Controller.NameBean#lastName#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:jsAllScript.Controller.NameBean#firstName#java.lang.String"/>
+ * <pageflow-object id="formbean:jsAllScript.Controller.NameBean"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/jsAllScript/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submit.do#jsAllScript.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:foobar.do#jsAllScript.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:baz.do#jsAllScript.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:imageSubmit.do#jsAllScript.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:baz.do#jsAllScript.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='123,123,212,212' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:submit.do#jsAllScript.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='112,112,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='101,101,43,43' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:imageSubmit.do#jsAllScript.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='123,123,272,272' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Results.jsp@#@action:begin.do@'>",
+        "  <property value='524,460,460,396' name='elbowsX'/>",
+        "  <property value='132,132,32,32' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Results.jsp'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='324,270,270,216' name='elbowsX'/>",
+        "  <property value='32,32,112,112' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:submit.do#jsAllScript.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='92,92,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:foobar.do#jsAllScript.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='152,152,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:baz.do#jsAllScript.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='212,212,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:imageSubmit.do#jsAllScript.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='272,272,143,143' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:jsAllScript.Controller.NameBean#lastName#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:jsAllScript.Controller.NameBean#firstName#java.lang.String'/>",
+        "<pageflow-object id='formbean:jsAllScript.Controller.NameBean'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    public String getAction() {
+        return "foobar";
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward submit(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward foobar(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward baz(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward imageSubmit(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameBean extends FormData
+    {
+        private String firstName;
+
+        private String lastName;
+
+
+        public void setLastName(String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public String getLastName()
+        {
+            return this.lastName;
+        }
+
+        public void setFirstName(String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public String getFirstName()
+        {
+            return this.firstName;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="names" type="formAnchorParams.Controller.NameBean"></netui-data:declarePageInput>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin">Home</netui:anchor><br>
+        <hr />
+        anchorForm: <netui:label value="${param.anchorForm}"></netui:label> <br /><br />
+        LastName: <netui:label value="${pageInput.names.firstName}"></netui:label><br />
+        FirstName: <netui:label value="${pageInput.names.lastName}"></netui:label><br />
+            
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScript/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:scriptContainer>
+            <netui:form action="submit" focus="firstName">
+                <table class="tablebody">
+                    <tr class="tablehead">
+                        <td>LastName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.lastName" tagId="lastName"></netui:textBox>
+                        </td>
+                    </tr>
+                    <tr class="tablehead">
+                        <td>FirstName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.firstName" tagId="firstName"></netui:textBox>
+                        </td>
+                    </tr>
+                </table>
+                <br/>
+                <netui:anchor formSubmit="true" action="${pageFlow.action}">Submit pageFlow.action("Foo")
+                    <netui:parameter name="anchorForm" value='Submit pageFlow.action("Foo")'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+                <netui:anchor formSubmit="true" action="baz">Submit Baz
+                    <netui:parameter name="anchorForm" value='Submit Baz'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+                <netui:anchor formSubmit="true">Default Form Submit
+                    <netui:parameter name="anchorForm" value='Default Form Submit'></netui:parameter>
+                </netui:anchor>
+                
+                <netui:imageAnchor action="imageSubmit" src="./../../resources/images/bar-background.gif" formSubmit="true">
+                    <netui:parameter name="anchorForm" value="Submit from ImageAnchor"></netui:parameter>
+                </netui:imageAnchor>
+            &nbsp;
+            <netui:imageButton src="../../images/godzilla.gif" rolloverImage="../../images/godzillaRollover.gif" />
+            </netui:form><br/>
+        <netui:imageAnchor action="begin" src="../../images/godzilla.gif" rolloverImage="../../images/godzillaRollover.gif" height="100" width="80">PostBack</netui:imageAnchor>
+        </netui:scriptContainer>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,230 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri Aug 08 17:31:48 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package javascript.jsAllScriptHtml;
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/jsAllScriptHtml/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submit.do#jsAllScriptHtml.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:foobar.do#jsAllScriptHtml.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:baz.do#jsAllScriptHtml.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:imageSubmit.do#jsAllScriptHtml.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='324,270,270,216' name='elbowsX'/>",
+        "  <property value='32,32,112,112' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Results.jsp'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:submit.do#jsAllScriptHtml.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='92,92,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:foobar.do#jsAllScriptHtml.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='152,152,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:baz.do#jsAllScriptHtml.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='212,212,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:imageSubmit.do#jsAllScriptHtml.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='272,272,143,143' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:jsAllScriptHtml.Controller.NameBean#lastName#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:jsAllScriptHtml.Controller.NameBean#firstName#java.lang.String'/>",
+        "<pageflow-object id='formbean:jsAllScriptHtml.Controller.NameBean'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='101,101,43,43' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Results.jsp@#@action:begin.do@'>",
+        "  <property value='524,460,460,396' name='elbowsX'/>",
+        "  <property value='132,132,32,32' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    public String getAction() {
+        return "foobar";
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward submit(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward foobar(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward baz(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward imageSubmit(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameBean extends FormData
+    {
+        private String firstName;
+
+        private String lastName;
+
+
+        public void setLastName(String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public String getLastName()
+        {
+            return this.lastName;
+        }
+
+        public void setFirstName(String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public String getFirstName()
+        {
+            return this.firstName;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="names" type="formAnchorParams.Controller.NameBean"></netui-data:declarePageInput>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin">Home</netui:anchor><br>
+        <hr />
+        anchorForm: <netui:label value="${param.anchorForm}"></netui:label> <br /><br />
+        LastName: <netui:label value="${pageInput.names.firstName}"></netui:label><br />
+        FirstName: <netui:label value="${pageInput.names.lastName}"></netui:label><br />
+            
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsAllScriptHtml/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <p>
+            <netui:form action="submit" focus="firstName">
+                <table class="tablebody">
+                    <tr class="tablehead">
+                        <td>LastName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.lastName" tagId="lastName"></netui:textBox>
+                        </td>
+                    </tr>
+                    <tr class="tablehead">
+                        <td>FirstName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.firstName" tagId="firstName"></netui:textBox>
+                        </td>
+                    </tr>
+                </table>
+                <br/>
+                <netui:anchor formSubmit="true" action="${pageFlow.action}">Submit pageFlow.action("Foo")
+                    <netui:parameter name="anchorForm" value='Submit pageFlow.action("Foo")'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+                <netui:anchor formSubmit="true" action="baz">Submit Baz
+                    <netui:parameter name="anchorForm" value='Submit Baz'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+                <netui:anchor formSubmit="true">Default Form Submit
+                    <netui:parameter name="anchorForm" value='Default Form Submit'></netui:parameter>
+                </netui:anchor>
+                
+                <netui:imageAnchor action="imageSubmit" src="./../../resources/images/bar-background.gif" formSubmit="true">
+                    <netui:parameter name="anchorForm" value="Submit from ImageAnchor"></netui:parameter>
+                </netui:imageAnchor>
+            &nbsp;
+            <netui:imageButton src="../../images/godzilla.gif" rolloverImage="../../images/godzillaRollover.gif"/>
+            </netui:form><br/>
+        <netui:imageAnchor action="begin" src="../../images/godzilla.gif" rolloverImage="../../images/godzillaRollover.gif" height="100" width="80">PostBack</netui:imageAnchor>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsFind/JsFind.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsFind/JsFind.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,177 @@
+package javascript.jsFind;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/jsFind/JsFind.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:jsFind.JsFind.TypeBean"/>
+ * <pageflow-object id="formbeanprop:jsFind.JsFind.TypeBean#type#java.lang.String"/>
+ * <pageflow-object id="action:postForm.do#jsFind.JsFind.TypeBean">
+ *   <property value="380" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:postForm.do#jsFind.JsFind.TypeBean@">
+ *   <property value="276,310,310,344" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:postForm.do#jsFind.JsFind.TypeBean@">
+ *   <property value="416,416,240,240" name="elbowsX"/>
+ *   <property value="81,60,60,56" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/jsFind/JsFind.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:jsFind.JsFind.TypeBean'/>",
+        "<pageflow-object id='formbeanprop:jsFind.JsFind.TypeBean#type#java.lang.String'/>",
+        "<pageflow-object id='action:postForm.do#jsFind.JsFind.TypeBean'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postForm.do#jsFind.JsFind.TypeBean@'>",
+        "  <property value='276,310,310,344' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:postForm.do#jsFind.JsFind.TypeBean@'>",
+        "  <property value='416,416,240,240' name='elbowsX'/>",
+        "  <property value='81,60,60,56' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class JsFind extends PageFlowController
+{
+    private Map options;
+    private String type;
+
+    public Map getOptions()
+    {
+        return options;
+    }
+
+    public void setOptions(Map options)
+    {
+        this.options = options;
+    }
+
+    public String getType()
+    {
+        return type;
+    }
+
+    public void setType(String type)
+    {
+        this.type = type;
+    }
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        options = new HashMap();
+        options.put("value1","Foo Value");
+        options.put("value2","Bar Value");
+        options.put("value3","Baz Value");
+        
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward postForm(TypeBean form)
+    {
+        type = form.getType();
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class TypeBean extends FormData
+    {
+        private String type;
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType()
+        {
+            return this.type;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsFind/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsFind/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <netui:form action="postForm">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <netui:select dataSource="actionForm.type" optionsDataSource="${pageFlow.options}" tagId="select"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="postForm" type="submit"/>
+        </netui:form>
+        <hr />
+        Type: <netui:label value="${pageFlow.type}"></netui:label>
+    <script language="JavaScript" type="text/JavaScript">
+        var name = getNetuiTagName("select");
+        document.writeln("<br/>Select Name:" + name + "<br/>");
+        var select = document.getElementById(name);
+        document.writeln("Select:" + select.selectedIndex);
+    </script>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,247 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri Aug 08 17:31:48 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package javascript.jsNoContainers;
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/jsNoContainers/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submit.do#jsNoContainers.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:foobar.do#jsNoContainers.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:baz.do#jsNoContainers.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:imageSubmit.do#jsNoContainers.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:submit.do#jsNoContainers.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='112,112,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='112,112,43,43' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:imageSubmit.do#jsNoContainers.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='123,123,272,272' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:baz.do#jsNoContainers.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='123,123,212,212' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='324,270,270,216' name='elbowsX'/>",
+        "  <property value='32,32,112,112' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Results.jsp'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:submit.do#jsNoContainers.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='92,92,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:foobar.do#jsNoContainers.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='152,152,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:baz.do#jsNoContainers.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='212,212,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:imageSubmit.do#jsNoContainers.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='272,272,143,143' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:jsNoContainers.Controller.NameBean#lastName#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:jsNoContainers.Controller.NameBean#firstName#java.lang.String'/>",
+        "<pageflow-object id='formbean:jsNoContainers.Controller.NameBean'/>",
+        "<pageflow-object id='action-call:@page:Results.jsp@#@action:begin.do@'>",
+        "  <property value='524,460,460,396' name='elbowsX'/>",
+        "  <property value='132,132,32,32' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    public String getAction() {
+        return "foobar";
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward submit(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward foobar(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward baz(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward imageSubmit(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameBean extends FormData
+    {
+        private String firstName;
+
+        private String lastName;
+
+
+        public void setLastName(String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public String getLastName()
+        {
+            return this.lastName;
+        }
+
+        public void setFirstName(String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public String getFirstName()
+        {
+            return this.firstName;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="names" type="formAnchorParams.Controller.NameBean"></netui-data:declarePageInput>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin">Home</netui:anchor><br>
+        <hr />
+        anchorForm: <netui:label value="${param.anchorForm}"></netui:label> <br /> <br />
+        LastName: <netui:label value="${pageInput.names.firstName}"></netui:label><br />
+        FirstName: <netui:label value="${pageInput.names.lastName}"></netui:label><br />
+            
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsNoContainers/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+            <netui:form action="submit" focus="firstName">
+                <h4>Form One</h4>
+                <table class="tablebody">
+                        
+                    <tr class="tablehead">
+                        <td>LastName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.lastName" tagId="lastName"></netui:textBox>
+                        </td>
+                    </tr>
+                    <tr class="tablehead">
+                        <td>FirstName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.firstName" tagId="firstName"></netui:textBox>
+                        </td>
+                    </tr>
+                </table>
+                <br/>
+                <netui:anchor formSubmit="true" action="${pageFlow.action}">Submit pageFlow.action("Foo")
+                    <netui:parameter name="anchorForm" value='Submit pageFlow.action("Foo")'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+                <netui:anchor formSubmit="true" action="baz">Submit Baz
+                    <netui:parameter name="anchorForm" value='Submit Baz'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+                <netui:anchor formSubmit="true">Default Form Submit
+                    <netui:parameter name="anchorForm" value='Default Form Submit'></netui:parameter>
+                </netui:anchor>
+                <br />
+                <netui:imageAnchor action="imageSubmit" src="./../../resources/images/bar-background.gif" formSubmit="true">
+                    <netui:parameter name="anchorForm" value="Submit from ImageAnchor"></netui:parameter>
+                </netui:imageAnchor>
+                &nbsp;
+                <netui:imageButton src="../../images/godzilla.gif" rolloverImage="../../images/godzillaRollover.gif" />
+            </netui:form>
+           <hr />
+
+        <netui:imageAnchor action="begin" src="../../images/godzilla.gif" rolloverImage="../../images/godzillaRollover.gif" height="100" width="80">PostBack</netui:imageAnchor>
+            <script language="JavaScript" type="text/JavaScript">
+                document.writeln("<br/>Get Name<br/>");
+                var name = getNetuiTagName("firstName");
+                document.writeln("Name:" + name + "<br/>");
+                name = getNetuiTagName("lastName");
+                document.writeln("Name:" + name + "<br/>");
+            </script>
+    </body>
+<html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,245 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri Aug 08 17:31:48 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package javascript.jsScriptScopeId;
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/jsScriptScopeId/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submit.do#jsScriptScopeId.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:foobar.do#jsScriptScopeId.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:baz.do#jsScriptScopeId.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:imageSubmit.do#jsScriptScopeId.Controller.NameBean'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:baz.do#jsScriptScopeId.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='123,123,212,212' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='112,112,43,43' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:imageSubmit.do#jsScriptScopeId.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='123,123,272,272' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:submit.do#jsScriptScopeId.Controller.NameBean@'>",
+        "  <property value='216,270,270,324' name='elbowsX'/>",
+        "  <property value='112,112,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Results.jsp@#@action:begin.do@'>",
+        "  <property value='524,460,460,396' name='elbowsX'/>",
+        "  <property value='132,132,32,32' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Results.jsp'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='324,270,270,216' name='elbowsX'/>",
+        "  <property value='32,32,112,112' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:submit.do#jsScriptScopeId.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='92,92,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:foobar.do#jsScriptScopeId.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='152,152,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:baz.do#jsScriptScopeId.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='212,212,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Results.jsp#@action:imageSubmit.do#jsScriptScopeId.Controller.NameBean@'>",
+        "  <property value='396,460,460,524' name='elbowsX'/>",
+        "  <property value='272,272,143,143' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:jsScriptScopeId.Controller.NameBean#lastName#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:jsScriptScopeId.Controller.NameBean#firstName#java.lang.String'/>",
+        "<pageflow-object id='formbean:jsScriptScopeId.Controller.NameBean'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    public String getAction() {
+        return "foobar";
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward submit(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward foobar(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward baz(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward imageSubmit(NameBean form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("names",form);
+        return f;
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameBean extends FormData
+    {
+        private String firstName;
+
+        private String lastName;
+
+
+        public void setLastName(String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public String getLastName()
+        {
+            return this.lastName;
+        }
+
+        public void setFirstName(String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public String getFirstName()
+        {
+            return this.firstName;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="names" type="formAnchorParams.Controller.NameBean"></netui-data:declarePageInput>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin">Home</netui:anchor><br>
+        <hr />
+        anchorForm: <netui:label value="${param.anchorForm}"></netui:label> <br />
+        scope: <netui:label value="${param.scope}"></netui:label> <br /><br />
+        LastName: <netui:label value="${pageInput.names.firstName}"></netui:label><br />
+        FirstName: <netui:label value="${pageInput.names.lastName}"></netui:label><br />
+            
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/javascript/jsScriptScopeId/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+            <table border='1' cellspacing="0" cellpadding="5"><tr><td>
+            <netui:scriptContainer scopeId="one" >
+            <netui:form action="submit" focus="firstName">
+                <h4>Form One</h4>
+                <table class="tablebody">
+                        <netui:parameter name="scope" value="one"></netui:parameter>
+                        
+                        
+                    <tr class="tablehead">
+                        <td>LastName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.lastName" tagId="lastName"></netui:textBox>
+                        </td>
+                    </tr>
+                    <tr class="tablehead">
+                        <td>FirstName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.firstName" tagId="firstName"></netui:textBox>
+                        </td>
+                    </tr>
+                </table>
+                <br/>
+                <netui:anchor formSubmit="true" action="${pageFlow.action}">Submit pageFlow.action("Foo")
+                    <netui:parameter name="anchorForm" value='Submit pageFlow.action("Foo")'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+                <netui:anchor formSubmit="true" action="baz">Submit Baz
+                    <netui:parameter name="anchorForm" value='Submit Baz'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+                <netui:anchor formSubmit="true">Default Form Submit
+                    <netui:parameter name="anchorForm" value='Default Form Submit'></netui:parameter>
+                </netui:anchor>
+                <br />
+                <netui:imageAnchor action="imageSubmit" src="./../../resources/images/bar-background.gif" formSubmit="true">
+                    <netui:parameter name="anchorForm" value="Submit from ImageAnchor"></netui:parameter>
+                </netui:imageAnchor>
+                &nbsp;
+                <netui:imageButton src="../../images/godzilla.gif" rolloverImage="../../images/godzillaRollover.gif" />
+            </netui:form>
+            </netui:scriptContainer>
+            </td><td>
+            <netui:scriptContainer scopeId="two" >
+            <netui:form action="submit">
+                <h4>Form Two</h4>
+                  <netui:parameter name="scope" value="two"></netui:parameter>
+                 <table class="tablebody">
+                    <tr class="tablehead">
+                        <td>LastName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.lastName" tagId="lastName"></netui:textBox>
+                        </td>
+                    </tr>
+                    <tr class="tablehead">
+                        <td>FirstName:</td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.firstName" tagId="firstName"></netui:textBox>
+                        </td>
+                    </tr>
+                </table>
+                <br/>
+                <netui:anchor formSubmit="true" action="${pageFlow.action}">Submit pageFlow.action("Foo")
+                    <netui:parameter name="anchorForm" value='Submit pageFlow.action("Foo")'></netui:parameter>
+                </netui:anchor>
+                &nbsp;
+           </netui:form>
+           </netui:scriptContainer>
+           </td></tr></table>
+           <hr />
+
+        <netui:imageAnchor action="begin" src="../../images/godzilla.gif" rolloverImage="../../images/godzillaRollover.gif" height="100" width="80">PostBack</netui:imageAnchor>
+            <script language="JavaScript" type="text/JavaScript">
+                document.writeln("<br/>Get Name<br/>");
+                var name = getNetuiTagName("firstName",document.forms[0]);
+                var myscope = getScopeId(document.forms[0]);
+                document.writeln("Name:" + name +  " Scope:" + myscope + "<br/>");
+                name = getNetuiTagName("lastName",document.forms[0]);
+                var myscope = getScopeId(document.forms[0]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "<br/>");
+                var name = getNetuiTagName("firstName",document.forms[1]);
+                var myscope = getScopeId(document.forms[1]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "<br/>");
+                name = getNetuiTagName("lastName",document.forms[1]);
+                var myscope = getScopeId(document.forms[1]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "<br/>");
+            </script>
+    </body>
+<html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfErrorForwardIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfErrorForwardIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- Validation Error Forward Tests ------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center">
+               <font color="blue">Validation Error Forward Tests</font>
+            </h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%-- Table headings ----------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ValFwdErr Test 54 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="valFwdErr/test54/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test54
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="valFwdErr/test54/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ValFwdErr Test 56 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="valFwdErr/test56/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test56
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="valFwdErr/test56/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ValFwdErr Test 57 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="valFwdErr/test57/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test57
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="valFwdErr/test57/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ValFwdErr Test 58 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="valFwdErr/test58/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test58
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="valFwdErr/test58/TestDescription.txt"/>
+               </td>
+            </tr>
+         </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfFormRePostIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfFormRePostIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- Form bean Re-post tests -------------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center">
+               <font color="blue">Form bean Re-post tests</font>
+            </h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%-- Table headings ----------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- FormBeanRePost Test 52 ------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="formBeanRePost/test52/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test52
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="formBeanRePost/test52/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- FormBeanRePost Test 53 ------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="formBeanRePost/test53/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test53
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="formBeanRePost/test53/TestDescription.txt"/>
+               </td>
+            </tr>
+         </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfPageInputIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfPageInputIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,455 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- JPF PageInput tests -----------------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center">
+               <font color="blue">JPF PageInput Tests</font>
+            </h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%----------------------------------------------------------------%>
+            <%---------------------- Table headings --------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+                <th align="left">Test Name</th>
+                <th align="left">Test Status</th>
+                <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 1 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test1/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test1
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test1/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 3 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test3/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test3
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test3/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 4 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test4/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test4
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test4/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 5 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test5/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test5
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test5/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 6 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test6/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test6
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test6/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 7 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test7/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test7
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test7/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 8 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test8/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test8
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test8/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 9 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test9/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test9
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test9/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 10 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test10/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test10
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test10/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 11 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test11/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test11
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test11/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 12 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test12/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test12
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test12/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 14 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test14/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test14
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test14/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 16 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test16/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test16
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="red">Pending bug 39554</font>
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test16/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 17 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test17/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test17
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test17/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 18 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test18/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test18
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test18/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 19 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test19/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test19
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test19/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 20 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test20/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test20
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test20/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 21 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test21/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test21
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test21/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 22 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test22/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test22
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test22/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 23 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test23/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test23
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test23/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 24 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test24/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test24
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test24/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 25 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test25/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test25
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test25/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 26 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test26/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test26
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test26/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- jpf PageInput Test 29 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="pageInput/test29/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test29
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="pageInput/test29/TestDescription.txt"/>
+               </td>
+            </tr>
+            </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfReturnToIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfReturnToIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,363 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- return-to Tests ---------------------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center"><font color="blue">Return-to Tests</font></h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%----------------------------------------------------------------%>
+            <%---------------------- Table headings --------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 28 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test28/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test28
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test28/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 30 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test30/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test30
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test30/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 31 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test31/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test31
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test31/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 32 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test32/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test32
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test32/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 33 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test33/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test33
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test33/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 34 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test34/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test34
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test34/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 35 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test35/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test35
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test35/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 36 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test36/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test36
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test36/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 37 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test37/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test37
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test37/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 39 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test39/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test39
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test39/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 40 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test40/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test40
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test40/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 41 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test41/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test41
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test41/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 42 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test42/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test42
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test42/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 44 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test44/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test44
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test44/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 45 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test45/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test45
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test45/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 46 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test46/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test46
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test46/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 47 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test47/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test47
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test47/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 48 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test48/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test48
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test48/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- Return-to Test 63 -----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="returnTo/test63/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test63
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="returnTo/test63/TestDescription.txt"/>
+               </td>
+            </tr>
+         </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JpfScopedForms JpfTest7</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms JpfTest7 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="jpf1/Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,247 @@
+package jpfScopedForms.jpfTest7.jpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ *   <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ *   <view-properties>
+ *   <pageflow-object id="pageflow:/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf"/>
+ *   <pageflow-object id="action:begin.do">
+ *     <property value="100" name="x"/>
+ *     <property value="80" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action:gotoJpf2.do#shared.FormA">
+ *     <property value="360" name="x"/>
+ *     <property value="200" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action:finish.do#shared.FormA">
+ *     <property value="360" name="x"/>
+ *     <property value="80" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:Jsp1a.jsp">
+ *     <property value="240" name="x"/>
+ *     <property value="80" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="external-jpf:../jpf2/Jpf2.jpf">
+ *     <property value="240" name="x"/>
+ *     <property value="240" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#go#Jsp1a.jsp#@action:begin.do@">
+ *     <property value="136,170,170,204" name="elbowsX"/>
+ *     <property value="72,72,72,72" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *     <property value="go" name="label"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#go#../jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@">
+ *     <property value="324,300,300,276" name="elbowsX"/>
+ *     <property value="181,181,232,232" name="elbowsY"/>
+ *     <property value="West_0" name="fromPort"/>
+ *     <property value="East_1" name="toPort"/>
+ *     <property value="go" name="label"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@">
+ *     <property value="276,300,300,324" name="elbowsX"/>
+ *     <property value="72,72,72,72" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@">
+ *     <property value="276,300,300,324" name="elbowsX"/>
+ *     <property value="83,83,192,192" name="elbowsY"/>
+ *     <property value="East_2" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:/resources/jsp/error.jsp">
+ *     <property value="60" name="x"/>
+ *     <property value="40" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ *   <pageflow-object id="page:/resources/jsp/done.jsp">
+ *     <property value="120" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ *   <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *     <property value="140" name="x"/>
+ *     <property value="120" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ *   </view-properties>
+ *   ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf2.do#shared.FormA'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../jpf2/Jpf2.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='136,170,170,204' name='elbowsX'/>",
+        "  <property value='72,72,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#../jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='324,300,300,276' name='elbowsX'/>",
+        "  <property value='181,181,232,232' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='276,300,300,324' name='elbowsX'/>",
+        "  <property value='72,72,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='276,300,300,324' name='elbowsX'/>",
+        "  <property value='83,83,192,192' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='120' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _NEW_VALUE = "New value";
+    public String field1 = null;
+    private FormA _form = null;
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession(), true);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf1.onCreate: " + _cnt);
+        }
+
+    /*
+     * Constructor
+     */
+    public Jpf1()
+        {
+        super();
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("Jpf1.begin: " + _cnt);
+        if (_form == null)
+            {
+            _form = new FormA(getSession());
+            _form.setString1(_INIT_VALUE);
+            }
+        if (field1 == null)
+            {
+            field1 = _INIT_VALUE;
+            }
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="../jpf2/Jpf2.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "../jpf2/Jpf2.jpf") 
+        })
+    protected Forward gotoJpf2(FormA form)
+        {
+        _log.tracePoint("Jpf1.gotoJpf2: " + _cnt);
+        field1 = _NEW_VALUE;
+        form.setString1(_NEW_VALUE);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action form="_form"
+     */
+    @Jpf.Action(
+        useFormBean = "_form")
+    protected Forward finish(FormA form)
+        {
+        _log.tracePoint("Jpf1.finish: " + _cnt);
+        return new Forward("gotoTraceResults");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>JpfScopedForms JpfTest7</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                JpfScopedForms
+                <br/>
+                JpfTest7 - Jsp1.Jsp1a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="finish">
+               <span style="font-size: 20px; color: blue; font-weight: bold">
+                    Page Flow field: <netui:content value="${pageFlow.field1}" />
+                    <br/>
+                    Form field: <netui:content value="${actionForm.string1}" />
+                    <br/><br/>
+                    <netui:button action="gotoJpf2" type="submit">Goto Jpf2</netui:button>
+                    &nbsp;&nbsp;
+                    <netui:button action="finish" type="submit">Finish</netui:button>
+                </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,247 @@
+package jpfScopedForms.jpfTest7.jpf2;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ *   <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ *   <view-properties>
+ *   <pageflow-object id="pageflow:/jpfScopedForms/jpfTest7/jpf2/Jpf2.jpf"/>
+ *   <pageflow-object id="action:begin.do">
+ *     <property value="100" name="x"/>
+ *     <property value="140" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action:gotoJpf1.do#shared.FormA">
+ *     <property value="400" name="x"/>
+ *     <property value="80" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action:finish.do#shared.FormA">
+ *     <property value="400" name="x"/>
+ *     <property value="240" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@">
+ *     <property value="276,320,320,364" name="elbowsX"/>
+ *     <property value="132,132,83,83" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_2" name="toPort"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:finish.do#shared.FormA@">
+ *     <property value="276,320,320,364" name="elbowsX"/>
+ *     <property value="143,143,232,232" name="elbowsY"/>
+ *     <property value="East_2" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:Jsp2a.jsp">
+ *     <property value="240" name="x"/>
+ *     <property value="140" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="external-jpf:/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf">
+ *     <property value="540" name="x"/>
+ *     <property value="80" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#go#Jsp2a.jsp#@action:begin.do@">
+ *     <property value="136,170,170,204" name="elbowsX"/>
+ *     <property value="132,132,132,132" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *     <property value="go" name="label"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#go#/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@">
+ *     <property value="436,470,470,504" name="elbowsX"/>
+ *     <property value="72,72,72,72" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *     <property value="go" name="label"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:/resources/jsp/done.jsp">
+ *     <property value="60" name="x"/>
+ *     <property value="40" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ *   <pageflow-object id="page:/resources/jsp/error.jsp">
+ *     <property value="80" name="x"/>
+ *     <property value="60" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ *   <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *     <property value="100" name="x"/>
+ *     <property value="80" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ *   </view-properties>
+ *   ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/jpfScopedForms/jpfTest7/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf1.do#shared.FormA'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='132,132,83,83' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='143,143,232,232' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp2a.jsp#@action:begin.do@'>",
+        "  <property value='136,170,170,204' name='elbowsX'/>",
+        "  <property value='132,132,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='72,72,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _NEW_VALUE = "New value";
+    public String field1 = null;
+    private FormA _form = null;
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf2.onCreate: " + _cnt);
+        }
+
+    /*
+     * Constructor
+     */
+    public Jpf2()
+        {
+        super();
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("Jpf2.begin: " + _cnt);
+        if (_form == null)
+            {
+            _form = new FormA(getSession());
+            _form.setString1(_INIT_VALUE);
+            }
+        if (field1 == null)
+            {
+            field1 = _INIT_VALUE;
+            }
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/jpfScopedForms/jpfTest7/jpf1/Jpf1.jpf") 
+        })
+    protected Forward gotoJpf1(FormA form)
+        {
+        _log.tracePoint("Jpf2.gotoJpf12: " + _cnt);
+        field1 = _NEW_VALUE;
+        form.setString1(_NEW_VALUE);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action form="_form"
+     */
+    @Jpf.Action(
+        useFormBean = "_form")
+    protected Forward finish(FormA form)
+        {
+        _log.tracePoint("Jpf2.finish: " + _cnt);
+        return new Forward("gotoTraceResults");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/jpfTest7/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>JpfScopedForms JpfTest7</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                JpfScopedForms
+                <br/>
+                JpfTest7 - Jsp2.Jsp2a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="finish">
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                Page Flow field: <netui:content value="${pageFlow.field1}" />
+                <br/>
+                Form field: <netui:content value="${actionForm.string1}" />
+                <br/><br/>
+                <netui:button action="gotoJpf1" type="submit">Goto Jpf1</netui:button>
+            </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,174 @@
+package jpfScopedForms.test49;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static final String   _STR1 = "Jpf1 value 1";
+   private static final String   _STR2 = "Jpf1 value 2";
+   public FormA _form1    = new FormA();
+   public FormA _form2;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      _form1.setString1(_STR1);
+      _form1.setString2(_STR2);
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * The inForm should be the same object as _form1.  If not the test failed.
+    * Also page Jps1.jsp rendered with a different instance of FormA and the
+    * values that displayed and were submited were the FormA default values not
+    * the values we set above in the "begin" method.  So inForm should have the
+    * default FormA values not what we set above.  It this is not the case the
+    * test fails.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      if ((inForm.getString1().equals(_STR1) == true)
+            ||
+          (inForm.getString2().equals(_STR2) == true))
+         {
+         System.out.println("\t>>> inForm.String1: (" + inForm.getString1() + ").");
+         System.out.println("\t>>> inForm.String2: (" + inForm.getString2() + ").");
+         return new Forward("gotoError");
+         }
+      _form1.setString1(_STR1);        // Set the values to a specific string
+      _form1.setString2(_STR2);
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * This inForm should be a new instance and have the FormA's default values
+    * in the String fields. When this method forwards it adds _form1 to the
+    * forward so Jsp3.jsp will render with _form1 and not a new instance.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action2(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm == _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are the same instance and should not be.");
+         return new Forward("gotoError");
+         }
+      if ((inForm.getString1().equals(_STR1) == true)
+            ||
+          (inForm.getString2().equals(_STR2) == true))
+         {
+         System.out.println("\t>>> inForm.String1: (" + inForm.getString1() + ").");
+         System.out.println("\t>>> inForm.String2: (" + inForm.getString2() + ").");
+         return new Forward("gotoError");
+         }
+      _form1.setString1(_STR1);
+      _form1.setString2(_STR2);
+      Forward fwd = new Forward("gotoPg3");
+      fwd.addOutputForm(_form1);
+      return fwd;
+      }
+
+   /**
+    * action2 above added _form1 to the forward so Jsp3.jsp will render with
+    * _form1 and not a new instance.  We will know if this worked because the
+    * inForm we recieve will have the _STR1 and _STR2 values.  If it doesn't the
+    * test failed.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoPg4" path="Jsp4.jsp"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg4",
+                path = "Jsp4.jsp") 
+        })
+   protected Forward action3(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action3");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      if ((inForm.getString1().equals(_STR1) != true)
+            ||
+          (inForm.getString2().equals(_STR2) != true))
+         {
+         System.out.println("\t>>> inForm.String1: (" + inForm.getString1() + ").");
+         System.out.println("\t>>> inForm.String2: (" + inForm.getString2() + ").");
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoPg4");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <netui:form action="action1">
+            <font color="blue">
+               String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Do not change any value just press Continue...
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <netui:form action="action2">
+            <font color="blue">
+               String 1: <netui:label value="${actionForm.string1}"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:label value="${actionForm.string2}"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <netui:form action="action3">
+            <font color="blue">
+               String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Do not change any value just press Continue...
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/Jsp4.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - Jsp4.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/><br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test49/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,163 @@
+package jpfScopedForms.test50;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static final String   _STR1    = "Jpf1 value 1";
+   private static final String   _STR2    = "Jpf1 value 2";
+   public               FormA    _form1   = new FormA();
+   public               FormA    _form2   = new FormA();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      System.out.println("\t>>> _form2: " + _form2.toString());
+      _form1.setString1(_STR1);
+      _form1.setString2(_STR2);
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * This action should get a new instance of FormA.  If it does not the test
+    * failed.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoSecure1" path="secure1.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSecure1",
+                path = "secure1.do") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      // Make sure we are NOT in a secure mode
+      //------------------------------------------------------------------------
+      if (this.getRequest().isSecure() == true)
+         {
+         System.out.println("\t>>> We are in secure mode and should not be");
+         return new Forward("gotoError");
+         }
+      if (inForm == _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are the same instance and should not be.");
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoSecure1");
+      }
+
+   /**
+    * This action should get _form1 and the parameter as the action sets
+    * form="_form1".  If it does not the test failed.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoAction2" path="/jpfScopedForms/test50/action2.do"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction2",
+                path = "/jpfScopedForms/test50/action2.do") 
+        })
+   protected Forward secure1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.secure1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      // Make sure we are in a secure mode
+      //------------------------------------------------------------------------
+      if (this.getRequest().isSecure() == false)
+         {
+         System.out.println("\t>>> We are not in secure mode.");
+         return new Forward("gotoError");
+         }
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same instance and they should be.");
+         return new Forward("gotoError");
+         }
+      Forward fwd = new Forward("gotoAction2");
+      return fwd;
+      }
+
+   /**
+    * This action should get _form2 and the parameter as the action sets
+    * form="_form2".  If it does not the test failed.
+    *
+    * @jpf:action form="_form2"
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        useFormBean = "_form2",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action2(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      // Make sure we are NOT in a secure mode
+      //------------------------------------------------------------------------
+      if (this.getRequest().isSecure() == true)
+         {
+         System.out.println("\t>>> We are in secure mode.");
+         return new Forward("gotoError");
+         }
+      if (inForm != _form2)
+         {
+         System.out.println("\t>>> inForm & _form2 are the same instance and they should be.");
+         return new Forward("gotoError");
+         }
+      Forward fwd = new Forward("gotoPg2");
+      fwd.addOutputForm(_form1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.done");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoDone");
+      }
+   }
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test50</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test50 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <netui:form action="action1">
+            <font color="blue">
+               String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test50</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test50 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+            </h3>
+            <br/>
+            <netui:form action="finish">
+            <font color="blue">
+               String 1: <netui:label value="${actionForm.string1}"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:label value="${actionForm.string2}"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Finish...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test50/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JpfScopedForms Test50</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test50 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,318 @@
+package jpfScopedForms.test51;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static final String   _STR1    = "Jpf1 value 1";
+   private static final String   _STR2    = "Jpf1 value 2";
+   public               FormA    _form1   = new FormA();
+   public               FormA    _form2   = new FormA();
+   public               FormA    _hldForm;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      System.out.println("\t>>> _form2: " + _form2.toString());
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * This action should get a new instance of FormA.  If it doesn't the test
+    * failed.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoAction2" path="action2.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction2",
+                path = "action2.do") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm == _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are the same instance and should not be.");
+         return new Forward("gotoError");
+         }
+      _hldForm = inForm;
+      return new Forward("gotoAction2");
+      }
+
+   /**
+    * This action should get the instance that action1 used above.  Rich says
+    * this is pure struts.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoAction3" path="action3.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction3",
+                path = "action3.do") 
+        })
+   protected Forward action2(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+
+      if (inForm != _hldForm)
+         {
+         System.out.println("\t>>> inForm & _hldForm are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      _hldForm = inForm;
+      Forward fwd = new Forward("gotoAction3");
+      fwd.addOutputForm(_form2);
+      return fwd;
+      }
+
+   /**
+    * This action should get the _form2 instance that action2 explicitly put
+    * in the Forward. If it doesn't the test failed.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoAction4" path="action4.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction4",
+                path = "action4.do") 
+        })
+   protected Forward action3(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action3");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form2)
+         {
+         System.out.println("\t>>> inForm & _hldForm are the same instance and should not be.");
+         return new Forward("gotoError");
+         }
+      _hldForm = inForm;
+      Forward fwd = new Forward("gotoAction4");
+      fwd.addOutputForm(inForm);
+      return fwd;
+      }
+
+   /**
+    * Action3 above explicitly passed it's inForm in the Forward and this
+    * action is scoped to form1.  The runtime will set _form1 to be the instance
+    * that was explicitly put into the Forward by action3.  So _form1 now points
+    * to a new form.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoAction5" path="action5.do"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction5",
+                path = "action5.do") 
+        })
+   protected Forward action4(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action4");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _hldForm)
+         {
+         System.out.println("\t>>> inForm & _hldForm are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoAction5");
+      }
+
+   /**
+    * This action should get the _form1 instance of FormA.  The Forward did not
+    * contain an instance of FormA but the action declared form="_form1".  If
+    * it's not _form1 the test failed.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoAction6" path="action6.do"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction6",
+                path = "action6.do") 
+        })
+   protected Forward action5(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action5");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      // Above thru testing _form1 and _form2 are now the same object. Make them
+      // different object for the testing below.
+      _form1 = new FormA();
+      _form2 = new FormA();
+      return new Forward("gotoAction6");
+      }
+
+   /**
+    * Action5 is scoped to _form1 and did not explicitly pass a form on the
+    * Forward.  This action is scoped to _form2 so it will use _form2.
+    *
+    * @jpf:action form="_form2"
+    * @jpf:forward name="gotoAction7" path="action7.do"
+    */
+    @Jpf.Action(
+        useFormBean = "_form2",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction7",
+                path = "action7.do") 
+        })
+   protected Forward action6(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action6");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form2)
+         {
+         System.out.println("\t>>> inForm & _form2 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      _hldForm = inForm;
+      return new Forward("gotoAction7");
+      }
+
+   /**
+    * This action should get a new instance of FormA.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoAction8" path="action8.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction8",
+                path = "action8.do") 
+        })
+   protected Forward action7(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action7");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm == _hldForm)
+         {
+         System.out.println("\t>>> inForm & _hldForm are the same instance and should not be.");
+         return new Forward("gotoError");
+         }
+      if (inForm == _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are the same instance and should not be.");
+         return new Forward("gotoError");
+         }
+      if (inForm == _form2)
+         {
+         System.out.println("\t>>> inForm & _form2 are the same instance and should not be.");
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoAction8");
+      }
+
+   /**
+    * This action will use _form1.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoAction9" path="action9.do"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction9",
+                path = "action9.do") 
+        })
+   protected Forward action8(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action8");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      Forward fwd = new Forward("gotoAction9");
+      fwd.addOutputForm(_form1);
+      return fwd;
+      }
+
+   /**
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action9(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action9");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.done");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test51</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test51 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <netui:form action="action1">
+            <font color="blue">
+               String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test51</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test51 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <netui:form action="finish">
+            <font color="blue">
+               String 1: <netui:label value="${actionForm.string1}"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:label value="${actionForm.string2}"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Finish...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test51/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JpfScopedForms Test51</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test51 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,199 @@
+package jpfScopedForms.test55;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources           resources="jpfScopedForms.test55.messages"
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "jpfScopedForms.test55.messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='formbean:FormB'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='action:action1.do#jpfScopedForms.test55.Jpf1.FormB'/>", 
+        "<pageflow-object id='action:action2.do#jpfScopedForms.test55.Jpf1.FormB'/>", 
+        "<pageflow-object id='action:finish.do'/>", 
+        "<pageflow-object id='page:/resources/jsp/error.jsp'/>", 
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>", 
+        "<pageflow-object id='page:/resources/jsp/done.jsp'/>", 
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>", 
+        "<pageflow-object id='page:Jsp1.jsp'/>", 
+        "<pageflow-object id='forward:path#gotoPg1#Jsp1.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='page:Jsp2.jsp'/>", 
+        "<pageflow-object id='forward:path#gotoPg2#Jsp2.jsp#@action:action1.do#jpfScopedForms.test55.Jpf1.FormB@'/>", 
+        "<pageflow-object id='page:Jsp3.jsp'/>", 
+        "<pageflow-object id='forward:path#gotoPg3#Jsp3.jsp#@action:action2.do#jpfScopedForms.test55.Jpf1.FormB@'/>", 
+        "<pageflow-object id='page:StartTest.jsp'/>", 
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:action1.do#jpfScopedForms.test55.Jpf1.FormB@'>", 
+        "  <property value='304,240,240,176' name='elbowsX'/>", 
+        "  <property value='83,83,221,221' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Jsp2.jsp@#@action:action2.do#jpfScopedForms.test55.Jpf1.FormB@'>", 
+        "  <property value='304,240,240,176' name='elbowsX'/>", 
+        "  <property value='243,243,361,361' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Jsp3.jsp@#@action:finish.do@'>", 
+        "  <property value='304,240,240,176' name='elbowsX'/>", 
+        "  <property value='383,383,532,532' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnTo#failure#currentPage#@action:action1.do#jpfScopedForms.test55.Jpf1.FormB@'>", 
+        "  <property value='104,104,116,116' name='elbowsX'/>", 
+        "  <property value='221,150,150,52' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='failure' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='return-to:@forward:returnTo#failure#currentPage#@action:action1.do#jpfScopedForms.test55.Jpf1.FormB@@'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='40' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='exit:sss'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='60' name='y'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Jpf1 extends PageFlowController
+   {
+   public FormB _form1 = new FormB();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      Forward fwd = new Forward("gotoPg1");
+      return fwd;
+      }
+
+   /**
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    * @jpf:validation-error-forward name="failure" return-to="currentPage"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        }, validationErrorForward = @org.apache.beehive.netui.pageflow.annotations.Jpf.Forward(name = "failure", navigateTo = org.apache.beehive.netui.pageflow.annotations.Jpf.NavigateTo.currentPage))
+   protected Forward action1(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same object and should be.");
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    * @jpf:validation-error-forward name="failure" return-to="currentPage"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action2(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same object and should be.");
+         return new Forward("gotoError");
+         }
+      if ((inForm.getString1().equals(FormB.STR_VAL1) == true)
+           ||
+           (inForm.getString2().equals(FormB.STR_VAL2) == true))
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean FormB
+    ***************************************************************************/
+   public static class FormB extends FormA
+      {
+      // validate method
+      //------------------------------------------------------------------------
+      public ActionErrors validate(ActionMapping mapping
+                                   ,HttpServletRequest request)
+         {
+         // Force validation errors.
+         //---------------------------------------------------------------------
+         System.out.println(">>> FormB:validate");
+         ActionErrors errors = new ActionErrors();
+         if ((getString1().equals(FormB.STR_VAL1) == true)
+             ||
+             (getString2().equals(FormB.STR_VAL2) == true))
+            {
+            errors.add("changeError", new ActionError("error.mustChange"));
+            }
+         return errors;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test55</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test55 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Page Flow Scoped Forms
+         </font></h3>
+         <br/>
+         <netui:form action="action1">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               First time you see this page just press return.  You will be
+               returned to this page with an error message.
+               <br/>
+               Then change the values of the two strings and press Continue.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test55</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test55 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Page Flow Scoped Forms
+         </font></h3>
+         <br/>
+         <netui:form action="action2">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Do not change the values above, just press continue.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test55</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test55 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test55/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JpfScopedForms Test55</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test55 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,144 @@
+package jpfScopedForms.test59;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static final String   _STR1    = "Jpf1 value 1";
+   private static final String   _STR2    = "Jpf1 value 2";
+   public               FormA    _form1   = new FormA();
+   public               FormA    _hldForm;
+   private              String   _hldFld1;
+   private              String   _hldFld2;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * This action should be using _form1 and the inForm parameter.  It will save
+    * what the user entered the set some new values and forward directly to
+    * action2.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoAction2" path="action2.do"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction2",
+                path = "action2.do") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & _form1 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      _hldFld1 = inForm.getString1();     // Save what the user entered.
+      _hldFld2 = inForm.getString2();
+      inForm.setString1(_STR1);           // Put a new value in the fields.
+      inForm.setString2(_STR2);
+      _hldForm = inForm;
+      return new Forward("gotoAction2");
+      }
+
+   /**
+    * This action should get a new instance of FormA.  If it doesn't the test
+    * failed.
+    *
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        useFormBean = "_form1",
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action2(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      System.out.println("\t>>> inForm.getString1(): " + inForm.getString1());
+      System.out.println("\t>>> inForm.getString2(): " + inForm.getString2());
+      System.out.println("\t>>> _form1.getString1(): " + _form1.getString1());
+      System.out.println("\t>>> _form1.getString2(): " + _form1.getString2());
+      System.out.println("\t>>> _hlfFld1: " + _hldFld1);
+      System.out.println("\t>>> _hlfFld2: " + _hldFld2);
+      if (inForm != _form1)
+         {
+         System.out.println("\t>>> inForm & form1 are not the same instance and should be.");
+         return new Forward("gotoError");
+         }
+      if (inForm.getString1().equals(_hldFld1) == false)
+         {
+         System.out.println("\t>>> inForm.getString1() is not equal to _hldFld1.");
+         return new Forward("gotoError");
+         }
+      if (inForm.getString2().equals(_hldFld2) == false)
+         {
+         System.out.println("\t>>> inForm.getString2() is not equal to _hldFld2.");
+         return new Forward("gotoError");
+         }
+      if (inForm.getString1().equals(_form1.getString1()) == false)
+         {
+         System.out.println("\t>>> inForm.getString1() is not equal to _form1.getString1().");
+         return new Forward("gotoError");
+         }
+      if (inForm.getString2().equals(_form1.getString2()) == false)
+         {
+         System.out.println("\t>>> inForm.getString2() is not equal to _form1.getString2().");
+         return new Forward("gotoError");
+         }
+
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test59</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test59 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <netui:form action="action1">
+            <font color="blue">
+               String 1: <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Change the value of both of the fields above, then press
+               Continue.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>JpfScopedForms Test59</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test59 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <netui:form action="action1">
+            <font color="blue">
+               String 1: <netui:label value="${actionForm.string1}"/>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <netui:label value="${actionForm.string2}"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               The values should be the values you entered on page 1.  If they
+               are not the test has failed.
+            </font>
+         </netui:form>
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedForms/test59/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JpfScopedForms Test59</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test59 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedFormsIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedFormsIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,129 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- Page Flow scoped Form tests ---------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center">
+               <font color="blue">Page Flow scoped Form tests</font>
+            </h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%-- Table headings ----------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- JpfScopedForm Test 49 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfScopedForms/test49/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test49
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="jpfScopedForms/test49/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- JpfScopedForm Test 50 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfScopedForms/test50/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test50
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="jpfScopedForms/test50/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- JpfScopedForm Test 51 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfScopedForms/test51/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test51
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="jpfScopedForms/test51/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- JpfScopedForm Test 55 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfScopedForms/test55/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test55
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="jpfScopedForms/test55/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- JpfScopedForm Test 59 -------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfScopedForms/test59/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test59
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="jpfScopedForms/test59/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- JpfScopedForm JpfTest7  -----------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfScopedForms/jpfTest7/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest7
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="jpfScopedForms/jpfTest7/TestDescription.txt"/>
+               </td>
+            </tr>
+         </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedJpfIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfScopedJpfIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,112 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- Scoped Page Flow Tests --------------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center">
+               <font color="blue">Scoped Page Flow Tests</font>
+            </h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%-- Table headings ----------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ScopedJpf Test 1 ------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="scopedJpf/jpfTest1/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest1
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                    <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="scopedJpf/jpfTest1/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ScopedJpf Test 2 ------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="scopedJpf/jpfTest2/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest2
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                    <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="scopedJpf/jpfTest2/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ScopedJpf Test 3 ------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="scopedJpf/jpfTest3/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest3
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                    <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="scopedJpf/jpfTest3/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ScopedJpf Test 4 ------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="scopedJpf/jpfTest4/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest4
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                    <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="scopedJpf/jpfTest4/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- ScopedJpf Test 5 ------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="scopedJpf/jpfTest5/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest5
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                    <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="scopedJpf/jpfTest5/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,77 @@
+package jpfSecurity.test1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import javax.servlet.http.HttpServletRequest;
+
+public class Jpf1 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action 
+     * @jpf:forward name="gotoJsp2" path="Jsp2.jsp"
+     * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoJsp2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward secure1()
+        {
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.secure1");
+        if (this.getRequest().isSecure() == true)
+            {
+            return new Forward("gotoJsp2");
+            }
+        return new Forward("gotoError");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+     * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward action2()
+        {
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.action2");
+        if (this.getRequest().isSecure() == true)
+            {
+            return new Forward("gotoError");
+            }
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>JPF Security Test1</title>
+    </head>
+    <body>
+        <h3 align="center">JPF Security Test1 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="secure1">Continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>JPF Security Test1</title>
+    </head>
+    <body>
+        <h3 align="center">JPF Security Test1 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action2">Finish test</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test1/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JPF Security Test1</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test1 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+package jpfSecurity.test2;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import javax.servlet.http.HttpServletRequest;
+
+public class Jpf1 extends PageFlowController
+   {
+   protected static final String TEST_KEY    = "key1";
+   protected static final String TEST_VALUE  = "Test String";
+
+   /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      ActionMapping mapping = getMapping();
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoSecure1" path="secure1.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSecure1",
+                path = "secure1.do") 
+        })
+   protected Forward unSecure1()
+      {
+      ActionMapping mapping = getMapping();
+      System.out.println(">>> Jpf1.unSecure1");
+      this.getRequest().setAttribute(TEST_KEY, TEST_VALUE);
+      if (this.getRequest().isSecure() == true)
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoSecure1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+    * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward secure1()
+      {
+      ActionMapping mapping = getMapping();
+      System.out.println(">>> Jpf1.secure1");
+      if (this.getRequest().isSecure() == false)
+         {
+         return new Forward("gotoError");
+         }
+      String tmpStr  = (String) this.getRequest().getAttribute(TEST_KEY);
+      if (tmpStr == null)
+         {
+         System.out.println(">>> Attribute is not in the Request!");
+         return new Forward("gotoError");
+         }
+      if (tmpStr.equals(TEST_VALUE) != true)
+         {
+         System.out.println(">>> Attribute has a different value!");
+         return new Forward("gotoError");
+         }
+      System.out.println(">>> Attribute value: (" + tmpStr + ").");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+   <head>
+      <title>JPF Security Test2</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test2 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui:anchor action="unSecure1">Continue</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>JPF Security Test2</title>
+    </head>
+    <body>
+        <h3 align="center">JPF Security Test2 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action2">Finish test</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test2/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JPF Security Test2</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test2 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+package jpfSecurity.test3;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import javax.servlet.http.HttpServletRequest;
+
+public class Jpf1 extends PageFlowController
+   {
+   protected static final String TEST_KEY    = "key1";
+   protected static final String TEST_VALUE  = "Test String";
+
+   /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      ActionMapping mapping = getMapping();
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward   name="gotoSecure1" path="secure1.do" redirect="true"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSecure1",
+                path = "secure1.do",
+                redirect = true) 
+        })
+   protected Forward unSecure1()
+      {
+      ActionMapping mapping = getMapping();
+      System.out.println(">>> Jpf1.unSecure1");
+      this.getRequest().setAttribute(TEST_KEY, TEST_VALUE);
+      if (this.getRequest().isSecure() == true)
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoSecure1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward   name="gotoDone"
+    *                path="/resources/jsp/done.jsp"
+    * @jpf:forward   name="gotoError"
+    *                path="/resources/jsp/error.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward secure1()
+      {
+      ActionMapping mapping = getMapping();
+      System.out.println(">>> Jpf1.secure1");
+      if (this.getRequest().isSecure() == false)
+         {
+         return new Forward("gotoError");
+         }
+      String tmpStr  = (String) this.getRequest().getAttribute(TEST_KEY);
+      if (tmpStr == null)
+         {
+         System.out.println(">>> The attribute was not on the request.  This is correct.");
+         return new Forward("gotoDone");
+         }
+      System.out.println(">>> The attribute was on the request in error. It's value: (" + tmpStr + ").");
+      return new Forward("gotoError");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+   <head>
+      <title>JPF Security Test3</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test3 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui:anchor action="unSecure1">Continue</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>JPF Security Test3</title>
+    </head>
+    <body>
+        <h3 align="center">JPF Security Test3 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action2">Finish test</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test3/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JPF Security Test3</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test3 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+package jpfSecurity.test60;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+       {
+       System.out.println(">>> Jpf1.finish");
+       return new Forward("gotoDone");
+       }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+   <head>
+      <title>JPF Security Test60</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test60 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui:imageAnchor action="finish" src="../../resources/images/secureButton.jpg" />
+         <br/><br/>
+         <font color="green">
+         When this page rendered you should have been prompted by the browser that
+         a secure link was needed to process the page.  If this did not happen
+         the test has failed.
+         <br/><br/>
+         Then press the "Secured Button".
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurity/test60/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<html>
+   <head>
+      <title>JPF Security Test2</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test2 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <font color="green">
+         When you press start test your browser should prompted you that a secure
+         link is required.
+         <br/><br/>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurityIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSecurityIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- JPF security tests ------------------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center">
+               <font color="blue">JPF security Tests</font>
+            </h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%----------------------------------------------------------------%>
+            <%---------------------- Table headings --------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+                <th align="left">Test Name</th>
+                <th align="left">Test Status</th>
+                <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%----------------------- jpfSecurity Test 1 ---------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfSecurity/test1/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test1
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="jpfSecurity/test1/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%-------------  -------------------------------------------------%>
+            <%---------------  ------ jpfSecurity Test 2 ---------------------%>
+            <%-----------------  ---------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfSecurity/test2/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test2
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="jpfSecurity/test2/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%----------------------- jpfSecurity Test 3 ---------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfSecurity/test3/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test3
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="jpfSecurity/test3/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%----------------------- jpfSecurity Test 60 ---------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="jpfSecurity/test60/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test60
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="jpfSecurity/test60/TestDescription.txt"/>
+               </td>
+            </tr>
+            </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSingletonIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/jpfSingletonIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- Singleton Page Flow Tests -----------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center">
+               <font color="blue">Singleton Page Flow Tests</font>
+            </h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%-- Table headings ----------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- SingletonJpf Test 6 ---------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="singletonJpf/jpfTest6/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest6
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="singletonJpf/jpfTest6/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- SingletonJpf Test 8 ---------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="singletonJpf/jpfTest8/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest8
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="singletonJpf/jpfTest8/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- SingletonJpf Test 9 ---------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="singletonJpf/jpfTest9/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest9
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="singletonJpf/jpfTest9/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- SingletonJpf Test 10 ---------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="singletonJpf/jpfTest10/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> JpfTest10
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  <font color="green">Manual</font>
+               </td>
+               <td>
+                  <jsp:include page="singletonJpf/jpfTest10/TestDescription.txt"/>
+               </td>
+            </tr>
+       </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/ActionChainingController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/ActionChainingController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,344 @@
+package miniTests.actionChaining;
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/miniTests/actionChaining/ActionChainingController.jpf'/>", 
+        "<pageflow-object id='formbean:SomeForm'/>", 
+        "<pageflow-object id='formbean:AnotherForm'/>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action1a.do#miniTests.actionChaining.ActionChainingController.SomeForm'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='140' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action1b.do#miniTests.actionChaining.ActionChainingController.SomeForm'>", 
+        "  <property value='340' name='x'/>", 
+        "  <property value='140' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action2a.do#miniTests.actionChaining.ActionChainingController.SomeForm'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='220' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action2b.do#miniTests.actionChaining.ActionChainingController.SomeForm'>", 
+        "  <property value='340' name='x'/>", 
+        "  <property value='220' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action3a.do#miniTests.actionChaining.ActionChainingController.SomeForm'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='300' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action3b.do#miniTests.actionChaining.ActionChainingController.SomeForm'>", 
+        "  <property value='340' name='x'/>", 
+        "  <property value='300' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action4a.do#miniTests.actionChaining.ActionChainingController.SomeForm'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='380' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action4b.do#miniTests.actionChaining.ActionChainingController.SomeForm'>", 
+        "  <property value='340' name='x'/>", 
+        "  <property value='380' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action5a.do'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='460' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:action5b.do#miniTests.actionChaining.ActionChainingController.AnotherForm'>", 
+        "  <property value='340' name='x'/>", 
+        "  <property value='460' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='300' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>", 
+        "  <property value='80,80,80,80' name='elbowsX'/>", 
+        "  <property value='144,200,200,256' name='elbowsY'/>", 
+        "  <property value='South_1' name='fromPort'/>", 
+        "  <property value='North_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#action1b.do#@action:action1a.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='256,280,280,304' name='elbowsX'/>", 
+        "  <property value='132,132,132,132' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:result.jsp'>", 
+        "  <property value='480' name='x'/>", 
+        "  <property value='300' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#result.jsp#@action:action1b.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='376,469,469,469' name='elbowsX'/>", 
+        "  <property value='132,132,194,256' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='North_0' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#action2b.do#@action:action2a.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='256,280,280,304' name='elbowsX'/>", 
+        "  <property value='212,212,212,212' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#result.jsp#@action:action2b.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='376,410,410,444' name='elbowsX'/>", 
+        "  <property value='212,212,281,281' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_0' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#action3b.do#@action:action3a.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='256,280,280,304' name='elbowsX'/>", 
+        "  <property value='292,292,292,292' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#result.jsp#@action:action3b.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='376,410,410,444' name='elbowsX'/>", 
+        "  <property value='292,292,292,292' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#action4b.do#@action:action4a.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='256,280,280,304' name='elbowsX'/>", 
+        "  <property value='372,372,372,372' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#result.jsp#@action:action4b.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='376,410,410,444' name='elbowsX'/>", 
+        "  <property value='372,372,303,303' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_2' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#action5b.do#@action:action5a.do@'>", 
+        "  <property value='256,280,280,304' name='elbowsX'/>", 
+        "  <property value='452,452,452,452' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#result.jsp#@action:action5b.do#miniTests.actionChaining.ActionChainingController.AnotherForm@'>", 
+        "  <property value='376,469,469,469' name='elbowsX'/>", 
+        "  <property value='452,452,398,344' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='South_0' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:action4a.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='116,150,150,184' name='elbowsX'/>", 
+        "  <property value='303,303,372,372' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:result.jsp@#@action:begin.do@'>", 
+        "  <property value='480,480,298,116' name='elbowsX'/>", 
+        "  <property value='256,92,92,92' name='elbowsY'/>", 
+        "  <property value='North_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:action1a.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='91,91,137,184' name='elbowsX'/>", 
+        "  <property value='256,132,132,132' name='elbowsY'/>", 
+        "  <property value='North_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:action2a.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='116,150,150,184' name='elbowsX'/>", 
+        "  <property value='281,281,212,212' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:action3a.do#miniTests.actionChaining.ActionChainingController.SomeForm@'>", 
+        "  <property value='116,150,150,184' name='elbowsX'/>", 
+        "  <property value='292,292,292,292' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:action5a.do@'>", 
+        "  <property value='116,150,150,184' name='elbowsX'/>", 
+        "  <property value='303,303,452,452' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class ActionChainingController extends PageFlowController
+{
+    private SomeForm _form;
+    
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+   @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "action1b.do") 
+        })
+    protected Forward action1a( SomeForm form )
+    {
+        saveForm( form );
+        return new Forward( "success" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "result.jsp") 
+        })
+    protected Forward action1b( SomeForm form )
+    {
+        return new Forward( "success", "isSameForm", isSameForm( form ) );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "action2b.do") 
+        })
+    protected Forward action2a( SomeForm form )
+    {
+        saveForm( form );
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "result.jsp") 
+        })
+    protected Forward action2b( SomeForm form )
+    {
+        return new Forward( "success", "isSameForm", isSameForm( form ) );
+    }
+
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "action3b.do") 
+        })
+    protected Forward action3a( SomeForm form )
+    {
+        saveForm( form );
+        return new Forward( "success", form );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "result.jsp") 
+        })
+    protected Forward action3b( SomeForm form )
+    {
+        return new Forward( "success", "isSameForm", isSameForm( form ) );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "action4b.do") 
+        })
+    protected Forward action4a( SomeForm form )
+    {
+        saveForm( form );
+        return new Forward( "success", form );
+    }
+
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "result.jsp") 
+        })
+    protected Forward action4b( SomeForm form )
+    {
+        Boolean same = new Boolean( getRequest().getAttribute( "prevForm" ) == _form );
+        return new Forward( "success", "isSameForm", same );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "action5b.do") 
+        })
+    protected Forward action5a()
+    {
+        return new Forward( "success", new SomeForm() );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "result.jsp") 
+        })
+    protected Forward action5b( AnotherForm form )
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class SomeForm extends FormData
+    {
+    }
+    
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class AnotherForm extends FormData
+    {
+    }
+    
+    private void saveForm( FormData form )
+    {
+        getRequest().setAttribute( "prevForm", form );
+    }
+    
+    private Boolean isSameForm( FormData form )
+    {
+        return new Boolean( form == getRequest().getAttribute( "prevForm" ) );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        <h3>Action Chaining</h3>
+        
+        <netui:anchor action="action1a">pageflow-scoped action -> non-pageflow-scoped action</netui:anchor>
+        <br>
+        <netui:anchor action="action2a">non-pageflow-scoped action -> pageflow-scoped action</netui:anchor>
+        <br>
+        <netui:anchor action="action3a">pageflow-scoped action -> non-pageflow-scoped action, with form explicitly passed</netui:anchor>
+        <br>
+        <netui:anchor action="action4a">non-pageflow-scoped action -> pageflow-scoped action, with form explicitly passed</netui:anchor>
+        <br>
+        <netui:anchor action="action5a">pass an incompatible form</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/result.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/actionChaining/result.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="isSameForm" type="com.bea.x2003.x03.controls.TagAttributeType.Type.Boolean"/>
+<netui:html>
+    <head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        Forms were the same?  <b><netui:label value="${pageInput.isSameForm}"/></b>
+        <br>
+        <br>
+        <netui:anchor action="begin">back</netui:anchor>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorFormPosting/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorFormPosting/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<netui:anchor href="postback.do">Value in parameter
+<netui:parameter name="lastName" value="LastName"/><br />
+<netui:parameter name="firstName" value="FirstName"/><br />
+</netui:anchor>
+<hr />
+Value: <netui:label value="${pageFlow.value}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorFormPosting/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorFormPosting/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.anchorFormPosting;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _value;
+
+    public String getValue() {
+	return _value;
+    }
+    public void setValue(String value) {
+	_value = value;
+    }
+
+    public static class Form extends FormData
+    {
+	String _lastName;
+	String _firstName;
+
+	public String getLastName() {
+	    return _lastName;
+	}
+	public void setLastName(String lastName) {
+	    _lastName = lastName;
+	}
+
+	public String getFirstName() {
+	    return _firstName;
+	}
+	public void setFirstName(String firstName) {
+	    _firstName = firstName;
+	}
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+	_value = form.getLastName() + ", " + form.getFirstName();
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorPosting/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorPosting/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<netui:anchor href="postback.do">Value in parameter
+<netui:parameter name="{pageFlow.name}" value="foo"/><br />
+<netui:parameter name="{pageFlow.type}" value="bar"/><br />
+</netui:anchor>
+<hr />
+Name: <netui:label value="${pageFlow.name}"/><br />
+Type: <netui:label value="${pageFlow.type}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorPosting/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/anchorPosting/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.anchorPosting;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String _name;
+    public String getName() {
+	return _name;
+    }
+    public void setName(String name) {
+	_name = name;
+    }
+
+    String _type;
+    public String getType() {
+	return _type;
+    }
+    public void setType(String type) {
+	_type = type;
+    }
+
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_name = "";
+	_type = "";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appState/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appState/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Basic Global App</title>
+</head>
+<body>
+<h4>Basic Global App</h4>
+App State: <netui:label value="${globalApp.appState}"/><br />
+App State through page flow: <netui:label value="${pageFlow.appInfo}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appState/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appState/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.appState;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    protected transient global.Global globalApp;
+
+    public String getAppInfo() {
+	return globalApp.getAppInfo();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Pass State betweeen page flows groups</title>
+</head>
+<body>
+<h4>Pass State betweeen page flows groups</h4>
+<p style="color:green">
+This test passing state between page flows using the globalApp.  Each action will append state to the globalApp.getPageFlowState
+property.  Then a nested page flow is called and will display the same state variable.  The nested page flow will return
+to the action or page.  These are different page flow actions.   
+</p>
+<netui:anchor action="nest" >Nest Page Flow</netui:anchor>
+<hr>
+Global State:<b><netui:content value="${pageFlow.state}"/></b>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,170 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.appStatePass;
+
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+)
+
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/miniTests/appStatePass/Controller.jpf'/>", 
+        "<pageflow-object id='action:nest.do'>", 
+        "  <property value='100' name='x'/>", 
+        "  <property value='120' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:returnToPage.do'>", 
+        "  <property value='400' name='x'/>", 
+        "  <property value='80' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:returnToAction.do'>", 
+        "  <property value='400' name='x'/>", 
+        "  <property value='240' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='400' name='x'/>", 
+        "  <property value='320' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='external-jpf:nested/Controller.jpf'>", 
+        "  <property value='240' name='x'/>", 
+        "  <property value='120' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#nest#nested/Controller.jpf#@action:nest.do@'>", 
+        "  <property value='136,170,170,204' name='elbowsX'/>", 
+        "  <property value='112,112,112,112' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='nest' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:Begin.jsp'>", 
+        "  <property value='600' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:returnToPage.do@'>", 
+        "  <property value='436,500,500,564' name='elbowsX'/>", 
+        "  <property value='72,72,152,152' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='begin' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:returnToAction.do@'>", 
+        "  <property value='436,500,500,564' name='elbowsX'/>", 
+        "  <property value='232,232,163,163' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_2' name='toPort'/>", 
+        "  <property value='begin' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:begin.do@'>", 
+        "  <property value='436,500,500,564' name='elbowsX'/>", 
+        "  <property value='312,312,163,163' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_2' name='toPort'/>", 
+        "  <property value='begin' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@external-jpf:nested/Controller.jpf@#@action:returnToAction.do@'>", 
+        "  <property value='276,320,320,364' name='elbowsX'/>", 
+        "  <property value='123,123,232,232' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@external-jpf:nested/Controller.jpf@#@action:returnToPage.do@'>", 
+        "  <property value='276,320,320,364' name='elbowsX'/>", 
+        "  <property value='123,123,72,72' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:/nest.do'>", 
+        "  <property value='740' name='x'/>", 
+        "  <property value='180' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:/nest.do@'>", 
+        "  <property value='636,670,670,704' name='elbowsX'/>", 
+        "  <property value='163,163,172,172' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    protected transient global.Global globalApp;
+    public String getState() {
+	    return globalApp.getPageFlowState();
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/Controller.jpf") 
+        })
+    public Forward nest()
+    {
+        globalApp.setPageFlowState(globalApp.getPageFlowState() + "<br />nest");
+        return new Forward("nest");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward returnToPage()
+    {
+        HttpSession session = getSession();
+        session.setAttribute("pageFlow",this);
+        globalApp.setPageFlowState(globalApp.getPageFlowState() + "<br />returnToPage");
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward returnToAction()
+    {
+        HttpSession session = getSession();
+        session.setAttribute("pageFlow",this);
+        globalApp.setPageFlowState(globalApp.getPageFlowState() + "<br />returnToAction");
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        globalApp.setPageFlowState(globalApp.getPageFlowState() + "<br />begin");
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/nested/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/nested/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Nested Page</title>
+</head>
+<body>
+<h4>Nested Page</h4>
+<netui:anchor action="nestOne" >Nest Return to Page</netui:anchor><br />
+<netui:anchor action="nestTwo" >Nest Return to Action</netui:anchor><br />
+<hr />
+Global State:<b><netui:content value="${pageFlow.state}"/></b>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/nested/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/appStatePass/nested/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,151 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.appStatePass.nested;
+
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/miniTests/appStatePass/nested/Controller.jpf'/>", 
+        "<pageflow-object id='action:nestOne.do'>", 
+        "  <property value='560' name='x'/>", 
+        "  <property value='220' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:nestTwo.do'>", 
+        "  <property value='560' name='x'/>", 
+        "  <property value='60' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='560' name='x'/>", 
+        "  <property value='140' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='exit:returnToPage'>", 
+        "  <property value='400' name='x'/>", 
+        "  <property value='180' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnAction#return#returnToPage#@action:nestOne.do@'>", 
+        "  <property value='524,480,480,436' name='elbowsX'/>", 
+        "  <property value='212,212,172,172' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='return' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='exit:returnToAction'>", 
+        "  <property value='400' name='x'/>", 
+        "  <property value='80' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnAction#return#returnToAction#@action:nestTwo.do@'>", 
+        "  <property value='524,480,480,436' name='elbowsX'/>", 
+        "  <property value='52,52,72,72' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='return' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:Begin.jsp'>", 
+        "  <property value='260' name='x'/>", 
+        "  <property value='120' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:begin.do@'>", 
+        "  <property value='524,410,410,296' name='elbowsX'/>", 
+        "  <property value='132,132,123,123' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "  <property value='begin' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:/nestOne.do'>", 
+        "  <property value='140' name='x'/>", 
+        "  <property value='120' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:/nestTwo.do'>", 
+        "  <property value='260' name='x'/>", 
+        "  <property value='260' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:nestOne.do@'>", 
+        "  <property value='296,410,410,524' name='elbowsX'/>", 
+        "  <property value='112,112,201,201' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:nestTwo.do@'>", 
+        "  <property value='296,410,410,524' name='elbowsX'/>", 
+        "  <property value='101,101,63,63' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    protected transient global.Global globalApp;
+    
+    public String getState() {
+        return globalApp.getPageFlowState();
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnToPage") 
+        })
+    public Forward nestOne()
+    {
+        HttpSession session = getSession();
+        session.setAttribute("pageFlow",this);
+        globalApp.setPageFlowState(globalApp.getPageFlowState() + "<br />[nested]nestOne");
+        return new Forward("return");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnToAction") 
+        })
+    public Forward nestTwo()
+    {
+        HttpSession session = getSession();
+        session.setAttribute("pageFlow",this);
+        globalApp.setPageFlowState(globalApp.getPageFlowState() + "<br />[nested]nestTwo");
+        return new Forward("return");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        HttpSession session = getSession();
+        session.setAttribute("pageFlow",this);
+        globalApp.setPageFlowState(globalApp.getPageFlowState() + "<br />[nested]begin");
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/attrBinding/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/attrBinding/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Attribute Binding</title>
+</head>
+<body>
+<h4>Scalar Attributes</h4>
+Int Property: <netui:label value="${pageFlow.prop1}"/><br />
+String Property: <netui:label value="${pageFlow.prop2}"/><br />
+Float Property: <netui:label value="${pageFlow.prop3}"/><br />
+Boolean Property: <netui:label value="${pageFlow.prop4}"/><br />
+<h4>Array Attributes</h4>
+
+<b>Ints</b></br>
+<table><tr>
+<db:repeater dataSource="pageFlow.props1">
+  <td><netui:label value="${container.item}"/></td>
+</db:repeater>
+</tr></table>
+
+<b>Strings</b></br>
+<table width="50%"><tr>
+<db:repeater dataSource="pageFlow.props2">
+  <td><netui:label value="${container.item}"/></td>
+</db:repeater>
+</tr></table>
+
+<b>Floats</b></br>
+<table width="50%"><tr>
+<db:repeater dataSource="pageFlow.props3">
+  <td><netui:label value="${container.item}"/></td>
+</db:repeater>
+</tr></table>
+
+<b>Booleans</b></br>
+<table width="50%"><tr>
+<db:repeater dataSource="pageFlow.props4">
+  <td><netui:label value="${container.item}"/></td>
+</db:repeater>
+</tr></table>
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/attrBinding/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/attrBinding/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,112 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.attrBinding;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+
+    private int _prop1 = 17;
+    private String _prop2 = "StringBinding";
+    private float _prop3 = (float) 17.17;
+    private boolean _prop4 = true;
+
+    private int[] _props1 = {1,2,3};
+    private String[] _props2 = {"foo", "bar", "blee"};
+    private float[] _props3 = {(float) 16.16, (float) 17.17, (float) 18.18};
+    private boolean[] _props4 = {true, false, true, true, false};
+
+
+    ///****************** Scalars ********************
+    public int getProp1() {
+	return _prop1;
+    }
+    public void setProp1(int prop1) {
+	_prop1 = prop1;
+    }
+
+    public String getProp2() {
+	return _prop2;
+    }
+    public void setProp2(String prop2) {
+	_prop2 = prop2;
+    }
+
+    public float getProp3() {
+	return _prop3;
+    }
+    public void setProp3(float prop3) {
+	_prop3 = prop3;
+    }
+
+    public boolean getProp4() {
+	return _prop4;
+    }
+    public void setProp4(boolean prop4) {
+	_prop4 = prop4;
+    }
+
+    ///****************** Arrays ********************
+    public int[] getProps1() {
+	return _props1;
+    }
+    public void setProps1(int[] prop1) {
+	_props1 = prop1;
+    }
+
+    public String[] getProps2() {
+	return _props2;
+    }
+    public void setProps2(String[] prop2) {
+	_props2 = prop2;
+    }
+
+    public float[] getProps3() {
+	return _props3;
+    }
+    public void setProps3(float[] prop3) {
+	_props3 = prop3;
+    }
+
+    public boolean[] getProps4() {
+	return _props4;
+    }
+    public void setProps4(boolean[] prop4) {
+	_props4 = prop4;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="page" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin(){
+        return new Forward("page");
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Pass a Form to a Begin</title>
+</head>
+<body>
+<h4>Pass a Form to a Begin</h4>    
+<netui:anchor action="getUserInfo">Get User</netui:anchor>
+<hr />
+User: <netui:label value="${pageFlow.user}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.beginForm;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    miniTests.beginForm.nesting.Controller.Form _userInfo =
+	new miniTests.beginForm.nesting.Controller.Form();
+
+    private String _user;
+    public String getUser() {
+	return _user;
+    }
+    public void setUser(String user) {
+	_user = user;
+    }
+    
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward done(miniTests.beginForm.nesting.Controller.Form form)
+    {
+	_user = "Name: " + form.getLastName() + ", " + form.getFirstName();
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nesting/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nesting/Controller.jpf") 
+        })
+    public Forward getUserInfo()
+    {
+	return new Forward("nest",_userInfo);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_userInfo.setLastName("[lastname]");
+	_userInfo.setFirstName("[firstname]");
+	_user = "Not Defined";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/nesting/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/nesting/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<hr />
+<netui:form action="submit">
+First Name: <netui:textBox dataSource="actionForm.firstName"/><br />
+Last Name: <netui:textBox dataSource="actionForm.lastName"/><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/nesting/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/beginForm/nesting/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.beginForm.nesting;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    nested = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    public static class Form extends FormData
+    {
+	String _lastName;
+	String _firstName;
+
+	public String getLastName() {
+	    return _lastName;
+	}
+	public void setLastName(String lastName) {
+	    _lastName = lastName;
+	}
+
+	public String getFirstName() {
+	    return _firstName;
+	}
+	public void setFirstName(String firstName) {
+	    _firstName = firstName;
+	}
+	
+	public String toString() {
+	    return _lastName + ", " + _firstName;
+	}
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="done" return-form-type="Form"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "done",
+                outputFormBeanType = Form.class) 
+        })
+    public Forward submit(Form form)
+    {
+	return new Forward("done",form);
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin(Form form)
+    {
+	return new Forward("begin",form);
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/binding/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/binding/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Binding To Structures</title>
+</head>
+<body>
+<h4>Binding To Structures and fields</h4>
+HashMap["foo"]: <b><netui:label value='${pageFlow.hashValue["foo"]}' /></b><br />
+HashMap."Baz": <b><netui:label value="${pageFlow.hashValue.baz}" /></b><br />
+Hash.Array[3]: <b><netui:label value="${pageFlow.hashValue.array[3]}"/></b><br />
+Array [2]: <b><netui:label value="${pageFlow.array[2]}"/></b><br />
+public.field: <b><netui:label value="${pageFlow.pubField}"/></b><br />
+public.Array [1]: <b><netui:label value="${pageFlow.pubArray[1]}"/></b><br />
+class.field: <b><netui:label value="${pageFlow.info.value}"/></b><br />
+Hash.class.field: <b><netui:label value="${pageFlow.hashValue.info.value}"/></b><br />
+public.class.field: <b><netui:label value="${pageFlow.pubInfo.value}"/></b><br />
+public Hash["foo"]: <b><netui:label value='${pageFlow.pubHash["foo"]}'/></b><br />
+public Hash "Baz" with ".": <b><netui:label value="${pageFlow.pubHash.baz}"/></b><br />
+public Hash <null> with ".": <b><netui:label value="${pageFlow.pubHash.nullValue}"/></b><br />
+public Hash <null> with ["nullValue"]: <b><netui:label value='${pageFlow.pubHash["nullValue"]}'/></b><br />
+public, existing null field: <b><netui:label value='${pageFlow.nullField}'/></b><br />
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/binding/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/binding/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,102 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.binding;
+
+/*
+Array Syntax: <netui:label value="{pageFlow.foo}" /><br />
+ */
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.HashMap;
+
+public class Controller extends PageFlowController
+{
+    String[] _values = {"0", "1", "2", "3", "4", "5"};
+    HashMap _hashValues;
+    Info _info = new Info();
+
+    String pubField = "Public Field";
+    String[] pubArray = _values;
+    HashMap pubHash = _hashValues;
+    Info pubInfo = _info;
+    String nullField = null;
+
+    public String getPubField() {
+        return pubField;
+    }
+
+    public String[] getPubArray() {
+        return pubArray;
+    }
+    
+    public HashMap getPubHash() {
+        return pubHash;
+    }
+
+    public Info getPubInfo() {
+        return pubInfo;
+    }
+
+    public String getNullField() {
+        return nullField;
+    }
+
+    public String[] getArray() {
+        return _values;
+    }
+
+    public HashMap getHashValue() {
+        return _hashValues;
+    }
+
+    public Info getInfo() {
+        return _info;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="page" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin(){
+    _hashValues = new HashMap();
+    _hashValues.put("foo","bar");
+    _hashValues.put("baz","blee");
+    _hashValues.put("array",_values);
+    _hashValues.put("info",_info);
+    pubHash = _hashValues;
+        return new Forward("page");
+    }
+
+    public static class Info implements java.io.Serializable {
+        public String value = "Info.value";
+        public String getValue() {
+            return value;
+        }
+    }
+ }
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/StatefulController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/StatefulController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,152 @@
+package miniTests.breakoutNesting;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/breakoutNesting/StatefulController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='580' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:otherEntryPoint.do'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goNested.do@'>",
+        "  <property value='260,260,260,260' name='elbowsX'/>",
+        "  <property value='244,280,280,316' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='224,180,180,136' name='elbowsX'/>",
+        "  <property value='181,181,181,181' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:nested/NestedController.jpf'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='136,180,180,224' name='elbowsX'/>",
+        "  <property value='192,192,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#nested/NestedController.jpf#@action:goNested.do@'>",
+        "  <property value='296,340,340,384' name='elbowsX'/>",
+        "  <property value='352,352,352,352' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:nestedDone.do@'>",
+        "  <property value='580,580,438,296' name='elbowsX'/>",
+        "  <property value='316,192,192,192' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:otherEntryPoint.do@'>",
+        "  <property value='260,260,260,260' name='elbowsX'/>",
+        "  <property value='84,120,120,156' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:nested/NestedController.jpf@#@action:nestedDone.do@'>",
+        "  <property value='456,500,500,544' name='elbowsX'/>",
+        "  <property value='352,352,352,352' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class StatefulController extends PageFlowController
+{
+    private String someState = "default val";
+    public String getSomeState() {
+        return someState;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        someState = "begin action modified this";
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="nested/NestedController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "nested/NestedController.jpf") 
+        })
+    protected Forward goNested()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward nestedDone()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward otherEntryPoint()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Stateful Controller
+        </title>
+    </head>
+    <body>
+        <h3>Stateful Controller</h3>
+
+        state: <b><netui:label value="${pageFlow.someState}"/></b>
+
+        <br>
+        <br>
+        <netui:anchor action="goNested">go nested</netui:anchor>
+        <br>
+        <netui:anchor action="begin">start over</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/NestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/NestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,205 @@
+package miniTests.breakoutNesting.nested;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/breakoutNesting/nested/NestedController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:done.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:breakout.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestDeeper.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:doubleNestedDone.do'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:nestDeeper.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='176,140,140,104' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:breakout.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='264,290,290,316' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:/miniTests/breakoutNesting/otherEntryPoint.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='500' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:doubleNested/DoubleNestedController.jpf'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/miniTests/breakoutNesting/otherEntryPoint.do#@action:breakout.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='404,430,430,456' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#doubleNested/DoubleNestedController.jpf#@action:nestDeeper.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:nestedDone'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:doubleNested/DoubleNestedController.jpf@#@action:doubleNestedDone.do@'>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#nestedDone#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:doubleNestedDone.do@@'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:doubleNestedDone.do@'>",
+        "  <property value='596,640,640,684' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class NestedController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward done()
+    {
+        return new Forward("done");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/breakoutNesting/otherEntryPoint.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/breakoutNesting/otherEntryPoint.do") 
+        })
+    protected Forward breakout()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/breakoutNesting/other/OtherController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/breakoutNesting/other/OtherController.jpf") 
+        })
+    protected Forward utterBreakout()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="doubleNested/DoubleNestedController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "doubleNested/DoubleNestedController.jpf") 
+        })
+    protected Forward nestDeeper()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward doubleNestedDone()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/doubleNested/DoubleNestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/doubleNested/DoubleNestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,118 @@
+package miniTests.breakoutNesting.nested.doubleNested;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/breakoutNesting/nested/doubleNested/DoubleNestedController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:done.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:breakout.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:breakout.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,180,180,216' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:/miniTests/breakoutNesting/otherEntryPoint.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/miniTests/breakoutNesting/otherEntryPoint.do#@action:breakout.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='304,340,340,376' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:doubleNestedDone'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#doubleNestedDone#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class DoubleNestedController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="doubleNestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "doubleNestedDone") 
+        })
+    public Forward done()
+    {
+        return new Forward( "done" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/breakoutNesting/otherEntryPoint.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/breakoutNesting/otherEntryPoint.do") 
+        })
+    protected Forward breakout()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/doubleNested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/doubleNested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Double-Nested
+        </title>
+    </head>
+    <body>
+        <h3>Double-Nested</h3>
+
+        <netui:anchor action="done">exit legitimately</netui:anchor>
+        <br>
+        <netui:anchor action="breakout">break out</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <netui:anchor action="done">exit legitimately</netui:anchor>
+        <br>
+        <netui:anchor action="breakout">break out</netui:anchor>
+        <br>
+        <netui:anchor action="nestDeeper">nest deeper</netui:anchor>
+        <br>
+        <netui:anchor action="utterBreakout">break out of the nesting stack completely</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/other/OtherController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/other/OtherController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+package miniTests.breakoutNesting.other;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowStack;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    )
+public class OtherController extends PageFlowController
+{
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        PageFlowStack pfStack = PageFlowStack.get( getRequest(), false );
+        return new Forward( "success", "pfStack", pfStack != null ? pfStack.toString() : "null" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/breakoutNesting/StatefulController.jpf") 
+        })
+    protected Forward startOver()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/other/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/breakoutNesting/other/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Other Controller
+        </title>
+    </head>
+    <body>
+        <h3>Other Controller</h3>
+
+        page flow stack: <b><netui:label value="${pageInput.pfStack}"/></b>
+
+        <br>
+        <br>
+        <netui:anchor action="startOver">start over</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/buttonSubmit/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/buttonSubmit/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<netui:form action="/buttonOne">
+<netui:button type="submit" action="/buttonOne" >Button One</netui:button>
+<netui:button type="submit" action="/buttonTwo" >Button Two</netui:button>
+</netui:form>
+<br />
+Last Action: <netui:label value="${pageFlow.action}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/buttonSubmit/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/buttonSubmit/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.buttonSubmit;
+
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String _action;
+
+    public String getAction() {
+	return _action;
+    }
+    public void setAction(String action) {
+	_action = action;
+    }
+
+    public static class Form extends FormData {
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="buttonOne" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "buttonOne",
+                path = "Begin.jsp") 
+        })
+    public Forward buttonOne(Form form)
+    {
+	_action = "buttonOne";
+	return new Forward("buttonOne");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="buttonTwo" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "buttonTwo",
+                path = "Begin.jsp") 
+        })
+    public Forward buttonTwo(Form form)
+    {
+	_action = "buttonTwo";
+	return new Forward("buttonTwo");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_action = "begin";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/cellRepeater/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/cellRepeater/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Cell Repeater</title>
+<style type="text/css">
+.cellTable {
+        border: 1px solid red;
+        border-collapse: collapse;
+        empty-cells: show;
+} 
+.cellCell {
+        border: 1px solid red;
+} 
+</style>
+</head>
+<body>
+<h4>Cell Repeater</h4>
+<b> more cells than data</b>
+<db:cellRepeater dataSource="pageFlow.data"
+        tableClass="cellTable"
+        cellClass="cellCell"
+        rows="4" columns="4">
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+<hr />
+<b>less cells than data</b>
+<db:cellRepeater dataSource="pageFlow.data" rows="3" columns="2">
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+<hr />
+<b>Veritical Repeat</b>
+<db:cellRepeater verticalRepeat="true"
+        dataSource="pageFlow.data" rows="2" columns="3">
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+<hr />
+<b>Vertical Repeat = false</b>
+<db:cellRepeater verticalRepeat="false"
+        dataSource="pageFlow.data" rows="2" columns="3">
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+<hr />
+<b>Databind rows</b>
+<db:cellRepeater 
+        dataSource="pageFlow.data" rows="${pageFlow.rows}">
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+<hr />
+<b>Databind cols</b>
+<db:cellRepeater 
+        dataSource="pageFlow.data" columns="${pageFlow.cols}">
+  Item: <netui:label value="${container.item}" />
+</db:cellRepeater>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/cellRepeater/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/cellRepeater/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.cellRepeater;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    int[] _data = {1,2,3,4,5,6,7,8,9,10};
+    public int[] getData()
+    {
+	return _data;
+    }
+
+    int _rows = 2;
+    public int getRows() {
+        return _rows;
+    }
+
+    int _cols = 5;
+    public int getCols() {
+        return _cols;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/Ctrl.java.disabled
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/Ctrl.java.disabled	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+package miniTests.ctrlConversation; 
+
+import com.bea.control.Control;
+
+public interface Ctrl extends Control
+{ 
+
+    int getN();
+
+    void setN(int n);
+} 

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/CtrlImpl.jcs.disabled
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/CtrlImpl.jcs.disabled	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package miniTests.ctrlConversation; 
+
+import com.bea.control.*;
+/**
+ * @jcs:jc-jar label="Ctrl"
+ * @editor-info:code-gen control-interface="true"
+ */
+public class CtrlImpl implements Ctrl, ControlSource
+{ 
+    /**
+     * @common:control
+     * @jc:timer repeats-every="10 hours" timeout="1 s"
+     */
+    private com.bea.control.TimerControl _tim;
+
+    public int _n;
+
+    static final long serialVersionUID = 1L;
+
+    /**
+     * @common:operation
+     */
+    public void setN( int n )
+    {
+        _n = n;
+        _tim.start();
+    }
+
+    /**
+     * @common:operation
+     */
+    public int getN()
+    {
+        return _n;
+    }
+
+    public void _tim_onTimeout(long time)
+    {
+        ++_n;
+    }
+} 

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+        
+        <table width="100%" cellpadding="0" class="tablebody" cellspacing="0">
+            <tr>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Actions With No Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <netui:anchor action="getN">
+                                    getN
+                                </netui:anchor>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Input Forms For Actions With Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <netui:anchor action="setNLink">
+                                    setN
+                                </netui:anchor>
+                            </td>
+                        </tr>
+                    </table>
+                    <br/>
+                    <br/>
+                </td>
+            </tr>
+            <tr class="tablehead">
+                <td align="left" colspan="2">
+                    Results Area
+                </td>
+            </tr>
+        </table>
+        <br/>
+        <%Object res = request.getAttribute ( "results" );%><%=(res == null ? "<i>none</i><br/>" : ( res + "<br/>"))%>
+        <br>
+        <br>
+        <netui:anchor href="nothing/nothingController.jpf">Leave this page flow (and come right back)</netui:anchor>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,76 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Wed Aug 13 20:25:06 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.ctrlConversation.nothing;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/ctrlConversation/nothing/nothingController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/ctrlConversation/testController.jpf#@action:begin.do@">
+ *   <property value="44,32,32,60" name="elbowsX"/>
+ *   <property value="92,92,-4,-4" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/ctrlConversation/testController.jpf">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/ctrlConversation/nothing/nothingController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/ctrlConversation/testController.jpf#@action:begin.do@'>",
+        "  <property value='44,32,32,60' name='elbowsX'/>",
+        "  <property value='92,92,-4,-4' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/ctrlConversation/testController.jpf'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class nothingController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/ctrlConversation/testController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/ctrlConversation/testController.jpf") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/setN.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/setN.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="/resources/jsp/template.jsp">
+    <netui-template:setAttribute value="setN" name="title"/>
+    <netui-template:section name="bodySection">
+        <br/>
+        <netui:form action="setN">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>N:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.n"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+    </netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/testController.jpf.disabled
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/ctrlConversation/testController.jpf.disabled	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,315 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Wed Aug 13 20:20:56 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.ctrlConversation;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+/**
+ * PageFlow class generated from control Ctrl
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/ctrlConversation/testController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:getN.do">
+ *   <property value="80" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:setN.do#ctrlConversation.testController.SetNForm">
+ *   <property value="720" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:setNLink.do">
+ *   <property value="400" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="144,150,150,156" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:getN.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="292,292,192,192" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:setN.do#ctrlConversation.testController.SetNForm@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ *   <property value="880,880" name="elbowsX"/>
+ *   <property value="292,192" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:setN.jsp">
+ *   <property value="560" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#setN.jsp#@action:setNLink.do@">
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="292,292,292,292" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="control:ctrlConversation.Ctrl#myControl">
+ *   <property value="20" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:ctrlConversation.testController.SetNForm#n#int"/>
+ * <pageflow-object id="formbean:ctrlConversation.testController.SetNForm"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:getN.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="203,203,292,292" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:setNLink.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="192,192,292,292" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:setN.jsp@#@action:setN.do#ctrlConversation.testController.SetNForm@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="596,640,640,684" name="elbowsX"/>
+ *   <property value="292,292,292,292" name="elbowsY"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/ctrlConversation/testController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:getN.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:setN.do#ctrlConversation.testController.SetNForm'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:setNLink.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,150,150,156' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:getN.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='292,292,192,192' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:setN.do#ctrlConversation.testController.SetNForm@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "  <property value='880,880' name='elbowsX'/>",
+        "  <property value='292,192' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:setN.jsp'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#setN.jsp#@action:setNLink.do@'>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='292,292,292,292' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='control:ctrlConversation.Ctrl#myControl'>",
+        "  <property value='20' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:ctrlConversation.testController.SetNForm#n#int'/>",
+        "<pageflow-object id='formbean:ctrlConversation.testController.SetNForm'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:getN.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='203,203,292,292' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:setNLink.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='192,192,292,292' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:setN.jsp@#@action:setN.do#ctrlConversation.testController.SetNForm@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='596,640,640,684' name='elbowsX'/>",
+        "  <property value='292,292,292,292' name='elbowsY'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class testController extends PageFlowController
+{
+    /**
+     * This is the control used to generate this pageflow
+     * @common:control
+     */
+    private Ctrl myControl;
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * Action encapsulating the control method :getN
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     * @jpf:catch method="exceptionHandler" type="Exception"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        },
+        catches = {
+            @Jpf.Catch(
+                method = "exceptionHandler",
+                type = Exception.class) 
+        })
+    public Forward getN()
+        throws Exception
+    {
+        Thread.sleep( 1000 );  // just to make sure the timer fired
+        int var = myControl.getN();
+        getRequest().setAttribute( "results", new Integer( var ) );
+
+        return new Forward( "success" );
+    }
+
+    /**
+     * Action encapsulating the control method :setN
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     * @jpf:catch method="exceptionHandler" type="Exception"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        },
+        catches = {
+            @Jpf.Catch(
+                method = "exceptionHandler",
+                type = Exception.class) 
+        })
+    public Forward setN( SetNForm aForm )
+        throws Exception
+    {
+        myControl.setN( aForm.n );
+
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="setN.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "setN.jsp") 
+        })
+    public Forward setNLink()
+        throws Exception
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="/error.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage",
+                path = "/error.jsp") 
+        })
+    protected Forward exceptionHandler( Exception ex, String actionName, String message, Object form )
+    {
+        String displayMessage = "An exception occurred in the action " + actionName;
+        getRequest().setAttribute( "errorMessage", displayMessage );
+        return new Forward( "errorPage" );
+    }
+
+
+
+    /**
+     * FormData class SetNForm
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class SetNForm extends FormData
+    {
+        private int n;
+
+        public void setN( int n )
+        {
+            this.n = n;
+        }
+
+        public int getN()
+        {
+            return n;
+        }
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValues/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValues/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Default Values</title>
+</head>
+<body>
+<h4>Default Values</h4>
+</body>
+<netui:form action="/postback">
+   <netui:textBox dataSource="actionForm.text" defaultValue="${pageFlow.defaultText}"/><br />
+   <netui:textArea dataSource="actionForm.textArea" defaultValue="${pageFlow.defaultTextArea}"/><br />
+   <netui:select dataSource="actionForm.select" defaultValue="${pageFlow.defaultSelect}"
+	optionsDataSource="${pageFlow.selectOptions}"/><br />
+   <netui:radioButtonGroup dataSource="actionForm.radioGroup" defaultValue="${pageFlow.defaultRadioGroup}"
+	optionsDataSource="${pageFlow.radioGroupOptions}"/><br />
+   <netui:checkBoxGroup dataSource="actionForm.checkGroup" defaultValue="${pageFlow.defaultCheckGroup}"
+	optionsDataSource="${pageFlow.checkGroupOptions}"/><br />
+   <netui:button type="submit">Submit</netui:button>
+</netui:form>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValues/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValues/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,161 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.defaultValues;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    // TextBox
+    private String _defaultText = "Page Flow Default Text";
+    public String getDefaultText() {
+	return _defaultText;
+    }
+
+    // Text Area
+    private String _defaultTextArea = "Page Flow Default Text Area";
+    public String getDefaultTextArea() {
+	return _defaultTextArea;
+    }
+
+    // Select
+    private String _defaultSelect = "Default Option";
+    public String getDefaultSelect() {
+	return _defaultSelect;
+    }
+
+    private String[] _selectOptions = {"Option 1", "Option 2", "Option 3",
+				       "Default Option"};
+    public String[] getSelectOptions() {
+	return _selectOptions;
+    }
+
+    // Radio Group
+    private String _defaultRadioGroup = "Default Radio";
+    public String getDefaultRadioGroup() {
+	return _defaultRadioGroup;
+    }
+
+    private String[] _radioGroupOptions = {"Radio 1", "Radio 2", "Radio 3",
+				       "Default Radio"};
+    public String[] getRadioGroupOptions() {
+	return _radioGroupOptions;
+    }
+
+    // Check Group
+    private String[] _defaultCheckGroup = {"Default Check 1", "Default Check 2"};
+    public String[] getDefaultCheckGroup() {
+	return _defaultCheckGroup;
+    }
+
+    private String[] _checkGroupOptions = {"Check 1", "Check 2", "Check 3",
+				       "Default Check 1", "Default Check 2"};
+    public String[] getCheckGroupOptions() {
+	return _checkGroupOptions;
+    }
+
+    public static class Form extends FormData
+    {
+	// TextBox
+	private String _text;
+	public void setText(String text) {
+	    _text = text;
+	}
+	public String getText() {
+	    return _text;
+	}
+
+	// TextArea
+	private String _textArea;
+	public void setTextArea(String textArea) {
+	    _textArea = textArea;
+	}
+	public String getTextArea() {
+	    return _textArea;
+	}
+
+	// Select
+	private String _select;
+	public void setSelect(String select) {
+	    _select = select;
+	}
+	public String getSelect() {
+	    return _select;
+	}
+
+	// Radio Group
+	private String _radioGroup;
+	public void setRadioGroup(String radioGroup) {
+	    _radioGroup = radioGroup;
+	}
+	public String getRadioGroup() {
+	    return _radioGroup;
+	}
+
+	// Checkbox Group
+	private String[] _checkGroup;
+	public void setCheckGroup(String[] checkGroup) {
+	    _checkGroup = checkGroup;
+	}
+	public String[] getCheckGroup() {
+	    return _checkGroup;
+	}
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin(){
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward postback(Form form){
+	Forward f = new Forward("begin");
+	f.addOutputForm(form);
+        return f;
+    }
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValuesDirect/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValuesDirect/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Default Values Direct</title>
+</head>
+<body>
+<h4>Default Values Direct</h4>
+</body>
+<netui:form action="/postback">
+   <netui:textBox dataSource="pageFlow.text"
+	defaultValue="${pageFlow.defaultText}"/><br />
+   <netui:textArea dataSource="pageFlow.textArea"
+	defaultValue="${pageFlow.defaultTextArea}"/><br />
+   <netui:select dataSource="pageFlow.select"
+	defaultValue="${pageFlow.defaultSelect}"
+	optionsDataSource="${pageFlow.selectOptions}"/><br />
+   <netui:radioButtonGroup dataSource="pageFlow.radioGroup"
+	defaultValue="${pageFlow.defaultRadioGroup}"
+	optionsDataSource="${pageFlow.radioGroupOptions}"/><br />
+   <netui:checkBoxGroup dataSource="pageFlow.checkGroup"
+	defaultValue="${pageFlow.defaultCheckGroup}"
+	optionsDataSource="${pageFlow.checkGroupOptions}"/><br />
+   <netui:button type="submit">Submit</netui:button>
+</netui:form>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValuesDirect/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/defaultValuesDirect/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,156 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.defaultValuesDirect;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    // TextBox
+    private String _defaultText = "Page Flow Default Text";
+    public String getDefaultText() {
+	return _defaultText;
+    }
+
+    // Text Area
+    private String _defaultTextArea = "Page Flow Default Text Area";
+    public String getDefaultTextArea() {
+	return _defaultTextArea;
+    }
+
+    // Select
+    private String _defaultSelect = "Default Option";
+    public String getDefaultSelect() {
+	return _defaultSelect;
+    }
+
+    private String[] _selectOptions = {"Option 1", "Option 2", "Option 3",
+				       "Default Option"};
+    public String[] getSelectOptions() {
+	return _selectOptions;
+    }
+
+    // Radio Group
+    private String _defaultRadioGroup = "Default Radio";
+    public String getDefaultRadioGroup() {
+	return _defaultRadioGroup;
+    }
+
+    private String[] _radioGroupOptions = {"Radio 1", "Radio 2", "Radio 3",
+				       "Default Radio"};
+    public String[] getRadioGroupOptions() {
+	return _radioGroupOptions;
+    }
+
+    // Check Group
+    private String[] _defaultCheckGroup = {"Default Check 1", "Default Check 2"};
+    public String[] getDefaultCheckGroup() {
+	return _defaultCheckGroup;
+    }
+
+    private String[] _checkGroupOptions = {"Check 1", "Check 2", "Check 3",
+				       "Default Check 1", "Default Check 2"};
+    public String[] getCheckGroupOptions() {
+	return _checkGroupOptions;
+    }
+
+    // TextBox
+    private String _text;
+    public void setText(String text) {
+	_text = text;
+    }
+    public String getText() {
+	return _text;
+    }
+    
+    // TextArea
+    private String _textArea;
+    public void setTextArea(String textArea) {
+	_textArea = textArea;
+    }
+    public String getTextArea() {
+	return _textArea;
+    }
+    
+    // Select
+    private String _select;
+    public void setSelect(String select) {
+	_select = select;
+    }
+    public String getSelect() {
+	return _select;
+    }
+    
+    // Radio Group
+    private String _radioGroup;
+    public void setRadioGroup(String radioGroup) {
+	_radioGroup = radioGroup;
+    }
+    public String getRadioGroup() {
+	return _radioGroup;
+    }
+    
+    // Checkbox Group
+    private String[] _checkGroup;
+    public void setCheckGroup(String[] checkGroup) {
+	_checkGroup = checkGroup;
+    }
+    public String[] getCheckGroup() {
+	return _checkGroup;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin(){
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward postback() {
+        return new Forward("begin");
+    }
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHier/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHier/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<netui:anchor action="throwBase">Throw a ExceptBase - base handler</netui:anchor><br />
+<netui:anchor action="throwSub">Throw a ExceptSub - base handler</netui:anchor><br />
+<netui:anchor action="throwSub2">Throw a ExceptSub2 - sub2 handler</netui:anchor><br />
+<netui:anchor action="throwSubLocal">Throw a ExceptSub with local - local sub handler</netui:anchor><br />
+<netui:anchor action="throwRuntime">Throw a Runtime - global handler</netui:anchor><br />
+<hr />
+Message <netui:label value="${pageFlow.message}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHier/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHier/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,195 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.exceptHier;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:catch type="Exception"
+ *            method="globalHandler"
+ * @jpf:catch type="Controller.ExceptBase"
+ *            method="baseHandler"
+ * @jpf:catch type="Controller.ExceptSub2"
+ *            method="sub2Handler"
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = Exception.class,
+            method = "globalHandler"),
+        @Jpf.Catch(
+            type = Controller.ExceptBase.class,
+            method = "baseHandler"),
+        @Jpf.Catch(
+            type = Controller.ExceptSub2.class,
+            method = "sub2Handler") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    public static class ExceptBase extends Exception
+    {
+	public String toString() {
+	    return "[ExceptBase]";
+	}
+    }
+
+    public static class ExceptSub extends ExceptBase
+    {
+	public String toString() {
+	    return "[ExceptSub]";
+	}
+    }
+
+    public static class ExceptSub2 extends ExceptBase
+    {
+	public String toString() {
+	    return "[ExceptSub2]";
+	}
+    }
+
+    private String _message;
+    public String getMessage()
+    {
+        return _message;
+    }
+
+    /**
+     * @jpf:action
+
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwBase() throws Exception
+    {
+        throw new ExceptBase();
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwSub() throws Exception
+    {
+        throw new ExceptSub();
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwSub2() throws Exception
+    {
+        throw new ExceptSub2();
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwRuntime() throws Exception
+    {
+        throw new RuntimeException();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:catch type="ExceptSub"
+     *            method="localSubHandler"
+     */
+    @Jpf.Action(
+        catches = {
+            @Jpf.Catch(
+                type = ExceptSub.class,
+                method = "localSubHandler") 
+        })
+    protected Forward throwSubLocal() throws Exception
+    {
+        throw new ExceptSub();
+    }
+
+    /**
+     * @jpf:exception-handler
+     */
+    @Jpf.ExceptionHandler(
+        )
+    protected Forward globalHandler(Exception ex, String actionName,
+					  String message, Object form)
+    {
+	
+	_message = "handled by [global handler] except = " + ex.getClass().getName();
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:exception-handler
+     */
+    @Jpf.ExceptionHandler(
+        )
+    protected Forward baseHandler(Exception ex, String actionName,
+					  String message, Object form)
+    {
+	_message = "handled by [base handler] except = " + ex;
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:exception-handler
+     */
+    @Jpf.ExceptionHandler(
+        )
+    protected Forward sub2Handler(Exception ex, String actionName,
+					  String message, Object form)
+    {
+	_message = "handled by [sub2 handler] except = " + ex;
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:exception-handler
+     */
+    @Jpf.ExceptionHandler(
+        )
+    protected Forward localSubHandler(ExceptBase ex, String actionName,
+					  String message, Object form)
+    {
+	_message = "handled by [local sub handler] except = " + ex;
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<netui:anchor action="throwBase">Throw a ExceptBase - base handler</netui:anchor><br />
+<netui:anchor action="throwSub">Throw a ExceptSub - base handler</netui:anchor><br />
+<netui:anchor action="throwSub2">Throw a ExceptSub2 - sub2 handler</netui:anchor><br />
+<netui:anchor action="throwSubLocal">Throw a ExceptSub with local - local sub handler</netui:anchor><br />
+<netui:anchor action="throwRuntime">Throw a Runtime - global handler</netui:anchor><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,146 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.exceptHierPage;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:catch type="Exception"
+ *            path="globalHandler.jsp"
+ * @jpf:catch type="Controller.ExceptBase"
+ *            path="baseHandler.jsp"
+ * @jpf:catch type="Controller.ExceptSub2"
+ *            path="sub2Handler.jsp"
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = Exception.class,
+            path = "globalHandler.jsp"),
+        @Jpf.Catch(
+            type = Controller.ExceptBase.class,
+            path = "baseHandler.jsp"),
+        @Jpf.Catch(
+            type = Controller.ExceptSub2.class,
+            path = "sub2Handler.jsp") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    public static class ExceptBase extends Exception
+    {
+	public String toString() {
+	    return "[ExceptBase]";
+	}
+    }
+
+    public static class ExceptSub extends ExceptBase
+    {
+	public String toString() {
+	    return "[ExceptSub]";
+	}
+    }
+
+    public static class ExceptSub2 extends ExceptBase
+    {
+	public String toString() {
+	    return "[ExceptSub2]";
+	}
+    }
+
+    private String _message;
+    public String getMessage()
+    {
+        return _message;
+    }
+
+    /**
+     * @jpf:action
+
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwBase() throws Exception
+    {
+        throw new ExceptBase();
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwSub() throws Exception
+    {
+        throw new ExceptSub();
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwSub2() throws Exception
+    {
+        throw new ExceptSub2();
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwRuntime() throws Exception
+    {
+        throw new RuntimeException();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:catch type="ExceptSub"
+     *            path="localSubHandler.jsp"
+     */
+    @Jpf.Action(
+        catches = {
+            @Jpf.Catch(
+                type = ExceptSub.class,
+                path = "localSubHandler.jsp") 
+        })
+    protected Forward throwSubLocal() throws Exception
+    {
+        throw new ExceptSub();
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/baseHandler.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/baseHandler.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Base Handler</title>
+</head>
+<body>
+<h4>Base Handler</h4>
+<netui:anchor href="Controller.jpf">Home</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/globalHandler.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/globalHandler.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Global Handler</title>
+</head>
+<body>
+<h4>Global Handler</h4>
+<netui:anchor href="Controller.jpf">Home</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/localSubHandler.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/localSubHandler.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Local Sub Handler</title>
+</head>
+<body>
+<h4>Local Sub Handler</h4>
+<netui:anchor href="Controller.jpf">Home</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/sub2Handler.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/exceptHierPage/sub2Handler.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Sub2 Handler</title>
+</head>
+<body>
+<h4>Sub2 Handler</h4>
+<netui:anchor href="Controller.jpf">Home</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+<!--Generated by Weblogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+<head>
+    <netui:base />
+</head>
+<body>
+    <netui:form action="formAction" >
+        <table>
+            <tr>
+                <th align="right" valign="top">Name:</th>
+                <td align="left"><netui:textBox dataSource="actionForm.name" size="36" maxlength="36"></netui:textBox></td>
+                
+                <td style="color:red;">
+                    <netui:error value="name"></netui:error>
+                    &nbsp;
+                </td>
+            </tr>
+            <tr>
+                <th align="right" valign="top">Type:</th>
+                <td align="left"><netui:textBox dataSource="actionForm.type" size="36" maxlength="36"></netui:textBox></td>
+                
+                <td style="color:red;">
+                    <netui:error value="te"></netui:error>
+                </td>
+            </tr>
+            <tr>
+                <td align="center" colspan="3">
+                    <netui:button value="Submit"></netui:button>&nbsp;
+                </td>
+            </tr>
+            <tr>
+                <td colspan="3" align="center">
+                    <netui:errors></netui:errors>
+                </td>
+            </tr>
+        </table>
+    </netui:form>
+    
+</body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,146 @@
+// ------------------------------------------------------------------------------
+//  Generated by Weblogic Workshop
+// 
+//  Created on: Tue Apr 01 14:56:15 MST 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package miniTests.formValid;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+
+// struts specific stuff
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+import javax.servlet.http.HttpServletRequest;
+
+import java.util.Date;
+
+@Jpf.Controller(
+    strutsMerge = "merge-config.xml")
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "  <pageflow-object id='action:begin.do'>",
+        "    <property value='100' name='x'/>",
+        "    <property value='220' name='y'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='action:formAction.do#miniTests.formValid.Controller.EmptyForm'>",
+        "    <property value='400' name='x'/>",
+        "    <property value='220' name='y'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='action-call:@page:Begin.jsp@#@action:formAction.do#miniTests.formValid.Controller.EmptyForm@'>",
+        "    <property value='212,212,212,212' name='elbowsY'/>",
+        "    <property value='276,320,320,364' name='elbowsX'/>",
+        "    <property value='West_1' name='toPort'/>",
+        "    <property value='East_1' name='fromPort'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='page:Begin.jsp'>",
+        "    <property value='240' name='x'/>",
+        "    <property value='220' name='y'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='page:Results.jsp'>",
+        "    <property value='540' name='x'/>",
+        "    <property value='220' name='y'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='forward:path#success#Begin.jsp#@action:begin.do@'>",
+        "    <property value='212,212,212,212' name='elbowsY'/>",
+        "    <property value='West_1' name='toPort'/>",
+        "    <property value='136,170,170,204' name='elbowsX'/>",
+        "    <property value='success' name='label'/>",
+        "    <property value='East_1' name='fromPort'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='forward:path#success#Results.jsp#@action:formAction.do#miniTests.formValid.Controller.EmptyForm@'>",
+        "    <property value='212,212,212,212' name='elbowsY'/>",
+        "    <property value='436,470,470,504' name='elbowsX'/>",
+        "    <property value='West_1' name='toPort'/>",
+        "    <property value='East_1' name='fromPort'/>",
+        "    <property value='success' name='label'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='formbeanprop:miniTests.formValid.Controller.EmptyForm#name#java.lang.String'/>",
+        "  <pageflow-object id='formbeanprop:miniTests.formValid.Controller.EmptyForm#type#java.lang.String'/>",
+        "  <pageflow-object id='formbean:miniTests.formValid.Controller.EmptyForm'/>",
+        "  <pageflow-object id='pageflow:/miniTests/formValid/Controller.jpf'/>",
+        "</view-properties>"
+    })
+public class Controller extends org.apache.beehive.netui.pageflow.PageFlowController
+{
+    private EmptyForm form;
+    public EmptyForm getForm() {
+        return form;
+    }
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    @Jpf.Action(
+        validationErrorForward = @Jpf.Forward(
+            name="validationFailure",
+            path="Begin.jsp"),
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward formAction(EmptyForm form)
+    {
+        this.form = form;
+        return new Forward("success");
+    }
+
+    public static class EmptyForm extends org.apache.beehive.netui.pageflow.FormData
+    {
+        private java.lang.String type;
+
+        private java.lang.String name;
+
+
+        public void setName(java.lang.String name)
+        {
+            this.name = name;
+        }
+
+        public java.lang.String getName()
+        {
+            return this.name;
+        }
+
+        public void setType(java.lang.String type)
+        {
+            this.type = type;
+        }
+
+        public java.lang.String getType()
+        {
+            return this.type;
+        }
+        
+        public ActionErrors validate(ActionMapping mapping,
+                        HttpServletRequest request)
+        {
+            ActionErrors errors = new ActionErrors();
+            if (name == null) {
+                errors.add("name", new ActionError("NameError"));
+            }
+            else {
+                if (Character.toUpperCase(name.charAt(0)) != name.charAt(0)) {
+                    errors.add("name", new ActionError("NameError"));
+                }
+            }
+            if (type == null || (!type.equals("bar") && !type.equals("foo"))) {
+                errors.add("te", new ActionError("TypeError"));
+            }
+            return errors;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:label value="Name: " />&nbsp;<netui:label value="${pageFlow.form.name}" /><br />
+        <netui:label value="Type:" />&nbsp;<netui:label value="${pageFlow.form.type}"/>
+        </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/merge-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValid/merge-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+    <message-resources parameter="error.Errors"/>
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+<!--Generated by Weblogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+<head>
+    <netui:base />
+</head>
+<body>
+    <netui:form action="formAction" >
+        <table>
+            <tr>
+                <th align="right" valign="top">Name:</th>
+                <td align="left"><netui:textBox dataSource="actionForm.name" size="36" maxlength="36"></netui:textBox></td>
+                
+                <td style="color:red;">
+                    <netui:error value="name"></netui:error>
+                    &nbsp;
+                </td>
+            </tr>
+            <tr>
+                <th align="right" valign="top">Type:</th>
+                <td align="left"><netui:textBox dataSource="actionForm.type" size="36" maxlength="36"></netui:textBox></td>
+                
+                <td style="color:red;">
+                    <netui:error value="te"></netui:error>
+                </td>
+            </tr>
+            <tr>
+                <td align="center" colspan="3">
+                    <netui:button value="Submit"></netui:button>&nbsp;
+                </td>
+            </tr>
+            <tr>
+                <td colspan="3" align="center">
+                    <netui:errors></netui:errors>
+                </td>
+            </tr>
+        </table>
+    </netui:form>
+    
+</body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,116 @@
+package miniTests.formValidAnnot;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+
+// struts specific stuff
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+import javax.servlet.http.HttpServletRequest;
+
+import java.util.Date;
+
+/**
+ * PageFlow class generated from control DbStuff
+ * @jpf:message-resources resources="error.Errors"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "error.Errors") 
+    })
+public class Controller extends org.apache.beehive.netui.pageflow.PageFlowController
+{
+    private EmptyForm form;
+
+    public EmptyForm getForm()
+    {
+        return form;
+    }
+
+    public void setForm(EmptyForm form)
+    {
+        this.form = form;
+    }
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action validation-error-page="Begin.jsp"
+     * @jpf:forward name="success" path="Results.jsp"
+     */
+    @Jpf.Action(
+        validationErrorForward = @Jpf.Forward(
+            name="validationFailure",
+            path="Begin.jsp"),
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Results.jsp") 
+        })
+    protected Forward formAction(EmptyForm form)
+    {
+        this.form = form;
+        return new Forward("success");
+    }
+
+    public static class EmptyForm extends org.apache.beehive.netui.pageflow.FormData
+    {
+        private java.lang.String type;
+
+        private java.lang.String name;
+
+
+        public void setName(java.lang.String name)
+        {
+            this.name = name;
+        }
+
+        public java.lang.String getName()
+        {
+            return this.name;
+        }
+
+        public void setType(java.lang.String type)
+        {
+            this.type = type;
+        }
+
+        public java.lang.String getType()
+        {
+            return this.type;
+        }
+        
+        public ActionErrors validate(ActionMapping mapping,
+                        HttpServletRequest request)
+        {
+            ActionErrors errors = new ActionErrors();
+            if (name == null) {
+                errors.add("name", new ActionError("NameError"));
+            }
+            else {
+                if (Character.toUpperCase(name.charAt(0)) != name.charAt(0)) {
+                    errors.add("name", new ActionError("NameError"));
+                }
+            }
+            if (type == null || (!type.equals("bar") && !type.equals("foo"))) {
+                errors.add("te", new ActionError("TypeError"));
+            }
+            return errors;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/formValidAnnot/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:label value="Name: " />&nbsp;<netui:label value="${pageFlow.form.name}" /><br />
+        <netui:label value="Type:" />&nbsp;<netui:label value="${pageFlow.form.type}"/>
+        </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/ForwardToActionController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/ForwardToActionController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,284 @@
+package miniTests.forwardToAction;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests/forwardToAction/ForwardToActionController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:someAction.do#miniTests.forwardToAction.ForwardToActionController.SomeActionForm">
+ *   <property value="400" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:actionWithoutForm.do">
+ *   <property value="560" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:actionWithForm.do#miniTests.forwardToAction.ForwardToActionController.AnotherForm">
+ *   <property value="560" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:result.jsp@#@action:begin.do@">
+ *   <property value="756,756,44,44" name="elbowsX"/>
+ *   <property value="292,336,336,292" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:result.jsp">
+ *   <property value="720" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="292,292,292,292" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#withoutForm#actionWithoutForm.do#@action:someAction.do#miniTests.forwardToAction.ForwardToActionController.SomeActionForm@">
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="292,292,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="withoutForm" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#withForm#actionWithForm.do#@action:someAction.do#miniTests.forwardToAction.ForwardToActionController.SomeActionForm@">
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="292,292,212,212" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="withForm" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#result.jsp#@action:actionWithoutForm.do@">
+ *   <property value="596,720,720,720" name="elbowsX"/>
+ *   <property value="372,372,358,344" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#result.jsp#@action:actionWithForm.do#miniTests.forwardToAction.ForwardToActionController.AnotherForm@">
+ *   <property value="596,720,720,720" name="elbowsX"/>
+ *   <property value="212,212,234,256" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:miniTests.forwardToAction.ForwardToActionController.SomeActionForm#foo#java.lang.String"/>
+ * <pageflow-object id="formbean:miniTests.forwardToAction.ForwardToActionController.SomeActionForm"/>
+ * <pageflow-object id="formbeanprop:miniTests.forwardToAction.ForwardToActionController.AnotherForm#bar#java.lang.String"/>
+ * <pageflow-object id="formbean:miniTests.forwardToAction.ForwardToActionController.AnotherForm"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:someAction.do#miniTests.forwardToAction.ForwardToActionController.SomeActionForm@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="292,292,292,292" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/forwardToAction/ForwardToActionController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:someAction.do#miniTests.forwardToAction.ForwardToActionController.SomeActionForm'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:actionWithoutForm.do'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:actionWithForm.do#miniTests.forwardToAction.ForwardToActionController.AnotherForm'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:result.jsp@#@action:begin.do@'>",
+        "  <property value='756,756,44,44' name='elbowsX'/>",
+        "  <property value='292,336,336,292' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:result.jsp'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='292,292,292,292' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#withoutForm#actionWithoutForm.do#@action:someAction.do#miniTests.forwardToAction.ForwardToActionController.SomeActionForm@'>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='292,292,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='withoutForm' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#withForm#actionWithForm.do#@action:someAction.do#miniTests.forwardToAction.ForwardToActionController.SomeActionForm@'>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='292,292,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='withForm' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#result.jsp#@action:actionWithoutForm.do@'>",
+        "  <property value='596,720,720,720' name='elbowsX'/>",
+        "  <property value='372,372,358,344' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#result.jsp#@action:actionWithForm.do#miniTests.forwardToAction.ForwardToActionController.AnotherForm@'>",
+        "  <property value='596,720,720,720' name='elbowsX'/>",
+        "  <property value='212,212,234,256' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:miniTests.forwardToAction.ForwardToActionController.SomeActionForm#foo#java.lang.String'/>",
+        "<pageflow-object id='formbean:miniTests.forwardToAction.ForwardToActionController.SomeActionForm'/>",
+        "<pageflow-object id='formbeanprop:miniTests.forwardToAction.ForwardToActionController.AnotherForm#bar#java.lang.String'/>",
+        "<pageflow-object id='formbean:miniTests.forwardToAction.ForwardToActionController.AnotherForm'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:someAction.do#miniTests.forwardToAction.ForwardToActionController.SomeActionForm@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='292,292,292,292' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class ForwardToActionController extends PageFlowController
+{
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="withoutForm" path="actionWithoutForm.do"
+     * @jpf:forward name="withForm" path="actionWithForm.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "withoutForm",
+                path = "actionWithoutForm.do"),
+            @Jpf.Forward(
+                name = "withForm",
+                path = "actionWithForm.do") 
+        })
+    protected Forward someAction(SomeActionForm form)
+    {
+        if ( getRequest().getParameter( "withForm" ) != null )
+        {
+            return new Forward( "withForm" );
+        }
+        else
+        {
+            return new Forward( "withoutForm" );
+        }
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="result.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "result.jsp") 
+        })
+    protected Forward actionWithoutForm()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="result.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "result.jsp") 
+        })
+    protected Forward actionWithForm(AnotherForm form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class SomeActionForm extends FormData
+    {
+        private String foo;
+
+        public void setFoo(String foo)
+        {
+            this.foo = foo;
+        }
+
+        public String getFoo()
+        {
+            return this.foo;
+        }
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class AnotherForm extends FormData
+    {
+        private String bar;
+
+        public void setBar(String bar)
+        {
+            this.bar = bar;
+        }
+
+        public String getBar()
+        {
+            return this.bar;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Forward to Action
+        </title>
+    </head>
+    <body>
+        <h3>Forward to Action</h3>
+        <netui:form action="someAction">
+            <table>
+                <tr valign="top">
+                    <td>
+                        Foo:
+                    </td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.foo"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <netui:button value="Submit" type="submit"/>
+            <input type="checkbox" name="withForm"> Forward to action with form
+        </netui:form>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/result.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/forwardToAction/result.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Forward to Action - Results
+        </title>
+    </head>
+    <netui:body>
+        <h3>Forward to Action</h3>
+        <netui:bindingUpdateErrors alwaysReport="true" />
+        <br>
+        <br>
+        <netui:anchor action="begin">start over</netui:anchor>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalAction/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalAction/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Basic Global App</title>
+</head>
+<body>
+<h4>Basic Global App</h4>
+  <netui:anchor action="globalAction_action">Global Action</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalAction/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalAction/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.globalAction;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                path = "Begin.jsp") 
+        })
+    protected Forward returnFromNestReturn()
+    {
+        return new Forward("return");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalActionForm/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalActionForm/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Basic Global App</title>
+</head>
+<body>
+<h4>Basic Global App</h4>
+  <netui:form action="globalAction_form">
+     Search <netui:textBox dataSource="actionForm.search"/>
+     <netui:button type="submit">Submit</netui:button>
+  </netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalActionForm/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalActionForm/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.globalActionForm;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                path = "Begin.jsp") 
+        })
+    protected Forward returnFromNestReturn()
+    {
+        return new Forward("return");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Global Forwards</title>
+</head>
+<body>
+<h4>Global Forwards</h4>
+Last Action: <b><netui:label value="${pageFlow.action}"/></b><br />
+<netui:anchor action="/next" >Next</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.globalForwards;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ * @jpf:forward name="home" path="Begin.jsp"
+ * @jpf:forward name="next" path="Page1.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp"),
+        @Jpf.Forward(
+            name = "home",
+            path = "Begin.jsp"),
+        @Jpf.Forward(
+            name = "next",
+            path = "Page1.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _action;
+    public String getAction() {
+	return _action;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward home()
+    {
+	_action = "home";
+        return new Forward("home");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward next()
+    {
+	_action = "next";
+        return new Forward("next");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_action = "begin";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Page1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/globalForwards/Page1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Global Forwards Next Page</title>
+</head>
+<body>
+<h4>Global Forwards Next Page</h4>
+Last Action: <b><netui:label value="${pageFlow.action}"/></b><br />
+<netui:anchor action="/home">Home</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/InterceptorsController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/InterceptorsController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,473 @@
+package miniTests.interceptors;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptor;
+import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptorConfig;
+import org.apache.beehive.netui.pageflow.interceptor.InterceptorForward;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="formbean:InterceptorBase"/>
+ * <pageflow-object id="formbean:BeforeInterceptor"/>
+ * <pageflow-object id="formbean:AfterInterceptor"/>
+ * <pageflow-object id="formbean:BeforeInterceptor2"/>
+ * <pageflow-object id="formbean:AfterInterceptor2"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:interceptWithNestedFlow.do">
+ *   <property value="220" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:interceptWithNestedFlow.do@">
+ *   <property value="209,209,209,209" name="elbowsX"/>
+ *   <property value="216,180,180,144" name="elbowsY"/>
+ *   <property value="North_0" name="fromPort"/>
+ *   <property value="South_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="360" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#nestedDone.jsp#@action:nestedDone.do@">
+ *   <property value="360,360,353,353" name="elbowsX"/>
+ *   <property value="216,179,179,142" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:interceptBeforeAction.do">
+ *   <property value="500" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#neverGetHere.jsp#@action:interceptBeforeAction.do@">
+ *   <property value="500,500,522,544" name="elbowsX"/>
+ *   <property value="216,92,92,92" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:interceptAfterAction.do">
+ *   <property value="640" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#neverGetHere.jsp#@action:interceptAfterAction.do@">
+ *   <property value="640,640,628,616" name="elbowsX"/>
+ *   <property value="216,92,92,92" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:nestedDone.jsp">
+ *   <property value="353" name="x"/>
+ *   <property value="98" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:neverGetHere.jsp">
+ *   <property value="580" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:intercepted.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nestedDone.jsp@#@action:begin.do@">
+ *   <property value="317,216,216,116" name="elbowsX"/>
+ *   <property value="90,90,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:intercepted.jsp@#@action:begin.do@">
+ *   <property value="80,80,80,80" name="elbowsX"/>
+ *   <property value="216,180,180,144" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:interceptWithNestedFlow.do@">
+ *   <property value="220,220,220,220" name="elbowsX"/>
+ *   <property value="144,180,180,216" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:interceptBeforeAction.do@"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:interceptAfterAction.do@"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='formbean:InterceptorBase'/>",
+        "<pageflow-object id='formbean:BeforeInterceptor'/>",
+        "<pageflow-object id='formbean:AfterInterceptor'/>",
+        "<pageflow-object id='formbean:BeforeInterceptor2'/>",
+        "<pageflow-object id='formbean:AfterInterceptor2'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:interceptWithNestedFlow.do'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:interceptWithNestedFlow.do@'>",
+        "  <property value='209,209,209,209' name='elbowsX'/>",
+        "  <property value='216,180,180,144' name='elbowsY'/>",
+        "  <property value='North_0' name='fromPort'/>",
+        "  <property value='South_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#nestedDone.jsp#@action:nestedDone.do@'>",
+        "  <property value='360,360,353,353' name='elbowsX'/>",
+        "  <property value='216,179,179,142' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:interceptBeforeAction.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#neverGetHere.jsp#@action:interceptBeforeAction.do@'>",
+        "  <property value='500,500,522,544' name='elbowsX'/>",
+        "  <property value='216,92,92,92' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:interceptAfterAction.do'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#neverGetHere.jsp#@action:interceptAfterAction.do@'>",
+        "  <property value='640,640,628,616' name='elbowsX'/>",
+        "  <property value='216,92,92,92' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:nestedDone.jsp'>",
+        "  <property value='353' name='x'/>",
+        "  <property value='98' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:neverGetHere.jsp'>",
+        "  <property value='580' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:intercepted.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nestedDone.jsp@#@action:begin.do@'>",
+        "  <property value='317,216,216,116' name='elbowsX'/>",
+        "  <property value='90,90,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:intercepted.jsp@#@action:begin.do@'>",
+        "  <property value='80,80,80,80' name='elbowsX'/>",
+        "  <property value='216,180,180,144' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:interceptWithNestedFlow.do@'>",
+        "  <property value='220,220,220,220' name='elbowsX'/>",
+        "  <property value='144,180,180,216' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:interceptBeforeAction.do@'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:interceptAfterAction.do@'/>",
+        "</view-properties>"
+    })
+public class InterceptorsController extends PageFlowController
+{
+    private ArrayList _messages = new ArrayList();
+    private int _colorIndex = -1;
+    
+    private static final String[] COLORS = { "blue", "green" };
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    public List getMessages()
+    {
+        return _messages;
+    }
+    
+    private void addMessage( String msg, HttpServletRequest request )
+    {
+        if ( request.getAttribute( "firstInRequest" ) == null )
+        {
+            _colorIndex = ( _colorIndex + 1 ) % COLORS.length;
+            request.setAttribute( "firstInRequest", Boolean.TRUE );
+        }
+        
+        _messages.add( "<span style=\"color:" + COLORS[ _colorIndex ] + "\">" + msg + "</span>" );
+    }
+
+    private static void addInitMessage( String msg, ServletContext servletContext )
+    {
+        List messages = ( List ) servletContext.getAttribute( "initMessages" );
+        
+        if ( messages == null )
+        {
+            messages = new ArrayList();
+            servletContext.setAttribute( "initMessages", messages );
+        }
+        
+        messages.add( msg );
+    }
+    
+    private static class InterceptorBase
+    {
+        protected void trace( String description, String message, PageFlowController pageFlow,
+                              InterceptorForward originalFwd, HttpServletRequest request )
+        {
+            if ( pageFlow instanceof InterceptorsController )
+            {
+                message = getClass() + " (" + description + "): " + message + ".  Original URI = "
+                          + ( originalFwd != null ? originalFwd.getPath() : null );
+                ( ( InterceptorsController ) pageFlow ).addMessage( message, request );
+            }
+        }
+
+        public void init( ActionInterceptorConfig config, ServletContext servletContext )
+        {
+            addInitMessage( "Initializing action interceptor " + config.getInterceptorClass(), servletContext );
+        }
+    } 
+
+    public static class BeforeInterceptor extends InterceptorBase implements ActionInterceptor
+    { 
+        public InterceptorForward doIntercept( HttpServletRequest request, HttpServletResponse response, 
+                                               PageFlowController pageFlow, InterceptorForward originalFwd,
+                                               String action )
+            throws Exception
+        {
+            trace( "intercept", "before action " + action, pageFlow, originalFwd, request );
+            
+            
+            if ( action.equals( "interceptWithNestedFlow" ) )
+            {
+                URI uri = new URI( "/miniTests/interceptors/nested/NestedController.jpf" );
+                trace( "intercept", "sending to nested page flow " + uri, pageFlow, originalFwd, request );
+                return new InterceptorForward( uri );
+            }
+            
+            return null;
+        }
+    
+        public InterceptorForward doPostIntercept( HttpServletRequest request, HttpServletResponse response,
+                                                   PageFlowController pageFlow, InterceptorForward originalFwd,
+                                                   String returningAction ) throws Exception
+        {
+            trace( "post-intercept", "before returning action " + returningAction, pageFlow, originalFwd, request );
+            
+            if ( request.getParameter( "returnToOriginalPage" ) != null )   // set in nested page flow
+            {
+                return originalFwd;
+            }
+            
+            return null;
+        }
+    } 
+
+
+    public static class AfterInterceptor extends InterceptorBase implements ActionInterceptor
+    { 
+        public InterceptorForward doIntercept( HttpServletRequest request, HttpServletResponse response, 
+                                               PageFlowController pageFlow, InterceptorForward originalFwd,
+                                               String action )
+            throws Exception
+        {
+            trace( "intercept", "after action " + action, pageFlow, originalFwd, request );
+            
+            return null;
+        }
+    
+        public InterceptorForward doPostIntercept( HttpServletRequest request, HttpServletResponse response,
+                                                   PageFlowController pageFlow, InterceptorForward originalFwd,
+                                                   String returningAction ) throws Exception
+        {
+            trace( "post-intercept", "before returning action " + returningAction, pageFlow, originalFwd, request );
+            
+            return null;
+        }
+    } 
+
+    public static class BeforeInterceptor2 extends InterceptorBase implements ActionInterceptor
+    { 
+        public InterceptorForward doIntercept( HttpServletRequest request, HttpServletResponse response, 
+                                               PageFlowController pageFlow, InterceptorForward originalFwd,
+                                               String action )
+            throws Exception
+        {
+            trace( "intercept", "before action " + action, pageFlow, originalFwd, request );
+            
+            if ( action.equals( "interceptBeforeAction" ) )
+            {
+                URI uri = new URI( "intercepted.jsp" );
+                trace( "intercept", "before action " + action + ": sending to " + uri, pageFlow, originalFwd, request );
+                return new InterceptorForward( uri );
+            }
+            
+            return null;
+        }
+    
+        public InterceptorForward doPostIntercept( HttpServletRequest request, HttpServletResponse response,
+                                                   PageFlowController pageFlow, InterceptorForward originalFwd,
+                                                   String returningAction ) throws Exception
+        {
+            trace( "post-intercept", "before returning action " + returningAction, pageFlow, originalFwd, request );  
+            
+            return null;
+        }
+    } 
+
+
+    public static class AfterInterceptor2 extends InterceptorBase implements ActionInterceptor
+    { 
+        public InterceptorForward doIntercept( HttpServletRequest request, HttpServletResponse response, 
+                                               PageFlowController pageFlow, InterceptorForward originalFwd,
+                                               String action )
+            throws Exception
+        {
+            trace( "intercept", "after action " + action, pageFlow, originalFwd, request );
+            
+            if ( action.equals( "interceptAfterAction" ) )
+            {
+                URI uri = new URI( "intercepted.jsp" );
+                trace( "intercept", "after action " + action + ": sending to " + uri, pageFlow, originalFwd, request );
+                return new InterceptorForward( uri );
+            }
+            
+            return null;
+        }
+    
+        public InterceptorForward doPostIntercept( HttpServletRequest request, HttpServletResponse response,
+                                                   PageFlowController pageFlow, InterceptorForward originalFwd,
+                                                   String returningAction ) throws Exception
+        {
+            trace( "post-intercept", "before returning action " + returningAction, pageFlow, originalFwd, request );
+            
+            return null;
+        }
+    } 
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward path="index.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "index.jsp",
+                name = "success") 
+        })
+    protected Forward interceptWithNestedFlow()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward path="nestedDone.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "nestedDone.jsp",
+                name = "success") 
+        })
+    protected Forward nestedDone()
+    {
+        return new Forward("success");
+    }
+
+      
+    /**
+     * @jpf:action
+     * @jpf:forward path="neverGetHere.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "neverGetHere.jsp",
+                name = "success") 
+        })
+    protected Forward interceptBeforeAction()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward path="neverGetHere.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "neverGetHere.jsp",
+                name = "success") 
+        })
+    protected Forward interceptAfterAction()
+    {
+        return new Forward("success");
+    }
+
+      }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <body>
+    
+    <h3>Action Interceptors</h3>
+
+    <netui-data:repeater dataSource="pageFlow.messages">
+        <netui-data:repeaterHeader>
+            Messages:
+            <ul>
+        </netui-data:repeaterHeader>
+        <netui-data:repeaterItem>
+            <li><netui:content value="${container.item}"/></li>
+        </netui-data:repeaterItem>
+    </netui-data:repeater>
+    
+    <br>
+    <br>
+    <netui:anchor action="interceptWithNestedFlow">interceptWithNestedFlow</netui:anchor>
+    <br>
+    <netui:anchor action="interceptBeforeAction">interceptBeforeAction</netui:anchor>
+    <br>
+    <netui:anchor action="interceptAfterAction">interceptAfterAction</netui:anchor>
+  </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/intercepted.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/intercepted.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <body>
+
+    Intercepted!
+    
+    <br>
+    <br>
+    <netui:anchor action="begin">start over</netui:anchor>
+
+  </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nested/NestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nested/NestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,128 @@
+package miniTests.interceptors.nested;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ *
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests.interceptors.nested/NestedController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:done.do">
+ *   <property value="380" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:done.do@">
+ *   <property value="236,270,270,304" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:miniTests.interceptors.nestedDone">
+ *   <property value="560" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#miniTests.interceptors.nestedDone#@action:done.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ * </pageflow-object>
+ * </view-properties>::
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests.interceptors.nested/NestedController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:done.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:done.do@'>",
+        "  <property value='236,270,270,304' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:miniTests.interceptors.nestedDone'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#miniTests.interceptors.nestedDone#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class NestedController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    protected Forward done()
+    {
+    	return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <body bgcolor="#ccffff">
+    <h3>Nested</h3>
+
+
+    <netui:anchor action="done">return, and raise this nested page flow's return-action</netui:anchor>
+    <br>
+    <netui:anchor action="done">
+        <netui:parameter name="returnToOriginalPage" value="true"/>
+        return, and go to originally-intended page
+    </netui:anchor>
+    
+    
+  </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nestedDone.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/nestedDone.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <body>
+
+    Returned from the nested page flow (action "nestedDone" raised).
+    <br>
+    <br>
+    <netui:anchor action="begin">back to start</netui:anchor>
+
+  </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/neverGetHere.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/interceptors/neverGetHere.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <body bgcolor="red">
+
+    Ack.  Should never get here.
+
+  </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycle/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycle/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Lifecycle</title>
+</head>
+<body>
+<h4>Lifecycle</h4>
+<p style="color:green">
+This test will create appends a value to a global variable stored in the globalApp for each lifecycle event.
+When you go to the results page, it will call an action in globalApp which will forward to the <b>results/Controller.jpf</b> which
+displays that global variable.
+</p>
+<netui:anchor action="postback">Postback</netui:anchor>
+<netui:anchor action="globalAction_results">Results</netui:anchor>
+<hr />
+<netui:content value="${pageFlow.lifecycle}"/>
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycle/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycle/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.lifecycle;
+
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/miniTests/lifecycle/Controller.jpf'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='action:postback.do'/>", 
+        "<pageflow-object id='page:Begin.jsp'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp'/>", 
+        "<pageflow-object id='action:/postback.do'/>", 
+        "<pageflow-object id='action:/globalAction_results.do'/>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:postback.do@'>", 
+        "  <property value='100,100,100,100' name='elbowsX'/>", 
+        "  <property value='164,270,270,376' name='elbowsY'/>", 
+        "  <property value='South_1' name='fromPort'/>", 
+        "  <property value='North_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:globalAction_results.do'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='120' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:globalAction_results.do@'>", 
+        "  <property value='136,160,160,185' name='elbowsX'/>", 
+        "  <property value='112,112,112,112' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    protected void onCreate() {
+        HttpSession session = getSession();
+        session.setAttribute("pageFlow",this);
+        
+        _lifecycle += "onCreate<br />";
+    }
+
+    protected void onDestroy(HttpSession session) {
+        session.removeAttribute("pageFlow");
+        
+        System.err.println("inside onDestroy [lifecycle]");
+        _lifecycle += "onDestroy<br />";
+        globalApp.setResults(_lifecycle);
+    }
+
+    protected transient global.Global globalApp;
+
+    String _lifecycle = "";
+    public String getLifecycle() {
+        return _lifecycle;
+    }
+
+    /**
+     * Callback that occurs before any action execution.
+     */ 
+    protected void beforeAction()
+    {
+	_lifecycle += "beforeAction<br />";
+    }
+    
+    /**
+     * Callback that occurs after any action execution.
+     */ 
+    protected void afterAction()
+    {
+	_lifecycle += "afterAction<br />";
+    }    
+
+    @Jpf.Action(
+        )
+    protected Forward begin(){
+	_lifecycle += "begin<br />";
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        )
+    protected Forward postback(){
+	_lifecycle += "postback<br />";
+        return new Forward("begin");
+    }
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycleExceptions/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycleExceptions/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Exceptions in Lifecycle Methods
+        </title>
+    </head>
+    <body>
+        <h3>Exceptions in Lifecycle Methods</h3>
+        
+        <netui:anchor action="throwInBeforeAction">throw in beforeAction()</netui:anchor><br>
+        <netui:anchor action="throwInAction">throw in an action</netui:anchor><br>
+        <netui:anchor action="throwInAfterAction">throw in afterAction()</netui:anchor><br>
+        <netui:anchor action="throwEverywhere">throw in the action and in afterAction()</netui:anchor><br>
+        <netui:anchor action="noThrow">don't throw anything</netui:anchor>
+        <br>
+        <br>
+        <hr>
+        History:
+        <ul>
+        <netui-data:repeater dataSource="pageFlow.history">
+            <netui-data:repeaterItem>
+                <li><netui:label value="${container.item.message}"/>
+                        threw a <netui:label value="${container.item.exceptionName}"/>
+                        (<netui:label value="${container.item.actionName}"/>)</li>
+            </netui-data:repeaterItem>
+        </netui-data:repeater>
+        </ul>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycleExceptions/lifecycleExceptionsController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/lifecycleExceptions/lifecycleExceptionsController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,467 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Wed Jul 30 15:18:57 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.lifecycleExceptions;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ * @jpf:controller
+ * @jpf:catch type="lifecycleExceptionsController.OnCreateException" method="handleIt" message="onCreate"
+ * @jpf:catch type="lifecycleExceptionsController.BeforeActionException" method="handleIt" message="beforeAction"
+ * @jpf:catch type="lifecycleExceptionsController.AfterActionException" method="handleIt" message="afterAction"
+ * @jpf:catch type="lifecycleExceptionsController.ActionMethodException" method="handleIt" message="action method"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests/lifecycleExceptions/lifecycleExceptionsController.jpf"/>
+ * <pageflow-object id="action:throwInBeforeAction.do">
+ *   <property value="260" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:throwInAfterAction.do">
+ *   <property value="540" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:throwInAction.do">
+ *   <property value="540" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:noThrow.do">
+ *   <property value="260" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:throwEverywhere.do">
+ *   <property value="400" name="x"/>
+ *   <property value="460" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="400" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwInBeforeAction.do@">
+ *   <property value="389,389,342,296" name="elbowsX"/>
+ *   <property value="324,372,372,372" name="elbowsY"/>
+ *   <property value="South_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:noThrow.do@">
+ *   <property value="364,330,330,296" name="elbowsX"/>
+ *   <property value="272,272,272,272" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwEverywhere.do@">
+ *   <property value="400,400,400,400" name="elbowsX"/>
+ *   <property value="324,370,370,416" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwInAction.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="272,272,272,272" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:throwInAfterAction.do@">
+ *   <property value="411,411,457,504" name="elbowsX"/>
+ *   <property value="324,372,372,372" name="elbowsY"/>
+ *   <property value="South_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="400" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:throwInBeforeAction.do@@">
+ *   <property value="140" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:throwInBeforeAction.do@">
+ *   <property value="224,200,200,176" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:throwInAfterAction.do@@">
+ *   <property value="660" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:throwInAfterAction.do@">
+ *   <property value="576,600,600,624" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:throwInAction.do@@">
+ *   <property value="660" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:throwInAction.do@">
+ *   <property value="576,600,600,624" name="elbowsX"/>
+ *   <property value="272,272,272,272" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:noThrow.do@@">
+ *   <property value="140" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:noThrow.do@">
+ *   <property value="224,200,200,176" name="elbowsX"/>
+ *   <property value="272,272,272,272" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:throwEverywhere.do@@">
+ *   <property value="400" name="x"/>
+ *   <property value="580" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:throwEverywhere.do@">
+ *   <property value="400,400,400,400" name="elbowsX"/>
+ *   <property value="504,520,520,536" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="400,400,400,400" name="elbowsX"/>
+ *   <property value="184,210,210,236" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = lifecycleExceptionsController.OnCreateException.class,
+            method = "handleIt",
+            message = "onCreate"),
+        @Jpf.Catch(
+            type = lifecycleExceptionsController.BeforeActionException.class,
+            method = "handleIt",
+            message = "beforeAction"),
+        @Jpf.Catch(
+            type = lifecycleExceptionsController.AfterActionException.class,
+            method = "handleIt",
+            message = "afterAction"),
+        @Jpf.Catch(
+            type = lifecycleExceptionsController.ActionMethodException.class,
+            method = "handleIt",
+            message = "action method") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/lifecycleExceptions/lifecycleExceptionsController.jpf'/>",
+        "<pageflow-object id='action:throwInBeforeAction.do'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:throwInAfterAction.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:throwInAction.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:noThrow.do'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:throwEverywhere.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='460' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwInBeforeAction.do@'>",
+        "  <property value='389,389,342,296' name='elbowsX'/>",
+        "  <property value='324,372,372,372' name='elbowsY'/>",
+        "  <property value='South_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:noThrow.do@'>",
+        "  <property value='364,330,330,296' name='elbowsX'/>",
+        "  <property value='272,272,272,272' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwEverywhere.do@'>",
+        "  <property value='400,400,400,400' name='elbowsX'/>",
+        "  <property value='324,370,370,416' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwInAction.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='272,272,272,272' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:throwInAfterAction.do@'>",
+        "  <property value='411,411,457,504' name='elbowsX'/>",
+        "  <property value='324,372,372,372' name='elbowsY'/>",
+        "  <property value='South_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:throwInBeforeAction.do@@'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:throwInBeforeAction.do@'>",
+        "  <property value='224,200,200,176' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:throwInAfterAction.do@@'>",
+        "  <property value='660' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:throwInAfterAction.do@'>",
+        "  <property value='576,600,600,624' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:throwInAction.do@@'>",
+        "  <property value='660' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:throwInAction.do@'>",
+        "  <property value='576,600,600,624' name='elbowsX'/>",
+        "  <property value='272,272,272,272' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:noThrow.do@@'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:noThrow.do@'>",
+        "  <property value='224,200,200,176' name='elbowsX'/>",
+        "  <property value='272,272,272,272' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:throwEverywhere.do@@'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='580' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:throwEverywhere.do@'>",
+        "  <property value='400,400,400,400' name='elbowsX'/>",
+        "  <property value='504,520,520,536' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='400,400,400,400' name='elbowsX'/>",
+        "  <property value='184,210,210,236' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class lifecycleExceptionsController extends PageFlowController
+{
+    public ArrayList history = new ArrayList();
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward throwInBeforeAction()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward throwInAfterAction()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward throwInAction()
+        throws Exception
+    {
+        throw new ActionMethodException();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward noThrow()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward throwEverywhere()
+        throws Exception
+    {
+        throw new ActionMethodException();
+    }
+
+    public static class HistoryItem implements Serializable
+    {
+        public HistoryItem( String an, Exception e, String msg )
+        {
+            actionName = an;
+            exception = e;
+            message = msg;
+        }
+        
+        public String getExceptionName()
+        {
+            return exception.getClass().getName();
+        }
+        
+        public String actionName;
+        public Exception exception;
+        public String message;
+    }
+    
+    public static class OnCreateException extends Exception
+    {
+    }
+    
+    public static class BeforeActionException extends Exception
+    {
+    }
+    
+    public static class AfterActionException extends Exception
+    {
+    }
+    
+    public static class ActionMethodException extends Exception
+    {
+    }
+    
+
+    protected void onCreate()
+        throws Exception
+    {
+        throw new OnCreateException();
+    }
+    
+    protected void beforeAction()
+        throws Exception
+    {
+        if ( getCurrentActionName().equals( "throwInBeforeAction" ) )
+        {
+            throw new BeforeActionException();
+        }
+    }
+    
+    protected void afterAction()
+        throws Exception
+    {
+        if ( getCurrentActionName().equals( "throwInAfterAction" )
+             || getCurrentActionName().equals( "throwEverywhere" ) )
+        {
+            throw new AfterActionException();
+        }
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+    
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward handleIt( Exception e, String actionName, String message, Object form )
+    {
+        history.add( new HistoryItem( actionName, e, message ) );
+        return new Forward( "index" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/linkNav/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/linkNav/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Link Submit</title>
+</head>
+<body>
+<netui:anchor action="/linkOne" >Link One</netui:anchor>
+<netui:anchor action="/linkTwo" >Link Two</netui:anchor>
+<br />
+Last Action: <netui:label value="${pageFlow.action}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/linkNav/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/linkNav/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.linkNav;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String _action;
+
+    public String getAction() {
+	return _action;
+    }
+    public void setAction(String action) {
+	_action = action;
+    }
+
+    public static class Form extends FormData {
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="linkOne" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "linkOne",
+                path = "Begin.jsp") 
+        })
+    public Forward linkOne(Form form)
+    {
+	_action = "linkOne";
+	return new Forward("linkOne");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="linkTwo" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "linkTwo",
+                path = "Begin.jsp") 
+        })
+    public Forward linkTwo(Form form)
+    {
+	_action = "linkTwo";
+	return new Forward("linkTwo");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_action = "begin";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>
+            ModuleConfigLocator
+        </title>
+    </head>
+    <body>
+        <h3>ModuleConfigLocator</h3>
+        
+        <i>moduleConfigLocator.Locator1 and moduleConfigLocator.Locator2 are registered in web.xml</i>
+        <br>
+        <br>
+        <a href="<%= request.getContextPath() %>/foo/begin.do">test Locator1</a>
+        <br>
+        <a href="<%= request.getContextPath() %>/bar/begin.do">test Locator2</a>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator1-foo.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator1-foo.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+    <form-beans>
+    </form-beans>
+    <global-forwards>
+    </global-forwards>
+    <action-mappings>
+        <action path="/begin" type="org.apache.struts.actions.ForwardAction" parameter="/miniTests/moduleConfigLocator/locator1.jsp"/>
+
+    </action-mappings>
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>
+            ModuleConfigLocator - Locator1
+        </title>
+    </head>
+    <body>
+        <h3>ModuleConfigLocator - Locator1</h3>
+        
+        <i>Got here through moduleConfigLocator.Locator1</i>
+        <br>
+        <br>
+        <a href="<%= request.getContextPath() %>/miniTests/moduleConfigLocator/index.jsp">go back</a>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator2-bar.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator2-bar.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+    <form-beans>
+    </form-beans>
+    <global-forwards>
+    </global-forwards>
+    <action-mappings>
+        <action path="/begin" type="org.apache.struts.actions.ForwardAction" parameter="/miniTests/moduleConfigLocator/locator2.jsp"/>
+    </action-mappings>
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/moduleConfigLocator/locator2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>
+            ModuleConfigLocator - Locator2
+        </title>
+    </head>
+    <body>
+        <h3>ModuleConfigLocator - Locator2</h3>
+        
+        <i>Got here through moduleConfigLocator.Locator2</i>
+        <br>
+        <br>
+        <a href="<%= request.getContextPath() %>/miniTests/moduleConfigLocator/index.jsp">go back</a>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multiForms/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multiForms/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<netui:form action="/buttonOne">
+<netui:textBox dataSource="actionForm.name" /><br />
+Input Value:<netui:label value="${actionForm.name}" /><br />
+<netui:button type="submit" action="buttonOne" >Button One</netui:button>
+<netui:button type="submit" action="buttonTwo" >Button Two</netui:button>
+</netui:form>
+<br />
+Last Action: <netui:label value="${pageFlow.action}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multiForms/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multiForms/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.multiForms;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String _action;
+
+    public String getAction() {
+	return _action;
+    }
+    public void setAction(String action) {
+	_action = action;
+    }
+
+    public static class Form extends FormData {
+	private String name;
+	public String getName() {
+	    return name;
+	}
+	public void setName(String n) {
+	    name = n;
+	}
+    }
+
+    public static class FormTwo extends FormData {
+	private String name;
+	public String getName() {
+	    return name;
+	}
+	public void setName(String n) {
+	    name = n;
+	}
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="buttonOne" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "buttonOne",
+                path = "Begin.jsp") 
+        })
+    public Forward buttonOne(Form form)
+    {
+	_action = "buttonOne";
+	return new Forward("buttonOne");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="buttonTwo" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "buttonTwo",
+                path = "Begin.jsp") 
+        })
+    public Forward buttonTwo(FormTwo form)
+    {
+	_action = "buttonTwo";
+	Form f = new Form();
+	f.setName(form.getName());
+	return new Forward("buttonTwo",f);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_action = "begin";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/MockPortal.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/MockPortal.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="mockportal.tld" prefix="mp" %>
+
+<html>
+<head>
+<title>Mock Portal (/miniTests/upload)</title>
+</head>
+
+<body>
+
+    <h3>Mock Portal (/miniTests/upload)</h3>
+    <mp:mockPortal>
+        <mp:mockPortlet portletID="multipart1" pageFlowURI="/miniTests/multipartRequest/multipartRequestController.jpf" />
+        <mp:mockPortlet portletID="multipart2" pageFlowURI="/miniTests/multipartRequest/multipartRequestController.jpf" />
+    </mp:mockPortal>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/input.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/input.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+    <!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+    <netui-template:template templatePage="/resources/jsp/template.jsp">
+        <netui-template:section name="bodySection">
+            <netui:form action="someAction" enctype="multipart/form-data">
+                <table>
+                    <tr valign="top">
+                        <td>
+                            FormProp:
+                        </td>
+                        <td>
+                            <netui:textBox dataSource="actionForm.formProp"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td>
+                            PfProp:
+                        </td>
+                        <td>
+                            <netui:textBox dataSource="pageFlow.pfProp"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td>
+                            FormFile:
+                        </td>
+                        <td>
+                            <netui:fileUpload dataSource="actionForm.formFile" readonly="false" size="60"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td>
+                            PfFile:
+                        </td>
+                        <td>
+                            <netui:fileUpload dataSource="pageFlow.pfFile" readonly="false" size="60"/>
+                        </td>
+                    </tr>
+                </table>
+                <br/>
+                &nbsp;
+                <netui:button value="submit"/>
+                <netui:button value="submit to non-form action" action="nonFormAction"/>
+                <netui:button value="execute another action" action="someOtherAction"/>
+            </netui:form>
+            
+            <netui:anchor action="reset">reset data</netui:anchor>
+            <br>
+            <netui-template:visible visibility="${pageFlow.scoped}" negate="true">
+                <netui:anchor href="MockPortal.jsp">try this in MockPortal</netui:anchor>
+            </netui-template:visible>
+            <netui-template:visible visibility="${pageFlow.scoped}">
+                <netui:anchor href="multipartRequestController.jpf">try this outside of MockPortal</netui:anchor>
+            </netui-template:visible>
+
+        </netui-template:section>
+    </netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/multipartRequestController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/multipartRequestController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,376 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri Aug 29 14:13:22 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.multipartRequest;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.struts.upload.FormFile;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/multipartRequest/multipartRequestController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="520" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:someAction.do#multipartRequest.multipartRequestController.SomeActionForm">
+ *   <property value="480" name="x"/>
+ *   <property value="400" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nonFormAction.do">
+ *   <property value="360" name="x"/>
+ *   <property value="540" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:reset.do">
+ *   <property value="200" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:someOtherAction.do">
+ *   <property value="140" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:input.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:output.jsp">
+ *   <property value="260" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:someOtherPage.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#input.jsp#@action:begin.do@">
+ *   <property value="484,380,380,276" name="elbowsX"/>
+ *   <property value="252,252,132,132" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#output.jsp#@action:someAction.do#multipartRequest.multipartRequestController.SomeActionForm@">
+ *   <property value="444,370,370,296" name="elbowsX"/>
+ *   <property value="392,392,432,432" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#output.jsp#@action:nonFormAction.do@">
+ *   <property value="324,310,310,296" name="elbowsX"/>
+ *   <property value="532,532,443,443" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#input.jsp#@action:reset.do@">
+ *   <property value="200,200,202,204" name="elbowsX"/>
+ *   <property value="104,132,132,132" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#someOtherPage.jsp#@action:someOtherAction.do@">
+ *   <property value="140,140,140,140" name="elbowsX"/>
+ *   <property value="304,310,310,316" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:multipartRequest.multipartRequestController.SomeActionForm#formProp#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:multipartRequest.multipartRequestController.SomeActionForm#formFile#org.apache.struts.upload.FormFile"/>
+ * <pageflow-object id="formbean:multipartRequest.multipartRequestController.SomeActionForm"/>
+ * <pageflow-object id="action-call:@page:input.jsp@#@action:someAction.do#multipartRequest.multipartRequestController.SomeActionForm@">
+ *   <property value="276,360,360,444" name="elbowsX"/>
+ *   <property value="132,132,392,392" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:someOtherPage.jsp@#@action:begin.do@">
+ *   <property value="176,330,330,484" name="elbowsX"/>
+ *   <property value="352,352,252,252" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:input.jsp@#@action:reset.do@">
+ *   <property value="240,240,238,236" name="elbowsX"/>
+ *   <property value="96,52,52,52" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:output.jsp@#@action:someAction.do#multipartRequest.multipartRequestController.SomeActionForm@">
+ *   <property value="296,370,370,444" name="elbowsX"/>
+ *   <property value="432,432,392,392" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:input.jsp@#@action:someOtherAction.do@">
+ *   <property value="204,190,190,176" name="elbowsX"/>
+ *   <property value="143,143,252,252" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:output.jsp@#@action:begin.do@">
+ *   <property value="296,390,390,484" name="elbowsX"/>
+ *   <property value="432,432,263,263" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/multipartRequest/multipartRequestController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:someAction.do#multipartRequest.multipartRequestController.SomeActionForm'>",
+        "  <property value='480' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nonFormAction.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='540' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:reset.do'>",
+        "  <property value='200' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:someOtherAction.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:input.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:output.jsp'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:someOtherPage.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#input.jsp#@action:begin.do@'>",
+        "  <property value='484,380,380,276' name='elbowsX'/>",
+        "  <property value='252,252,132,132' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#output.jsp#@action:someAction.do#multipartRequest.multipartRequestController.SomeActionForm@'>",
+        "  <property value='444,370,370,296' name='elbowsX'/>",
+        "  <property value='392,392,432,432' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#output.jsp#@action:nonFormAction.do@'>",
+        "  <property value='324,310,310,296' name='elbowsX'/>",
+        "  <property value='532,532,443,443' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#input.jsp#@action:reset.do@'>",
+        "  <property value='200,200,202,204' name='elbowsX'/>",
+        "  <property value='104,132,132,132' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#someOtherPage.jsp#@action:someOtherAction.do@'>",
+        "  <property value='140,140,140,140' name='elbowsX'/>",
+        "  <property value='304,310,310,316' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:multipartRequest.multipartRequestController.SomeActionForm#formProp#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:multipartRequest.multipartRequestController.SomeActionForm#formFile#org.apache.struts.upload.FormFile'/>",
+        "<pageflow-object id='formbean:multipartRequest.multipartRequestController.SomeActionForm'/>",
+        "<pageflow-object id='action-call:@page:input.jsp@#@action:someAction.do#multipartRequest.multipartRequestController.SomeActionForm@'>",
+        "  <property value='276,360,360,444' name='elbowsX'/>",
+        "  <property value='132,132,392,392' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:someOtherPage.jsp@#@action:begin.do@'>",
+        "  <property value='176,330,330,484' name='elbowsX'/>",
+        "  <property value='352,352,252,252' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:input.jsp@#@action:reset.do@'>",
+        "  <property value='240,240,238,236' name='elbowsX'/>",
+        "  <property value='96,52,52,52' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:output.jsp@#@action:someAction.do#multipartRequest.multipartRequestController.SomeActionForm@'>",
+        "  <property value='296,370,370,444' name='elbowsX'/>",
+        "  <property value='432,432,392,392' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:input.jsp@#@action:someOtherAction.do@'>",
+        "  <property value='204,190,190,176' name='elbowsX'/>",
+        "  <property value='143,143,252,252' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:output.jsp@#@action:begin.do@'>",
+        "  <property value='296,390,390,484' name='elbowsX'/>",
+        "  <property value='432,432,263,263' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class multipartRequestController extends PageFlowController
+{
+    public String pfProp;
+    public FormFile pfFile;
+
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="input.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "input.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="output.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "output.jsp") 
+        })
+    protected Forward someAction(SomeActionForm form)
+    {
+        return new Forward("success", form);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="output.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "output.jsp") 
+        })
+    protected Forward nonFormAction()
+    {
+        return new Forward("success", new SomeActionForm());
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="input.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "input.jsp") 
+        })
+    protected Forward reset()
+    {
+        pfFile = null;
+        pfProp = null;
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="someOtherPage.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "someOtherPage.jsp") 
+        })
+    protected Forward someOtherAction()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class SomeActionForm extends FormData
+    {
+        private String formProp;
+
+        private FormFile formFile;
+
+        public void setFormProp(String formProp)
+        {
+            this.formProp = formProp;
+        }
+
+        public String getFormProp()
+        {
+            return this.formProp;
+        }
+
+        public void setFormFile(FormFile formFile)
+        {
+            this.formFile = formFile;
+        }
+
+        public FormFile getFormFile()
+        {
+            return this.formFile;
+        }
+        
+        public String getFileContents()
+            throws Exception
+        {
+            return formFile != null ? new String( formFile.getFileData() ) : "";
+        } 
+    }
+    
+    public boolean getScoped()
+    {
+        return getRequest() instanceof ScopedRequest;
+    }
+    
+    public String getFileContents()
+        throws Exception
+    {
+        return pfFile != null ? new String( pfFile.getFileData() ) : "";
+    } 
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/output.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/output.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+    <!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+    <netui-template:template templatePage="/resources/jsp/template.jsp">
+        <netui-template:section name="bodySection">
+            <netui:form action="someAction">
+                <table>
+                    <tr valign="top">
+                        <td>
+                            FormProp:
+                        </td>
+                        <td>
+                            <netui:label value="${actionForm.formProp}"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td>
+                            PfProp:
+                        </td>
+                        <td>
+                            <netui:label value="${pageFlow.pfProp}"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td>
+                            FormFile:
+                        </td>
+                        <td>
+                            <netui:label value="${actionForm.fileContents}"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td>
+                            PfFile:
+                        </td>
+                        <td>
+                            <netui:label value="${pageFlow.fileContents}"/>
+                        </td>
+                    </tr>
+                </table>
+                <br/>
+            </netui:form>
+            
+            <br>
+            <netui:anchor action="begin">start over</netui:anchor>
+
+        </netui-template:section>
+    </netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/someOtherPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipartRequest/someOtherPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Multipart Requests - executed someOtherAction
+        </title>
+    </head>
+    <body>
+        <h3>
+           Multipart Requests - executed someOtherAction
+        </h3>
+        
+        <netui:anchor action="begin">go back</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipleForms/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipleForms/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<netui:form action="/formOne">
+<netui:textBox dataSource="actionForm.name" /><br />
+<netui:button type="submit" >Submit</netui:button>
+</netui:form>
+<hr />
+<netui:form action="/formTwo">
+<netui:textBox dataSource="actionForm.stuff" /><br />
+<netui:button type="submit" >Submit</netui:button>
+</netui:form>
+<br />
+Last Action: <netui:label value="${pageFlow.action}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipleForms/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/multipleForms/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,131 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.multipleForms;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String _action;
+    private FormOne f1;
+    private FormTwo f2;
+
+    public String getAction() {
+	return _action;
+    }
+    public void setAction(String action) {
+	_action = action;
+    }
+
+    public static class FormOne extends FormData {
+	private String name;
+	public String getName() {
+	    return name;
+	}
+	public void setName(String n) {
+	    name = n;
+	}
+    }
+
+    public static class FormTwo extends FormData {
+	private String stuff;
+	public String getStuff() {
+	    return stuff;
+	}
+	public void setStuff(String s) {
+	    stuff = s;
+	}
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                path = "Begin.jsp") 
+        })
+    public Forward formOne(FormOne form)
+    {
+	_action = "formOne";
+
+	f1.setName(form.getName());
+
+	Forward f = new Forward("return");
+	f.addOutputForm(f1);
+	f.addOutputForm(f2);
+
+	return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                path = "Begin.jsp") 
+        })
+    public Forward formTwo(FormTwo form)
+    {
+	_action = "formTwo";
+
+	f2.setStuff(form.getStuff());
+
+	Forward f = new Forward("return");
+	f.addOutputForm(f1);
+	f.addOutputForm(f2);
+	
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_action = "begin";
+	Forward f = new Forward("begin");
+	f1 = new FormOne();
+	f1.setName("Name from Begin");
+
+	f2 = new FormTwo();
+	f2.setStuff("Stuff from Begin");
+	
+	f.addOutputForm(f1);
+	f.addOutputForm(f2);
+	
+        return f;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Nested Form Return</title>
+</head>
+<body>
+<netui:anchor action="/nest1" >Nest One</netui:anchor><br />
+<netui:anchor action="/nest2" >Nest Two</netui:anchor>
+<br />
+<netui:form action="/done">
+Value <netui:textBox dataSource="actionForm.val"/></br>
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+Return Information: <netui:label value="${pageFlow.value}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.nestedFormReturn;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _value;
+
+    public String getValue() {
+	return _value;
+    }
+    public void setValue(String value) {
+	_value = value;
+    }
+
+    public static class Form extends FormData
+    {
+	String _val;
+	public String getVal() {
+	    return _val;
+	}
+	public void setVal(String val) {
+	    _val = val;
+	}
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nest1/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nest1/Controller.jpf") 
+        })
+    public Forward nest1()
+    {
+	return new Forward("nest");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nest2/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nest2/Controller.jpf") 
+        })
+    public Forward nest2()
+    {
+	return new Forward("nest");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward done(miniTests.nestedFormReturn.nest1.Controller.Form form)
+    {
+	_value = "Name: " + form.getLastName() + ", " + form.getFirstName();
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward done(miniTests.nestedFormReturn.nest2.Controller.Form form)
+    {
+	_value = "Type: " + form.getType();
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward done(Form form)
+    {
+	_value = "Value: " + form.getVal();
+	return new Forward("begin");
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest1/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest1/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Nest One</title>
+</head>
+<body>
+<h4>Nest One</h4>
+<netui:form action="/submit">
+First Name <netui:textBox dataSource="firstName"/></br>
+Last Name <netui:textBox dataSource="lastName"/></br>
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest1/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest1/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.nestedFormReturn.nest1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    public static class Form extends FormData
+    {
+	String _lastName;
+	String _firstName;
+
+	public String getLastName() {
+	    return _lastName;
+	}
+	public void setLastName(String lastName) {
+	    _lastName = lastName;
+	}
+
+	public String getFirstName() {
+	    return _firstName;
+	}
+	public void setFirstName(String firstName) {
+	    _firstName = firstName;
+	}
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="done" return-form-type="Form"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "done",
+                outputFormBeanType = Form.class) 
+        })
+    public Forward submit(Form form)
+    {
+	return new Forward("done",form);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest2/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest2/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Nest Two</title>
+</head>
+<body>
+<h4>Nest Two</h4>
+<netui:form action="/submit">
+Type <netui:textBox dataSource="type"/></br>
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest2/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestedFormReturn/nest2/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,74 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.nestedFormReturn.nest2;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    public static class Form extends FormData
+    {
+	String _type;
+	public String getType() {
+	    return _type;
+	}
+	public void setType(String type) {
+	    _type = type;
+	}
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="done" return-form-type="Form"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "done",
+                outputFormBeanType = Form.class) 
+        })
+    public Forward submit(Form form)
+    {
+	return new Forward("done",form);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<netui:anchor action="/nest" >Nest Page Flow</netui:anchor>
+<br />
+Last Action: <netui:label value="${pageFlow.action}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,104 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.nesting;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String _action;
+
+    public String getAction() {
+	return _action;
+    }
+    public void setAction(String action) {
+	_action = action;
+    }
+
+    public static class Form extends FormData {
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nested/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/Controller.jpf") 
+        })
+    public Forward nest()
+    {
+	_action = "buttonOne";
+	return new Forward("nest");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward returnToPage()
+    {
+	_action = "returnToPage";
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward returnToAction()
+    {
+	_action = "returnToAction";
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_action = "begin";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/nested/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/nested/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Nested </title>
+</head>
+<body>
+<netui:anchor action="/nestOne" >Nest Return to Page</netui:anchor><br />
+<netui:anchor action="/nestTwo" >Nest Return to Action</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/nested/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nesting/nested/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,77 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.nesting.nested;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="returnToPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnToPage") 
+        })
+    public Forward nestOne()
+    {
+	return new Forward("return");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="returnToAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnToAction") 
+        })
+    public Forward nestTwo()
+    {
+	return new Forward("return");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingRepeater/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingRepeater/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Nesting Repeater</title>
+</head>
+<body>
+<h4>Nesting Repeater</h4>
+<table><tr>
+<db:repeater dataSource="pageFlow.data">
+  <db:repeaterItem>
+    <tr>
+    <td><b><netui:label value="${container.item.name}"/></b></td>
+    <db:repeater dataSource="container.item.values">
+       <db:repeaterItem>
+         <td><netui:label value="${container.item}"/></td>
+       </db:repeaterItem>
+    </db:repeater>
+    <td><b><netui:label value="${container.item.end}"/></b></td>
+    </tr>
+  </db:repeaterItem>
+</db:repeater>
+</tr></table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingRepeater/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingRepeater/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,74 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.nestingRepeater;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    public static class Info implements java.io.Serializable {
+	String name;
+	int[] values;
+
+	public String getName() {
+	    return name;
+	}
+
+	public int[] getValues() {
+	    return values;
+	}
+
+	public String getEnd() {
+	    return "end";
+	}
+    }
+
+    Info[] _info;
+
+    public Info[] getData() {
+	return _info;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_info = new Info[2];
+	for (int i=0;i<_info.length;i++)
+	    _info[i] = new Info();
+	_info[0].name = "foo";
+	_info[0].values = new int[] {2,4,5};
+	_info[1].name = "bar";
+	_info[1].values = new int[] {12,14,15};
+
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<netui:anchor action="/nav">Navigate</netui:anchor><br />
+<netui:anchor action="/nestPageFlow">Nest Page Flow</netui:anchor><br />
+Count: <netui:label value="${pageFlow.visits}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.nestingScope;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private int _visit = 0;
+
+    public int getVisits() {
+	return _visit;
+    }
+    public void setVisits(int visit) {
+	_visit = visit;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="next" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "next",
+                path = "Begin.jsp") 
+        })
+    public Forward nav()
+    {
+	_visit++;
+	return new Forward("next");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="scope" path="/miniTests/nestingScope/scopeSub/Controller.jpf"
+
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "scope",
+                path = "/miniTests/nestingScope/scopeSub/Controller.jpf") 
+        })
+    public Forward nestPageFlow()
+    {
+	return new Forward("scope");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward returnFromSub()
+    {
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_visit++;
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/scopeSub/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/scopeSub/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Scope Sub</title>
+</head>
+<body>
+<h4>Scope Sub</h4>
+<netui:anchor action="/returnAction">Return</netui:anchor><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/scopeSub/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nestingScope/scopeSub/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.nestingScope.scopeSub;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="returnFromSub"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnFromSub") 
+        })
+    public Forward returnAction()
+    {
+	return new Forward("return");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nonNormalizedPath/NonNormalizedPathController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nonNormalizedPath/NonNormalizedPathController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+package miniTests.nonNormalizedPath;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class NonNormalizedPathController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="./index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "./index.jsp") 
+        })
+    protected Forward ok1()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../nonNormalizedPath/index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../nonNormalizedPath/index.jsp") 
+        })
+    protected Forward ok2()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../../../../../invalid.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../../../../../invalid.jsp") 
+        })
+    protected Forward bad1()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nonNormalizedPath/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/nonNormalizedPath/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Non-normalized Paths
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin">index.jsp</netui:anchor>
+        <br>
+        <netui:anchor action="ok1">./index.jsp</netui:anchor>
+        <br>
+        <netui:anchor action="ok2">../nonNormalizedPath/index.jsp</netui:anchor>
+        <br>
+        <netui:anchor action="bad1">../../index.jsp (bad)</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,196 @@
+package miniTests.overloadedActions;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+/**
+ * @jpf:forward name="page1" path="page1.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "page1",
+            path = "page1.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward( "page1" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward conflictsWithNonAction()
+    {
+        return new Forward( "page1" );
+    }
+
+    private void conflictsWithNonAction( String s )
+    {
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nested/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/Controller.jpf") 
+        })
+    public Forward nestReturnNoForm()
+    {
+        return new Forward( "nest" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nested/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/Controller.jpf") 
+        })
+    public Forward nestReturnForm1()
+    {
+        return new Forward( "nest", new Form1() );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nested/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/Controller.jpf") 
+        })
+    public Forward nestReturnForm2()
+    {
+        return new Forward( "nest", new Form2() );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nested/returnUnknownForm.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/returnUnknownForm.do") 
+        })
+    public Forward nestReturnUnknownForm()
+    {
+        return new Forward( "nest" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nested/returnNormalWithForm.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/returnNormalWithForm.do") 
+        })
+    public Forward nestReturnNormalWithForm()
+    {
+        return new Forward( "nest" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nested/returnNormalWithoutForm.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/returnNormalWithoutForm.do") 
+        })
+    public Forward nestReturnNormalWithoutForm()
+    {
+        return new Forward( "nest" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward overloaded( Form2 form )
+    {
+        getRequest().setAttribute( "message", "overloaded( Form2 )" );
+        return new Forward( "page1" );
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward overloaded()
+    {
+        getRequest().setAttribute( "message", "overloaded()" );
+        return new Forward( "page1" );
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward overloaded( Form1 form )
+    {
+        getRequest().setAttribute( "message", "overloaded( Form1 )" );
+        return new Forward( "page1" );
+    }
+
+    /**
+     * Note that we should get in here even though the nested pageflow returned
+     * an action without a form.  This is because in that case it's just like
+     * a page raising an action -- the form is inferred from the action.
+     *
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward normalReturnWithoutForm( Form2 form )
+    {
+        getRequest().setAttribute( "message", "normalReturnWithoutForm()" );
+        return new Forward( "page1" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward normalReturnWithForm( Form1 form )
+    {
+        getRequest().setAttribute( "message", "normalReturnWithForm( Form1 )" );
+        return new Forward( "page1" );
+    }
+
+
+    public static class Form1 extends FormData {}
+    public static class Form2 extends FormData {}
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/nested/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/nested/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+package miniTests.overloadedActions.nested;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import miniTests.overloadedActions.Controller.Form1;
+import miniTests.overloadedActions.Controller.Form2;
+
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    private miniTests.overloadedActions.Controller.Form2 _form2;
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="returnNoForm" return-action="overloaded"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "returnNoForm",
+                returnAction = "overloaded") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "returnNoForm" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="returnForm1" return-action="overloaded" return-form-type="Form1"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "returnForm1",
+                returnAction = "overloaded",
+                outputFormBeanType = Form1.class) 
+        })
+    public Forward begin( Form1 form )
+    {
+        return new Forward( "returnForm1" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="returnForm2" return-action="overloaded" return-form="_form2"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "returnForm2",
+                returnAction = "overloaded",
+                outputFormBean = "_form2") 
+        })
+    public Forward begin( Form2 form )
+    {
+        return new Forward( "returnForm2" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="returnUnknownForm" return-action="overloaded" return-form-type="UnknownForm"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "returnUnknownForm",
+                returnAction = "overloaded",
+                outputFormBeanType = UnknownForm.class) 
+        })
+    public Forward returnUnknownForm()
+    {
+        return new Forward( "returnUnknownForm" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="normalReturnWithForm" return-form-type="Form1"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "normalReturnWithForm",
+                outputFormBeanType = Form1.class) 
+        })
+    public Forward returnNormalWithForm()
+    {
+        return new Forward( "return" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="normalReturnWithoutForm"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "normalReturnWithoutForm") 
+        })
+    public Forward returnNormalWithoutForm()
+    {
+        return new Forward( "return" );
+    }
+
+    public static class UnknownForm extends FormData {}
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/page1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/overloadedActions/page1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+
+<html>
+<head>
+<title>getActions test</title>
+</head>
+<body bgcolor="white">
+
+<h3>getActions test</h3>
+
+<font color="Blue"><netui:label value="${requestScope.message}"/></font><br><br>
+
+Actions in this pageflow:
+<ul>
+<netui-data:repeater dataSource="pageFlow.actions">
+    <netui-data:repeaterItem>
+        <li><netui:label value="${container.item}"/>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+</ul>
+
+<br>
+<netui:anchor action="nestReturnNoForm">nest, and return to overloaded action with no form</netui:anchor><br>
+<netui:anchor action="nestReturnForm1">nest, and return to overloaded action with Form1</netui:anchor><br>
+<netui:anchor action="nestReturnForm2">nest, and return to overloaded action with Form2</netui:anchor><br>
+<netui:anchor action="nestReturnUnknownForm">nest, and return to overloaded action with unknown form</netui:anchor><br>
+<netui:anchor action="nestReturnNormalWithForm">nest, and return with a form</netui:anchor><br>
+<netui:anchor action="nestReturnNormalWithoutForm">nest, and return with no form</netui:anchor><br>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/padRepeater/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/padRepeater/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Padding Repeater</title>
+</head>
+<body>
+<h4>Padding Repeater</h4>
+<b>Repeater to Six</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad maxRepeat="6" minRepeat="6"><td width="100pt">&nbsp</td></db:pad>
+</db:repeater>
+<hr />
+<b>Max to three</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad maxRepeat="3"><td width="100pt">&nbsp</td></db:pad>
+</db:repeater>
+<hr />
+<b>Min to three</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad minRepeat="3"><td width="100pt">&nbsp</td></db:pad>
+</db:repeater>
+<hr />
+<b>Min to six</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad minRepeat="6"><td width="100pt">&nbsp</td></db:pad>
+</db:repeater>
+<hr />
+<b>Use the padText Attribute</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad minRepeat="6" padText='<td width="100pt">&nbsp;</td>' />
+</db:repeater>
+<hr />
+<b>Databind Min and Text</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad minRepeat="${pageFlow.min}" padText="${pageFlow.text}" />
+</db:repeater>
+<hr />
+<b>Databind Max and Text</b>
+<db:repeater dataSource="pageFlow.strings">
+  <db:repeaterHeader><table border="1" cellpadding="0" cellspacing="0"><tr></db:repeaterHeader>
+  <db:repeaterFooter></tr></table></db:repeaterFooter>
+  <db:repeaterItem><td width="100pt"><netui:label value="${container.item}"/></td>
+     </db:repeaterItem>
+  <db:pad maxRepeat="${pageFlow.max}" padText="${pageFlow.text}" />
+</db:repeater>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/padRepeater/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/padRepeater/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.padRepeater;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _strings = {"String 1", "String 2", "String 3", "String 4"};
+    public String[] getStrings() {
+	return _strings;
+    }
+    public void setStrings(String[] strings) {
+	_strings = strings;
+    }
+
+    public int getMax() {
+        return 3;
+    }
+
+    public int getMin() {
+        return 6;
+    }
+
+    public String getText() {
+        return "<td width=\"100pt\">missing</td>";
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/another/anotherController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/another/anotherController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Jul 29 12:14:18 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.pageFlowUtils.another;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <view-properties>
+
+ *   <pageflow-object id="action:begin.do">
+
+ *     <property value="80" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="page:index.jsp">
+
+ *     <property value="240" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<view-properties>",
+        "",
+        "  <pageflow-object id='action:begin.do'>",
+        "",
+        "    <property value='80' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='page:index.jsp'>",
+        "",
+        "    <property value='240' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "</view-properties>"
+    })
+public class anotherController extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/another/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/another/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            New Web Application Page
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,129 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@page import="org.apache.beehive.netui.pageflow.PageFlowController"%>
+<%@page import="org.apache.beehive.netui.pageflow.PageFlowUtils"%>
+<%@page import="org.apache.beehive.netui.util.FileUtils"%>
+<%@page import="miniTests.pageFlowUtils.pageFlowUtilsController.TestForm"%>
+<%@page import="org.apache.struts.action.ActionForm"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            PageFlowUtils
+        </title>
+    </head>
+    <body>
+        <h3>PageFlowUtils</h3>
+        
+        <% PageFlowController curJpf = PageFlowUtils.getCurrentPageFlow( request ); %>
+        <% ServletContext cxt = pageContext.getServletContext(); %>
+        
+        
+        <code>getCurrentPageFlow( request )</code>:
+            <%= curJpf.getClass().getName() %><br>
+
+        <code>getModulePath( request )</code>:
+            <%= PageFlowUtils.getModulePath( request ) %><br>
+
+        <code>getModulePath( request, "/coreWeb/foo/bar/baz.jpf" )</code>:
+            <%= PageFlowUtils.getModulePath( request, "/coreWeb/foo/bar/baz.jpf" ) %><br>
+
+        <code>getModulePathForRelativeURI( request, "/foo/bar/baz.jpf" )</code>:
+            <%= PageFlowUtils.getModulePath( request, "/foo/bar/baz.jpf" ) %><br>
+            
+        <code>getRelativeURI( request, curJPF )</code>:
+            <%= PageFlowUtils.getRelativeURI( request, curJpf ) %><br>
+            
+        <code>getRelativeURI( request, "/coreWeb/foo/bar/baz.jsp", curJPF )</code>:
+            <%= PageFlowUtils.getRelativeURI( request, "/coreWeb/foo/bar/baz.jsp", curJpf ) %><br>
+            
+        <code>getRelativeURI( request, "/coreWeb/miniTests/pageFlowUtils/foo.jsp", curJPF )</code>:
+            <%= PageFlowUtils.getRelativeURI( request, "/coreWeb/miniTests/pageFlowUtils/foo.jsp", curJpf ) %><br>
+            
+        <code>getBeginActionURI( "/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf" )</code>:
+            <%= PageFlowUtils.getBeginActionURI( "/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf" ) %><br>
+
+        <code>ensureCurrentPageFlow( request, response )</code>:
+            <%= PageFlowUtils.ensureCurrentPageFlow( request, response ).getClass().getName() %><br>
+
+        <code>ensureCurrentPageFlow( request, response, servletContext )</code>:
+            <%= PageFlowUtils.ensureCurrentPageFlow( request, response, cxt ).getClass().getName() %><br>
+
+        <code>getCurrentPageFlow( request )</code>:
+            <%= PageFlowUtils.getCurrentPageFlow( request ).getClass().getName() %><br>
+
+        <code>getCurrentActionResolver( request )</code>:
+            <%= PageFlowUtils.getCurrentActionResolver( request ).getClass().getName() %><br>
+
+        <code>ensureGlobalApp( request, response )</code>:
+            <%= PageFlowUtils.ensureGlobalApp( request, response ).getClass().getName() %><br>
+
+        <code>ensureGlobalApp( request, response, cxt )</code>:
+            <%= PageFlowUtils.ensureGlobalApp( request, response, cxt ).getClass().getName() %><br>
+
+        <code>getGlobalApp( request )</code>:
+            <%= PageFlowUtils.getGlobalApp( request ).getClass().getName() %><br>
+
+        <code>getFormBeanName( new TestForm(), request )</code>:
+            <%= PageFlowUtils.getFormBeanName( new TestForm(), request ) %><br>
+
+        <code>getFormBeanName( TestForm.class, request )</code>:
+            <%= PageFlowUtils.getFormBeanName( TestForm.class, request ) %><br>
+
+        <code>getFormBeanName( ActionForm.class, request )</code>:
+            <%= PageFlowUtils.getFormBeanName( ActionForm.class, request ) %><br>
+
+        <code>getJpfClassName( "/foo/bar/barController.jpf" )</code>:
+            <%= PageFlowUtils.getJpfClassName( "/foo/bar/barController.jpf" ) %><br>
+
+        <code>getPageFlowURI( "foo.bar.barController" )</code>:
+            <%= PageFlowUtils.getPageFlowURI( "foo.bar.barController" ) %><br>
+
+        <code>getModuleConfPath( "/foo/bar" )</code>:
+            <%= PageFlowUtils.getModuleConfPath( "/foo/bar" ) %><br>
+
+        <code>getModuleConfPath( "/" )</code>:
+            <%= PageFlowUtils.getModuleConfPath( "/" ) %><br>
+
+        <code>getModuleConfPath( "" )</code>:
+            <%= PageFlowUtils.getModuleConfPath( "" ) %><br>
+
+        <code>getActionURI( request )</code>:
+            <%= PageFlowUtils.getActionURI( request ) %><br>
+
+        <code>getGlobalAppConfig( servletContext ).getPrefix()</code>:
+            <%= PageFlowUtils.getGlobalAppConfig( cxt ).getPrefix() %><br>
+
+        <code>ensureModuleConfig( "/miniTests/pageFlowUtils/another", request, servletContext ).getPrefix()</code>:
+            <%= PageFlowUtils.ensureModuleConfig( "/miniTests/pageFlowUtils/another", request, cxt ).getPrefix() %><br>
+
+        <code>getModuleConfig( "/miniTests/pageFlowUtils/another", servletContext )</code>:
+            <%= PageFlowUtils.getModuleConfig( "/miniTests/pageFlowUtils/another", cxt ).getClass().getName() %><br>
+
+        <code>isAbsoluteURI( "foo" )</code>:
+            <%= FileUtils.isAbsoluteURI( "foo" ) %><br>
+
+        <code>isAbsoluteURI( "/foo" )</code>:
+            <%= FileUtils.isAbsoluteURI( "/foo" ) %><br>
+
+        <code>isAbsoluteURI( "http://www.foo.com" )</code>:
+            <%= FileUtils.isAbsoluteURI( "http://www.foo.com" ) %><br>
+
+        <code>getFileExtension( "foo.txt" )</code>:
+            <%= FileUtils.getFileExtension( "foo.txt" ) %><br>
+
+        <code>getFileExtension( "foo" )</code>:
+            <%= FileUtils.getFileExtension( "foo" ) %><br>
+
+        <br>
+        <br>
+
+        <netui:anchor action="goNested">go to nested/nestedController.jpf</netui:anchor>
+        <br>
+        <netui:anchor action="security">tests of isSecureResource()</netui:anchor>
+        <br>
+        <netui:anchor action="validation">tests of addValidationError()</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@page import="org.apache.beehive.netui.pageflow.PageFlowUtils"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Nested (PageFlowUtils Tests)
+        </title>
+    </head>
+    <body>
+        <h3>Nested (PageFlowUtils Tests)</h3>
+        
+        
+        <code>getPageFlowStack( request )</code>:
+            <%= PageFlowUtils.getPageFlowStack( request ).getClass().getName() %><br>
+
+        <code>getNestingPageFlow( request )</code>:
+            <%= PageFlowUtils.getNestingPageFlow( request ).getClass().getName() %><br>
+
+        <br>
+        <br>
+        <netui:anchor action="done">
+            Exit nested
+        </netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/nested/nestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/nested/nestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,170 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Jul 29 10:19:24 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.pageFlowUtils.nested;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <view-properties>
+
+ *   <pageflow-object id="action:begin.do">
+
+ *     <property value="80" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="page:index.jsp">
+
+ *     <property value="240" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="action:done.do">
+
+ *     <property value="400" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="exit:nestedDone">
+
+ *     <property value="560" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="forward:return-action#done#nestedDone#@action:done.do@">
+
+ *     <property value="East_1" name="fromPort"/>
+
+ *     <property value="West_1" name="toPort"/>
+
+ *     <property value="done" name="label"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="action-call:@page:index.jsp@#@action:done.do@">
+
+ *     <property value="East_1" name="fromPort"/>
+
+ *     <property value="West_1" name="toPort"/>
+
+ *   </pageflow-object>
+
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<view-properties>",
+        "",
+        "  <pageflow-object id='action:begin.do'>",
+        "",
+        "    <property value='80' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='page:index.jsp'>",
+        "",
+        "    <property value='240' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='action:done.do'>",
+        "",
+        "    <property value='400' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='exit:nestedDone'>",
+        "",
+        "    <property value='560' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='forward:return-action#done#nestedDone#@action:done.do@'>",
+        "",
+        "    <property value='East_1' name='fromPort'/>",
+        "",
+        "    <property value='West_1' name='toPort'/>",
+        "",
+        "    <property value='done' name='label'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='action-call:@page:index.jsp@#@action:done.do@'>",
+        "",
+        "    <property value='East_1' name='fromPort'/>",
+        "",
+        "    <property value='West_1' name='toPort'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "</view-properties>"
+    })
+public class nestedController extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward done()
+    {
+        return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,336 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Jul 29 10:01:42 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.pageFlowUtils;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources resources="pageFlowUtils.ValidationMessages" 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests/pageFlowUtils/pageFlowUtilsController.jpf"/>
+ * <pageflow-object id="action:security.do">
+ *   <property value="300" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="140" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="440" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="440" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:security.jsp@#@action:begin.do@">
+ *   <property value="140,140,140,140" name="elbowsX"/>
+ *   <property value="144,160,160,176" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:security.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:security.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="176,160,160,144" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:goNested.do@">
+ *   <property value="336,370,370,404" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/miniTests/pageFlowUtils/nested/nestedController.jpf@#@action:nestedDone.do@">
+ *   <property value="544,510,510,476" name="elbowsX"/>
+ *   <property value="223,223,332,332" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/miniTests/pageFlowUtils/nested/nestedController.jpf">
+ *   <property value="580" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#security.jsp#@action:security.do@">
+ *   <property value="264,220,220,176" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="176,220,220,264" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/miniTests/pageFlowUtils/nested/nestedController.jpf#@action:goNested.do@">
+ *   <property value="476,510,510,544" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:nestedDone.do@">
+ *   <property value="404,370,370,336" name="elbowsX"/>
+ *   <property value="332,332,223,223" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:miniTests.pageFlowUtils.pageFlowUtilsController.TestForm"/>
+ * <pageflow-object id="page:validation.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:validation.do">
+ *   <property value="300" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:validation.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="264,280,280,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#validation.jsp#@action:validation.do@">
+ *   <property value="264,220,220,176" name="elbowsX"/>
+ *   <property value="332,332,332,332" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:validation.jsp@#@action:begin.do@">
+ *   <property value="140,140,140,140" name="elbowsX"/>
+ *   <property value="296,280,280,264" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "pageFlowUtils.ValidationMessages") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/pageFlowUtils/pageFlowUtilsController.jpf'/>",
+        "<pageflow-object id='action:security.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:security.jsp@#@action:begin.do@'>",
+        "  <property value='140,140,140,140' name='elbowsX'/>",
+        "  <property value='144,160,160,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:security.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:security.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='176,160,160,144' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goNested.do@'>",
+        "  <property value='336,370,370,404' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/miniTests/pageFlowUtils/nested/nestedController.jpf@#@action:nestedDone.do@'>",
+        "  <property value='544,510,510,476' name='elbowsX'/>",
+        "  <property value='223,223,332,332' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/miniTests/pageFlowUtils/nested/nestedController.jpf'>",
+        "  <property value='580' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#security.jsp#@action:security.do@'>",
+        "  <property value='264,220,220,176' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='176,220,220,264' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/miniTests/pageFlowUtils/nested/nestedController.jpf#@action:goNested.do@'>",
+        "  <property value='476,510,510,544' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:nestedDone.do@'>",
+        "  <property value='404,370,370,336' name='elbowsX'/>",
+        "  <property value='332,332,223,223' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:miniTests.pageFlowUtils.pageFlowUtilsController.TestForm'/>",
+        "<pageflow-object id='page:validation.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:validation.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:validation.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='264,280,280,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#validation.jsp#@action:validation.do@'>",
+        "  <property value='264,220,220,176' name='elbowsX'/>",
+        "  <property value='332,332,332,332' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:validation.jsp@#@action:begin.do@'>",
+        "  <property value='140,140,140,140' name='elbowsX'/>",
+        "  <property value='296,280,280,264' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class pageFlowUtilsController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="security.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "security.jsp") 
+        })
+    protected Forward security()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="validation.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "validation.jsp") 
+        })
+    protected Forward validation()
+    {
+        PageFlowUtils.addValidationError( "a", "msg1", getRequest() );
+        PageFlowUtils.addValidationError( "b", "msg2", "arg1", getRequest() );
+        Object[] args = new Object[]{ "arg1", "arg2", "arg3" };
+        PageFlowUtils.addValidationError( "c", "msg3", args, getRequest() );
+        return new Forward("success");
+    }
+
+    public static class TestForm extends FormData
+    {
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/pageFlowUtils/nested/nestedController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/pageFlowUtils/nested/nestedController.jpf") 
+        })
+    protected Forward goNested()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward nestedDone()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/security.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/security.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@page import="org.apache.beehive.netui.pageflow.PageFlowUtils"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            PageFlowUtils - isSecureResource
+        </title>
+    </head>
+    <body>
+        <% ServletContext servletContext = pageContext.getServletContext(); %>
+        
+        <code>isSecureResource( "/miniTests/pageFlowUtils/secure/foo.jsp", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/secure/foo.jsp", servletContext ) %><br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/secureFoo.do", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/secureFoo.do", servletContext ) %><br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsSecure", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsSecure", servletContext ) %><br>
+        
+        <br>
+        
+        <code>isSecureResource( "/miniTests/pageFlowUtils/unsecure/foo.jsp", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/unsecure/foo.jsp", servletContext ) %><br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/unsecureFoo.do", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/unsecureFoo.do", servletContext ) %><br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsUnsecure", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsUnsecure", servletContext ) %><br>
+        
+        <br>
+        
+        <code>isSecureResource( "/miniTests/pageFlowUtils/nothing/foo.jsp", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/nothing/foo.jsp", servletContext ) %><br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/nothingFoo.do", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/nothingFoo.do", servletContext ) %><br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsNothing", servletContext )</code>:
+            <%= PageFlowUtils.isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsNothing", servletContext ) %><br>
+        
+        
+                
+        <br>
+        <br>
+        <netui:anchor action="begin">go back</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/validation.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageFlowUtils/validation.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            PageFlowUtils - validation errors
+        </title>
+    </head>
+    <body>
+        <h3>PageFlowUtils - validation errors</h3>
+        
+        <code>&lt;netui:error&gt</code>:
+        <blockquote>
+            <netui:error value="a"/>
+            <br>
+            <netui:error value="b"/>
+            <br>
+            <netui:error value="c"/>
+            <br>
+        </blockquote>
+
+        <code>&lt;netui:errors&gt</code>:
+        <blockquote>
+            <netui:errors/>
+        </blockquote>
+        
+                       
+        <br>
+        <br>
+        <netui:anchor action="begin">go back</netui:anchor>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeOne/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeOne/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<netui:anchor action="/nav">Navigate</netui:anchor><br />
+<netui:anchor action="/changePageFlow">Change Page Flow</netui:anchor><br />
+Count: <netui:label value="${pageFlow.visits}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeOne/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeOne/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.pageScope.scopeOne;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private int _visit = 0;
+
+    public int getVisits() {
+	return _visit;
+    }
+    public void setVisits(int visit) {
+	_visit = visit;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="next" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "next",
+                path = "Begin.jsp") 
+        })
+    public Forward nav()
+    {
+	_visit++;
+	return new Forward("next");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="scope" path="/miniTests/pageScope/scopeTwo/Controller.jpf"
+
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "scope",
+                path = "/miniTests/pageScope/scopeTwo/Controller.jpf") 
+        })
+    public Forward changePageFlow()
+    {
+	_visit++;
+	return new Forward("scope");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_visit++;
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeTwo/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeTwo/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Scope Two</title>
+</head>
+<body>
+<h4>Scope Two</h4>
+<netui:anchor action="/nav">Navigate</netui:anchor><br />
+<netui:anchor action="/changePageFlow">Change Page Flow</netui:anchor><br />
+Count: <netui:label value="${pageFlow.visits}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeTwo/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/pageScope/scopeTwo/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,101 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.pageScope.scopeTwo;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private int _visit = 0;
+
+    public int getVisits() {
+	return _visit;
+    }
+    public void setVisits(int visit) {
+	_visit = visit;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="next" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "next",
+                path = "Begin.jsp") 
+        })
+    public Forward nav()
+    {
+	_visit++;
+	return new Forward("next");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="scope" path="/miniTests/pageScope/scopeOne/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "scope",
+                path = "/miniTests/pageScope/scopeOne/Controller.jpf") 
+        })
+    public Forward changePageFlow()
+    {
+	_visit++;
+	return new Forward("scope");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="back" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "back",
+                path = "Begin.jsp") 
+        })
+    public Forward back()
+    {
+	_visit++;
+	return new Forward("back");
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_visit++;
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Readonly Actions
+        </title>
+    </head>
+    <body>
+        <h3>Readonly Actions</h3>
+        
+        <netui:anchor action="readonlyAction">readonly action</netui:anchor>
+        <br>
+        <netui:anchor action="nonReadonlyAction">non-readonly action</netui:anchor>
+        <br>
+        <netui:anchor action="readonlyExceptionHandler">readonly exception-handler</netui:anchor>
+        <br>
+        <netui:anchor action="nonReadonlyExceptionHandler">non-readonly exception-handler</netui:anchor>
+        <br>
+        <netui:anchor action="goNested">see a fully-readonly page flow</netui:anchor>
+        <br>
+        <hr>
+        History:
+        <ul>
+        <netui-data:repeater dataSource="pageFlow.history">
+            <netui-data:repeaterItem>
+                <li><netui:label value="${container.item}"/></li>
+            </netui-data:repeaterItem>
+        </netui-data:repeater>
+        </ul>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Fully-Readonly Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Fully-Readonly Page Flow</h3>
+        
+        <i>This page flow will blow up if ensureFailover is ever called.</i>
+        <br>
+        <br>
+        <netui:anchor action="someAction">some action</netui:anchor>
+        <br>
+        <br>
+        
+        <netui:anchor action="done">
+            Exit nested
+        </netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/nested/nestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/nested/nestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,198 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Jul 29 19:13:46 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.readonlyAction.nested;
+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;
+
+/**
+ * @jpf:controller nested="true" read-only="true"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests/readonlyAction/nested/nestedController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:done.do">
+ *   <property value="400" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:done.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:nestedDone">
+ *   <property value="560" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#nestedDone#@action:done.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:someAction.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:someAction.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="144,170,170,196" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:someAction.do@@">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:someAction.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    nested = true,
+    readOnly = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/readonlyAction/nested/nestedController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:done.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:nestedDone'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#nestedDone#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:someAction.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:someAction.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,170,170,196' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:someAction.do@@'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:someAction.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class nestedController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward done()
+    {
+        return new Forward( "done" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward someAction()
+    {
+        return new Forward("success");
+    }
+    
+    public void ensureFailover( HttpServletRequest request )
+    {
+        throw new RuntimeException( "oops -- ensureFailover was called" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/readonlyActionController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/readonlyAction/readonlyActionController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,414 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Jul 29 19:03:54 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.readonlyAction;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @jpf:controller read-only="false"
+ * @jpf:catch type="readonlyActionController.TestExceptionRO" method="handleExceptionRO"
+ * @jpf:catch type="readonlyActionController.TestException" method="handleException"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests/readonlyAction/readonlyActionController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:readonlyAction.do">
+ *   <property value="300" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nonReadonlyAction.do">
+ *   <property value="460" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="300" name="x"/>
+ *   <property value="320" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="100" name="x"/>
+ *   <property value="320" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:readonlyAction.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="156,140,140,124" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:nonReadonlyAction.do@">
+ *   <property value="336,380,380,424" name="elbowsX"/>
+ *   <property value="181,181,72,72" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:goNested.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="244,260,260,276" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="136,200,200,264" name="elbowsX"/>
+ *   <property value="192,192,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:readonlyAction.do@">
+ *   <property value="289,289,289,289" name="elbowsX"/>
+ *   <property value="124,140,140,156" name="elbowsY"/>
+ *   <property value="South_0" name="fromPort"/>
+ *   <property value="North_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:nonReadonlyAction.do@">
+ *   <property value="460,460,398,336" name="elbowsX"/>
+ *   <property value="124,192,192,192" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/miniTests/readonlyAction/nested/nestedController.jpf@#@action:nestedDone.do@">
+ *   <property value="264,200,200,136" name="elbowsX"/>
+ *   <property value="452,452,312,312" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/miniTests/readonlyAction/nested/nestedController.jpf">
+ *   <property value="300" name="x"/>
+ *   <property value="460" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/miniTests/readonlyAction/nested/nestedController.jpf#@action:goNested.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="364,390,390,416" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:nestedDone.do@">
+ *   <property value="136,200,200,264" name="elbowsX"/>
+ *   <property value="301,301,203,203" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:readonlyExceptionHandler.do">
+ *   <property value="620" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nonReadonlyExceptionHandler.do">
+ *   <property value="520" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:readonlyExceptionHandler.do@">
+ *   <property value="336,460,460,584" name="elbowsX"/>
+ *   <property value="203,203,272,272" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:nonReadonlyExceptionHandler.do@">
+ *   <property value="311,311,520,520" name="elbowsX"/>
+ *   <property value="244,290,290,336" name="elbowsY"/>
+ *   <property value="South_2" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    readOnly = false,
+    catches = {
+        @Jpf.Catch(
+            type = readonlyActionController.TestExceptionRO.class,
+            method = "handleExceptionRO"),
+        @Jpf.Catch(
+            type = readonlyActionController.TestException.class,
+            method = "handleException") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/readonlyAction/readonlyActionController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:readonlyAction.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nonReadonlyAction.do'>",
+        "  <property value='460' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='320' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='320' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:readonlyAction.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='156,140,140,124' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:nonReadonlyAction.do@'>",
+        "  <property value='336,380,380,424' name='elbowsX'/>",
+        "  <property value='181,181,72,72' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goNested.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='244,260,260,276' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='136,200,200,264' name='elbowsX'/>",
+        "  <property value='192,192,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:readonlyAction.do@'>",
+        "  <property value='289,289,289,289' name='elbowsX'/>",
+        "  <property value='124,140,140,156' name='elbowsY'/>",
+        "  <property value='South_0' name='fromPort'/>",
+        "  <property value='North_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:nonReadonlyAction.do@'>",
+        "  <property value='460,460,398,336' name='elbowsX'/>",
+        "  <property value='124,192,192,192' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/miniTests/readonlyAction/nested/nestedController.jpf@#@action:nestedDone.do@'>",
+        "  <property value='264,200,200,136' name='elbowsX'/>",
+        "  <property value='452,452,312,312' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/miniTests/readonlyAction/nested/nestedController.jpf'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='460' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/miniTests/readonlyAction/nested/nestedController.jpf#@action:goNested.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='364,390,390,416' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:nestedDone.do@'>",
+        "  <property value='136,200,200,264' name='elbowsX'/>",
+        "  <property value='301,301,203,203' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:readonlyExceptionHandler.do'>",
+        "  <property value='620' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nonReadonlyExceptionHandler.do'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:readonlyExceptionHandler.do@'>",
+        "  <property value='336,460,460,584' name='elbowsX'/>",
+        "  <property value='203,203,272,272' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:nonReadonlyExceptionHandler.do@'>",
+        "  <property value='311,311,520,520' name='elbowsX'/>",
+        "  <property value='244,290,290,336' name='elbowsY'/>",
+        "  <property value='South_2' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class readonlyActionController extends PageFlowController
+{
+    public ArrayList history = new ArrayList();
+    
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action read-only="true"
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        readOnly = true,
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward readonlyAction()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward nonReadonlyAction()
+    {
+        return new Forward("success");
+    }
+    
+    public void ensureFailover( HttpServletRequest request )
+    {
+        String exHandlerName = ( String ) request.getAttribute( "exHandlerName" );
+        String name = ( exHandlerName != null ? exHandlerName : getCurrentActionName() );
+        history.add( "ensureFailover called from " + name );
+        super.ensureFailover( request );
+    }
+    
+    public void beforeAction()
+    {
+        history.add( "calling action " + getCurrentActionName() );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/readonlyAction/nested/nestedController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/readonlyAction/nested/nestedController.jpf") 
+        })
+    protected Forward goNested()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward nestedDone()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action read-only="true"
+     */
+    @Jpf.Action(
+        readOnly = true)
+    protected Forward readonlyExceptionHandler()
+        throws Exception
+    {
+        throw new TestExceptionRO();
+    }
+
+    /**
+     * @jpf:action read-only="true"
+     */
+    @Jpf.Action(
+        readOnly = true)
+    protected Forward nonReadonlyExceptionHandler()
+        throws Exception
+    {
+        throw new TestException();
+    }
+    
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="current" return-to="currentPage"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "current1",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward handleException( TestException e, String actionName, String message, Object form )
+    {
+        getRequest().setAttribute( "exHandlerName", "exception-handler handleException" );
+        return new Forward( "current1" );
+    }
+    
+    /**
+     * @jpf:exception-handler read-only="true"
+     * @jpf:forward name="current" return-to="currentPage"
+     */
+    @Jpf.ExceptionHandler(
+        readOnly = true,
+        forwards = {
+            @Jpf.Forward(
+                name = "current2",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward handleExceptionRO( TestExceptionRO e, String actionName, String message, Object form )
+    {
+        getRequest().setAttribute( "exHandlerName", "exception-handler handleExceptionRO" );
+        return new Forward( "current2" );
+    }
+    
+    public static class TestException extends Exception
+    {
+    }
+
+    public static class TestExceptionRO extends Exception
+    {
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/ReturnToExceptionsController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/ReturnToExceptionsController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,268 @@
+package miniTests.returnToExceptions;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+/**
+ * @jpf:controller
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests/returnToExceptions/ReturnToExceptionsController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:doReturnToPreviousPage.do">
+ *   <property value="80" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:doReturnToCurrentPage.do">
+ *   <property value="240" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:doReturnToPreviousAction.do">
+ *   <property value="400" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:delegateDone.do">
+ *   <property value="540" name="x"/>
+ *   <property value="400" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:doReturnToCurrentPage.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="144,180,180,216" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:doReturnToPreviousAction.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="103,103,252,252" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:doReturnToPreviousPage.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="103,103,252,252" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/miniTests/returnToExceptions/delegate/DelegateController.jpf">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/miniTests/returnToExceptions/delegate/DelegateController.jpf?returnToPreviousPage#@action:doReturnToPreviousPage.do@">
+ *   <property value="80,80,60,60" name="elbowsX"/>
+ *   <property value="216,150,150,84" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:delegateDone.do@">
+ *   <property value="540,540,408,276" name="elbowsX"/>
+ *   <property value="356,92,92,92" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/miniTests/returnToExceptions/delegate/DelegateController.jpf?returnToPreviousAction#@action:doReturnToPreviousAction.do@">
+ *   <property value="364,230,230,96" name="elbowsX"/>
+ *   <property value="241,241,32,32" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/miniTests/returnToExceptions/delegate/DelegateController.jpf?returnToCurrentPage#@action:doReturnToCurrentPage.do@">
+ *   <property value="204,71,71,71" name="elbowsX"/>
+ *   <property value="252,252,168,84" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="South_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/returnToExceptions/ReturnToExceptionsController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:doReturnToPreviousPage.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:doReturnToCurrentPage.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:doReturnToPreviousAction.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:delegateDone.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:doReturnToCurrentPage.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,180,180,216' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:doReturnToPreviousAction.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='103,103,252,252' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:doReturnToPreviousPage.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='103,103,252,252' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/miniTests/returnToExceptions/delegate/DelegateController.jpf'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/miniTests/returnToExceptions/delegate/DelegateController.jpf?returnToPreviousPage#@action:doReturnToPreviousPage.do@'>",
+        "  <property value='80,80,60,60' name='elbowsX'/>",
+        "  <property value='216,150,150,84' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:delegateDone.do@'>",
+        "  <property value='540,540,408,276' name='elbowsX'/>",
+        "  <property value='356,92,92,92' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/miniTests/returnToExceptions/delegate/DelegateController.jpf?returnToPreviousAction#@action:doReturnToPreviousAction.do@'>",
+        "  <property value='364,230,230,96' name='elbowsX'/>",
+        "  <property value='241,241,32,32' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/miniTests/returnToExceptions/delegate/DelegateController.jpf?returnToCurrentPage#@action:doReturnToCurrentPage.do@'>",
+        "  <property value='204,71,71,71' name='elbowsX'/>",
+        "  <property value='252,252,168,84' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='South_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class ReturnToExceptionsController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/returnToExceptions/delegate/DelegateController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/returnToExceptions/delegate/DelegateController.jpf") 
+        })
+    protected Forward doReturnToPreviousPage()
+    {
+        getRequest().setAttribute( "returnToPreviousPage", Boolean.TRUE );
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/returnToExceptions/delegate/DelegateController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/returnToExceptions/delegate/DelegateController.jpf") 
+        })
+    protected Forward doReturnToCurrentPage()
+    {
+        getRequest().setAttribute( "returnToCurrentPage", Boolean.TRUE );
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/miniTests/returnToExceptions/delegate/DelegateController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/miniTests/returnToExceptions/delegate/DelegateController.jpf") 
+        })
+    protected Forward doReturnToPreviousAction()
+    {
+        getRequest().setAttribute( "returnToPreviousAction", Boolean.TRUE );
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward delegateDone()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/delegate/DelegateController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/delegate/DelegateController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,191 @@
+package miniTests.returnToExceptions.delegate;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowException;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:catch type="PageFlowException" method="goBack"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miniTests/returnToExceptions/delegate/DelegateController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:done.do">
+ *   <property value="400" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#prevPage#previousPage#@action:begin.do@@">
+ *   <property value="140" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#prevPage#previousPage#@action:begin.do@">
+ *   <property value="116,116,104,104" name="elbowsX"/>
+ *   <property value="103,117,117,132" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="prevPage" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#curPage#currentPage#@action:begin.do@@">
+ *   <property value="221" name="x"/>
+ *   <property value="224" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#curPage#currentPage#@action:begin.do@">
+ *   <property value="116,150,150,185" name="elbowsX"/>
+ *   <property value="103,103,216,216" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="curPage" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#prevAction#previousAction#@action:begin.do@@">
+ *   <property value="301" name="x"/>
+ *   <property value="304" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#prevAction#previousAction#@action:begin.do@">
+ *   <property value="116,190,190,265" name="elbowsX"/>
+ *   <property value="103,103,296,296" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="prevAction" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:delegateDone">
+ *   <property value="560" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#delegateDone#@action:done.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    nested = true,
+    catches = {
+        @Jpf.Catch(
+            type = PageFlowException.class,
+            method = "goBack") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miniTests/returnToExceptions/delegate/DelegateController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:done.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#prevPage#previousPage#@action:begin.do@@'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#prevPage#previousPage#@action:begin.do@'>",
+        "  <property value='116,116,104,104' name='elbowsX'/>",
+        "  <property value='103,117,117,132' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='prevPage' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#curPage#currentPage#@action:begin.do@@'>",
+        "  <property value='221' name='x'/>",
+        "  <property value='224' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#curPage#currentPage#@action:begin.do@'>",
+        "  <property value='116,150,150,185' name='elbowsX'/>",
+        "  <property value='103,103,216,216' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='curPage' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#prevAction#previousAction#@action:begin.do@@'>",
+        "  <property value='301' name='x'/>",
+        "  <property value='304' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#prevAction#previousAction#@action:begin.do@'>",
+        "  <property value='116,190,190,265' name='elbowsX'/>",
+        "  <property value='103,103,296,296' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='prevAction' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:delegateDone'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#delegateDone#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class DelegateController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="prevPage" return-to="previousPage"
+     * @jpf:forward name="curPage" return-to="currentPage"
+     * @jpf:forward name="prevAction" return-to="previousAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "prevPage",
+                navigateTo = Jpf.NavigateTo.previousPage),
+            @Jpf.Forward(
+                name = "curPage",
+                navigateTo = Jpf.NavigateTo.currentPage),
+            @Jpf.Forward(
+                name = "prevAction",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+    protected Forward begin()
+    {
+        if ( getRequest().getAttribute( "returnToPreviousPage" ) != null )
+        {
+            return new Forward( "prevPage" );
+        }
+        else if ( getRequest().getAttribute( "returnToCurrentPage" ) != null )
+        {
+            return new Forward( "curPage" );
+        }
+        else if ( getRequest().getAttribute( "returnToPreviousAction" ) != null )
+        {
+            return new Forward( "prevAction" );
+        }
+        
+        return null;
+    }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="done" return-action="delegateDone"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "delegateDone") 
+        })
+    protected Forward goBack( PageFlowException ex, String actionName, String msg, Object form )
+    {
+        return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToExceptions/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Return-to Exceptions
+        </title>
+    </head>
+    <body>
+        <h3>Return-to Exceptions</h3>
+        
+        <font color="red">
+            <netui:exceptions showMessage="true" showStackTrace="false"/>
+        </font>
+        <br>
+
+        <netui:anchor action="doReturnToPreviousPage">doReturnToPreviousPage</netui:anchor>
+        <br>
+        <netui:anchor action="doReturnToCurrentPage">doReturnToCurrentPage</netui:anchor>
+        <br>
+        <netui:anchor action="doReturnToPreviousAction">doReturnToPreviousAction</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Return to Page</title>
+</head>
+<body>
+<h4>Return To Page</h4>
+<netui:anchor action="/nest" >Nest Page Flow</netui:anchor>
+<br />
+Last Action: <netui:label value="${pageFlow.action}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.returnToPage;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String _action;
+
+    public String getAction() {
+	return _action;
+    }
+    public void setAction(String action) {
+	_action = action;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nest" path="nested/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nest",
+                path = "nested/Controller.jpf") 
+        })
+    public Forward nest()
+    {
+	_action = "nest";
+	return new Forward("nest");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward returnToPage()
+    {
+	_action = "returnToPage";
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward returnToAction()
+    {
+	_action = "returnToAction";
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+	_action = "begin";
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/nested/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/nested/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Nested - Return To</title>
+</head>
+<body>
+<netui:anchor action="/nestOne" >Nest Return to Page</netui:anchor><br />
+<netui:anchor action="/nestTwo" >Nest Return to Action</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/nested/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/returnToPage/nested/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,77 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.returnToPage.nested;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="returnToPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnToPage") 
+        })
+    public Forward nestOne()
+    {
+	return new Forward("return");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="returnToAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnToAction") 
+        })
+    public Forward nestTwo()
+    {
+	return new Forward("return");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Roles Test
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test</h3>
+        <font color="Red">
+            <netui:exceptions showStackTrace="false" showMessage="true"/> 
+        </font>
+        <br>
+        <netui:anchor action="goodRoleAction">goodRoleAction</netui:anchor>
+        <br>
+        <netui:anchor action="badRoleAction">badRoleAction</netui:anchor>
+        <br>
+        <netui:anchor action="allRolesAction">allRolesAction</netui:anchor>
+        <br>
+        <netui:anchor action="logOut">log out</netui:anchor>
+        <br>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/login.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/login.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Roles Test - Login
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test - Login</h3>
+        <font color="Red">
+            <netui:exceptions showStackTrace="false" showMessage="true"/> 
+        </font>
+        <br>
+        <netui:anchor action="logIn">log in</netui:anchor>
+        <br>
+    </body>
+</netui:html>
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/rolesController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/roles/rolesController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+package miniTests.roles;
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @jpf:forward name="success" path="index.jsp"
+ * @jpf:catch type="NotLoggedInException" path="login.jsp"
+ * @jpf:catch type="UnfulfilledRolesException" path="index.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "success",
+            path = "index.jsp") 
+    },
+    catches = {
+        @Jpf.Catch(
+            type = NotLoggedInException.class,
+            path = "login.jsp"),
+        @Jpf.Catch(
+            type = UnfulfilledRolesException.class,
+            path = "index.jsp") 
+    })
+public class rolesController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action roles-allowed="GoodRole2"
+     */
+    @Jpf.Action(
+        rolesAllowed = {
+            "GoodRole2"
+        })
+    protected Forward goodRoleAction()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action roles-allowed="BadRole"
+     */
+    @Jpf.Action(
+        rolesAllowed = {
+            "BadRole"
+        })
+    protected Forward badRoleAction()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action roles-allowed="GoodRole2,BadRole"
+     */
+    @Jpf.Action(
+        rolesAllowed = {
+            "GoodRole2",
+            "BadRole"
+        })
+    protected Forward allRolesAction()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward logIn()
+        throws Exception
+    {
+        login( "weblogic", "weblogic" );
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward logOut()
+    {
+        logout( false );
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/MockPortal.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/MockPortal.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="mockportal.tld" prefix="mp" %>
+
+<html>
+<head>
+<title>Mock Portal (/miniTests/upload)</title>
+</head>
+
+<h3>Mock Portal (/miniTests/upload)</h3>
+<body>
+
+    <mp:mockPortal>
+        <mp:mockPortlet portletID="upload1" pageFlowURI="/miniTests/upload/uploadController.jpf" />
+        <mp:mockPortlet portletID="upload2" pageFlowURI="/miniTests/upload/uploadController.jpf" />
+    </mp:mockPortal>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:form action="upload" enctype="multipart/form-data">
+            File: <netui:fileUpload dataSource="actionForm.file" readonly="false" size="60"/>
+                <netui:error value="file"/>
+            <br>
+            Label: <netui:textBox dataSource="actionForm.label"/>
+            <br>
+            <br>
+            <netui:button value="submit"/>
+        </netui:form>
+
+        <br>
+
+        <netui-template:visible visibility="${pageFlow.scoped}" negate="true">
+            <netui:anchor href="MockPortal.jsp">try this in MockPortal</netui:anchor>
+        </netui-template:visible>
+        <netui-template:visible visibility="${pageFlow.scoped}">
+            <netui:anchor href="uploadController.jpf">try this outside of MockPortal</netui:anchor>
+        </netui-template:visible>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            File Upload Results
+        </title>
+    </head>
+    <body>
+        <h3>File Upload Results</h3>
+        
+        <i>Label:</i> <netui:label value="${pageInput.init.label}"/>
+        <br>
+        <br>
+        <i>File Contents:</i>
+        <blockquote>
+            <pre><netui:content value="${pageInput.init.fileDataString}"/></pre>
+        </blockquote>
+        <br>
+        <br>
+        <br>
+        <netui:anchor action="begin">start over</netui:anchor>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/uploadController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/upload/uploadController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,196 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Sun Jul 27 10:22:46 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package miniTests.upload;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.struts.upload.FormFile;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/upload/uploadController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:upload.do#upload.uploadController.UploadForm">
+ *   <property value="240" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:upload.do#upload.uploadController.UploadForm@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="144,160,160,176" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:upload.uploadController.UploadForm#file#org.apache.struts.upload.FormFile"/>
+ * <pageflow-object id="formbean:upload.uploadController.UploadForm"/>
+ * <pageflow-object id="formbeanprop:upload.uploadController.UploadForm#label#java.lang.String"/>
+ * <pageflow-object id="page:results.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#results.jsp#@action:upload.do#upload.uploadController.UploadForm@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="264,280,280,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:results.jsp@#@action:begin.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="332,332,103,103" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/upload/uploadController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:upload.do#upload.uploadController.UploadForm'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:upload.do#upload.uploadController.UploadForm@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,160,160,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:upload.uploadController.UploadForm#file#org.apache.struts.upload.FormFile'/>",
+        "<pageflow-object id='formbean:upload.uploadController.UploadForm'/>",
+        "<pageflow-object id='formbeanprop:upload.uploadController.UploadForm#label#java.lang.String'/>",
+        "<pageflow-object id='page:results.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#results.jsp#@action:upload.do#upload.uploadController.UploadForm@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='264,280,280,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:results.jsp@#@action:begin.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='332,332,103,103' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class uploadController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward upload( UploadForm form )
+        throws Exception
+    {
+        return new Forward( "success", "init", form );
+    }
+    
+    public boolean getScoped()
+    {
+        return getRequest() instanceof ScopedRequest;
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class UploadForm extends FormData
+    {
+        private String _label;
+        private FormFile _file;
+
+
+        public void setLabel( String label )
+        {
+            _label = label;
+        }
+
+        public String getLabel()
+        {
+            return _label;
+        }
+
+        public void setFile( FormFile file )
+        {
+            _file = file;
+        }
+
+        public FormFile getFile()
+        {
+            return _file;
+        }
+        
+        public String getFileDataString()
+            throws Exception
+        {
+            return new String( _file.getFileData() );
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/urlBinding/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/urlBinding/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Binding to URL (Request)</title>
+</head>
+<body>
+<h4>Binding to {param}</h4>
+<netui:anchor action="postback">Postback
+<netui:parameter name="foo" value="param-foo"/>
+<netui:parameter name="bar" value="param-bar"/>
+<netui:parameter name="baz" value="param-baz"/>
+</netui:anchor>
+<hr />
+Foo <netui:label value="${param.foo}"/><br />
+Bar <netui:label value="${param.bar}"/><br />
+Baz <netui:label value="${param.baz}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/urlBinding/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/urlBinding/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.urlBinding;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/validation/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/validation/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Validation Test</title>
+</head>
+<body>
+<netui:form action="/postback">
+Text: <netui:textBox dataSource="actionForm.text"/>
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<netui:errors />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/validation/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/validation/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,97 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package miniTests.validation;
+
+// Java stuff
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+// struts specific stuff
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:message-resources resources="resources.application"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "resources.application") 
+    })
+public class Controller extends PageFlowController
+{
+    public static class Form extends FormData
+    {
+	private String _text;
+	public String getText() {
+	    return _text;
+	}
+	public void setText(String text) {
+	    _text = text;
+	}
+
+	public ActionErrors validate(ActionMapping mapping,
+				     HttpServletRequest request)
+	{
+	    ActionErrors errors = new ActionErrors();
+	    if (_text == null || !_text.equals("pass")) {
+		errors.add("text", new ActionError("error.text.validate"));
+	    }
+	    return errors;
+	}
+    }
+
+    /**
+     * @jpf:action validation-error-page="Begin.jsp"
+     * @jpf:forward name="linkOne" path="Begin.jsp" 
+     */
+    @Jpf.Action(
+        validationErrorForward = @Jpf.Forward(
+            name="validationFailure",
+            path="Begin.jsp"),
+        forwards = {
+            @Jpf.Forward(
+                name = "linkOne",
+                path = "Begin.jsp") 
+        })
+    public Forward postback(Form form)
+    {
+	return new Forward("linkOne");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/webinfSrc/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miniTests/webinfSrc/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <body>
+        action called: <netui:label value="${requestScope.actionMapping.path}"/>
+        <br>
+        scope: <netui:label value="${requestScope.actionMapping.scope}"/>
+        <br>
+        <br>
+        <netui:anchor action="toAction">toAction</netui:anchor>
+        <br>
+        <netui:anchor action="toMe1">toMe1</netui:anchor>
+        <br>
+        <netui:anchor action="toMe2">toMe2</netui:anchor>
+        <br>
+        <netui:anchor action="mergeAction">mergeAction</netui:anchor>
+        <br>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Ctrl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Ctrl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package miscJpf.bug21124;
+
+@org.apache.beehive.controls.api.bean.ControlInterface()
+public interface Ctrl 
+   {
+   void throwWrappedChecked();
+   void throwWrappedRuntime();
+   void throwUnwrappedRuntime();
+   void throwWrappedError();
+   void throwUnwrappedError();
+   void throwWrappedUnhandled();
+   void throwUnwrappedUnhandled();
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/CtrlImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/CtrlImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+package miscJpf.bug21124;
+
+import java.lang.reflect.UndeclaredThrowableException;
+import java.lang.IllegalArgumentException;
+import java.lang.UnknownError;
+import java.lang.ClassNotFoundException;
+import java.lang.IndexOutOfBoundsException;
+
+@org.apache.beehive.controls.api.bean.ControlImplementation()
+public class CtrlImpl implements Ctrl
+   {
+   public void throwWrappedChecked()
+      {
+      System.out.println(">>> CtrlImpl.throwWrappedChecked");
+      String str = "Test - This is a wrapped, checked exception.";
+      ClassNotFoundException except = new ClassNotFoundException(str);
+      throw new UndeclaredThrowableException(except);
+      }
+
+   public void throwWrappedRuntime()
+      {
+      System.out.println(">>> CtrlImpl.throwWrappedRuntime");
+      String str = "Test - This is a wrapped, runtime exception.";
+      IllegalArgumentException except = new IllegalArgumentException(str);
+      throw new UndeclaredThrowableException(except);
+      }
+
+   public void throwUnwrappedRuntime()
+      {
+         System.out.println(">>> CtrlImpl.throwUnwrappedRuntime");
+         String str = "Test - This is an unwrapped, runtime exception.";
+         throw new IllegalArgumentException(str);
+      }
+
+   public void throwWrappedError()
+      {
+      System.out.println(">>> CtrlImpl.throwWrappedError");
+      String str = "Test - This is a wrapped, error.";
+      UnknownError except = new UnknownError(str);
+      throw new UndeclaredThrowableException(except);
+      }
+
+   public void throwUnwrappedError()
+      {
+      System.out.println(">>> CtrlImpl.throwUnwrappedError");
+      String str = "Test - This is an unwrapped, error.";
+      throw new UnknownError(str);
+      }
+
+   public void throwWrappedUnhandled()
+      {
+      System.out.println(">>> CtrlImpl.throwWrappedUnhandled");
+      String str = "Test - This is a wrapped, unhandled, runtime exception.";
+      IndexOutOfBoundsException except = new IndexOutOfBoundsException(str);
+      throw new UndeclaredThrowableException(except);
+      }
+
+   public void throwUnwrappedUnhandled()
+      {
+      System.out.println(">>> CtrlImpl.throwWrappedUnhandled");
+      String str = "Test - This is an unwrapped, unhandled, runtime exception.";
+      throw new IndexOutOfBoundsException(str);
+      }
+   }
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,252 @@
+package miscJpf.bug21124;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.lang.IllegalArgumentException;
+import java.lang.UnknownError;
+import java.lang.ClassNotFoundException;
+import java.lang.IndexOutOfBoundsException;
+
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = java.lang.ClassNotFoundException.class,
+            method = "handler1"),
+        @Jpf.Catch(
+            type = java.lang.UnknownError.class,
+            method = "handler2"),
+        @Jpf.Catch(
+            type = java.lang.reflect.UndeclaredThrowableException.class,
+            method = "handler3"),
+        @Jpf.Catch(
+            type = java.lang.IllegalArgumentException.class,
+            method = "handler4"),
+        @Jpf.Catch(
+            type = java.lang.Throwable.class,
+            method = "handler5") 
+    })
+public class Jpf1 extends PageFlowController
+{
+    @org.apache.beehive.controls.api.bean.Control()
+    private Ctrl myCtrl;
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward act1()
+        {
+        System.out.println(">>> Jpf1.act1");
+        myCtrl.throwWrappedChecked();
+        return new Forward("gotoError");
+        }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward act2()
+       {
+       System.out.println(">>> Jpf1.act2");
+       myCtrl.throwWrappedRuntime();
+       return new Forward("gotoError");
+       }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward act3()
+       {
+       System.out.println(">>> Jpf1.act3");
+       myCtrl.throwUnwrappedRuntime();
+       return new Forward("gotoError");
+       }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward act4()
+       {
+       System.out.println(">>> Jpf1.act4");
+       myCtrl.throwWrappedError();
+       return new Forward("gotoError");
+       }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward act5()
+       {
+       System.out.println(">>> Jpf1.act5");
+       myCtrl.throwUnwrappedError();
+       return new Forward("gotoError");
+       }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward act6()
+       {
+       System.out.println(">>> Jpf1.act6");
+       myCtrl.throwWrappedUnhandled();
+       return new Forward("gotoError");
+       }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward act7()
+       {
+       System.out.println(">>> Jpf1.act7");
+       myCtrl.throwUnwrappedUnhandled();
+       return new Forward("gotoError");
+       }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp") 
+        })
+   protected Forward done()
+       {
+       System.out.println(">>> Jpf1.done");
+       return new Forward("gotoDone");
+       }
+
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2a",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward handler1(java.lang.ClassNotFoundException ex
+                               ,String actionName
+                               ,String message
+                               ,Object form
+                               )
+        {
+        System.out.println(">>> Jpf1.handler1 - (java.lang.ClassNotFoundException)");
+        return new Forward("gotoPg2a");
+        }
+
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2b",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward handler2(java.lang.UnknownError ex
+                               ,String actionName
+                               ,String message
+                               ,Object form
+                               )
+        {
+        System.out.println(">>> Jpf1.handler2 - (java.lang.UnknownError)");
+        return new Forward("gotoPg2b");
+        }
+
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2c",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward handler3(java.lang.reflect.UndeclaredThrowableException ex
+                               ,String actionName
+                               ,String message
+                               ,Object form
+                               )
+        {
+        System.out.println(">>> Jpf1.handler3 - (java.lang.reflect.UndeclaredThrowableException)");
+        return new Forward("gotoPg2c");
+        }
+
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2d",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward handler4(java.lang.IllegalArgumentException ex
+                               ,String actionName
+                               ,String message
+                               ,Object form
+                               )
+        {
+        System.out.println(">>> Jpf1.handler4 - (java.lang.IllegalArgumentException)");
+        return new Forward("gotoPg2d");
+        }
+
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2e",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward handler5(java.lang.Throwable ex
+                               ,String actionName
+                               ,String message
+                               ,Object form
+                               )
+        {
+        System.out.println(">>> Jpf1.handler5 - (java.lang.Throwable)");
+        return new Forward("gotoPg2e");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="act1">throw Wrapped Checked</netui:anchor>
+            <br/><br/>
+            <netui:anchor action="act2">throw Wrapped Runtime</netui:anchor>
+            <br/><br/>
+            <netui:anchor action="act3">throw Unwrapped Runtime</netui:anchor>
+            <br/><br/>
+            <netui:anchor action="act4">throw Wrapped Error</netui:anchor>
+            <br/><br/>
+            <netui:anchor action="act5">throw Unwrapped Error</netui:anchor>
+            <br/><br/>
+            <netui:anchor action="act6">throw Wrapped, unspecified Runtime</netui:anchor>
+            <br/><br/>
+            <netui:anchor action="act7">throw Unwrapped, unspecified Runtime</netui:anchor>
+            <br/><br/>
+            <netui:anchor action="done">Done</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            Passed - <netui:anchor action="begin">continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug21124/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+package miscJpf.bug26856;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources  resources="miscJpf.bug26856.struts.StrutsMessages"
+ * @jpf:message-resources  key="myMessages"
+ *                         resources="miscJpf.bug26856.struts.NamedStrutsMessages"
+ * @jpf:message-resources  key="myBundle1"
+ *                         resources="miscJpf.bug26856.bundle1"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "miscJpf.bug26856.struts.StrutsMessages"),
+        @Jpf.MessageResource(
+            bundleKey = "myMessages",
+            name = "miscJpf.bug26856.struts.NamedStrutsMessages"),
+        @Jpf.MessageResource(
+            bundleKey = "myBundle1",
+            name = "miscJpf.bug26856.bundle1") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   public Forward begin()
+      {
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   public Forward done()
+      {
+      return new Forward("gotoPg1");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+    <head>
+        <title>MiscJpf Bug 26856 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26856 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+         <center>
+            <netui:anchor href="Jsp2.jsp">Explicitly declared resource bundle Tests</netui:anchor>
+            <br/><br/>
+            <netui:anchor href="Jsp3.jsp">Resource bundles declared in JPF Tests</netui:anchor>
+         </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+   <head>
+      <title>MiscJpf Bug 26856 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 26856 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <netui-data:declareBundle name="theBundle1" bundlePath="miscJpf.bug26856.bundle1"/>
+      <netui-data:declareBundle name="theBundle2" bundlePath="miscJpf/bug26856/bundle2"/>
+
+      <h3>Test 1</h3>
+      <em>Print a message from bundle1.</em>
+      <br/>
+      <netui:label value="${bundle.theBundle1.message1}"/>
+
+      <hr width="95%"/><br/>
+      <h3>Test 2</h3>
+      <em>Print a message from bundle2.</em>
+      <br/>
+      <netui:label value="${bundle.theBundle2.message1}"/>
+
+      <hr width="95%"/><br/>
+      <h3>Test 3</h3>
+      <em>Print a message from and nonexistant bundle An error is expected.</em>
+      <br/>
+      <netui:label value="${bundle.xtheBundle1.message1}"/>
+
+      <hr width="95%"/><br/>
+      <h3>Test 4</h3>
+      <em>Print a nonexistant message from bundle An error is expected.</em>
+      <br/>
+      <netui:label value="${bundle.theBundle1.message1x}"/>
+
+      <hr width="95%"/><br/>
+      <h3>Test 5</h3>
+      <em>Declare a bundle with the reserved name "default" An error is expected.</em>
+      <br/>
+      <netui-data:declareBundle name="default" bundlePath="properties.bundle1"/>
+
+      <hr width="95%"/><br/><br/>
+      <center>
+         <netui:anchor action="done">Done</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,125 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+    <head>
+        <title>MiscJpf Bug 26856 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26856 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 1</h3>
+        <em>Message from default resource bundle.</em>
+        <br/>
+        <netui:label value="${bundle.default.message1}"/>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 2</h3>
+        <em>Message from named resource bundle, using quotes.</em>
+        <br/>
+        <netui:label value="${bundle[\"myMessages/miscJpf/bug26856\"].message1}"/>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 3</h3>
+        <em>Message from named resource bundle, using single quotes.</em>
+        <br/>
+        <netui:label value="${bundle['myMessages/miscJpf/bug26856'].message1}"/>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 4</h3>
+        <em>Non-existant message from default resource bundle.  "nonExistentMessage" bracketed with "?'s" is expected.</em>
+        <br/>
+        <netui:label value="${bundle.default.nonExistentMessage}"/>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 5</h3>
+        <em>Message from non-existant resource bundle.  An error is expected.</em>
+        <br/>
+        <netui:label value="${bundle.missingBundle.nonExistentMessage}"/><br/>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 6</h3>
+        <em>"Overloaded" bundle name.</em>
+        <br/>
+        <netui-data:declareBundle name="myBundle1" bundlePath="miscJpf.bug26856.bundle2"/>
+        <netui:label value="${bundle[\"myBundle1/miscJpf/bug26856\"].message2}"/>
+        <br/>
+        <netui:label value="${bundle.myBundle1.message2}"/>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 7</h3>
+        <em>Message with value substitution. SubTest 7 will give an error.</em>
+        <br/>
+        <ol>
+            <li> <!-- Test 1 -->
+                <netui-data:message value="${bundle.myBundle1.message3}" resultId="formattedMessage">
+                    <netui-data:messageArg value="Arg0"/>
+                    <netui-data:messageArg value="Arg1"/>
+                    <netui-data:messageArg value="Arg2"/>
+                </netui-data:message>
+                <netui:label value="${pageScope.formattedMessage}"/>
+            </li>
+            <li> <!-- Test 2 -->
+                <netui-data:message value="${bundle.myBundle1.message3}" resultId="formattedMessage">
+                    <netui-data:messageArg value="Arg0"/>
+                    <netui-data:messageArg value="Arg1"/>
+                </netui-data:message>
+                <netui:label value="${pageScope.formattedMessage}"/>
+            </li>
+            <li> <!-- Test 3 -->
+                <netui-data:message value="${bundle.myBundle1.message3}" resultId="formattedMessage">
+                    <netui-data:messageArg value="Arg0"/>
+                    <netui-data:messageArg value="Arg1"/>
+                    <netui-data:messageArg value="Arg2"/>
+                    <netui-data:messageArg value="Arg3"/>
+                </netui-data:message>
+                <netui:label value="${pageScope.formattedMessage}"/>
+            </li>
+            <li> <!-- Test 4 -->
+                <netui-data:message value="${bundle.myBundle1.message4}" resultId="formattedMessage">
+                    <netui-data:messageArg value="Arg0"/>
+                    <netui-data:messageArg value="Arg1"/>
+                    <netui-data:messageArg value="Arg2"/>
+                </netui-data:message>
+                <netui:label value="${pageScope.formattedMessage}"/>
+            </li>
+            <li> <!-- Test 5 -->
+                <netui-data:message value="${bundle.myBundle1.message5}" resultId="formattedMessage">
+                    <netui-data:messageArg value="Arg0"/>
+                    <netui-data:messageArg value="Arg1"/>
+                    <netui-data:messageArg value="Arg2"/>
+                </netui-data:message>
+                <netui:label value="${pageScope.formattedMessage}"/>
+            </li>
+            <li> <!-- Test 6 -->
+                <netui-data:message value="${bundle.myBundle1.message6}" resultId="formattedMessage">
+                    <netui-data:messageArg value="Arg0"/>
+                    <netui-data:messageArg value="Arg1"/>
+                    <netui-data:messageArg value="Arg2"/>
+                </netui-data:message>
+                <netui:label value="${pageScope.formattedMessage}"/>
+            </li>
+            <li> <!-- Test 7 -->
+                <netui-data:message value="${bundle.myBundle1.message7}" resultId="errorMessage">
+                    <netui-data:messageArg value="Arg0"/>
+                    <netui-data:messageArg value="Arg1"/>
+                    <netui-data:messageArg value="Arg2"/>
+                </netui-data:message>
+                <netui:label value="${pageScope.errorMessage}"/>
+            </li>
+        </ol>
+        <hr width="95%"/><br/><br/>
+        <center>
+            <netui:anchor action="done">Done</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26856/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>MiscJpf Bug 26856 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 26856 test - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,153 @@
+package miscJpf.bug26990;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionServlet;
+import javax.servlet.http.HttpSession;
+
+public class Jpf1 extends PageFlowController
+   {
+   private  int   eCnt  = 0;
+
+   /****************************************************************************
+    * onCreate()
+    ***************************************************************************/
+   public void onCreate()
+      {
+      ActionServlet  aServ = null;
+      System.out.println(">>> Jpf1.onCreate");
+      try
+         {
+         aServ  = getServlet();
+         }
+      catch (Throwable e)
+         {
+         System.out.println(">>> Jpf1.onCreate - caught exception:");
+         e.printStackTrace();
+         }
+      if (aServ == null) eCnt++;
+      return;
+      }
+
+   /****************************************************************************
+    * beforeAction()
+    ***************************************************************************/
+   public void beforeAction()
+      {
+      ActionServlet  aServ = null;
+      System.out.println(">>> Jpf1.beforeAction");
+      try
+         {
+         aServ  = getServlet();
+         }
+      catch (Throwable e)
+         {
+         System.out.println(">>> Jpf1.beforeAction - caught exception:");
+         e.printStackTrace();
+         }
+      if (aServ == null) eCnt++;
+      return;
+      }
+
+   /****************************************************************************
+    * afterAction()
+    ***************************************************************************/
+   public void afterAction()
+      {
+      ActionServlet  aServ = null;
+      System.out.println(">>> Jpf1.afterAction");
+      try
+         {
+         aServ  = getServlet();
+         }
+      catch (Throwable e)
+         {
+         System.out.println(">>> Jpf1.afterAction - caught exception:");
+         e.printStackTrace();
+         }
+      if (aServ == null) eCnt++;
+      return;
+      }
+
+   /****************************************************************************
+    * refresh()
+    ***************************************************************************/
+   public void refresh()
+      {
+      ActionServlet  aServ = null;
+      System.out.println(">>> Jpf1.refresh");
+      try
+         {
+         aServ  = getServlet();
+         }
+      catch (Throwable e)
+         {
+         System.out.println(">>> Jpf1.refresh - caught exception:");
+         e.printStackTrace();
+         }
+      if (aServ == null) eCnt++;
+      return;
+      }
+
+   /****************************************************************************
+    * onDestroy()
+    ***************************************************************************/
+   public void onDestroy(HttpSession session)
+      {
+      ActionServlet  aServ = null;
+      System.out.println(">>> Jpf1.onDestroy");
+      try
+         {
+         aServ  = getServlet();
+         }
+      catch (Throwable e)
+         {
+         System.out.println(">>> Jpf1.onDestroy - caught exception:");
+         e.printStackTrace();
+         }
+      if (aServ == null) eCnt++;
+      return;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+    * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward jpfAction1()
+      {
+      System.out.println(">>> Jpf1.jpfAction1");
+      if (eCnt != 0)
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>MiscJpf Bug 26990 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26990 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui:anchor action="jpfAction1">continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug26990/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Bug 26990 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26990 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+package miscJpf.bug27848;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+public class Jpf1 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp") 
+        })
+    protected Forward jpfAction1()
+        {
+        System.out.println(">>> Jpf1.jpfAction1");
+        return new Forward("gotoDone");
+        }
+
+    public String getField1()
+        {
+        HttpServletRequest tmpReq = getRequest();
+        return "some string";
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>MiscJpf Bug 27848 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 27848 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:label value="${pageFlow.field1}" />
+            <br/><br/>
+            <netui:anchor action="jpfAction1">continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug27848/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Bug 27848 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 27848 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+package miscJpf.bug30303;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.upload.FormFile;
+import org.apache.struts.upload.MultipartRequestHandler;
+
+public class Jpf1 extends PageFlowController
+   {
+   private static final String STRUTS_VALUE = "Struts Value";
+   private static final String PAGEFLOW_VALUE = "PageFlow Value";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   public Forward begin()
+      {
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+    * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   public Forward jpfAction1(UploadForm form)
+      {
+      if (form.getStrutsText().equals(STRUTS_VALUE) == false)
+         {
+         return new Forward("gotoError");
+         }
+      if (form.getPageflowText().equals(PAGEFLOW_VALUE) == false)
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward( "gotoDone");
+      }
+
+   /****************************************************************************
+    * Form bean
+    ***************************************************************************/
+   public static class UploadForm extends FormData
+      {
+      private String strutsText;
+      private String pageflowText;
+
+      public String getStrutsText()
+         {
+         System.out.println(">>> UploadForm.getStrutsText");
+         return strutsText;
+         }
+
+      public void setStrutsText(String strutsText)
+         {
+         System.out.println(">>> UploadForm.setStrutsText");
+         this.strutsText = strutsText;
+         }
+
+      public String getPageflowText()
+         {
+         System.out.println(">>> UploadForm.setPageFlowText");
+         return pageflowText;
+         }
+
+      public void setPageflowText(String pageflowText)
+         {
+         System.out.println(">>> UploadForm.getPageFlowText");
+         this.pageflowText = pageflowText;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="struts-html.tld" prefix="html" %>
+
+<netui:html>
+   <head>
+      <title>MiscJpf Bug 30303 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 30303 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+      <font color="red">
+         <strong>
+            Do Not change any of the values just press the "Submit" button!
+         </strong>
+      </font>
+
+      <!-- ---------------------------------------------------------------------
+      The most important part of this test is to have the form's enctype to be
+      "multipart/form-data".
+      ---------------------------------------------------------------------- -->
+      <netui:form action="jpfAction1" enctype="multipart/form-data">
+         <table align="center" width="100%" border="0">
+            <tr>
+               <td align="right" width="50%">
+                  Struts text:
+               </td>
+               <td align="left" width="50%">
+                  <netui:textBox dataSource="strutsText"
+                                 defaultValue="Struts Value" />
+               </td>
+            </tr>
+            <tr>
+               <td align="right" width="50%">
+                  PageFlow text:
+               </td>
+               <td align="left" width="50%">
+                  <netui:textBox dataSource="actionForm.pageflowText"
+                                 defaultValue="PageFlow Value" />
+               </td>
+            </tr>
+         </table>
+         <br/>
+         <netui:button>Submit</netui:button>
+      </netui:form>
+   </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30303/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Bug 30303 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 30303 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,500 @@
+package miscJpf.bug30448;
+
+import org.apache.beehive.netui.pageflow.FormData;
+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.HttpSession;
+import java.util.Vector;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miscJpf/bug30448/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="860" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:jpfResults.do">
+ *   <property value="100" name="x"/>
+ *   <property value="1020" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:jpfAction1.do">
+ *   <property value="940" name="x"/>
+ *   <property value="800" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:jpfReturn1.do">
+ *   <property value="200" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:jpfReturn2.do">
+ *   <property value="225" name="x"/>
+ *   <property value="205" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:jpfReturn2.do#shared.FormA">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:jpfReturn3.do#shared.FormA">
+ *   <property value="110" name="x"/>
+ *   <property value="90" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="1060" name="x"/>
+ *   <property value="920" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="85" name="x"/>
+ *   <property value="65" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="250" name="x"/>
+ *   <property value="230" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1.jsp@#@action:jpfAction1.do@">
+ *   <property value="276,590,590,904" name="elbowsX"/>
+ *   <property value="852,852,792,792" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="860" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:jpfReturn3.do">
+ *   <property value="340" name="x"/>
+ *   <property value="740" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:jpfReturn1.do#shared.FormA">
+ *   <property value="135" name="x"/>
+ *   <property value="115" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn3.do@">
+ *   <property value="504,312,312,121" name="elbowsX"/>
+ *   <property value="521,521,46,46" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn1.do@">
+ *   <property value="504,370,370,236" name="elbowsX"/>
+ *   <property value="521,521,183,183" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn2.do@">
+ *   <property value="504,382,382,261" name="elbowsX"/>
+ *   <property value="521,521,208,208" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn3.do#shared.FormA@">
+ *   <property value="504,325,325,146" name="elbowsX"/>
+ *   <property value="521,521,82,82" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn1.do#shared.FormA@">
+ *   <property value="504,337,337,171" name="elbowsX"/>
+ *   <property value="521,521,107,107" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn2.do#shared.FormA@">
+ *   <property value="504,350,350,196" name="elbowsX"/>
+ *   <property value="521,521,132,132" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:subJpf/SubJpf1.jpf">
+ *   <property value="540" name="x"/>
+ *   <property value="540" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="100" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoPg1#Jsp1.jsp#@action:begin.do@">
+ *   <property value="136,170,170,204" name="elbowsX"/>
+ *   <property value="841,841,841,841" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="gotoPg1" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoResults#Jsp1.jsp#@action:jpfResults.do@">
+ *   <property value="136,170,170,204" name="elbowsX"/>
+ *   <property value="1012,1012,852,852" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="gotoResults" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoSubJpf1#subJpf/SubJpf1.jpf#@action:jpfAction1.do@">
+ *   <property value="904,740,740,576" name="elbowsX"/>
+ *   <property value="781,781,543,543" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ *   <property value="gotoSubJpf1" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoResults#Jsp1.jsp#@action:jpfReturn1.do@">
+ *   <property value="200,200,202,204" name="elbowsX"/>
+ *   <property value="224,841,841,841" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="gotoResults" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoResults#Jsp1.jsp#@action:jpfReturn2.do@">
+ *   <property value="225,225,204,204" name="elbowsX"/>
+ *   <property value="249,536,536,841" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="gotoResults" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoResults#Jsp1.jsp#@action:jpfReturn2.do#shared.FormA@">
+ *   <property value="196,200,200,204" name="elbowsX"/>
+ *   <property value="143,143,841,841" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="gotoResults" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoResults#Jsp1.jsp#@action:jpfReturn3.do#shared.FormA@">
+ *   <property value="146,175,175,204" name="elbowsX"/>
+ *   <property value="93,93,841,841" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="gotoResults" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="action-call:@page:Jsp1.jsp@#@action:finish.do@">
+ *   <property value="276,650,650,1024" name="elbowsX"/>
+ *   <property value="852,852,901,901" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miscJpf/bug30448/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='860' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:jpfResults.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='1020' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:jpfAction1.do'>",
+        "  <property value='940' name='x'/>",
+        "  <property value='800' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:jpfReturn1.do'>",
+        "  <property value='200' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:jpfReturn2.do'>",
+        "  <property value='225' name='x'/>",
+        "  <property value='205' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:jpfReturn2.do#shared.FormA'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:jpfReturn3.do#shared.FormA'>",
+        "  <property value='110' name='x'/>",
+        "  <property value='90' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='1060' name='x'/>",
+        "  <property value='920' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='85' name='x'/>",
+        "  <property value='65' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='250' name='x'/>",
+        "  <property value='230' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:jpfAction1.do@'>",
+        "  <property value='276,590,590,904' name='elbowsX'/>",
+        "  <property value='852,852,792,792' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='860' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:jpfReturn3.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='740' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:jpfReturn1.do#shared.FormA'>",
+        "  <property value='135' name='x'/>",
+        "  <property value='115' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn3.do@'>",
+        "  <property value='504,312,312,121' name='elbowsX'/>",
+        "  <property value='521,521,46,46' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn1.do@'>",
+        "  <property value='504,370,370,236' name='elbowsX'/>",
+        "  <property value='521,521,183,183' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn2.do@'>",
+        "  <property value='504,382,382,261' name='elbowsX'/>",
+        "  <property value='521,521,208,208' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn3.do#shared.FormA@'>",
+        "  <property value='504,325,325,146' name='elbowsX'/>",
+        "  <property value='521,521,82,82' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn1.do#shared.FormA@'>",
+        "  <property value='504,337,337,171' name='elbowsX'/>",
+        "  <property value='521,521,107,107' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:subJpf/SubJpf1.jpf@#@action:jpfReturn2.do#shared.FormA@'>",
+        "  <property value='504,350,350,196' name='elbowsX'/>",
+        "  <property value='521,521,132,132' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:subJpf/SubJpf1.jpf'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='540' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoPg1#Jsp1.jsp#@action:begin.do@'>",
+        "  <property value='136,170,170,204' name='elbowsX'/>",
+        "  <property value='841,841,841,841' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='gotoPg1' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoResults#Jsp1.jsp#@action:jpfResults.do@'>",
+        "  <property value='136,170,170,204' name='elbowsX'/>",
+        "  <property value='1012,1012,852,852' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='gotoResults' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoSubJpf1#subJpf/SubJpf1.jpf#@action:jpfAction1.do@'>",
+        "  <property value='904,740,740,576' name='elbowsX'/>",
+        "  <property value='781,781,543,543' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "  <property value='gotoSubJpf1' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoResults#Jsp1.jsp#@action:jpfReturn1.do@'>",
+        "  <property value='200,200,202,204' name='elbowsX'/>",
+        "  <property value='224,841,841,841' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='gotoResults' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoResults#Jsp1.jsp#@action:jpfReturn2.do@'>",
+        "  <property value='225,225,204,204' name='elbowsX'/>",
+        "  <property value='249,536,536,841' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='gotoResults' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoResults#Jsp1.jsp#@action:jpfReturn2.do#shared.FormA@'>",
+        "  <property value='196,200,200,204' name='elbowsX'/>",
+        "  <property value='143,143,841,841' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='gotoResults' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoResults#Jsp1.jsp#@action:jpfReturn3.do#shared.FormA@'>",
+        "  <property value='146,175,175,204' name='elbowsX'/>",
+        "  <property value='93,93,841,841' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='gotoResults' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:finish.do@'>",
+        "  <property value='276,650,650,1024' name='elbowsX'/>",
+        "  <property value='852,852,901,901' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    protected global.Global       globalApp;
+    public static final  String   FLD1_VALUE  = "Jpf1 Fld1 Value";
+    public static final  String   FLD2_VALUE  = "Jpf1 Fld2 Value";
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession(), true);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf1.onCreate():" + _cnt);
+        }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      _log.tracePoint("Jpf1.begin():" + _cnt);
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoSubJpf1" path="subJpf/SubJpf1.jpf"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSubJpf1",
+                path = "subJpf/SubJpf1.jpf") 
+        })
+   protected Forward jpfAction1()
+      {
+      _log.tracePoint("Jpf1.jpfAction1():" + _cnt);
+      _log.tracePoint("-------------------------------------------------------------");
+      return new Forward("gotoSubJpf1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoResults" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoResults",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward jpfReturn1()
+      {
+      _log.tracePoint("Jpf1.jpfReturn1():" + _cnt);
+      return new Forward("gotoResults");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoResults" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoResults",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward jpfReturn2()
+      {
+      _log.tracePoint("Jpf1.jpfReturn2():" + _cnt);
+      return new Forward("gotoResults");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoResults" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoResults",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward jpfReturn2(FormA inForm)
+      {
+      _log.tracePoint("Jpf1.jpfReturn2(FormA):" + _cnt);
+      return new Forward("gotoResults");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoResults" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoResults",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward jpfReturn3(FormA inForm)
+      {
+      _log.tracePoint("Jpf1.jpfReturn3(FormA):" + _cnt);
+      return new Forward("gotoResults");
+      }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        _log.tracePoint("Jpf1.finish():" + _cnt);
+        return new Forward("gotoTraceResults");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ page import="java.util.Vector,miscJpf.bug30448.Jpf1" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug 30448 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 30448 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui:anchor action="jpfAction1">Next Test</netui:anchor>
+         <br/><br/>
+         <netui:anchor action="finish">Finish</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>MiscJpf Bug 30448 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 30448 test - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/subJpf/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/subJpf/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,572 @@
+package miscJpf.bug30448.subJpf;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/miscJpf/bug30448/subJpf/SubJpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="680" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test1.do">
+ *   <property value="400" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test2.do">
+ *   <property value="400" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test3.do">
+ *   <property value="400" name="x"/>
+ *   <property value="1140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test4.do">
+ *   <property value="400" name="x"/>
+ *   <property value="1280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test5.do">
+ *   <property value="400" name="x"/>
+ *   <property value="680" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test6.do">
+ *   <property value="400" name="x"/>
+ *   <property value="980" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test7.do">
+ *   <property value="400" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test8.do">
+ *   <property value="400" name="x"/>
+ *   <property value="840" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:test9.do">
+ *   <property value="400" name="x"/>
+ *   <property value="540" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test9.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="683,683,521,521" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test5.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="672,672,672,672" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test6.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="683,683,972,972" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test7.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="661,661,372,372" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test8.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="683,683,821,821" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test3.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="683,683,1132,1132" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test4.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="683,683,1261,1261" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test1.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="661,661,232,232" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:test2.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="661,661,72,72" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:SubJsp1.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="680" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoPg1#SubJsp1.jsp#@action:begin.do@">
+ *   <property value="136,170,170,204" name="elbowsX"/>
+ *   <property value="672,672,672,672" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="gotoPg1" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:jpfReturn1">
+ *   <property value="540" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn1#@action:test1.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="232,232,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn1#@action:test2.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="72,72,101,101" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:jpfReturn2">
+ *   <property value="540" name="x"/>
+ *   <property value="1200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn2#@action:test3.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="1132,1132,1192,1192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn2#@action:test4.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="1272,1272,1203,1203" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:jpfReturn3">
+ *   <property value="540" name="x"/>
+ *   <property value="660" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn3#@action:test5.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="672,672,652,652" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn3#@action:test6.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="972,972,663,663" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn3#@action:test7.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="372,372,663,663" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn3#@action:test8.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="832,832,663,663" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#return#jpfReturn3#@action:test9.do@">
+ *   <property value="436,470,470,504" name="elbowsX"/>
+ *   <property value="532,532,663,663" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="return" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/miscJpf/bug30448/subJpf/SubJpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='680' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test1.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test2.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test3.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='1140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test4.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='1280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test5.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='680' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test6.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='980' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test7.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test8.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='840' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:test9.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='540' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test9.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='683,683,521,521' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test5.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='672,672,672,672' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test6.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='683,683,972,972' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test7.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='661,661,372,372' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test8.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='683,683,821,821' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test3.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='683,683,1132,1132' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test4.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='683,683,1261,1261' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test1.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='661,661,232,232' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:test2.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='661,661,72,72' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:SubJsp1.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='680' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoPg1#SubJsp1.jsp#@action:begin.do@'>",
+        "  <property value='136,170,170,204' name='elbowsX'/>",
+        "  <property value='672,672,672,672' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='gotoPg1' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:jpfReturn1'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn1#@action:test1.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='232,232,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn1#@action:test2.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='72,72,101,101' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:jpfReturn2'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='1200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn2#@action:test3.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='1132,1132,1192,1192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn2#@action:test4.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='1272,1272,1203,1203' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:jpfReturn3'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='660' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn3#@action:test5.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='672,672,652,652' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn3#@action:test6.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='972,972,663,663' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn3#@action:test7.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='372,372,663,663' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn3#@action:test8.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='832,832,663,663' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#return#jpfReturn3#@action:test9.do@'>",
+        "  <property value='436,470,470,504' name='elbowsX'/>",
+        "  <property value='532,532,663,663' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='return' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class SubJpf1 extends PageFlowController
+   {
+   public static final String FLD1_VALUE  = "SubJpf1 Fld1 Value";
+   public static final String FLD2_VALUE  = "SubJpf1 Fld2 Value";
+   private FormA _theForm  = new FormA();
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession(), true);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf1.onCreate():" + _cnt);
+        }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="SubJsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "SubJsp1.jsp") 
+        })
+   protected Forward begin()
+       {
+       _log.tracePoint("SubJpf1.begin():" + _cnt);
+       return new Forward("gotoPg1");
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn1"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn1") 
+        })
+   protected Forward test1()
+       {
+       _log.tracePoint("SubJpf1.test1():" + _cnt);
+       return new Forward("return");
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn1" return-form-type="FormA"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn1",
+                outputFormBeanType = FormA.class) 
+        })
+   protected Forward test2()
+       {
+       _log.tracePoint("SubJpf1.test2():" + _cnt);
+       return new Forward("return", new FormA());
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn2"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn2") 
+        })
+   protected Forward test3()
+       {
+       _log.tracePoint("SubJpf1.test3():" + _cnt);
+       return new Forward("return");
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn2" return-form-type="FormA"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn2",
+                outputFormBeanType = FormA.class) 
+        })
+   protected Forward test4()
+       {
+       _log.tracePoint("SubJpf1.test4():" + _cnt);
+       return new Forward("return", new FormA());
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn3"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn3") 
+        })
+   protected Forward test5()
+       {
+       _log.tracePoint("SubJpf1.test5():" + _cnt);
+       return new Forward("return");
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn3" return-form-type="FormA"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn3",
+                outputFormBeanType = FormA.class) 
+        })
+   protected Forward test6()
+       {
+       _log.tracePoint("SubJpf1.test6():" + _cnt);
+       return new Forward("return", new FormA());
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn3"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn3") 
+        })
+   protected Forward test7()
+       {
+       _log.tracePoint("SubJpf1.test7():" + _cnt);
+       return new Forward("return", new FormA());
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn3" return-form-type="FormA"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn3",
+                outputFormBeanType = FormA.class) 
+        })
+   protected Forward test8()
+       {
+       _log.tracePoint("SubJpf1.test8():" + _cnt);
+       return new Forward("return");
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="jpfReturn3" return-form="_theForm"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "jpfReturn3",
+                outputFormBean = "_theForm") 
+        })
+   protected Forward test9()
+       {
+       _log.tracePoint("SubJpf1.test9():" + _cnt);
+       return new Forward("return");
+       }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/subJpf/SubJsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug30448/subJpf/SubJsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug 30448 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 30448 test - SubJsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <ol>
+            <li>
+               <netui:anchor action="test1">Raise parent, handled action, no form</netui:anchor>
+            </li><br/><br/>
+            <li>
+               <netui:anchor action="test2">Raise parent, unhandled action, with form</netui:anchor>
+            </li><br/><br/>
+            <li>
+               <netui:anchor action="test3">Raise parent, handled, overloaded action, no form</netui:anchor>
+            </li><br/><br/>
+            <li>
+               <netui:anchor action="test4">Raise parent, handled, overloaded action, with form</netui:anchor>
+            </li><br/><br/>
+            <li>
+               <netui:anchor action="test5">Raise parent, unhandled action, no form</netui:anchor>
+            </li><br/><br/>
+            <li>
+               <netui:anchor action="test6">Raise parent, handled action, with form</netui:anchor>
+            </li><br/><br/>
+            <li>
+               <netui:anchor action="test7">Raise parent, handled action, with form, no annotations</netui:anchor>
+            </li><br/><br/>
+            <li>
+               <netui:anchor action="test8">Raise parent, handled action, no form, with return-form-type annotation</netui:anchor>
+            </li><br/><br/>
+            <li>
+               <netui:anchor action="test9">Raise parent, handled action, no form, with return-form annotation</netui:anchor>
+            </li><br/><br/>
+         </ul>
+       </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+package miscJpf.bug37949;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionServlet;
+import org.apache.beehive.netui.pageflow.scoping.internal.ScopedRequestImpl;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private final String _scopeKey   = "scopeKey";
+   private final String _attrKey1   = "attrKey1";
+   private final String _attrKey2   = "attrKey2";
+   private       String _str        = "Blah Blah";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      ScopedRequestImpl scopedRequest
+                        = new ScopedRequestImpl(getRequest()
+                                               ,null
+                                               ,_scopeKey
+                                               ,getServlet().getServletContext()
+                                               ,false);
+      scopedRequest.setAttribute(_attrKey1, Runtime.getRuntime());
+      scopedRequest.setAttribute(_attrKey2, _str);
+      scopedRequest.persistAttributes();
+      scopedRequest.removeAttribute(_attrKey1);
+      scopedRequest.removeAttribute(_attrKey2);
+      scopedRequest.restoreAttributes();
+
+      Object attr = (Object) scopedRequest.getAttribute(_attrKey1);
+      if (attr != null)
+         {
+         System.out.println(">>> attr: " + attr.toString());
+         return new Forward("gotoError");
+         }
+
+      attr = (Object) scopedRequest.getAttribute(_attrKey2);
+      if (attr == null)
+         {
+         System.out.println(">>> attr: is null.");
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>MiscJpf Bug 37949 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 37949 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug37949/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Bug 37949 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 37949 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+package miscJpf.bug38484;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.upload.FormFile;
+import org.apache.struts.upload.MultipartRequestHandler;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private int _cnter = 0;
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   public Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _cnter = 0;
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   public Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      if (this.getRequest().isSecure() == false)
+          {
+          return new Forward("gotoError");
+          }
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   public Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      _cnter++;
+      if (this.getRequest().isSecure() == true)
+          {
+          return new Forward("gotoError");
+          }
+      if (_cnter == 1) return new Forward("gotoPg1");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="struts-html.tld" prefix="html" %>
+
+<netui:html>
+   <head>
+      <title>MiscJpf Bug 38484 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 38484 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <font color="blue">
+            This page should NOT be secure, (http).  If it is, the test failed.
+            <br/>
+            The first time you see this page press the "Absolute" link, the second time
+            press the "Relative" link.
+         </font>
+         <br/><br/>
+         <netui:anchor href="/coreWeb/miscJpf/bug38484/action1.do">Absolute</netui:anchor>
+         <br/><br/>
+         <netui:anchor href="../bug38484/action1.do">Relative</netui:anchor>
+      </center>
+   </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="struts-html.tld" prefix="html" %>
+
+<netui:html>
+   <head>
+      <title>MiscJpf Bug 38484 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 38484 test - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <font color="blue">
+            This page should be secure, (https).  If it is not, the test failed.
+         </font>
+         <br/><br/>
+         <netui:anchor action="action2">Continue...</netui:anchor>
+      </center>
+   </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug38484/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>MiscJpf Bug 38484 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 38484 test - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,117 @@
+package miscJpf.bug39028;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.ActionNotFoundException;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:catch     type="org.apache.beehive.netui.pageflow.ActionNotFoundException"
+ *                method="exceptionHandler"
+ * @jpf:forward   name="gotoDone"   path="/resources/jsp/done.jsp"
+ * @jpf:forward   name="gotoError"  path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = org.apache.beehive.netui.pageflow.ActionNotFoundException.class,
+            method = "exceptionHandler") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   int      _cnter   = 0;
+   String   _visit;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   public Forward begin()
+      {
+      _cnter = 0;
+      _visit = Integer.toString(++_cnter);
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1", "visit", _visit);
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="currentPage" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "currentPage",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   public Forward action1()
+      {
+      _visit = Integer.toString(++_cnter);
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("currentPage", "visit", _visit);
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="badAction" path="badAction.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "badAction",
+                path = "badAction.do") 
+        })
+   public Forward action2()
+      {
+      _visit = Integer.toString(++_cnter);
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("badAction", "visit", _visit);
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   public Forward finish()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * @jpf:exception-handler
+    * @jpf:forward name="current" return-to="currentPage"
+    */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "current",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   public Forward exceptionHandler(org.apache.beehive.netui.pageflow.ActionNotFoundException e
+                            ,String actionName
+                            ,String message
+                            ,Object inForm
+                           )
+      {
+      System.out.println(">>> Jpf1.exceptionHandler");
+      return new Forward("current", "visit", _visit);
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ page language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="struts-html.tld" prefix="html" %>
+
+<netui:html>
+   <head>
+      <title>MiscJpf Bug 39028 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 39028 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <netui-data:declarePageInput name="visit" type="int" />
+      <center>
+         <font color="blue">
+            Page visit: <font color="blue">"<netui:label value="${pageInput.visit}" />"</font>
+         </font>
+         <br/><br/>
+         The 1st time you see this page, press here:
+         <netui:anchor action="action1">Continue...</netui:anchor>
+
+         <br/><br/>
+         The 2nd time you see this page, press here:
+         <netui:anchor action="action2">Continue...</netui:anchor>
+
+         <br/><br/>
+         The 3rd time you see this page, press here:
+         <netui:anchor action="action2">Continue...</netui:anchor>
+
+         <br/><br/>
+         The 4th time you see this page, press here:
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug39028/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>MiscJpf Bug 39028 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 39028 test - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+package miscJpf.bug40284;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionServlet;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp" redirect="true"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp",
+                redirect = true) 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>MiscJpf Bug 40284 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 40284 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40284/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Bug 40284 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 40284 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+package miscJpf.bug40380;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionServlet;
+
+/**
+ * @jpf:controller
+ * @jpf:catch type="org.apache.beehive.netui.pageflow.NoPreviousActionException" method="exceptionHandler"
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = org.apache.beehive.netui.pageflow.NoPreviousActionException.class,
+            method = "exceptionHandler") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="prevAction" return-to="previousAction"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "prevAction",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("prevAction");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * @jpf:exception-handler
+    */
+    @Jpf.ExceptionHandler(
+        )
+   public Forward exceptionHandler(org.apache.beehive.netui.pageflow.NoPreviousActionException e
+                                   ,String actionName
+                                   ,String message
+                                   ,Object inForm
+                                  )
+      {
+      System.out.println(">>> Jpf1.exceptionHandler");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>MiscJpf Bug40380 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug40380 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40380/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Bug40380 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug40380 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+package miscJpf.bug40854;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionServlet;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private int    _cnt     = 0;
+   private String _key     = "paramKey";
+   private String _value   = "paramValue";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp" redirect="true"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp",
+                redirect = true) 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addQueryParam(_key, _value);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="currPg" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "currPg",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("currPg");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="currPg" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "currPg",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("currPg");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   public int getCounter()
+      {
+      return _cnt;
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>MiscJpf Bug40854 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug40854 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green">
+            We will visit this page 3 times.  Check the URL bar on the browser
+            for a parameter.
+            <br/>If the parameter is not there the tests has failed.
+            </font>
+            <br/><br/>
+            First visit: <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second visit: <netui:anchor action="action2">Continue...</netui:anchor>
+            <br/><br/>
+            Third visit: <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40854/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Bug40854 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug40854 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,69 @@
+package miscJpf.bug40862;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.ClassA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private final static int      _SIZE       = 50;
+   private final static String   _STRING     = "Repeater string: ";
+   private              String   _str[];
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _str = new String[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _str[i] = new String(_STRING + Integer.toString(i));
+         }
+      // Set a couple of the entries to null.
+      _str[2] = null;
+      _str[7] = null;
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   public String[] getStrArr()
+      {
+      return _str;
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug40862</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug40862 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with MiscJpf</font></h2>
+         <br/><br/>
+
+         <netui-data:repeater dataSource="pageFlow.strArr">
+             <netui-data:repeaterItem>
+                 <netui:label value="${container.item}" />
+                 <netui-data:getData resultId="item" value="${container.item}"/>
+                 <%
+                     String currentItem = (String) pageContext.getAttribute("item");
+                     System.out.println(currentItem);
+                 %>
+                 <br/>
+             </netui-data:repeaterItem>
+         </netui-data:repeater>
+
+
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug40862/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>MiscJpf Bug40862</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug40862 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,123 @@
+package miscJpf.bug41007;
+
+import org.apache.beehive.netui.pageflow.FormData;
+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.HttpSession;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward   name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward   name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   FormA    _forma      = new FormA();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoSubJpf1" path="subJpf/SubJpf1.jpf"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSubJpf1",
+                path = "subJpf/SubJpf1.jpf") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoSubJpf1");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward return1()
+      {
+      System.out.println(">>> Jpf1.return1");
+      return new Forward("gotoError");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward return1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.return1(FormA)");
+      return new Forward("gotoError");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward return1(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.return1(FormB)");
+      return new Forward("gotoError");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward return2()
+      {
+      System.out.println(">>> Jpf1.return2");
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean FormB
+    ***************************************************************************/
+   public static class FormB extends FormData
+      {
+      public static final  String   STR_VAL3 = "String 3 value";
+      private              String   _str     = STR_VAL3;
+
+      // String1 getter/setter
+      //------------------------------------------------------------------------
+      public void setString3(String inVal)
+         {
+         _str = inVal;
+         }
+      public String getString3()
+         {
+         return _str;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug41007 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug41007 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui:anchor action="action1">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>MiscJpf Bug41007 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug41007 test - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/subJpf/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/subJpf/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+package miscJpf.bug41007.subJpf;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import miscJpf.bug41007.Jpf1.FormB;
+import shared.FormA;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:catch  type="org.apache.beehive.netui.pageflow.IllegalOutputFormTypeException"
+ *             method="exceptionHandler"
+ */
+@Jpf.Controller(
+    nested = true,
+    catches = {
+        @Jpf.Catch(
+            type = org.apache.beehive.netui.pageflow.IllegalOutputFormTypeException.class,
+            method = "exceptionHandler") 
+    })
+public class SubJpf1 extends PageFlowController
+   {
+   public static final String FLD1_VALUE  = "SubJpf1 Fld1 Value";
+   public static final String FLD2_VALUE  = "SubJpf1 Fld2 Value";
+
+   private FormA _formA  = new FormA();
+   private FormB _formB  = new FormB();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="pg1" path="SubJsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "pg1",
+                path = "SubJsp1.jsp") 
+        })
+   protected Forward begin()
+       {
+       System.out.println(">>> SubJpf1.begin");
+       return new Forward("pg1");
+       }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="return1" return-form-type="shared.FormA"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "return1",
+                outputFormBeanType = shared.FormA.class) 
+        })
+   protected Forward action1()
+       {
+       System.out.println(">>> SubJpf1.action1");
+       return new Forward("return", _formB);
+       }
+
+   /**
+    * If you replace the @jpf:forward with the one below and swap the return
+    * lines the test works fine.
+    *
+    * @jpf:exception-handler
+    * @jpf:forward name="returnHome" return-action="return2"
+    */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "returnHome",
+                returnAction = "return2") 
+        })
+   public Forward exceptionHandler(org.apache.beehive.netui.pageflow.IllegalOutputFormTypeException e
+                                   ,String actionName
+                                   ,String message
+                                   ,Object inForm
+                                  )
+      {
+      System.out.println(">>> Jpf1.exceptionHandler");
+      return new Forward("returnHome");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/subJpf/SubJsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug41007/subJpf/SubJsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug41007 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug41007 test - SubJsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui:anchor action="action1">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,61 @@
+package miscJpf.bug42486;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println( ">>> Jpf1.begin" );
+      return new Forward( "gotoPg1" );
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println( ">>> Jpf1.finish" );
+      return new Forward( "gotoDone" );
+      }
+
+   public Iterator getFoo()
+      {
+      LinkedHashMap map = new LinkedHashMap();
+      map.put( "a", "b" );
+      return map.entrySet().iterator();
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug42486</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug42486 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing infinite loop</font></h2>
+         <br/><br/>
+
+         <netui-data:repeater dataSource="pageFlow.foo">
+            <netui-data:repeaterItem>
+                <netui-data:getData value="${container.item.key}" resultId="curVal"/>
+                 <br/>
+            </netui-data:repeaterItem>
+         </netui-data:repeater>
+
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42486/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>MiscJpf Bug42486</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug42486 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+package miscJpf.bug42846;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println( ">>> Jpf1.begin" );
+      return new Forward( "gotoPg1" );
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println( ">>> Jpf1.finish" );
+      return new Forward( "gotoDone" );
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug42846</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug42846 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageFlow Scoping</font></h2>
+         The two links below will pop new browser windows.  Pop them both then
+         change the values in the text boxes and submit the changes.  Make sure
+         that the changes made in window do not effect the other window.
+         <br/><br/>
+         <netui:anchor  href="/coreWeb/miscJpf/bug42846/jpfA/Jpf1.jpf"
+                        target="_windowA" >JpfA</netui:anchor>
+         <br/><br/>
+         <netui:anchor  href="/coreWeb/miscJpf/bug42846/jpfB/Jpf1.jpf"
+                        target="_windowB" >JpfB</netui:anchor>
+         <br/><br/>
+         <netui:anchor action="finish">Finish</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>MiscJpf Bug42846</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug42846 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfA/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfA/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+package miscJpf.bug42846.jpfA;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+
+   public String field1 = "Value 1";
+   public String field2 = "Value 2";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println( ">>> jpfA:Jpf1.begin" );
+      return new Forward( "gotoPg1" );
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println( ">>> jpfA:Jpf1.action1()" );
+      return new Forward( "gotoPg1" );
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println( ">>> jpfA:Jpf1.finish" );
+      return new Forward( "gotoDone" );
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfA/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfA/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug42846</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug42846 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing pageflow scope</font></h2>
+         Change the values below then submit.  Make sure that the changes do not
+         effect the other browser window.
+         <br/><br/>
+         <netui:form action="action1">
+            <netui:textBox dataSource="pageFlow.field1" />
+            <br/>
+            <netui:textBox dataSource="pageFlow.field2" />
+            <br/><br/>
+            <netui:button action="action1" value="Action1" type="submit"/>
+         </netui:form>
+         <br/><br/>
+         <netui:anchor action="finish">Finish</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfB/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfB/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+package miscJpf.bug42846.jpfB;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+
+   public String field1 = "Value 1";
+   public String field2 = "Value 2";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println( ">>> jpfB:Jpf1.begin" );
+      return new Forward( "gotoPg1" );
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println( ">>> jpfB:Jpf1.action1()" );
+      return new Forward( "gotoPg1" );
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println( ">>> jpfB:Jpf1.finish" );
+      return new Forward( "gotoDone" );
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfB/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/bug42846/jpfB/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>MiscJpf Bug42846</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug42846 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing pageflow scope</font></h2>
+         Change the values below then submit.  Make sure that the changes do not
+         effect the other browser window.
+         <br/><br/>
+         <netui:form action="action1">
+            <netui:textBox dataSource="pageFlow.field1" />
+            <br/>
+            <netui:textBox dataSource="pageFlow.field2" />
+            <br/><br/>
+            <netui:button action="action1" value="Action1" type="submit"/>
+         </netui:form>
+         <br/><br/>
+         <netui:anchor action="finish">Finish</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/test13/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/test13/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>MiscJpf Test13</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Test13 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="../../miscJpf/test13/loadStruts.do">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/test13/submit.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/miscJpf/test13/submit.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+<%@ page language="java" %>
+<%@ taglib uri="struts-bean.tld" prefix="bean" %>
+<%@ taglib uri="struts-html.tld" prefix="html" %>
+<%@ taglib uri="struts-logic.tld" prefix="logic" %>
+
+<html>
+   <head>
+      <title>MiscJpf Test13</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Test13 - submit.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <html:errors/>
+      </center>
+
+      <html:form action="/submit">
+         <table align="center" width="50%" border="0" >
+            <tr align="center">
+               <td align="right">Last Name:</td>
+               <td align="left"><html:text property="lastName" /></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Address:</td>
+               <td align="left"><html:textarea property="address" /></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Sex:</td>
+               <td align="left">
+                  <html:radio property="sex" value="M" />Male
+                  <html:radio property="sex" value="F" />Female
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="right">Married:</td>
+               <td align="left"><html:checkbox property="married" /></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Age:</td>
+               <td align="left"><html:select property="age">
+                                <html:option     value="a">0-19</html:option>
+                                <html:option     value="b">20-49</html:option>
+                                <html:option     value="c">50-</html:option>
+                                </html:select>
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="center" colspan="2"><br/><br/><html:submit/></td>
+            </tr>
+         </table>
+      </html:form>
+
+      <center>
+         <logic:present name="lastName" scope="request" >
+            Hello
+            <logic:equal name="submitForm" property="age" value="a" >
+               young
+            </logic:equal>
+            <logic:equal name="submitForm" property="age" value="c" >
+               old
+            </logic:equal>
+            <bean:write name="lastName" scope="request"/>
+         </logic:present>
+      </center>
+   </body>
+</html>
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/MockPortal.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/MockPortal.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="mockportal.tld" prefix="mp" %>
+
+<html>
+<head>
+<title>Mock Portal (/mockportal)</title>
+</head>
+
+<h3>Mock Portal (/mockportal)</h3>
+<body>
+
+    <mp:mockPortal>
+        <mp:mockPortlet portletID="returnTo1" pageFlowURI="/pageFlowCore/returnToTest/returnToTestController.jpf" verbose="false" />
+        <mp:mockPortlet portletID="returnTo2" pageFlowURI="/pageFlowCore/returnToTest/returnToTestController.jpf" verbose="false" />
+    </mp:mockPortal>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="mockportal.tld" prefix="mp" %>
+
+<html>
+<head>
+<title>Mock Portal Tests</title>
+</head>
+
+<body>
+<h3>Mock Portal Tests</h3>
+
+<netui:anchor href="MockPortal.jsp">basic MockPortal test</netui:anchor><br>
+<netui:anchor href="listenTo/ListenToPortal.jsp">tests "listenTo" and exception-handling</netui:anchor><br>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/ListenToPortal.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/ListenToPortal.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="mockportal.tld" prefix="mp" %>
+
+<html>
+<head>
+<title>Mock Portal - listenTo</title>
+</head>
+
+<h3>Mock Portal - listenTo</h3>
+<body>
+
+    <mp:mockPortal>
+        <mp:mockPortlet portletID="a1" pageFlowURI="/mockportal/listenTo/listenToA/aController.jpf" verbose="false" />
+        <mp:mockPortlet portletID="b1" pageFlowURI="/mockportal/listenTo/listenToB/BController.jpf" verbose="false" listenTo="a1" />
+    </mp:mockPortal>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToA/aController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToA/aController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,174 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri Aug 22 08:57:00 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package mockportal.listenTo.listenToA;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/a/aController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:bothHave.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:bothHave.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="196,170,170,144" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:onlyA.do">
+ *   <property value="400" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:onlyA.do@">
+ *   <property value="400,400,338,276" name="elbowsX"/>
+ *   <property value="196,92,92,92" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:bothHave.do@">
+ *   <property value="229,229,229,229" name="elbowsX"/>
+ *   <property value="144,170,170,196" name="elbowsY"/>
+ *   <property value="South_0" name="fromPort"/>
+ *   <property value="North_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:onlyA.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="103,103,232,232" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/a/aController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:bothHave.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:bothHave.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='196,170,170,144' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:onlyA.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:onlyA.do@'>",
+        "  <property value='400,400,338,276' name='elbowsX'/>",
+        "  <property value='196,92,92,92' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:bothHave.do@'>",
+        "  <property value='229,229,229,229' name='elbowsX'/>",
+        "  <property value='144,170,170,196' name='elbowsY'/>",
+        "  <property value='South_0' name='fromPort'/>",
+        "  <property value='North_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:onlyA.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='103,103,232,232' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class aController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward bothHave()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward onlyA()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToA/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToA/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            A
+        </title>
+    </head>
+    <body>
+        <h3>A</h3>
+        <netui:anchor action="bothHave">bothHave</netui:anchor>
+        <br>
+        <netui:anchor action="onlyA">onlyA</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/bController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/bController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,157 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Fri Aug 22 08:57:15 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package mockportal.listenTo.listenToB;
+import org.apache.beehive.netui.pageflow.ActionNotFoundException;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:catch type="ActionNotFoundException" method="doNothing"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/b/bController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:bothHave.do">
+ *   <property value="240" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:handled.jsp@#@action:begin.do@">
+ *   <property value="80,80,80,80" name="elbowsX"/>
+ *   <property value="176,160,160,144" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:handled.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#handled.jsp#@action:bothHave.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = ActionNotFoundException.class,
+            method = "doNothing") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/b/bController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:bothHave.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:handled.jsp@#@action:begin.do@'>",
+        "  <property value='80,80,80,80' name='elbowsX'/>",
+        "  <property value='176,160,160,144' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:handled.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#handled.jsp#@action:bothHave.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class bController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="handled.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "handled.jsp") 
+        })
+    protected Forward bothHave()
+    {
+        return new Forward("success");
+    }
+    
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="current" return-to="currentPage"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "current",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward doNothing( ActionNotFoundException e, String actionName, String message, Object form )
+    {
+        getRequest().setAttribute( "note", "Note: doing nothing for action " + actionName + "." );
+        return new Forward( "current" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/handled.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/handled.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            handled bothHave
+        </title>
+    </head>
+    <body>
+        handled bothHave
+        <br>
+        <font color="blue"><netui:label value="${requestScope.note}"/></font>
+        <br>
+        <netui:anchor action="begin">start over</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/mockportal/listenTo/listenToB/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            B
+        </title>
+    </head>
+    <body>
+        <h3>B</h3>
+        
+        <font color="blue"><netui:label value="${requestScope.note}"/></font>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anyBeanOverload/AnyBeanOverloadController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anyBeanOverload/AnyBeanOverloadController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+package pageFlowCore.anyBeanOverload;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.HashMap;
+
+@Jpf.Controller
+public class AnyBeanOverloadController extends PageFlowController
+{
+    private String _message;
+
+    @Jpf.Action( forwards={ @Jpf.Forward( name="index", path="index.jsp") } )
+    public Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    @Jpf.Action( forwards={ @Jpf.Forward( name="overload", path="overload.do" ) } )
+    public Forward chainToString( String form )
+    {
+        return new Forward( "overload", "hello" );
+    }
+
+    @Jpf.Action( forwards={ @Jpf.Forward( name="overload", path="overload.do" ) } )
+    public Forward chainToHashMap( String form )
+    {
+        return new Forward( "overload", new HashMap() );
+    }
+
+    @Jpf.Action( forwards={ @Jpf.Forward( name="index", path="index.jsp" ) } )
+    public Forward overload( String form )
+    {
+        _message = "in String overload: " + form;
+        return new Forward( "index" );
+    }
+
+    @Jpf.Action( forwards={ @Jpf.Forward( name="index", path="index.jsp" ) } )
+    public Forward overload( HashMap form )
+    {
+        _message = "in HashMap overload";
+        return new Forward( "index" );
+    }
+
+    public String getMessage()
+    {
+        return _message;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anyBeanOverload/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anyBeanOverload/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<html>
+    <body>
+        <font color="red"><netui:label value="${pageFlow.message}"/></font>
+
+        <br>
+        <br>
+        <netui:form action="overload">
+            <netui:button>hit overloaded action (should get String version)</netui:button>
+        </netui:form>
+
+        <br>
+        <netui:anchor action="chainToString">chainToString</netui:anchor>
+        <br>
+        <netui:anchor action="chainToHashMap">chainToString</netui:anchor>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/AnyBeanController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/AnyBeanController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+package pageFlowCore.anybean;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.Serializable;
+
+@Jpf.Controller
+public class AnyBeanController extends PageFlowController
+{
+    private SomeBean _someBean;
+
+
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        })
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="submitPage", path="submit.jsp")
+        })
+    protected Forward showSubmit()
+    {
+        SomeBean init = new SomeBean();
+        init.setFoo( "initial value" );
+        return new Forward( "submitPage", init );
+    }
+
+    @Jpf.Action(
+        useFormBean="_someBean",
+        forwards={ 
+            @Jpf.Forward(name = "success", path = "result.jsp")
+        })    
+    protected Forward submit( SomeBean bean )    
+    {
+        return new Forward( "success", "foo", bean.getFoo() );
+    }
+    
+    public static class SomeBean
+        implements Serializable
+    {
+        private String _foo;
+        
+        public SomeBean()
+        {
+        }
+
+        public SomeBean( String foo )
+        {
+            _foo = foo;
+        }
+
+        public String getFoo()
+        {
+            return _foo;
+        }
+
+        public void setFoo( String foo )
+        {
+            _foo = foo;
+        }
+    }
+
+    @Jpf.Action(
+        forwards={
+            @Jpf.Forward(name = "success", path = "/pageFlowCore/anybean/nested/NestedController.jpf")
+        })
+    protected Forward goNested()
+    {
+        return new Forward("success", new pageFlowCore.anybean.nested.NestedController.Input( "hello" ));
+    }
+
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="nestingResult", path="nestingResult.jsp")
+        })
+    protected Forward nestedDone( pageFlowCore.anybean.nested.NestedController.Output output )
+    {
+        return new Forward( "nestingResult", "result", output );
+    }
+
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="submit", path="submit.do")
+        })
+    protected Forward chain()
+    {
+        return new Forward( "submit", new SomeBean( "from a chained action" ) );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Start</h3>
+
+        <netui:anchor action="showSubmit">showSubmit</netui:anchor>
+        <br>
+        <netui:anchor action="goNested">goNested</netui:anchor>
+        <br>
+        <netui:anchor action="chain">chain actions</netui:anchor>
+    </body>
+</netui:html>
+
+  

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nested/NestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nested/NestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+package pageFlowCore.anybean.nested;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.Serializable;
+
+@Jpf.Controller( nested=true )
+public class NestedController extends PageFlowController
+{
+    public static class Input implements Serializable
+    {
+        private String _msg;
+
+        public Input( String msg )
+        {
+            _msg = msg;
+        }
+
+        public Input()
+        {
+        }
+
+        public String getMsg()
+        {
+            return _msg;
+        }
+
+        public void setMsg( String msg )
+        {
+            _msg = msg;
+        }
+    }
+
+    public static class Output extends Input
+    {
+        public Output( String msg )
+        {
+            super( msg );
+        }
+
+        public Output()
+        {
+            super( "default msg" );
+        }
+    }
+
+    private Input _input = new Input();
+    private Output _output;
+
+    @Jpf.Action(
+        useFormBean="_input",
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        })
+    protected Forward begin( Input input )
+    {
+        return new Forward("index");
+    }
+
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="done", returnAction="nestedDone", outputFormBeanType=Output.class)
+        })
+    protected Forward done1()
+    {
+    	return new Forward( "done" );
+    }
+
+    @Jpf.Action(
+        useFormBean="_output",
+        forwards={
+           @Jpf.Forward(name="done", returnAction="nestedDone", outputFormBean="_output")
+        })
+    protected Forward done2( Output output )
+    {
+        _output.setMsg( _input.getMsg() );
+    	return new Forward( "done" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+
+        <netui:anchor action="done1">done (return with outputFormBeanType)</netui:anchor>
+        <br/>
+        <netui:anchor action="done2">done (return with outputFormBean)</netui:anchor>
+
+        </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nestingResult.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/nestingResult.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Nesting Result</h3>
+
+        msg: <netui:label value="${pageInput.result.msg}"/>
+        <br>
+        <br>
+        <netui:anchor action="begin">go to start</netui:anchor>
+    </body>
+</netui:html>
+
+  
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/result.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/result.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Result</h3>
+
+        foo: <b><netui:label value="${pageInput.foo}"/></b>
+        <br>
+        <br>
+        <netui:anchor action="begin">go to start</netui:anchor>
+    </body>
+</netui:html>
+
+  
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/submit.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/anybean/submit.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Submit Bean</h3>
+
+        <netui:form action="submit">
+            foo: <netui:textBox dataSource="actionForm.foo"/>
+            <br>
+            <netui:button/>
+        </netui:form>
+    </body>
+</netui:html>
+
+  

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,269 @@
+package pageFlowCore.exceptions;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.*;
+
+
+/**
+ * @jpf:catch type="Controller.GlobalCatchToMethodException"
+ *            method="globalHandler"
+ *            message-key="theMessage"
+ * @jpf:catch type="pageFlowCore.exceptions.Controller$GlobalCatchToPageException"
+ *            path="error.jsp"
+ *            message="This happened because of a GlobalCatchToPageException"
+ * @jpf:catch type="org.apache.beehive.netui.pageflow.UnfulfilledRolesException"
+ *            method="failedRolesHandler"
+ *
+ * @jpf:message-resources resources="exceptions.Messages"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = Controller.GlobalCatchToMethodException.class,
+            method = "globalHandler",
+            messageKey = "theMessage"),
+        @Jpf.Catch(
+            type = pageFlowCore.exceptions.Controller.GlobalCatchToPageException.class,
+            path = "error.jsp",
+            message = "This happened because of a GlobalCatchToPageException"),
+        @Jpf.Catch(
+            type = org.apache.beehive.netui.pageflow.UnfulfilledRolesException.class,
+            method = "failedRolesHandler") 
+    },
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "exceptions.Messages") 
+    })
+public class Controller extends PageFlowController
+{
+    private String messageFromMethod;
+
+    public String getMessageFromMethod()
+    {
+        return messageFromMethod;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="startPage" path="start.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "startPage",
+                path = "start.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "startPage" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:catch type="LocalCatchToMethodException"
+     *            method="localHandler"
+     */
+    @Jpf.Action(
+        catches = {
+            @Jpf.Catch(
+                type = LocalCatchToMethodException.class,
+                method = "localHandler") 
+        })
+    protected Forward catchLocalToMethod()
+        throws Exception
+    {
+        throw new LocalCatchToMethodException( "this is a LocalCatchToMethodException" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:catch type="LocalCatchToPageException"
+     *            path="/pageFlowCore/exceptions/error.jsp"
+     *            message="This happened because of a LocalCatchToPageException"
+     */
+    @Jpf.Action(
+        catches = {
+            @Jpf.Catch(
+                type = LocalCatchToPageException.class,
+                path = "/pageFlowCore/exceptions/error.jsp",
+                message = "This happened because of a LocalCatchToPageException") 
+        })
+    protected Forward catchLocalToPage()
+        throws Exception
+    {
+        throw new LocalCatchToPageException( "this is a LocalCatchToPageException" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward catchGlobalToMethod()
+        throws Exception
+    {
+        throw new GlobalCatchToMethodException( "this is a GlobalCatchToMethodException" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward catchGlobalToPage()
+        throws Exception
+    {
+        throw new GlobalCatchToPageException( "this is a GlobalCatchToPageException" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="startPage" path="start.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "startPage",
+                path = "start.jsp") 
+        })
+    protected Forward goBack( EmptyForm emptyForm )
+    {
+        return new Forward( "startPage" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwUnhandled()
+        throws Exception
+    {
+        throw new UnhandledException( "this is an UnhandledException" );
+    }
+
+    /**
+     * @jpf:action roles-allowed="coolusers,supercoolusers"
+     */
+    @Jpf.Action(
+        rolesAllowed = {
+            "coolusers",
+            "supercoolusers"
+        })
+    protected Forward failRoles()
+        throws Exception
+    {
+        assert false;
+        return null;
+    }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="error.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage1",
+                path = "error.jsp") 
+        })
+    protected Forward globalHandler( GlobalCatchToMethodException ex, String actionName,
+                                     String message, Object form )
+    {
+        messageFromMethod = "caught " + ex + " in globalHandler; message = " + message;
+        return new Forward( "errorPage1" );
+    }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="error.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage2",
+                path = "error.jsp") 
+        })
+    protected Forward localHandler( LocalCatchToMethodException ex, String actionName,
+                                    String message, Object form )
+    {
+        messageFromMethod = "caught " + ex + " in localHandler";
+        return new Forward( "errorPage2" );
+    }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="error.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage3",
+                path = "error.jsp") 
+        })
+    protected Forward failedRolesHandler( UnfulfilledRolesException ex, String actionName,
+                                          String message, Object form )
+    {
+        messageFromMethod = "Caught " + ex + " in globalHandler; none of the roles ";
+        for ( int i = 0; i < ex.getRoleNames().length; ++i )
+        {
+            messageFromMethod += ( i > 0 ? ", " : "" ) + ex.getRoleNames()[i];
+        }
+        messageFromMethod += " applied.";
+
+        return new Forward( "errorPage3" );
+    }
+
+    public static class GlobalCatchToMethodException extends Exception
+    {
+        public GlobalCatchToMethodException( String msg )
+        {
+            super( msg );
+        }
+    }
+
+    public static class GlobalCatchToPageException extends Exception
+    {
+        public GlobalCatchToPageException( String msg )
+        {
+            super( msg );
+        }
+    }
+
+    public static class LocalCatchToMethodException extends Exception
+    {
+        public LocalCatchToMethodException( String msg )
+        {
+            super( msg );
+        }
+    }
+
+    public static class LocalCatchToPageException extends Exception
+    {
+        public LocalCatchToPageException( String msg )
+        {
+            super( msg );
+        }
+    }
+
+    public static class UnhandledException extends Exception
+    {
+        public UnhandledException( String msg )
+        {
+            super( msg );
+        }
+    }
+
+    public static class EmptyForm extends FormData
+    {
+    }
+
+    /**
+     * We're just using this to clear out messageFromMethod on each request.
+     */
+    protected void beforeAction()
+    {
+        messageFromMethod = "";
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title>Error Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>Error Page</h3>
+
+<netui:form action="goBack">
+
+    Message from method: <b><netui:label value="${pageFlow.messageFromMethod}" /></b>
+    <br>
+    <br>
+    Exception message: <b><netui:exceptions showStackTrace="false" showMessage="true"/></b>
+    <br>
+    <br>
+    <netui:button type="submit">Go Back</netui:button>
+
+</netui:form>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/start.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/exceptions/start.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title>ExceptionTest - Start Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>ExceptionTest - Start Page</h3>
+
+<netui:anchor action="catchLocalToMethod">
+    handle a local action-method exception with a method
+</netui:anchor>
+<br>
+<netui:anchor action="catchLocalToPage">
+    handle a local action-method exception by forwarding to a page
+</netui:anchor>
+<br>
+<netui:anchor action="catchGlobalToMethod">
+    handle a global exception with a method
+</netui:anchor>
+<br>
+<netui:anchor action="catchGlobalToPage">
+    handle a global exception by forwarding to a page
+</netui:anchor>
+<br>
+<netui:anchor action="throwUnhandled">
+    Generate an unhandled exception
+</netui:anchor>
+<br>
+<netui:anchor action="failRoles">
+    Try and raise an action that requires a role you don't fulfill.
+</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,168 @@
+package pageFlowCore.forwards;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
+import org.apache.beehive.netui.pageflow.internal.DefaultHandler;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.*;
+import javax.servlet.*;
+import java.io.*;
+import java.net.URI;
+
+
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/pageFlowCore/forwards/Controller.jpf'/>", 
+        "<pageflow-object id='formbean:Redirector'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='action:redirect.do'/>", 
+        "<pageflow-object id='action:withQueryParams.do'/>", 
+        "<pageflow-object id='action:randomURI.do'/>", 
+        "<pageflow-object id='action:uriRedirect.do'/>", 
+        "<pageflow-object id='action:uriWebappForward.do'/>", 
+        "<pageflow-object id='action:uriRelativeForward.do'/>", 
+        "<pageflow-object id='action:uriRelativeRedirect.do'/>", 
+        "<pageflow-object id='action:setPath.do'/>", 
+        "<pageflow-object id='page:index.jsp'/>", 
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='forward:path#indexRedirect#index.jsp#@action:redirect.do@'/>", 
+        "<pageflow-object id='forward:path#indexRedirect#index.jsp#@action:withQueryParams.do@'/>", 
+        "<pageflow-object id='dangling-fwd-dest:@forward:pathUnspecified#unused#null#@action:setPath.do@@'/>", 
+        "<pageflow-object id='forward:pathUnspecified#unused#null#@action:setPath.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:uriRelativeRedirect.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:uriRelativeForward.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:uriWebappForward.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:uriRedirect.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:withQueryParams.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:randomURI.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:setPath.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'/>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:redirect.do@'/>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    public static class Redirector extends DefaultHandler implements ForwardRedirectHandler
+    {
+        public void redirect( String uri, HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ServletException
+        {
+            PrintWriter writer = response.getWriter();
+
+            writer.println( "<html><head><title>Fake Redirect</title></head><body>" );
+            writer.println( "Fake redirect to: <b>" + uri + "</b><br><br>" );
+            writer.println( "<a href=\"begin.do\">go back</a>" );
+            writer.println( "</body></html>" );
+        }
+
+        public void forward( String uri, HttpServletRequest request, HttpServletResponse response )
+            throws IOException, ServletException
+        {
+            request.getRequestDispatcher( uri ).forward( request, response );
+        }
+    }    
+
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "indexRedirect",
+                path = "index.jsp",
+                redirect = true) 
+        })
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "indexRedirect",
+                path = "index.jsp",
+                redirect = true) 
+        })
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+
+
+    @Jpf.Action(
+        )
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+
+    @Jpf.Action(
+        )
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp" ), true );
+    }
+
+    @Jpf.Action(
+        )
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/pageFlowCore/forwards/Controller.jpf" ) );
+    }
+
+    @Jpf.Action(
+        )
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+
+    @Jpf.Action(
+        )
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "unused",
+                path = "") 
+        })
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/pageFlowCore/forwards/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,139 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<html>
+<head>
+<title>Index Page for <netui:content value="${pageFlow.URI}"/></title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for <netui:content value="${pageFlow.URI}"/></h3>
+
+<br><netui:anchor action="begin">forward to this page</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><netui:anchor action="redirect">redirect to this page</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><netui:anchor action="withQueryParams">redirect to this page, with query params</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><netui:anchor action="randomURI">redirect to google</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><netui:anchor action="uriRedirect">redirect to the netui webapp</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><netui:anchor action="uriWebappForward">forward to this page, using a webapp-relative URI</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><netui:anchor action="uriRelativeForward">forward to this page, using a relative URI</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><netui:anchor action="uriRelativeRedirect">redirect to this page, using a relative URI</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><netui:anchor action="setPath">forward to this page using Forward.setPath()</netui:anchor>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,271 @@
+package pageFlowCore.lifecycle;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.io.*;
+import java.util.*;
+import javax.servlet.http.*;
+import org.apache.struts.action.*;
+
+
+public class Controller extends PageFlowController
+{
+    private static final String INFO_LIST_ATTR = "info";
+
+    @org.apache.beehive.controls.api.bean.Control()
+    private TestControl ctrl;
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page1",
+                path = "page1.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "page1" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nested1",
+                path = "nested1/Controller.jpf") 
+        })
+    public Forward nest()
+    {
+        return new Forward( "nested1" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page1",
+                path = "page1.jsp") 
+        })
+    public Forward done()
+    {
+        return new Forward( "page1" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nullboy",
+                path = "nullflow/Controller.jpf") 
+        })
+    public Forward leave()
+    {
+        // Go to another pageflow so we can see onDestroy() work.
+        return new Forward( "nullboy" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "samePage",
+                navigateTo=Jpf.NavigateTo.currentPage) 
+        })
+    public Forward clear()
+    {
+        getSession().removeAttribute( INFO_LIST_ATTR );
+        getRequest().removeAttribute( "requestNum" );
+        return new Forward( "samePage" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "samePage",
+                navigateTo=Jpf.NavigateTo.currentPage) 
+        })
+    public Forward doNothing()
+    {
+        return new Forward( "samePage" );
+    }
+
+    protected void onCreate()
+    {
+        if ( getRequest().getParameter( "clearHistory" ) != null )
+        {
+            getSession().removeAttribute( INFO_LIST_ATTR );
+        }
+
+        dump( "onCreate", getRequest(), getResponse(), getSession(), getServlet(), null );
+    }
+
+    protected void beforeAction()
+    {
+        dump( "beforeAction", getRequest(), getResponse(), getSession(), getServlet(), getMapping() );
+    }
+
+    protected void afterAction()
+    {
+        dump( "afterAction", getRequest(), getResponse(), getSession(), getServlet(), getMapping() );
+    }
+    
+    protected void onDestroy( HttpSession session )
+    {
+        dump( "onDestroy", null, null, session, null, null );
+    }
+
+    
+    public static class Info
+    {
+        public String _label;
+        public String _ctrlMessage;
+        public Integer _requestNum;
+        public String _request;
+        public String _response;
+
+        public String getLabel()
+        {
+            return _label;
+        }
+
+        public void setLabel(String label)
+        {
+            _label = label;
+        }
+
+        public String getServlet()
+        {
+            return _servlet;
+        }
+
+        public void setServlet(String servlet)
+        {
+            _servlet = servlet;
+        }
+
+        public String getMapping()
+        {
+            return _mapping;
+        }
+
+        public void setMapping(String mapping)
+        {
+            _mapping = mapping;
+        }
+
+        public String getCtrlMessage()
+        {
+            return _ctrlMessage;
+        }
+
+        public void setCtrlMessage(String ctrlMessage)
+        {
+            _ctrlMessage = ctrlMessage;
+        }
+
+        public Integer getRequestNum()
+        {
+            return _requestNum;
+        }
+
+        public void setRequestNum(Integer requestNum)
+        {
+            _requestNum = requestNum;
+        }
+
+        public String getRequest()
+        {
+            return _request;
+        }
+
+        public void setRequest(String request)
+        {
+            _request = request;
+        }
+
+        public String getResponse()
+        {
+            return _response;
+        }
+
+        public void setResponse(String response)
+        {
+            _response = response;
+        }
+
+        public String getSession()
+        {
+            return _session;
+        }
+
+        public void setSession(String session)
+        {
+            _session = session;
+        }
+
+        public String _session;
+        public String _mapping;
+        public String _servlet;
+    }
+
+    private void dump( String label, HttpServletRequest request, HttpServletResponse response,
+                       HttpSession session, ActionServlet servlet, ActionMapping mapping )
+    {
+        dump( label, request, response, session, servlet, mapping, ctrl != null ? ctrl.sayHello() : null );
+    }
+
+    public static void dump( String label, HttpServletRequest request, HttpServletResponse response,
+                             HttpSession session, ActionServlet servlet, ActionMapping mapping,
+                             String ctrlMessage )
+    {
+        List infoList = ( List ) session.getAttribute( INFO_LIST_ATTR );
+        if ( infoList == null )
+        {
+            infoList = new ArrayList();
+            session.setAttribute( INFO_LIST_ATTR, infoList );
+        }
+
+        String nullStr = "[null]";
+        String presentStr = "[present]";
+        Info info = new Info();
+        info.setLabel(label);
+        info.setCtrlMessage(ctrlMessage != null ? ctrlMessage : nullStr);
+
+        Integer requestNum = null;
+
+        if ( request != null )
+        {
+            requestNum = ( Integer ) request.getAttribute( "requestNum" );
+        }
+        else
+        {
+            // We're in onDestroy -- no request.
+            requestNum = new Integer( -1 );
+        }
+
+        if ( requestNum == null )
+        {
+            for ( int i = infoList.size() -1; i >= 0; --i )
+            {
+                Info lastInfo = ( Info ) infoList.get( i );
+
+                if ( lastInfo.getRequestNum().intValue() != -1 )
+                {
+                    requestNum = new Integer( lastInfo.getRequestNum().intValue() + 1 );
+                    break;
+                }
+            }
+
+            if ( requestNum == null )
+            {
+                requestNum = new Integer( 1 );
+            }
+
+            request.setAttribute( "requestNum", requestNum );
+        }
+
+        info.setRequestNum(requestNum);
+        info.setRequest( request != null ? presentStr : nullStr );
+        info.setResponse( response != null ? presentStr : nullStr );
+        info.setSession( session != null ? presentStr : nullStr );
+        info.setMapping( mapping != null ? presentStr : nullStr );
+        info.setServlet( servlet != null ? presentStr : nullStr );
+
+        infoList.add( info );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/TestControl.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/TestControl.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package pageFlowCore.lifecycle; 
+
+
+@org.apache.beehive.controls.api.bean.ControlInterface()
+public interface TestControl 
+{ 
+    java.lang.String sayHello();
+    java.lang.String sayBye();
+} 

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/TestControlImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/TestControlImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+package pageFlowCore.lifecycle; 
+
+
+
+/**
+ * @jcs:jc-jar label="TestControl"
+ * @editor-info:code-gen control-interface="true"
+ */
+@org.apache.beehive.controls.api.bean.ControlImplementation()
+public class TestControlImpl implements TestControl
+{ 
+    /**
+     * @common:operation
+     */
+    public String sayHello()
+    {
+        return "hello there";
+    }
+
+    /**
+     * @common:operation
+     */
+    public String sayBye()
+    {
+        return "bye";
+    }
+} 

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/history.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/history.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+
+<br>
+<br>
+<table border="1">
+        <tr>
+            <td><i>request #</i></td>
+            <td><i>description</i></td>
+            <td><i>message from control</i></td>
+            <td><i>request</i></td>
+            <td><i>response</i></td>
+            <td><i>session</i></td>
+            <td><i>mapping</i></td>
+            <td><i>servlet</i></td>
+        </tr>
+<netui-data:repeater dataSource="session.info">
+    <netui-data:repeaterItem>
+        <tr>
+            <td><netui:label value="${container.item.requestNum}"/></td>
+            <td><b><netui:label value="${container.item.label}"/></b></td>
+            <td><netui:label value="${container.item.ctrlMessage}"/></td>
+            <td><netui:label value="${container.item.request}"/></td>
+            <td><netui:label value="${container.item.response}"/></td>
+            <td><netui:label value="${container.item.session}"/></td>
+            <td><netui:label value="${container.item.mapping}"/></td>
+            <td><netui:label value="${container.item.servlet}"/></td>
+        </tr>
+    </netui-data:repeaterItem>
+</netui-data:repeater>
+</table>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+package pageFlowCore.lifecycle.nested1;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.*;
+
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    public void onCreate()
+    {
+        pageFlowCore.lifecycle.Controller.dump( "onCreate() in nested1", getRequest(), getResponse(),
+                                                getSession(), getServlet(), null, null );
+    }
+
+    public void onDestroy( HttpSession session )
+    {
+        pageFlowCore.lifecycle.Controller.dump( "onDestroy() in nested1", null, null,
+                                                session, null, null, null );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nested2" path="nested2/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nested2",
+                path = "nested2/Controller.jpf") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "nested2" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="exit" return-action="done"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "exit",
+                returnAction = "done") 
+        })
+    public Forward done()
+    {
+        return new Forward( "exit" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+package pageFlowCore.lifecycle.nested1.nested2;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.*;
+
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    public void onCreate()
+    {
+        pageFlowCore.lifecycle.Controller.dump( "onCreate() in nested2", getRequest(), getResponse(),
+                                                getSession(), getServlet(), null, null );
+    }
+
+    public void onDestroy( HttpSession session )
+    {
+        pageFlowCore.lifecycle.Controller.dump( "onDestroy() in nested2", null, null,
+                                                session, null, null, null );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nested3" path="nested3/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nested3",
+                path = "nested3/Controller.jpf") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "nested3" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="exit" return-action="done"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "exit",
+                returnAction = "done") 
+        })
+    public Forward done()
+    {
+        return new Forward( "exit" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+package pageFlowCore.lifecycle.nested1.nested2.nested3;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.*;
+
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    public void onCreate()
+    {
+        pageFlowCore.lifecycle.Controller.dump( "onCreate() in nested3", getRequest(), getResponse(),
+                                                getSession(), getServlet(), null, null );
+    }
+
+    public void onDestroy( HttpSession session )
+    {
+        pageFlowCore.lifecycle.Controller.dump( "onDestroy() in nested3", null, null,
+                                                session, null, null, null );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="page1" path="page1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "page1",
+                path = "page1.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "page1" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="exit" return-action="done"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "exit",
+                returnAction = "done") 
+        })
+    public Forward done()
+    {
+        return new Forward( "exit" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="rootController" path="/pageFlowCore/lifecycle/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "rootController",
+                path = "/pageFlowCore/lifecycle/Controller.jpf") 
+        })
+    public Forward escapeNesting()
+    {
+        return new Forward( "rootController" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/page1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/page1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<netui:anchor action="done">done</netui:anchor>
+<br>
+<netui:anchor action="escapeNesting">escapeNesting</netui:anchor>
+
+<jsp:include page="../../../history.jsp"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nullflow/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/nullflow/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+package pageFlowCore.lifecycle.nullflow;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="goBack" path="/pageFlowCore/lifecycle/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                path = "/pageFlowCore/lifecycle/Controller.jpf") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "goBack" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/page1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/lifecycle/page1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<netui:anchor action="doNothing">run an empty action</netui:anchor>
+<br>
+<netui:anchor action="nest">create a nesting stack</netui:anchor>
+<br>
+<netui:anchor action="leave">leave this pageflow</netui:anchor>
+<br>
+<netui:anchor action="clear">clear the history</netui:anchor>
+
+<jsp:include page="history.jsp"/>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfErrors/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfErrors/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>PageFlow Errors</title>
+</head>
+<body>
+<h4>PageFlow Errors</h4>
+<netui:content value="${pageFlow.genErrors}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfErrors/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfErrors/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package pageFlowCore.pfErrors;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForward;
+
+public class Controller extends PageFlowController
+{
+    public String getGenErrors()
+    {
+        StringBuffer sb = new StringBuffer();
+        sb.append("<table border='1' cellspacing='0'cellpaddinig='2'>");
+
+        // get request
+        try {
+            HttpServletRequest req = getRequest();
+        }
+        catch (IllegalStateException e) {
+            sb.append("<tr><td>GetRequest Error</td><td>");
+            sb.append(e.getMessage());
+            sb.append("</td></tr>");
+        }
+
+        // get response
+        try {
+            HttpServletResponse resp = getResponse();
+        }
+        catch (IllegalStateException e) {
+            sb.append("<tr><td>GetResponse Error</td><td>");
+            sb.append(e.getMessage());
+            sb.append("</td></tr>");
+        }
+
+        // get session
+        try {
+            HttpSession session = getSession();
+        }
+        catch (IllegalStateException e) {
+            sb.append("<tr><td>GetSession Error</td><td>");
+            sb.append(e.getMessage());
+            sb.append("</td></tr>");
+        }
+
+        // get mapping
+        try {
+            ActionMapping map = getMapping();
+        }
+        catch (IllegalStateException e) {
+            sb.append("<tr><td>GetMapping Error</td><td>");
+            sb.append(e.getMessage());
+            sb.append("</td></tr>");
+        }
+        
+
+        sb.append("</table>");
+        return sb.toString();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfGlobalApp/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfGlobalApp/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>PageFlow Global Info</title>
+</head>
+<body>
+<h4>PageFlow Global Info</h4>
+<netui:anchor action="globalAction_getInfo">Get Global Info</netui:anchor>
+<hr />
+<netui:content value="${pageFlow.globalAppInfo}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfGlobalApp/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfGlobalApp/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,74 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package pageFlowCore.pfGlobalApp;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForward;
+
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/pageFlowCore/pfGlobalApp/Controller.jpf'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='page:Begin.jsp'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='action:globalAction_getInfo.do#global.Global.GlobalForm'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='80' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:globalAction_getInfo.do#global.Global.GlobalForm@'>", 
+        "  <property value='276,300,300,325' name='elbowsX'/>", 
+        "  <property value='72,72,72,72' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    protected transient global.Global globalApp;
+
+    public String getGlobalAppInfo()
+    {
+        return globalApp.getGlobalAppInfo();
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageFlow/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageFlow/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>PageFlow Errors</title>
+</head>
+<body>
+<h4>PageFlow Errors</h4>
+<netui:anchor action="getInfo">Generate Page Flow Calls</netui:anchor><br />
+<netui:anchor action="sendError">Generate An Error Page</netui:anchor>
+<hr />
+<netui:content value="${pageFlow.results}"/>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageFlow/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageFlow/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,171 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package pageFlowCore.pfPageFlow;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForward;
+
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/pageFlowCore/pfPageFlow/Controller.jpf'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='action:sendError.do'/>", 
+        "<pageflow-object id='action:getInfo.do'/>", 
+        "<pageflow-object id='page:Begin.jsp'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:sendError.do@'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:getInfo.do@'/>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:sendError.do@'>", 
+        "  <property value='204,170,170,136' name='elbowsX'/>", 
+        "  <property value='232,232,232,232' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:getInfo.do@'>", 
+        "  <property value='204,170,170,136' name='elbowsX'/>", 
+        "  <property value='243,243,361,361' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    StringBuffer _sb;
+    public String getResults()
+    {
+        return _sb.toString();
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        _sb = new StringBuffer();
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward sendError()
+    {
+        _sb = new StringBuffer();
+        try {
+            StringBuffer sb = new StringBuffer();
+            sb.append("Error raised from the Page Flow Test");
+            sb.append("<br /><a href='Controller.jpf'>Return</a>");
+            HttpServletResponse resp = getResponse();
+            sendError(sb.toString(), resp);
+        }
+        catch (java.io.IOException e) {
+            _sb.append("IOException trying to generate a sendError");
+            return new Forward("begin");
+        }
+        return null;
+
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward getInfo()
+    {
+        _sb = new StringBuffer();
+        _sb.append("<table border='1' cellspacing='0'cellpaddinig='2'>");
+
+        HttpServletRequest req = getRequest();
+        _sb.append("<tr><td>Request</td><td>");
+        _sb.append(req.getRequestURL());
+        _sb.append("</td></tr>");
+
+
+        HttpServletResponse resp = getResponse();
+        _sb.append("<tr><td>Response</td><td>Committed:");
+        _sb.append("" + resp.isCommitted());
+        _sb.append("</td></tr>");
+
+
+        HttpSession session = getSession();
+        session.setMaxInactiveInterval( 3600 );
+        _sb.append("<tr><td>Session</td><td>In active interval:");
+        _sb.append("" + session.getMaxInactiveInterval());
+        _sb.append("</td></tr>");
+
+        // nestable
+        _sb.append("<tr><td>Nestable</td><td>");
+        _sb.append("" + isNestable());
+        _sb.append("</td></tr>");
+
+        // nestable
+        _sb.append("<tr><td>PageFlow</td><td>");
+        _sb.append("" + isPageFlow());
+        _sb.append("</td></tr>");
+
+        // get action
+        _sb.append("<tr><td>Actions</td><td>");
+        String[] actions = getActions();
+        java.util.Arrays.sort( actions );
+        for (int i=0;i<actions.length;i++) {
+            _sb.append(actions[i]);
+            _sb.append("<br />");
+        }
+        _sb.append("</td></tr>");
+
+
+        // get mapping
+        ActionMapping map = getMapping();
+        _sb.append("<tr><td>ActionMapping</td><td>");
+        _sb.append("" + map);
+        _sb.append("</td></tr>");
+
+        // get Taxonomy
+        _sb.append("<tr><td>Taxonomy</td><td>");
+        _sb.append("" + getTaxonomy());
+        _sb.append("</td></tr>");
+
+        
+        _sb.append("</table>");
+
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/PageInputController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/PageInputController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,529 @@
+package pageFlowCore.pfPageInput;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="globalSuccessMissingNotNullable" page-inputs="missingNotNullable" return-to="currentPage"
+ * @jpf:forward name="globalSuccessMismatched" page-inputs="mismatched" return-to="currentPage"
+ * @jpf:forward name="globalSuccessGood" page-inputs="goodArray" return-to="currentPage"
+ * @jpf:forward name="globalSuccessMissingButNullable" page-inputs="missingButNullable" return-to="currentPage"
+ * @jpf:page-input name="missingNotNullable" type="String" is-nullable="false"
+ * @jpf:page-input name="mismatched" type="String" is-nullable="false"
+ * @jpf:page-input name="goodArray" type="String[]" is-nullable="false"
+ * @jpf:page-input name="missingButNullable" type="String"
+ *
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pageInput/PageInputController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="460" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:missingNotNullable1.do">
+ *   <property value="100" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:missingNotNullable2.do">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:mismatched1.do">
+ *   <property value="240" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:mismatched2.do">
+ *   <property value="540" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:good1.do">
+ *   <property value="680" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:good2.do">
+ *   <property value="820" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:missingButNullable1.do">
+ *   <property value="300" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:missingButNullable2.do">
+ *   <property value="620" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:missingNotNullable1.do@">
+ *   <property value="424,100,100,100" name="elbowsX"/>
+ *   <property value="161,161,208,256" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:missingNotNullable2.do@">
+ *   <property value="424,380,380,380" name="elbowsX"/>
+ *   <property value="183,183,219,256" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:missingButNullable1.do@">
+ *   <property value="449,449,300,300" name="elbowsX"/>
+ *   <property value="136,120,120,104" name="elbowsY"/>
+ *   <property value="North_0" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:mismatched2.do@">
+ *   <property value="496,540,540,540" name="elbowsX"/>
+ *   <property value="183,183,219,256" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:mismatched1.do@">
+ *   <property value="424,240,240,240" name="elbowsX"/>
+ *   <property value="172,172,214,256" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:missingButNullable2.do@">
+ *   <property value="471,471,620,620" name="elbowsX"/>
+ *   <property value="136,120,120,104" name="elbowsY"/>
+ *   <property value="North_2" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:good1.do@">
+ *   <property value="496,680,680,680" name="elbowsX"/>
+ *   <property value="172,172,214,256" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:good2.do@">
+ *   <property value="496,820,820,820" name="elbowsX"/>
+ *   <property value="161,161,208,256" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="460" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="460,460,460,460" name="elbowsX"/>
+ *   <property value="104,120,120,136" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:missingNotNullable1.do@@">
+ *   <property value="100" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:missingNotNullable1.do@">
+ *   <property value="100,100,89,89" name="elbowsX"/>
+ *   <property value="344,360,360,376" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:mismatched1.do@@">
+ *   <property value="240" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:mismatched1.do@">
+ *   <property value="229,229,240,240" name="elbowsX"/>
+ *   <property value="344,360,360,376" name="elbowsY"/>
+ *   <property value="South_0" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:good1.do@@">
+ *   <property value="680" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:good1.do@">
+ *   <property value="680,680,669,669" name="elbowsX"/>
+ *   <property value="344,360,360,376" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:missingButNullable1.do@@">
+ *   <property value="140" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:missingButNullable1.do@">
+ *   <property value="264,220,220,176" name="elbowsX"/>
+ *   <property value="52,52,52,52" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#globalSuccessMissingNotNullable#currentPage@">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#globalSuccessMissingNotNullable#currentPage"/>
+ * <pageflow-object id="return-to:@forward:return-to#globalSuccessMismatched#currentPage@">
+ *   <property value="85" name="x"/>
+ *   <property value="65" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#globalSuccessMismatched#currentPage"/>
+ * <pageflow-object id="return-to:@forward:return-to#globalSuccessGood#currentPage@">
+ *   <property value="110" name="x"/>
+ *   <property value="90" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#globalSuccessGood#currentPage"/>
+ * <pageflow-object id="return-to:@forward:return-to#globalSuccessMissingButNullable#currentPage@">
+ *   <property value="135" name="x"/>
+ *   <property value="115" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#globalSuccessMissingButNullable#currentPage"/>
+ * <pageflow-object id="action:lots.do">
+ *   <property value="460" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "globalSuccessMissingNotNullable",
+            actionOutputs={@Jpf.ActionOutput(name="missingNotNullable", type=String.class)},
+            navigateTo = Jpf.NavigateTo.currentPage),
+        @Jpf.Forward(
+            name = "globalSuccessMismatched",
+            actionOutputs={@Jpf.ActionOutput(name="mismatched", type=String.class)},
+            navigateTo = Jpf.NavigateTo.currentPage),
+        @Jpf.Forward(
+            name = "globalSuccessGood",
+            actionOutputs={@Jpf.ActionOutput(name="goodArray", type=String[].class)},
+            navigateTo = Jpf.NavigateTo.currentPage),
+        @Jpf.Forward(
+            name = "globalSuccessMissingButNullable",
+            actionOutputs={@Jpf.ActionOutput(name="missingButNullable", type=String.class, nullable=true)},
+            navigateTo = Jpf.NavigateTo.currentPage) 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pageInput/PageInputController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='460' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:missingNotNullable1.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:missingNotNullable2.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:mismatched1.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:mismatched2.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:good1.do'>",
+        "  <property value='680' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:good2.do'>",
+        "  <property value='820' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:missingButNullable1.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:missingButNullable2.do'>",
+        "  <property value='620' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:missingNotNullable1.do@'>",
+        "  <property value='424,100,100,100' name='elbowsX'/>",
+        "  <property value='161,161,208,256' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:missingNotNullable2.do@'>",
+        "  <property value='424,380,380,380' name='elbowsX'/>",
+        "  <property value='183,183,219,256' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:missingButNullable1.do@'>",
+        "  <property value='449,449,300,300' name='elbowsX'/>",
+        "  <property value='136,120,120,104' name='elbowsY'/>",
+        "  <property value='North_0' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:mismatched2.do@'>",
+        "  <property value='496,540,540,540' name='elbowsX'/>",
+        "  <property value='183,183,219,256' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:mismatched1.do@'>",
+        "  <property value='424,240,240,240' name='elbowsX'/>",
+        "  <property value='172,172,214,256' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:missingButNullable2.do@'>",
+        "  <property value='471,471,620,620' name='elbowsX'/>",
+        "  <property value='136,120,120,104' name='elbowsY'/>",
+        "  <property value='North_2' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:good1.do@'>",
+        "  <property value='496,680,680,680' name='elbowsX'/>",
+        "  <property value='172,172,214,256' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:good2.do@'>",
+        "  <property value='496,820,820,820' name='elbowsX'/>",
+        "  <property value='161,161,208,256' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='460' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='460,460,460,460' name='elbowsX'/>",
+        "  <property value='104,120,120,136' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:missingNotNullable1.do@@'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:missingNotNullable1.do@'>",
+        "  <property value='100,100,89,89' name='elbowsX'/>",
+        "  <property value='344,360,360,376' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:mismatched1.do@@'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:mismatched1.do@'>",
+        "  <property value='229,229,240,240' name='elbowsX'/>",
+        "  <property value='344,360,360,376' name='elbowsY'/>",
+        "  <property value='South_0' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:good1.do@@'>",
+        "  <property value='680' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:good1.do@'>",
+        "  <property value='680,680,669,669' name='elbowsX'/>",
+        "  <property value='344,360,360,376' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:missingButNullable1.do@@'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:missingButNullable1.do@'>",
+        "  <property value='264,220,220,176' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#globalSuccessMissingNotNullable#currentPage@'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#globalSuccessMissingNotNullable#currentPage'/>",
+        "<pageflow-object id='return-to:@forward:return-to#globalSuccessMismatched#currentPage@'>",
+        "  <property value='85' name='x'/>",
+        "  <property value='65' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#globalSuccessMismatched#currentPage'/>",
+        "<pageflow-object id='return-to:@forward:return-to#globalSuccessGood#currentPage@'>",
+        "  <property value='110' name='x'/>",
+        "  <property value='90' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#globalSuccessGood#currentPage'/>",
+        "<pageflow-object id='return-to:@forward:return-to#globalSuccessMissingButNullable#currentPage@'>",
+        "  <property value='135' name='x'/>",
+        "  <property value='115' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#globalSuccessMissingButNullable#currentPage'/>",
+        "<pageflow-object id='action:lots.do'>",
+        "  <property value='460' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class PageInputController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" page-inputs="missingNotNullable" return-to="currentPage"
+     * @jpf:page-input name="missingNotNullable" type="String" is-nullable="false"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                actionOutputs={@Jpf.ActionOutput(name="missingNotNullable", type=String.class)},
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward missingNotNullable1()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward missingNotNullable2()
+    {
+        return new Forward( "globalSuccessMissingNotNullable" );
+    }
+
+   /**
+     * @jpf:action
+     * @jpf:forward name="success" page-inputs="mismatched" return-to="currentPage"
+     * @jpf:page-input name="mismatched" type="String" is-nullable="false"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                actionOutputs={@Jpf.ActionOutput(name="mismatched", type=String.class)},
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward mismatched1()
+    {
+        return new Forward( "success", "mismatched", new Integer( 0 ) );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward mismatched2()
+    {
+        return new Forward( "globalSuccessMismatched", "mismatched", new String[]{ "hi" } );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" page-inputs="goodString" return-to="currentPage"
+     * @jpf:page-input name="goodString" type="String" is-nullable="false"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                actionOutputs={@Jpf.ActionOutput(name="goodString", type=String.class)},
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward good1()
+    {
+        return new Forward( "success", "goodString", "hello" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward good2()
+    {
+        return new Forward( "globalSuccessGood", "goodArray", new String[]{ "hello", "there" } );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" page-inputs="missingButNullable" return-to="currentPage"
+     * @jpf:page-input name="missingButNullable" type="String"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                actionOutputs={@Jpf.ActionOutput(name="missingButNullable", type=String.class, nullable=true)},
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward missingButNullable1()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward missingButNullable2()
+    {
+        return new Forward( "globalSuccessMissingButNullable" );
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="lots.jsp" page-inputs="pi1,pi2,pi3"
+     * @jpf:page-input name="pi1" type="String" is-nullable="false"
+     * @jpf:page-input name="pi2" type="String[]" is-nullable="false"
+     * @jpf:page-input name="pi3" type="String[][]" is-nullable="false"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                actionOutputs={
+                    @Jpf.ActionOutput(name="pi1", type=String.class),
+                    @Jpf.ActionOutput(name="pi2", type=String[].class),
+                    @Jpf.ActionOutput(name="pi3", type=String[][].class)
+                },
+                path = "lots.jsp") 
+        })
+    protected Forward lots()
+    {
+        Forward fwd = new Forward("success");
+        fwd.addPageInput( "pi1", "hi" );
+        fwd.addPageInput( "pi2", new String[]{ "hi", "there" } );
+        fwd.addPageInput( "pi3", new String[][]{ { "hi", "there" }, { "this", "works" } } );
+        return fwd;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+        action output string: <b><netui:label value="${pageInput.goodString}"/></b>
+        <br>
+        action output array: <netui-data:repeater dataSource="pageInput.goodArray">
+                        <netui-data:repeaterHeader>
+                            <ul>
+                        </netui-data:repeaterHeader>
+                        <netui-data:repeaterItem>
+                            <li><netui:label value="${container.item}"/></li>
+                        </netui-data:repeaterItem>
+                        <netui-data:repeaterFooter>
+                            </ul>
+                        </netui-data:repeaterFooter>
+                     </netui-data:repeater>
+        <br>
+        <br>
+        <netui:anchor action="good1">good1</netui:anchor><br>
+        <netui:anchor action="good2">good2</netui:anchor><br>
+        <netui:anchor action="missingButNullable1">missingButNullable1</netui:anchor><br>
+        <netui:anchor action="missingButNullable2">missingButNullable2</netui:anchor><br>
+        <netui:anchor action="mismatched1">mismatched1</netui:anchor><br>
+        <netui:anchor action="mismatched2">mismatched2</netui:anchor><br>
+        <netui:anchor action="missingNotNullable1">missingNotNullable1</netui:anchor><br>
+        <netui:anchor action="missingNotNullable2">missingNotNullable2</netui:anchor><br>
+        <netui:anchor action="lots">lots</netui:anchor><br>
+    </body>
+</netui:html>
+
+  

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/lots.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPageInput/lots.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,52 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            lots of action outputs:
+        </title>
+    </head>
+    <body>
+        pi1: <netui:label value="${pageInput.pi1}"/>
+        <br>
+        pi2: <netui-data:repeater dataSource="pageInput.pi2">
+                <netui-data:repeaterHeader>
+                    <ul>
+                </netui-data:repeaterHeader>
+                <netui-data:repeaterItem>
+                    <li><netui:label value="${container.item}"/></li>
+                </netui-data:repeaterItem>
+                <netui-data:repeaterFooter>
+                    </ul>
+                </netui-data:repeaterFooter>
+             </netui-data:repeater>
+        <br>
+        pi3: <netui-data:repeater dataSource="pageInput.pi3">
+                <netui-data:repeaterHeader>
+                    <ul>
+                </netui-data:repeaterHeader>
+                <netui-data:repeaterItem>
+                    <netui-data:repeater dataSource="container.item">
+                        <netui-data:repeaterHeader>
+                            subarray: <ul>
+                        </netui-data:repeaterHeader>
+                        <netui-data:repeaterItem>
+                            <li><netui:label value="${container.item}"/></li>
+                        </netui-data:repeaterItem>
+                        <netui-data:repeaterFooter>
+                            </ul>
+                        </netui-data:repeaterFooter>
+                     </netui-data:repeater>
+                </netui-data:repeaterItem>
+                <netui-data:repeaterFooter>
+                    </ul>
+                </netui-data:repeaterFooter>
+             </netui-data:repeater>
+
+        <br>
+        <br>
+        <netui:anchor action="begin">back to start</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPrevious/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPrevious/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<netui:content value="${pageFlow.pageInfo}"/>
+Error: <netui:content value="${pageFlow.error}"/>
+<hr />
+<netui:form action="form">
+<netui:textBox dataSource="actionForm.name"/> <br/>
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<netui:anchor action="postback">Postback</netui:anchor>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPrevious/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfPrevious/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,179 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package pageFlowCore.pfPrevious;
+
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionForm;
+
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/pageFlowCore/pfPrevious/Controller.jpf'/>", 
+        "<pageflow-object id='formbean:Form'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='action:postback.do'/>", 
+        "<pageflow-object id='action:form.do#pageFlowCore.pfPrevious.Controller.Form'/>", 
+        "<pageflow-object id='page:Begin.jsp'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:postback.do@'/>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp#@action:form.do#pageFlowCore.pfPrevious.Controller.Form@'/>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:form.do#pageFlowCore.pfPrevious.Controller.Form@'/>", 
+        "<pageflow-object id='action-call:@page:Begin.jsp@#@action:postback.do@'/>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    private String _url;
+    private String _path = "/Begin.jsp";
+    private ActionForm _data;
+    private String _error="";
+
+    public String getPageInfo()
+    {
+        StringBuffer sb = new StringBuffer();
+        sb.append("<table border='1' cellspacing='0' cellpadding='5pt'>");
+
+        // Previous form
+        ActionForm fd = getPreviousForm();
+        if (fd != _data) {
+            _error += "Invalid Form: types mis-match<br />";
+        }
+
+        sb.append("<tr><td>Previous Form</td><td>");
+        if (fd == null)
+            sb.append("<b>No Form Data</b>");
+        else
+            sb.append(fd.getClass().getName());
+        sb.append("</td></tr>");
+
+        // Action URI
+        String x = getPreviousActionURI();
+        if ( ( _url != null || x != null ) && (_url == null || ! _url.equals(x)))
+            _error += "Invalid URL<br />";
+
+        sb.append("<tr><td>Previous Action URI</td><td>");
+        sb.append(x);
+        sb.append("</td></tr>");
+
+        // Forward Path
+
+        x = getPreviousForwardPath();
+        if (_path != x) {
+            if (_path == null) {
+                _error += "Invalid ForwardPath: _path is null and go unexpected non null";
+            }
+            else if (x == null) {
+                _error += "Invalid ForwardPath: _path is not null, but got a null";
+            }
+            else  if (!_path.equals(x)) {
+                _error += "Invalid ForwardPath [expected: " + _path +
+                    " | found: " + x + " ]<br />";
+            }
+        }
+
+        sb.append("<tr><td>Previous Forward Path</td><td>");
+        sb.append(x);
+        sb.append("</td></tr>");
+
+        // return the string buffer
+        sb.append("</table>");
+        return sb.toString();
+    }
+
+    public String getError() {
+        return _error;
+    }
+
+    public void beforeAction()
+    {
+        _url = PageFlowUtils.getRelativeURI( getRequest(), null );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward postback()
+    {
+        _error = "";
+        _data = null;
+        _path = getPreviousForwardPath();
+        return new Forward("begin");
+    }
+
+   @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    public Forward form(Form form)
+    {
+        _error = "";
+        _data = form;
+        _path = getPreviousForwardPath();
+        return new Forward("begin");
+    }
+
+    public static class Form extends FormData
+    {
+        private String _name;
+        public String getName() {
+            return _name;
+        }
+        public void setName(String name) {
+            _name = name;
+        }
+    }
+
+    protected boolean alwaysTrackPreviousAction()
+    {
+        return true;
+    }
+    
+    protected boolean alwaysTrackPreviousPage()
+    {
+        return true;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Page Flow Scoped Forms
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow Scoped Forms</h3>
+        
+        <netui:anchor action="action1a">page flow scoped form -- initialized in page flow constructor</netui:anchor>
+        <br>
+        <netui:anchor action="action2a">page flow scoped form -- not initialized</netui:anchor>
+        <br>
+        <netui:anchor action="sessionScopeActionA">Struts session-scoped form</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <body>
+        <br/>
+        <netui:form action="action1b">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <netui:label value="${actionForm.foo}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Bar:</td>
+                    <td>
+                        <netui:label value="${actionForm.bar}"/>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.foo"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Bar:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.bar"/>
+                    </td>
+                </tr>
+            </table>
+            
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+        <br>
+        <br>
+        <netui:anchor href="begin.do">start over</netui:anchor>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input1_single.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input1_single.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <body>
+        <br/>
+
+        <netui:form action="action1a">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <netui:label value="${actionForm.foo}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Bar:</td>
+                    <td>
+                        <netui:label value="${actionForm.bar}"/>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.foo"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+        <br>
+        <br>
+        <netui:anchor href="begin.do">start over</netui:anchor>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <body>
+        <br/>
+        <netui:form action="action2b">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <netui:label value="${actionForm.a}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <netui:label value="${actionForm.b}"/>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.a"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.b"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+        <br>
+        <br>
+        <netui:anchor href="begin.do">start over</netui:anchor>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input2_single.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/input2_single.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <body>
+        <br/>
+        <netui:form action="action2a">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <netui:label value="${actionForm.a}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <netui:label value="${actionForm.b}"/>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.a"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+        <br>
+        <br>
+        <netui:anchor href="begin.do">start over</netui:anchor>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/inputSessionScope.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/inputSessionScope.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <body>
+        <br/>
+        <netui:form action="sessionScopeActionB">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <netui:label value="${actionForm.a}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <netui:label value="${actionForm.b}"/>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.a"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.b"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+        <br>
+        <br>
+        <netui:anchor href="begin.do">start over</netui:anchor>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/inputSessionScope_single.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/inputSessionScope_single.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <body>
+        <br/>
+        <netui:form action="sessionScopeActionA">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <netui:label value="${actionForm.a}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <netui:label value="${actionForm.b}"/>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.a"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+        <br>
+        <br>
+        <netui:anchor href="begin.do">start over</netui:anchor>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/merge-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/merge-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+  <form-beans/>
+  <global-exceptions/>
+  <global-forwards/>
+  <action-mappings>
+    <action scope="session" path="/sessionScopeActionA"/>
+    <action scope="session" path="/sessionScopeActionB"/>
+  </action-mappings>
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/pfScopeFormController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScopeForm/pfScopeFormController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,587 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Jul 29 15:17:59 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package pageFlowCore.pfScopeForm;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionForm;
+
+/**
+ * @jpf:controller struts-merge="merge-struts-config.xml"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfScopeForm/pfScopeFormController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="380" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:action1b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1">
+ *   <property value="120" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:action1a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1">
+ *   <property value="260" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:action2a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2">
+ *   <property value="500" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:action2a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@">
+ *   <property value="416,440,440,464" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:action1a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@">
+ *   <property value="344,320,320,296" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:input1.jsp@#@action:action1b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@">
+ *   <property value="120,120,120,120" name="elbowsX"/>
+ *   <property value="264,290,290,316" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:input1.jsp">
+ *   <property value="120" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:input2.jsp@#@action:action2b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@">
+ *   <property value="640,640,640,640" name="elbowsX"/>
+ *   <property value="264,290,290,316" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:input2.jsp">
+ *   <property value="640" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="380,380,380,380" name="elbowsX"/>
+ *   <property value="104,140,140,176" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#input1_single.jsp#@action:action1b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@">
+ *   <property value="156,190,190,224" name="elbowsX"/>
+ *   <property value="352,352,352,352" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#input1.jsp#@action:action1a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@">
+ *   <property value="224,190,190,156" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#input2.jsp#@action:action2a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@">
+ *   <property value="536,570,570,604" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.Form1#foo#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.Form1#bar#java.lang.String"/>
+ * <pageflow-object id="formbean:pageFlowCore.pfScopeForm.pfScopeFormController.Form1"/>
+ * <pageflow-object id="formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.Form2#a#float"/>
+ * <pageflow-object id="formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.Form2#b#int"/>
+ * <pageflow-object id="formbean:pageFlowCore.pfScopeForm.pfScopeFormController.Form2"/>
+ * <pageflow-object id="page:input1_single.jsp">
+ *   <property value="260" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:input1_single.jsp@#@action:action1a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@">
+ *   <property value="260,260,260,260" name="elbowsX"/>
+ *   <property value="316,290,290,264" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:input2_single.jsp">
+ *   <property value="500" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:input2_single.jsp@#@action:action2a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="316,290,290,264" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm"/>
+ * <pageflow-object id="action:sessionScopeActionA.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm">
+ *   <property value="380" name="x"/>
+ *   <property value="520" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:inputSessionScope.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="520" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:sessionScopeActionB.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm">
+ *   <property value="220" name="x"/>
+ *   <property value="660" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm#a#int"/>
+ * <pageflow-object id="formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm#b#float"/>
+ * <pageflow-object id="action-call:@page:inputSessionScope.jsp@#@action:sessionScopeActionB.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@">
+ *   <property value="220,220,220,220" name="elbowsX"/>
+ *   <property value="564,590,590,616" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#inputSessionScope.jsp#@action:sessionScopeActionA.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@">
+ *   <property value="344,300,300,256" name="elbowsX"/>
+ *   <property value="512,512,512,512" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:inputSessionScope_single.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="660" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputSessionScope_single.jsp@#@action:sessionScopeActionA.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@">
+ *   <property value="380,380,380,380" name="elbowsX"/>
+ *   <property value="616,590,590,564" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#inputSessionScope_single.jsp#@action:sessionScopeActionB.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@">
+ *   <property value="256,300,300,344" name="elbowsX"/>
+ *   <property value="652,652,652,652" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:sessionScopeActionA.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@">
+ *   <property value="380,380,380,380" name="elbowsX"/>
+ *   <property value="264,370,370,476" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:action2b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2">
+ *   <property value="640" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#input2_single.jsp#@action:action2b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@">
+ *   <property value="604,570,570,536" name="elbowsX"/>
+ *   <property value="352,352,352,352" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    strutsMerge = "merge-struts-config.xml")
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfScopeForm/pfScopeFormController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:action1b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1'>",
+        "  <property value='120' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:action1a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:action2a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:action2a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@'>",
+        "  <property value='416,440,440,464' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:action1a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@'>",
+        "  <property value='344,320,320,296' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:input1.jsp@#@action:action1b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@'>",
+        "  <property value='120,120,120,120' name='elbowsX'/>",
+        "  <property value='264,290,290,316' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:input1.jsp'>",
+        "  <property value='120' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:input2.jsp@#@action:action2b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@'>",
+        "  <property value='640,640,640,640' name='elbowsX'/>",
+        "  <property value='264,290,290,316' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:input2.jsp'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='380,380,380,380' name='elbowsX'/>",
+        "  <property value='104,140,140,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#input1_single.jsp#@action:action1b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@'>",
+        "  <property value='156,190,190,224' name='elbowsX'/>",
+        "  <property value='352,352,352,352' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#input1.jsp#@action:action1a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@'>",
+        "  <property value='224,190,190,156' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#input2.jsp#@action:action2a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.Form1#foo#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.Form1#bar#java.lang.String'/>",
+        "<pageflow-object id='formbean:pageFlowCore.pfScopeForm.pfScopeFormController.Form1'/>",
+        "<pageflow-object id='formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.Form2#a#float'/>",
+        "<pageflow-object id='formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.Form2#b#int'/>",
+        "<pageflow-object id='formbean:pageFlowCore.pfScopeForm.pfScopeFormController.Form2'/>",
+        "<pageflow-object id='page:input1_single.jsp'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:input1_single.jsp@#@action:action1a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form1@'>",
+        "  <property value='260,260,260,260' name='elbowsX'/>",
+        "  <property value='316,290,290,264' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:input2_single.jsp'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:input2_single.jsp@#@action:action2a.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='316,290,290,264' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm'/>",
+        "<pageflow-object id='action:sessionScopeActionA.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='520' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:inputSessionScope.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='520' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:sessionScopeActionB.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='660' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm#a#int'/>",
+        "<pageflow-object id='formbeanprop:pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm#b#float'/>",
+        "<pageflow-object id='action-call:@page:inputSessionScope.jsp@#@action:sessionScopeActionB.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@'>",
+        "  <property value='220,220,220,220' name='elbowsX'/>",
+        "  <property value='564,590,590,616' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#inputSessionScope.jsp#@action:sessionScopeActionA.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@'>",
+        "  <property value='344,300,300,256' name='elbowsX'/>",
+        "  <property value='512,512,512,512' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:inputSessionScope_single.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='660' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputSessionScope_single.jsp@#@action:sessionScopeActionA.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@'>",
+        "  <property value='380,380,380,380' name='elbowsX'/>",
+        "  <property value='616,590,590,564' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#inputSessionScope_single.jsp#@action:sessionScopeActionB.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@'>",
+        "  <property value='256,300,300,344' name='elbowsX'/>",
+        "  <property value='652,652,652,652' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:sessionScopeActionA.do#pageFlowCore.pfScopeForm.pfScopeFormController.SessionScopeForm@'>",
+        "  <property value='380,380,380,380' name='elbowsX'/>",
+        "  <property value='264,370,370,476' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:action2b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#input2_single.jsp#@action:action2b.do#pageFlowCore.pfScopeForm.pfScopeFormController.Form2@'>",
+        "  <property value='604,570,570,536' name='elbowsX'/>",
+        "  <property value='352,352,352,352' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class pfScopeFormController extends PageFlowController
+{
+    Form1 _memberForm1 = new Form1( "init foo", "init bar" );
+    Form2 _memberForm2;
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action form="_memberForm1"
+     * @jpf:forward name="success" path="input1_single.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_memberForm1",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "input1_single.jsp") 
+        })
+    protected Forward action1b(Form1 form)
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action form="_memberForm2"
+     * @jpf:forward name="success" path="input2_single.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_memberForm2",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "input2_single.jsp") 
+        })
+    protected Forward action2b(Form2 form)
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action form="_memberForm1"
+     * @jpf:forward name="success" path="input1.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_memberForm1",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "input1.jsp") 
+        })
+    protected Forward action1a(Form1 form)
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action form="_memberForm2"
+     * @jpf:forward name="success" path="input2.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_memberForm2",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "input2.jsp") 
+        })
+    protected Forward action2a(Form2 form)
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="inputSessionScope.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "inputSessionScope.jsp") 
+        })
+    protected Forward sessionScopeActionA(SessionScopeForm form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="inputSessionScope_single.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "inputSessionScope_single.jsp") 
+        })
+    protected Forward sessionScopeActionB(SessionScopeForm form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class Form1 extends FormData
+    {
+        private String bar;
+
+        private String foo;
+
+
+        public Form1()
+        {
+        }
+        
+        public Form1( String foo, String bar )
+        {
+            this.foo = foo;
+            this.bar = bar;
+        }
+        
+        public void setFoo(String foo)
+        {
+            this.foo = foo;
+        }
+
+        public String getFoo()
+        {
+            return this.foo;
+        }
+
+        public void setBar(String bar)
+        {
+            this.bar = bar;
+        }
+
+        public String getBar()
+        {
+            return this.bar;
+        }
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class Form2 extends FormData
+    {
+        private int b;
+
+        private float a;
+
+
+        public void setA(float a)
+        {
+            this.a = a;
+        }
+
+        public float getA()
+        {
+            return this.a;
+        }
+
+        public void setB(int b)
+        {
+            this.b = b;
+        }
+
+        public int getB()
+        {
+            return this.b;
+        }
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class SessionScopeForm extends FormData
+    {
+        private float b;
+
+        private int a;
+
+
+        public void setA(int a)
+        {
+            this.a = a;
+        }
+
+        public int getA()
+        {
+            return this.a;
+        }
+
+        public void setB(float b)
+        {
+            this.b = b;
+        }
+
+        public float getB()
+        {
+            return this.b;
+        }
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/FlowA.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/FlowA.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,190 @@
+package pageFlowCore.pfScoping.a;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfScoping/a/FlowA.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="400" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="400" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:goNested.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:begin.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="103,103,103,103" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:nested/NestedController.jpf">
+ *   <property value="400" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#nested/NestedController.jpf#@action:goNested.do@">
+ *   <property value="400,400,400,400" name="elbowsX"/>
+ *   <property value="144,160,160,176" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#begin.do#@action:nestedDone.do@">
+ *   <property value="364,80,80,80" name="elbowsX"/>
+ *   <property value="332,332,238,144" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:nested/NestedController.jpf@#@action:nestedDone.do@">
+ *   <property value="364,364,400,400" name="elbowsX"/>
+ *   <property value="212,276,276,296" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfScoping/a/FlowA.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goNested.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='103,103,103,103' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:nested/NestedController.jpf'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#nested/NestedController.jpf#@action:goNested.do@'>",
+        "  <property value='400,400,400,400' name='elbowsX'/>",
+        "  <property value='144,160,160,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#begin.do#@action:nestedDone.do@'>",
+        "  <property value='364,80,80,80' name='elbowsX'/>",
+        "  <property value='332,332,238,144' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:nested/NestedController.jpf@#@action:nestedDone.do@'>",
+        "  <property value='364,364,400,400' name='elbowsX'/>",
+        "  <property value='212,276,276,296' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class FlowA extends PageFlowController
+{
+    public String foo;
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="nested/NestedController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "nested/NestedController.jpf") 
+        })
+    protected Forward goNested()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="begin.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.do") 
+        })
+    protected Forward nestedDone()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Page Flow A
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow A</h3>
+        scope <b><netui:label value="${param.jpfScopeID}"/></b>
+        <br>
+        
+        <netui:form action="begin">
+            foo: <netui:textBox dataSource="pageFlow.foo"/>
+            <br>
+            <netui:button value="update"/>
+        </netui:form>
+        
+        <netui:anchor action="begin">refresh</netui:anchor>
+        <br>
+        <br>
+        <netui:anchor action="goNested">show nested page flow</netui:anchor>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/nested/NestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/nested/NestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,164 @@
+package pageFlowCore.pfScoping.a.nested;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <view-properties>
+
+ *   <pageflow-object id="action:begin.do">
+
+ *     <property value="80" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="page:index.jsp">
+
+ *     <property value="240" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="action:done.do">
+
+ *     <property value="400" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="exit:nestedDone">
+
+ *     <property value="560" name="x"/>
+
+ *     <property value="100" name="y"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="forward:return-action#done#nestedDone#@action:done.do@">
+
+ *     <property value="East_1" name="fromPort"/>
+
+ *     <property value="West_1" name="toPort"/>
+
+ *     <property value="done" name="label"/>
+
+ *   </pageflow-object>
+
+ *   <pageflow-object id="action-call:@page:index.jsp@#@action:done.do@">
+
+ *     <property value="East_1" name="fromPort"/>
+
+ *     <property value="West_1" name="toPort"/>
+
+ *   </pageflow-object>
+
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<view-properties>",
+        "",
+        "  <pageflow-object id='action:begin.do'>",
+        "",
+        "    <property value='80' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='page:index.jsp'>",
+        "",
+        "    <property value='240' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='action:done.do'>",
+        "",
+        "    <property value='400' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='exit:nestedDone'>",
+        "",
+        "    <property value='560' name='x'/>",
+        "",
+        "    <property value='100' name='y'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='forward:return-action#done#nestedDone#@action:done.do@'>",
+        "",
+        "    <property value='East_1' name='fromPort'/>",
+        "",
+        "    <property value='West_1' name='toPort'/>",
+        "",
+        "    <property value='done' name='label'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "  <pageflow-object id='action-call:@page:index.jsp@#@action:done.do@'>",
+        "",
+        "    <property value='East_1' name='fromPort'/>",
+        "",
+        "    <property value='West_1' name='toPort'/>",
+        "",
+        "  </pageflow-object>",
+        "",
+        "</view-properties>"
+    })
+public class NestedController extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward done()
+    {
+        return new Forward("done");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/a/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+        
+        <netui:anchor action="begin">
+            do nothing
+        </netui:anchor>
+        
+        <br>
+        
+        <netui:anchor action="done">
+            Exit nested
+        </netui:anchor>
+        
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+        
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/b/FlowB.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/b/FlowB.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,84 @@
+package pageFlowCore.pfScoping.b;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfScoping/b/FlowB.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:begin.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="103,103,92,92" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfScoping/b/FlowB.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='103,103,92,92' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class FlowB extends PageFlowController
+{
+    public String foo;
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/b/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/b/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Page Flow B
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow B</h3>
+        scope <b><netui:label value="${param.jpfScopeID}"/></b>
+        <br>
+                
+        <netui:form action="begin">
+            foo: <netui:textBox dataSource="pageFlow.foo"/>
+            <br>
+            <netui:button value="update"/>
+        </netui:form>
+        
+        <netui:anchor action="begin">refresh</netui:anchor>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../a/FlowA.jpf?jpfScopeID=a">go to scope A</a>
+        </span>
+        <br>
+        <span style="color: red">
+            <a href="../a/nested/NestedController.jpf?jpfScopeID=a">go back into nested A</a>
+        </span>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/frames.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/frames.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<frameset rows="40%,60%">
+
+    <frameset cols="50%,50%">
+        <frame src="a/FlowA.jpf?jpfScopeID=aa" name="frameA">
+        <frame src="b/FlowB.jpf?jpfScopeID=bb" name="frameB">
+    </frameset>
+
+    <frame src="windows.jsp" name="windowsFrame">
+    
+</frameset>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Page Flow Scoping
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow Scoping</h3>
+        
+        <a href="frames.jsp">frames</a>
+        <br>
+        <a href="a/FlowA.jpf?jpfScopeID=a">go to FlowA.jpf, in scope A</a>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/pfScopingController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/pfScopingController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,261 @@
+package pageFlowCore.pfScoping;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tags.tree.TreeElement;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfScoping/pfScopingController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:doFrames.do">
+ *   <property value="380" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:updateTree.do">
+ *   <property value="400" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:launchTreeB.do">
+ *   <property value="380" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:frames.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:windows.jsp@#@action:updateTree.do@">
+ *   <property value="524,480,480,436" name="elbowsX"/>
+ *   <property value="61,61,72,72" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:windows.jsp">
+ *   <property value="560" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:b/FlowB.jpf">
+ *   <property value="540" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="44,32,32,60" name="elbowsX"/>
+ *   <property value="92,92,-4,-4" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#frames.jsp#@action:doFrames.do@">
+ *   <property value="344,310,310,276" name="elbowsX"/>
+ *   <property value="232,232,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#windows.jsp#@action:updateTree.do@">
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="83,83,83,83" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#b/FlowB.jpf#@action:launchTreeB.do@">
+ *   <property value="416,460,460,504" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfScoping/pfScopingController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:doFrames.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:updateTree.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:launchTreeB.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:frames.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:windows.jsp@#@action:updateTree.do@'>",
+        "  <property value='524,480,480,436' name='elbowsX'/>",
+        "  <property value='61,61,72,72' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:windows.jsp'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:b/FlowB.jpf'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='44,32,32,60' name='elbowsX'/>",
+        "  <property value='92,92,-4,-4' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#frames.jsp#@action:doFrames.do@'>",
+        "  <property value='344,310,310,276' name='elbowsX'/>",
+        "  <property value='232,232,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#windows.jsp#@action:updateTree.do@'>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='83,83,83,83' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#b/FlowB.jpf#@action:launchTreeB.do@'>",
+        "  <property value='416,460,460,504' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class pfScopingController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="frames.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "frames.jsp") 
+        })
+    protected Forward doFrames()
+    {
+        return new Forward( "success" );
+    }
+
+
+    private TreeElement _root = null;
+  
+    public TreeElement getTree()
+    {
+        if ( _root == null )
+        {
+             
+            _root = new TreeElement("root", true );
+            TreeElement child1 = new TreeElement( "launch A", true);
+            child1.setHref("a/FlowA.jpf?jpfScopeID=treeA");
+            TreeElement child2 = new TreeElement("launch B",  true );
+            child2.setTarget("_treeWindowB");
+            _root.addChild( child1 );
+            _root.addChild( child2 );
+        }
+                
+        return _root;
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="windows.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "windows.jsp") 
+        })
+    protected Forward updateTree()
+    {
+       String expanded = getRequest().getParameter( TreeElement.EXPAND_NODE );
+        
+        if ( expanded != null )
+        {
+            String[] elements;
+            elements = expanded.split( "\\." );
+            TreeElement node = _root;
+            
+            for ( int i = 1; i < elements.length; ++i )
+            {
+                int n = Integer.parseInt( elements[i] );
+                node = ( TreeElement ) node.getChild( n );
+            }
+            
+            if ( node != null )
+            {
+                node.setExpanded( ! node.isExpanded() );
+            }
+        }
+        
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="b/FlowB.jpf" redirect="true"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "b/FlowB.jpf",
+                redirect = true) 
+        })
+    protected Forward launchTreeB()
+    {
+        Forward fwd = new Forward( "success" );
+        fwd.addQueryParam( "jpfScopeID", "treeScopeB" );
+        return fwd;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/windows.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfScoping/windows.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Multiple Windows Example
+        </title>
+    </head>
+    <body>
+        <h3>Multiple Windows Example</h3>
+        <netui:anchor href="a/FlowA.jpf" target="_a">
+            <netui:parameter name="jpfScopeID" value="a"/>
+            Page Flow A (scope "a")
+        </netui:anchor>
+        <br>
+        <netui:anchor href="b/FlowB.jpf" target="_b">
+            <netui:parameter name="jpfScopeID" value="b"/>
+            Page Flow B (scope "b")
+        </netui:anchor>
+        <br>
+        <br>
+        
+        <netui:tree tree="${pageFlow.tree}" action="updateTree" imageRoot='<%= request.getContextPath() + "/resources/images" %>'/>
+        <br>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/AnotherNonSingletonController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/AnotherNonSingletonController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,192 @@
+package pageFlowCore.pfSingleton.anotherNonSingleton;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:go.do">
+ *   <property value="400" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:deleteMe.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:begin.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:go.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/pageFlowCore/pfSingleton/singleton/SingletonController.jpf">
+ *   <property value="560" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/pageFlowCore/pfSingleton/singleton/SingletonController.jpf#@action:go.do@">
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:deleteMe.do@">
+ *   <property value="251,251,251,251" name="elbowsX"/>
+ *   <property value="196,170,170,144" name="elbowsY"/>
+ *   <property value="North_2" name="fromPort"/>
+ *   <property value="South_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:deleteMe.do@">
+ *   <property value="229,229,229,229" name="elbowsX"/>
+ *   <property value="144,170,170,196" name="elbowsY"/>
+ *   <property value="South_0" name="fromPort"/>
+ *   <property value="North_0" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:go.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:deleteMe.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:go.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/pageFlowCore/pfSingleton/singleton/SingletonController.jpf'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/pageFlowCore/pfSingleton/singleton/SingletonController.jpf#@action:go.do@'>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:deleteMe.do@'>",
+        "  <property value='251,251,251,251' name='elbowsX'/>",
+        "  <property value='196,170,170,144' name='elbowsY'/>",
+        "  <property value='North_2' name='fromPort'/>",
+        "  <property value='South_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:deleteMe.do@'>",
+        "  <property value='229,229,229,229' name='elbowsX'/>",
+        "  <property value='144,170,170,196' name='elbowsY'/>",
+        "  <property value='South_0' name='fromPort'/>",
+        "  <property value='North_0' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class AnotherNonSingletonController extends PageFlowController
+{
+    public String val = "";
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/pageFlowCore/pfSingleton/singleton/SingletonController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/pageFlowCore/pfSingleton/singleton/SingletonController.jpf") 
+        })
+    protected Forward go()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward deleteMe()
+    {
+        delete();
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Another Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Another Non-singleton Page Flow</h3>
+         
+        <netui:form action="begin">
+            page flow val: <netui:textBox dataSource="pageFlow.val" />
+            <netui:button value="edit"/>
+        </netui:form>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/frames.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/frames.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,9 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<frameset cols="20%,80%">
+    <frame src="nav/NavController.jpf" name="navFrame">
+    <frame src="nonSingleton/NonSingletonController.jpf" name="contentFrame">
+</frameset>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Singleton Page Flows
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flows</h3>
+        <netui:anchor action="goNoFrames">without frames</netui:anchor><br>
+        <netui:anchor action="goFrames">with frames</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nav/NavController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nav/NavController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+package pageFlowCore.pfSingleton.nav;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller singleton="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfSingleton/nav/NavController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:doNothing.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#begin.do#@action:doNothing.do@">
+ *   <property value="204,80,80,80" name="elbowsX"/>
+ *   <property value="232,232,188,144" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:doNothing.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="144,170,170,196" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    singleton = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfSingleton/nav/NavController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:doNothing.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#begin.do#@action:doNothing.do@'>",
+        "  <property value='204,80,80,80' name='elbowsX'/>",
+        "  <property value='232,232,188,144' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:doNothing.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,170,170,196' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class NavController extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="begin.do"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.do") 
+        })
+    protected Forward doNothing()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nav/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nav/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+
+    <body>
+        <h3>Navigation</h3>
+        
+        <netui:anchor action="doNothing">no-op action</netui:anchor>
+        <br>
+        <a href="../nonSingleton/NonSingletonController.jpf" target="contentFrame">non-singleton 1</a>
+        <br>
+        <a href="../anotherNonSingleton/AnotherNonSingletonController.jpf" target="contentFrame">non-singleton 2</a>
+        <br>
+        <a href="../singleton/SingletonController.jpf" target="contentFrame">singleton</a>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,192 @@
+package pageFlowCore.pfSingleton.nonSingleton;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:go.do">
+ *   <property value="400" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:deleteMe.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:begin.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:go.do@">
+ *   <property value="276,320,320,364" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/pageFlowCore/pfSingleton/singleton/SingletonController.jpf">
+ *   <property value="560" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/pageFlowCore/pfSingleton/singleton/SingletonController.jpf#@action:go.do@">
+ *   <property value="436,480,480,524" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:deleteMe.do@">
+ *   <property value="251,251,251,251" name="elbowsX"/>
+ *   <property value="196,170,170,144" name="elbowsY"/>
+ *   <property value="North_2" name="fromPort"/>
+ *   <property value="South_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:deleteMe.do@">
+ *   <property value="229,229,229,229" name="elbowsX"/>
+ *   <property value="144,170,170,196" name="elbowsY"/>
+ *   <property value="South_0" name="fromPort"/>
+ *   <property value="North_0" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:go.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:deleteMe.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:go.do@'>",
+        "  <property value='276,320,320,364' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/pageFlowCore/pfSingleton/singleton/SingletonController.jpf'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/pageFlowCore/pfSingleton/singleton/SingletonController.jpf#@action:go.do@'>",
+        "  <property value='436,480,480,524' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:deleteMe.do@'>",
+        "  <property value='251,251,251,251' name='elbowsX'/>",
+        "  <property value='196,170,170,144' name='elbowsY'/>",
+        "  <property value='North_2' name='fromPort'/>",
+        "  <property value='South_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:deleteMe.do@'>",
+        "  <property value='229,229,229,229' name='elbowsX'/>",
+        "  <property value='144,170,170,196' name='elbowsY'/>",
+        "  <property value='South_0' name='fromPort'/>",
+        "  <property value='North_0' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class NonSingletonController extends PageFlowController
+{
+    public String val = "";
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/pageFlowCore/pfSingleton/singleton/SingletonController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/pageFlowCore/pfSingleton/singleton/SingletonController.jpf") 
+        })
+    protected Forward go()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward deleteMe()
+    {
+        delete();
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nonSingleton/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/nonSingleton/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <netui:form action="begin">
+            page flow val: <netui:textBox dataSource="pageFlow.val" />
+            <netui:button value="edit"/>
+        </netui:form>
+        <br>       
+        <netui:anchor action="go">go to singleton</netui:anchor>
+        <br>
+        <netui:anchor action="deleteMe">delete me</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/pfSingletonController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/pfSingletonController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,188 @@
+package pageFlowCore.pfSingleton;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfSingleton/pfSingletonController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property name="x" value="80"/>
+ *   <property name="y" value="80"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:singleton/SingletonController.jpf">
+ *   <property value="400" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property name="elbowsY" value="124,150,150,176"/>
+ *   <property name="elbowsX" value="80,80,80,80"/>
+ *   <property name="toPort" value="North_1"/>
+ *   <property name="fromPort" value="South_1"/>
+ *   <property name="label" value="index"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNoFrames.do">
+ *   <property value="260" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#singleton/SingletonController.jpf#@action:goNoFrames.do@">
+ *   <property value="296,330,330,364" name="elbowsX"/>
+ *   <property value="152,152,152,152" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:frames.jsp">
+ *   <property value="400" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goFrames.do">
+ *   <property value="260" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#frames.jsp#@action:goFrames.do@">
+ *   <property value="296,330,330,364" name="elbowsX"/>
+ *   <property value="272,272,272,272" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:goNoFrames.do@">
+ *   <property value="116,170,170,224" name="elbowsX"/>
+ *   <property value="212,212,152,152" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:goFrames.do@">
+ *   <property value="116,170,170,224" name="elbowsX"/>
+ *   <property value="223,223,272,272" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfSingleton/pfSingletonController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property name='x' value='80'/>",
+        "  <property name='y' value='80'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:singleton/SingletonController.jpf'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property name='elbowsY' value='124,150,150,176'/>",
+        "  <property name='elbowsX' value='80,80,80,80'/>",
+        "  <property name='toPort' value='North_1'/>",
+        "  <property name='fromPort' value='South_1'/>",
+        "  <property name='label' value='index'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNoFrames.do'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#singleton/SingletonController.jpf#@action:goNoFrames.do@'>",
+        "  <property value='296,330,330,364' name='elbowsX'/>",
+        "  <property value='152,152,152,152' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:frames.jsp'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goFrames.do'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#frames.jsp#@action:goFrames.do@'>",
+        "  <property value='296,330,330,364' name='elbowsX'/>",
+        "  <property value='272,272,272,272' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goNoFrames.do@'>",
+        "  <property value='116,170,170,224' name='elbowsX'/>",
+        "  <property value='212,212,152,152' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goFrames.do@'>",
+        "  <property value='116,170,170,224' name='elbowsX'/>",
+        "  <property value='223,223,272,272' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class pfSingletonController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="singleton/SingletonController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "singleton/SingletonController.jpf") 
+        })
+    protected Forward goNoFrames()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="frames.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "frames.jsp") 
+        })
+    protected Forward goFrames()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/singleton/SingletonController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/singleton/SingletonController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,242 @@
+package pageFlowCore.pfSingleton.singleton;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller singleton="true"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/pageFlowCore/pfSingleton/singleton/SingletonController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:go.do">
+ *   <property value="420" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:deleteAndGo.do">
+ *   <property value="420" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:deleteAndStay.do">
+ *   <property value="260" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:deleteAndStay.do@">
+ *   <property value="271,271,271,271" name="elbowsX"/>
+ *   <property value="224,240,240,256" name="elbowsY"/>
+ *   <property value="South_2" name="fromPort"/>
+ *   <property value="North_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:begin.do@">
+ *   <property value="224,180,180,136" name="elbowsX"/>
+ *   <property value="172,172,172,172" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:go.do@">
+ *   <property value="296,340,340,384" name="elbowsX"/>
+ *   <property value="183,183,183,183" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:deleteAndGo.do@">
+ *   <property value="296,340,340,384" name="elbowsX"/>
+ *   <property value="161,161,92,92" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="260" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf">
+ *   <property value="580" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="136,180,180,224" name="elbowsX"/>
+ *   <property value="172,172,172,172" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf#@action:go.do@">
+ *   <property value="456,500,500,544" name="elbowsX"/>
+ *   <property value="183,183,183,183" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf#@action:deleteAndGo.do@">
+ *   <property value="456,500,500,544" name="elbowsX"/>
+ *   <property value="92,92,161,161" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:deleteAndStay.do@">
+ *   <property value="249,249,249,249" name="elbowsX"/>
+ *   <property value="256,240,240,224" name="elbowsY"/>
+ *   <property value="North_0" name="fromPort"/>
+ *   <property value="South_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    singleton = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/pageFlowCore/pfSingleton/singleton/SingletonController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:go.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:deleteAndGo.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:deleteAndStay.do'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:deleteAndStay.do@'>",
+        "  <property value='271,271,271,271' name='elbowsX'/>",
+        "  <property value='224,240,240,256' name='elbowsY'/>",
+        "  <property value='South_2' name='fromPort'/>",
+        "  <property value='North_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='224,180,180,136' name='elbowsX'/>",
+        "  <property value='172,172,172,172' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:go.do@'>",
+        "  <property value='296,340,340,384' name='elbowsX'/>",
+        "  <property value='183,183,183,183' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:deleteAndGo.do@'>",
+        "  <property value='296,340,340,384' name='elbowsX'/>",
+        "  <property value='161,161,92,92' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf'>",
+        "  <property value='580' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='136,180,180,224' name='elbowsX'/>",
+        "  <property value='172,172,172,172' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf#@action:go.do@'>",
+        "  <property value='456,500,500,544' name='elbowsX'/>",
+        "  <property value='183,183,183,183' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf#@action:deleteAndGo.do@'>",
+        "  <property value='456,500,500,544' name='elbowsX'/>",
+        "  <property value='92,92,161,161' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:deleteAndStay.do@'>",
+        "  <property value='249,249,249,249' name='elbowsX'/>",
+        "  <property value='256,240,240,224' name='elbowsY'/>",
+        "  <property value='North_0' name='fromPort'/>",
+        "  <property value='South_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class SingletonController extends PageFlowController
+{
+    public String val = "";
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf") 
+        })
+    protected Forward go()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf") 
+        })
+    protected Forward deleteAndGo()
+    {
+        delete();
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward deleteAndStay()
+    {
+        delete();
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/singleton/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/pfSingleton/singleton/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <netui:form action="begin">
+            page flow val: <netui:textBox dataSource="pageFlow.val" />
+            <netui:button value="edit"/>
+        </netui:form>
+        <br>
+        <netui:anchor action="go">go to non-singleton</netui:anchor>
+        <br>
+        <netui:anchor action="deleteAndGo">delete me, and go to non-singleton</netui:anchor>
+        <br>
+        <netui:anchor action="deleteAndStay">delete me, and stay here</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/restoreQueryString/RestoreQueryStringController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/restoreQueryString/RestoreQueryStringController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+package pageFlowCore.restoreQueryString;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller
+public class RestoreQueryStringController extends PageFlowController
+{
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    { 
+        return new Forward("index");
+    }
+
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward someAction()
+    { 
+        return new Forward("index");
+    }
+
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="prev", navigateTo=Jpf.NavigateTo.previousAction, restoreQueryString=true)
+        }
+    )
+    protected Forward rerunWithPreviousQueryString()
+    { 
+        return new Forward( "prev" );
+    }
+
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="prev", navigateTo=Jpf.NavigateTo.previousAction)
+        }
+    )
+    protected Forward rerunWithoutPreviousQueryString()
+    { 
+        return new Forward( "prev" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/restoreQueryString/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/restoreQueryString/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b><%= request.getParameter( "foo" ) %></b>
+        <br/>
+        bar: <b><%= request.getParameter( "bar" ) %></b>
+
+        <br/>
+        <br/>
+        <netui:anchor href="someAction.do?foo=hi">someAction.do?foo=hi</netui:anchor><br/>
+        <netui:anchor action="rerunWithoutPreviousQueryString">rerunWithoutPreviousQueryString</netui:anchor><br/>
+        <netui:anchor action="rerunWithPreviousQueryString">rerunWithPreviousQueryString</netui:anchor><br/>
+        <netui:anchor href="rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</netui:anchor><br/>
+        <netui:anchor href="rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</netui:anchor><br/>
+        <netui:anchor href="rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</netui:anchor><br/>
+    </body>
+</netui:html>
+
+  

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/inputPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/inputPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@page import="org.apache.beehive.netui.pageflow.PageFlowUtils"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<netui:html>
+    <head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue"><%= PageFlowUtils.getPageInput( "input1", request ) %></font>
+        <br>
+        input2: <font color="blue"><%= PageFlowUtils.getPageInput( "input2", request ) %></font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <netui:form action="input">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.foo"/>
+                        <netui:error value="foo"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.bar"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+
+            <br>
+            <br>
+            <netui:anchor action="returnToCurrentPage">return-to currentPage</netui:anchor>
+            <br>
+            <netui:anchor action="returnToCurrentPageWithForm" formSubmit="true">return-to currentPage (keep form)</netui:anchor>
+            <br>
+            <netui:anchor action="returnToCurrentPageOverrideInputs">return-to currentPage (override page inputs)</netui:anchor>
+            <br>
+            <netui:anchor action="returnToCurrentPageOverrideForm">return-to currentPage (override form)</netui:anchor>
+            <br>
+            <br>
+            <netui:anchor action="globalReturnToCurrentPage">global-action return-to currentPage</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToCurrentPageWithForm" formSubmit="true">global-action return-to currentPage (keep form)</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToCurrentPageOverrideInputs">global-action return-to currentPage (override page inputs)</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToCurrentPageOverrideForm">global-action return-to currentPage (override form)</netui:anchor>
+            <br>
+            <br>
+            <netui:anchor action="globalReturnToPage">global-action return-to page</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToPageWithForm" formSubmit="true">global-action return-to page (keep form)</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToPageOverrideInputs">global-action return-to page (override page inputs)</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToPageOverrideForm">global-action return-to page (override form)</netui:anchor>
+            <br>
+            <br>
+            <netui:anchor action="goNested">go to nested page flow</netui:anchor>          
+            <br>
+            <br>
+            <netui:anchor href="returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</netui:anchor>
+            <br>
+            <br>
+            <netui:anchor action="begin">start over</netui:anchor>          
+
+        </netui:form>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <netui:anchor action="returnToCurrentPage">return-to currentPage</netui:anchor>
+            <br>
+            <netui:anchor action="returnToCurrentPageOverrideInputs">return-to currentPage (override page inputs)</netui:anchor>
+            <br>
+            <netui:anchor action="returnToCurrentPageOverrideForm">return-to currentPage (override form)</netui:anchor>
+            <br>
+            <br>
+            <netui:anchor action="returnToPreviousPage">return-to previousPage</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPreviousPageOverrideForm">return-to previousPage (override form)</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPreviousPageOverrideInputs">return-to previousPage (override page inputs)</netui:anchor>
+            <br>
+            <br>
+            <netui:anchor action="returnToPage">return-to page</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPageOverrideForm">return-to page (override form)</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPageOverrideInputs">return-to page (override page inputs)</netui:anchor>  
+
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nested/nestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nested/nestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,753 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Sat Jul 19 16:12:10 MDT 2003
+//  By: rich
+// -----------------------------------------------------------------------------
+package pageFlowCore.returnToTest.nested;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import pageFlowCore.returnToTest.returnToTestController.InputForm;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/returnToTest/nested/nestedController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="2120" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousPageOverrideInputs.do">
+ *   <property value="2920" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToCurrentPage.do">
+ *   <property value="1580" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPage.do">
+ *   <property value="2180" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousPage.do">
+ *   <property value="2740" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPageOverrideInputs.do">
+ *   <property value="2320" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPageOverrideForm.do">
+ *   <property value="2040" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousPageOverrideForm.do">
+ *   <property value="2560" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToCurrentPageOverrideInputs.do">
+ *   <property value="1400" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToCurrentPageOverrideForm.do">
+ *   <property value="1760" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPage.do@">
+ *   <property value="2156,2156,2144,2144" name="elbowsX"/>
+ *   <property value="163,300,300,432" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPreviousPageOverrideInputs.do@">
+ *   <property value="2156,2520,2520,2884" name="elbowsX"/>
+ *   <property value="163,163,432,432" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToCurrentPageOverrideForm.do@">
+ *   <property value="2084,1940,1940,1796" name="elbowsX"/>
+ *   <property value="163,163,432,432" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToCurrentPageOverrideInputs.do@">
+ *   <property value="2084,1760,1760,1436" name="elbowsX"/>
+ *   <property value="163,163,432,432" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPageOverrideInputs.do@">
+ *   <property value="2156,2220,2220,2284" name="elbowsX"/>
+ *   <property value="163,163,432,432" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPageOverrideForm.do@">
+ *   <property value="2084,2040,2040,2040" name="elbowsX"/>
+ *   <property value="163,163,279,396" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToCurrentPage.do@">
+ *   <property value="2084,1850,1850,1616" name="elbowsX"/>
+ *   <property value="152,152,432,432" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPreviousPage.do@">
+ *   <property value="2156,2430,2430,2704" name="elbowsX"/>
+ *   <property value="152,152,432,432" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPreviousPageOverrideForm.do@">
+ *   <property value="2156,2340,2340,2524" name="elbowsX"/>
+ *   <property value="163,163,432,432" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="2120" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="2120,2120,2120,2120" name="elbowsX"/>
+ *   <property value="104,110,110,116" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToPreviousPage">
+ *   <property value="2740" name="x"/>
+ *   <property value="560" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToPreviousPage#@action:returnToPreviousPageOverrideInputs.do@">
+ *   <property value="2920,2920,2920,2920" name="elbowsX"/>
+ *   <property value="484,520,520,556" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToCurrentPage">
+ *   <property value="1580" name="x"/>
+ *   <property value="600" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToCurrentPage#@action:returnToCurrentPage.do@">
+ *   <property value="1580,1580,1580,1580" name="elbowsX"/>
+ *   <property value="484,520,520,556" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToPage">
+ *   <property value="2180" name="x"/>
+ *   <property value="600" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToPage#@action:returnToPage.do@">
+ *   <property value="2180,2180,2180,2180" name="elbowsX"/>
+ *   <property value="484,520,520,556" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToPreviousPage#@action:returnToPreviousPage.do@">
+ *   <property value="2740,2740,2740,2740" name="elbowsX"/>
+ *   <property value="484,520,520,556" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToPage#@action:returnToPageOverrideInputs.do@">
+ *   <property value="2284,2250,2250,2216" name="elbowsX"/>
+ *   <property value="443,443,592,592" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToPageWithForm">
+ *   <property value="2040" name="x"/>
+ *   <property value="600" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToPageWithForm#@action:returnToPageOverrideForm.do@">
+ *   <property value="2040,2040,2040,2040" name="elbowsX"/>
+ *   <property value="484,520,520,556" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToPreviousPageWithForm">
+ *   <property value="2560" name="x"/>
+ *   <property value="600" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToPreviousPageWithForm#@action:returnToPreviousPageOverrideForm.do@">
+ *   <property value="2560,2560,2560,2560" name="elbowsX"/>
+ *   <property value="484,520,520,556" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToCurrentPage#@action:returnToCurrentPageOverrideInputs.do@">
+ *   <property value="1436,1490,1490,1544" name="elbowsX"/>
+ *   <property value="443,443,592,592" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToCurrentPageWithForm">
+ *   <property value="1760" name="x"/>
+ *   <property value="600" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToCurrentPageWithForm#@action:returnToCurrentPageOverrideForm.do@">
+ *   <property value="1760,1760,1760,1760" name="elbowsX"/>
+ *   <property value="484,520,520,556" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPageOverrideInputs.do">
+ *   <property value="640" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPage.do">
+ *   <property value="1920" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPreviousPage.do">
+ *   <property value="3280" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPreviousPageOverrideForm.do">
+ *   <property value="400" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPreviousPageOverrideInputs.do">
+ *   <property value="4320" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToCurrentPageOverrideForm.do">
+ *   <property value="4040" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToCurrentPageOverrideForm.do@">
+ *   <property value="2156,3080,3080,4005" name="elbowsX"/>
+ *   <property value="163,163,252,252" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToPage.do@">
+ *   <property value="2084,2019,2019,1955" name="elbowsX"/>
+ *   <property value="163,163,252,252" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPageOverrideForm.do">
+ *   <property value="1520" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToPreviousPageOverrideInputs.do@">
+ *   <property value="2156,3220,3220,4285" name="elbowsX"/>
+ *   <property value="163,163,252,252" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToPreviousPageOverrideForm.do@">
+ *   <property value="2084,1259,1259,435" name="elbowsX"/>
+ *   <property value="152,152,252,252" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToPreviousPage.do@">
+ *   <property value="2156,2700,2700,3245" name="elbowsX"/>
+ *   <property value="163,163,252,252" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToCurrentPageOverrideInputs.do">
+ *   <property value="3520" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToCurrentPage.do">
+ *   <property value="1720" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToPageOverrideInputs.do@">
+ *   <property value="2084,1379,1379,675" name="elbowsX"/>
+ *   <property value="163,163,252,252" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToPageOverrideForm.do@">
+ *   <property value="2084,1819,1819,1555" name="elbowsX"/>
+ *   <property value="152,152,252,252" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToCurrentPageOverrideInputs.do@">
+ *   <property value="2156,2820,2820,3485" name="elbowsX"/>
+ *   <property value="152,152,252,252" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/returnToTest/nested/nestedController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='2120' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousPageOverrideInputs.do'>",
+        "  <property value='2920' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToCurrentPage.do'>",
+        "  <property value='1580' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPage.do'>",
+        "  <property value='2180' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousPage.do'>",
+        "  <property value='2740' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPageOverrideInputs.do'>",
+        "  <property value='2320' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPageOverrideForm.do'>",
+        "  <property value='2040' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousPageOverrideForm.do'>",
+        "  <property value='2560' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToCurrentPageOverrideInputs.do'>",
+        "  <property value='1400' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToCurrentPageOverrideForm.do'>",
+        "  <property value='1760' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPage.do@'>",
+        "  <property value='2156,2156,2144,2144' name='elbowsX'/>",
+        "  <property value='163,300,300,432' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPreviousPageOverrideInputs.do@'>",
+        "  <property value='2156,2520,2520,2884' name='elbowsX'/>",
+        "  <property value='163,163,432,432' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToCurrentPageOverrideForm.do@'>",
+        "  <property value='2084,1940,1940,1796' name='elbowsX'/>",
+        "  <property value='163,163,432,432' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToCurrentPageOverrideInputs.do@'>",
+        "  <property value='2084,1760,1760,1436' name='elbowsX'/>",
+        "  <property value='163,163,432,432' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPageOverrideInputs.do@'>",
+        "  <property value='2156,2220,2220,2284' name='elbowsX'/>",
+        "  <property value='163,163,432,432' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPageOverrideForm.do@'>",
+        "  <property value='2084,2040,2040,2040' name='elbowsX'/>",
+        "  <property value='163,163,279,396' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToCurrentPage.do@'>",
+        "  <property value='2084,1850,1850,1616' name='elbowsX'/>",
+        "  <property value='152,152,432,432' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPreviousPage.do@'>",
+        "  <property value='2156,2430,2430,2704' name='elbowsX'/>",
+        "  <property value='152,152,432,432' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPreviousPageOverrideForm.do@'>",
+        "  <property value='2156,2340,2340,2524' name='elbowsX'/>",
+        "  <property value='163,163,432,432' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='2120' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='2120,2120,2120,2120' name='elbowsX'/>",
+        "  <property value='104,110,110,116' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToPreviousPage'>",
+        "  <property value='2740' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToPreviousPage#@action:returnToPreviousPageOverrideInputs.do@'>",
+        "  <property value='2920,2920,2920,2920' name='elbowsX'/>",
+        "  <property value='484,520,520,556' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToCurrentPage'>",
+        "  <property value='1580' name='x'/>",
+        "  <property value='600' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToCurrentPage#@action:returnToCurrentPage.do@'>",
+        "  <property value='1580,1580,1580,1580' name='elbowsX'/>",
+        "  <property value='484,520,520,556' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToPage'>",
+        "  <property value='2180' name='x'/>",
+        "  <property value='600' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToPage#@action:returnToPage.do@'>",
+        "  <property value='2180,2180,2180,2180' name='elbowsX'/>",
+        "  <property value='484,520,520,556' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToPreviousPage#@action:returnToPreviousPage.do@'>",
+        "  <property value='2740,2740,2740,2740' name='elbowsX'/>",
+        "  <property value='484,520,520,556' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToPage#@action:returnToPageOverrideInputs.do@'>",
+        "  <property value='2284,2250,2250,2216' name='elbowsX'/>",
+        "  <property value='443,443,592,592' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToPageWithForm'>",
+        "  <property value='2040' name='x'/>",
+        "  <property value='600' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToPageWithForm#@action:returnToPageOverrideForm.do@'>",
+        "  <property value='2040,2040,2040,2040' name='elbowsX'/>",
+        "  <property value='484,520,520,556' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToPreviousPageWithForm'>",
+        "  <property value='2560' name='x'/>",
+        "  <property value='600' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToPreviousPageWithForm#@action:returnToPreviousPageOverrideForm.do@'>",
+        "  <property value='2560,2560,2560,2560' name='elbowsX'/>",
+        "  <property value='484,520,520,556' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToCurrentPage#@action:returnToCurrentPageOverrideInputs.do@'>",
+        "  <property value='1436,1490,1490,1544' name='elbowsX'/>",
+        "  <property value='443,443,592,592' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToCurrentPageWithForm'>",
+        "  <property value='1760' name='x'/>",
+        "  <property value='600' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToCurrentPageWithForm#@action:returnToCurrentPageOverrideForm.do@'>",
+        "  <property value='1760,1760,1760,1760' name='elbowsX'/>",
+        "  <property value='484,520,520,556' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPageOverrideInputs.do'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPage.do'>",
+        "  <property value='1920' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPreviousPage.do'>",
+        "  <property value='3280' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPreviousPageOverrideForm.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPreviousPageOverrideInputs.do'>",
+        "  <property value='4320' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToCurrentPageOverrideForm.do'>",
+        "  <property value='4040' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToCurrentPageOverrideForm.do@'>",
+        "  <property value='2156,3080,3080,4005' name='elbowsX'/>",
+        "  <property value='163,163,252,252' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToPage.do@'>",
+        "  <property value='2084,2019,2019,1955' name='elbowsX'/>",
+        "  <property value='163,163,252,252' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPageOverrideForm.do'>",
+        "  <property value='1520' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToPreviousPageOverrideInputs.do@'>",
+        "  <property value='2156,3220,3220,4285' name='elbowsX'/>",
+        "  <property value='163,163,252,252' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToPreviousPageOverrideForm.do@'>",
+        "  <property value='2084,1259,1259,435' name='elbowsX'/>",
+        "  <property value='152,152,252,252' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToPreviousPage.do@'>",
+        "  <property value='2156,2700,2700,3245' name='elbowsX'/>",
+        "  <property value='163,163,252,252' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToCurrentPageOverrideInputs.do'>",
+        "  <property value='3520' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToCurrentPage.do'>",
+        "  <property value='1720' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToPageOverrideInputs.do@'>",
+        "  <property value='2084,1379,1379,675' name='elbowsX'/>",
+        "  <property value='163,163,252,252' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToPageOverrideForm.do@'>",
+        "  <property value='2084,1819,1819,1555' name='elbowsX'/>",
+        "  <property value='152,152,252,252' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToCurrentPageOverrideInputs.do@'>",
+        "  <property value='2156,2820,2820,3485' name='elbowsX'/>",
+        "  <property value='152,152,252,252' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class nestedController extends PageFlowController
+{
+    private Forward getInputOverrideForward()
+    {
+        Forward fwd = new Forward( "success", "input1", "override input #1 from nested pageflow" );
+        fwd.addPageInput( "input2", "override input #2 from nested pageflow" );
+        return fwd;
+    }
+    
+    private Forward getFormOverrideForward()
+    {
+        InputForm form = new InputForm();
+        form.setFoo( "override foo from nested" );
+        form.setBar( "override bar from nested" );
+        return new Forward( "success", form );
+    }
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToPreviousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToPreviousPage") 
+        })
+    protected Forward returnToPreviousPageOverrideInputs()
+    {
+        return getInputOverrideForward();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToCurrentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToCurrentPage") 
+        })
+    protected Forward returnToCurrentPage()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToPage") 
+        })
+    protected Forward returnToPage()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToPreviousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToPreviousPage") 
+        })
+    protected Forward returnToPreviousPage()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToPage") 
+        })
+    protected Forward returnToPageOverrideInputs()
+    {
+        return getInputOverrideForward();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToPageWithForm" return-form-type="InputForm"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToPageWithForm",
+                outputFormBeanType = InputForm.class) 
+        })
+    protected Forward returnToPageOverrideForm()
+    {
+        return getFormOverrideForward();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToPreviousPageWithForm" return-form-type="InputForm"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToPreviousPageWithForm",
+                outputFormBeanType = InputForm.class) 
+        })
+    protected Forward returnToPreviousPageOverrideForm()
+    {
+        return getFormOverrideForward();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToCurrentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToCurrentPage") 
+        })
+    protected Forward returnToCurrentPageOverrideInputs()
+    {
+        return getInputOverrideForward();
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToCurrentPageWithForm" return-form-type="InputForm"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToCurrentPageWithForm",
+                outputFormBeanType = InputForm.class) 
+        })
+    protected Forward returnToCurrentPageOverrideForm()
+    {
+        return getFormOverrideForward();
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nextPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/nextPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <netui:anchor action="returnToPreviousPage">return-to previousPage</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPreviousPageOverrideForm">return-to previousPage (override form)</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPreviousPageOverrideInputs">return-to previousPage (override page inputs)</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToPreviousPage">global-action return-to previousPage</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToPreviousPageOverrideForm">global-action return-to previousPage (override form)</netui:anchor>
+            <br>
+            <netui:anchor action="globalReturnToPreviousPageOverrideInputs">global-action return-to previousPage (override page inputs)</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPage">return-to page</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPageOverrideForm">return-to page (override form)</netui:anchor>
+            <br>
+            <netui:anchor action="returnToPageOverrideInputs">return-to page (override page inputs)</netui:anchor>  
+            <br>
+            <br>
+            <netui:anchor action="goNested">go to nested page flow</netui:anchor>          
+            <br>
+            <br>
+            <netui:anchor action="begin">start over</netui:anchor>
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <netui:label value="${pageFlow.testActionCount}"/></font>
+        
+        <br>
+        <br>
+        <netui:form action="testAction">
+            <netui:textBox dataSource="actionForm.foo"/>
+            <br>
+            <netui:button>testAction</netui:button>
+        </netui:form>
+        <br>
+        <br>
+        <netui:anchor action="returnToPreviousAction">returnTo="previousAction"</netui:anchor>
+        <br>
+        <netui:anchor action="returnToAction">returnTo="action"</netui:anchor>
+        <br>
+        <netui:anchor action="returnToPreviousActionOverrideForm">returnTo="previousAction", override form</netui:anchor>
+        <br>
+        <netui:anchor action="returnToActionOverrideForm">returnTo="action", override form</netui:anchor>
+        <br>
+        <netui:anchor action="globalReturnToPreviousAction">Global.app returnTo="previousAction"</netui:anchor>
+        <br>
+        <netui:anchor action="globalReturnToAction">Global.app returnTo="action"</netui:anchor>
+        <br>
+        <br>
+        <netui:anchor href="nested/nestedController.jpf">go to nested</netui:anchor>
+        <br>
+        <br>
+        <netui:anchor action="done">
+            Exit returnToAction
+        </netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Return To Action - nested
+        </title>
+    </head>
+    <body>
+        <h3>Return To Action - nested</h3>
+        
+        <netui:anchor action="returnToPreviousAction">returnTo="previousAction" on nesting page flow</netui:anchor>
+        <br>
+        <netui:anchor action="returnToAction">returnTo="action" on nesting page flow</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,201 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Jul 22 13:31:20 MDT 2003
+//  By: rich
+// -----------------------------------------------------------------------------
+package pageFlowCore.returnToTest.returnToAction.nested;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/returnToTest/returnToAction/nested/nestedController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToPreviousAction">
+ *   <property value="240" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToAction">
+ *   <property value="520" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToAction.do">
+ *   <property value="360" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToAction.do@">
+ *   <property value="276,300,300,324" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousAction.do">
+ *   <property value="240" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPreviousAction.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="144,160,160,176" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToPreviousAction#@action:returnToPreviousAction.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="264,290,290,316" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#success#returnToAction#@action:returnToAction.do@">
+ *   <property value="396,440,440,484" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/returnToTest/returnToAction/nested/nestedController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToPreviousAction'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToAction'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToAction.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToAction.do@'>",
+        "  <property value='276,300,300,324' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousAction.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPreviousAction.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='144,160,160,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToPreviousAction#@action:returnToPreviousAction.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='264,290,290,316' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#success#returnToAction#@action:returnToAction.do@'>",
+        "  <property value='396,440,440,484' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class nestedController extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToPreviousAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToPreviousAction") 
+        })
+    protected Forward returnToPreviousAction()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-action="returnToAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                returnAction = "returnToAction") 
+        })
+    protected Forward returnToAction()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,487 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Jul 22 12:22:17 MDT 2003
+//  By: rich
+// -----------------------------------------------------------------------------
+package pageFlowCore.returnToTest.returnToAction;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/returnToTest/returnToAction/returnToActionController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="280" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:done.do">
+ *   <property value="440" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:testAction.do#returnToTest.returnToAction.returnToActionController.TestActionForm">
+ *   <property value="280" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousAction.do">
+ *   <property value="400" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToAction.do">
+ *   <property value="160" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToActionOverrideForm.do">
+ *   <property value="80" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousActionOverrideForm.do">
+ *   <property value="480" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToAction.do">
+ *   <property value="420" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPreviousAction.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPreviousActionOverrideForm.do@">
+ *   <property value="316,380,380,444" name="elbowsX"/>
+ *   <property value="223,223,412,412" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToPreviousAction.do@">
+ *   <property value="316,340,340,364" name="elbowsX"/>
+ *   <property value="223,223,332,332" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToAction.do@">
+ *   <property value="316,350,350,385" name="elbowsX"/>
+ *   <property value="201,201,92,92" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToAction.do@">
+ *   <property value="244,220,220,196" name="elbowsX"/>
+ *   <property value="223,223,332,332" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:testAction.do#returnToTest.returnToAction.returnToActionController.TestActionForm@">
+ *   <property value="280,280,280,280" name="elbowsX"/>
+ *   <property value="264,280,280,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:returnToActionOverrideForm.do@">
+ *   <property value="244,180,180,116" name="elbowsX"/>
+ *   <property value="223,223,412,412" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:globalReturnToPreviousAction.do@">
+ *   <property value="244,179,179,115" name="elbowsX"/>
+ *   <property value="212,212,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:done.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="316,360,360,404" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="280" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:testActionPage1.jsp">
+ *   <property value="280" name="x"/>
+ *   <property value="460" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="280,280,280,280" name="elbowsX"/>
+ *   <property value="84,130,130,176" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnToActionDone">
+ *   <property value="600" name="x"/>
+ *   <property value="220" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#returnToActionDone#@action:done.do@">
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ *   <property value="476,520,520,564" name="elbowsX"/>
+ *   <property value="212,212,212,212" name="elbowsY"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:testAction.do#returnToTest.returnToAction.returnToActionController.TestActionForm@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="264,280,280,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#previousAction#@action:returnToPreviousAction.do@"/>
+ * <pageflow-object id="return-to-action:@forward:return-to#success#action#@action:returnToAction.do@@">
+ *   <property value="40" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#action#@action:returnToAction.do@">
+ *   <property value="124,100,100,76" name="elbowsX"/>
+ *   <property value="332,332,332,332" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to-action:@forward:return-to#success#action#@action:returnToActionOverrideForm.do@@">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#action#@action:returnToActionOverrideForm.do@">
+ *   <property value="80,80,60,60" name="elbowsX"/>
+ *   <property value="376,230,230,84" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#previousAction#@action:returnToPreviousActionOverrideForm.do@">
+ *   <property value="444,300,300,156" name="elbowsX"/>
+ *   <property value="401,401,92,92" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:returnToTest.returnToAction.returnToActionController.TestActionForm#foo#java.lang.String"/>
+ * <pageflow-object id="formbean:returnToTest.returnToAction.returnToActionController.TestActionForm"/>
+ * <pageflow-object id="action-call:@page:testActionPage1.jsp@#@action:testAction.do#returnToTest.returnToAction.returnToActionController.TestActionForm@">
+ *   <property value="280,280,280,280" name="elbowsX"/>
+ *   <property value="416,400,400,384" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/returnToTest/returnToAction/returnToActionController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:done.do'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:testAction.do#returnToTest.returnToAction.returnToActionController.TestActionForm'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousAction.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToAction.do'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToActionOverrideForm.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousActionOverrideForm.do'>",
+        "  <property value='480' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToAction.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPreviousAction.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPreviousActionOverrideForm.do@'>",
+        "  <property value='316,380,380,444' name='elbowsX'/>",
+        "  <property value='223,223,412,412' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToPreviousAction.do@'>",
+        "  <property value='316,340,340,364' name='elbowsX'/>",
+        "  <property value='223,223,332,332' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToAction.do@'>",
+        "  <property value='316,350,350,385' name='elbowsX'/>",
+        "  <property value='201,201,92,92' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToAction.do@'>",
+        "  <property value='244,220,220,196' name='elbowsX'/>",
+        "  <property value='223,223,332,332' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:testAction.do#returnToTest.returnToAction.returnToActionController.TestActionForm@'>",
+        "  <property value='280,280,280,280' name='elbowsX'/>",
+        "  <property value='264,280,280,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:returnToActionOverrideForm.do@'>",
+        "  <property value='244,180,180,116' name='elbowsX'/>",
+        "  <property value='223,223,412,412' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:globalReturnToPreviousAction.do@'>",
+        "  <property value='244,179,179,115' name='elbowsX'/>",
+        "  <property value='212,212,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='316,360,360,404' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:testActionPage1.jsp'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='460' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='280,280,280,280' name='elbowsX'/>",
+        "  <property value='84,130,130,176' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnToActionDone'>",
+        "  <property value='600' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#returnToActionDone#@action:done.do@'>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "  <property value='476,520,520,564' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:testAction.do#returnToTest.returnToAction.returnToActionController.TestActionForm@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='264,280,280,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#previousAction#@action:returnToPreviousAction.do@'/>",
+        "<pageflow-object id='return-to-action:@forward:return-to#success#action#@action:returnToAction.do@@'>",
+        "  <property value='40' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#action#@action:returnToAction.do@'>",
+        "  <property value='124,100,100,76' name='elbowsX'/>",
+        "  <property value='332,332,332,332' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to-action:@forward:return-to#success#action#@action:returnToActionOverrideForm.do@@'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#action#@action:returnToActionOverrideForm.do@'>",
+        "  <property value='80,80,60,60' name='elbowsX'/>",
+        "  <property value='376,230,230,84' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#previousAction#@action:returnToPreviousActionOverrideForm.do@'>",
+        "  <property value='444,300,300,156' name='elbowsX'/>",
+        "  <property value='401,401,92,92' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:returnToTest.returnToAction.returnToActionController.TestActionForm#foo#java.lang.String'/>",
+        "<pageflow-object id='formbean:returnToTest.returnToAction.returnToActionController.TestActionForm'/>",
+        "<pageflow-object id='action-call:@page:testActionPage1.jsp@#@action:testAction.do#returnToTest.returnToAction.returnToActionController.TestActionForm@'>",
+        "  <property value='280,280,280,280' name='elbowsX'/>",
+        "  <property value='416,400,400,384' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class returnToActionController extends PageFlowController
+{
+    private int testActionCount = 0;
+
+    public int getTestActionCount()
+    {
+        return testActionCount;
+    }
+
+    public void setTestActionCount(int testActionCount)
+    {
+        this.testActionCount = testActionCount;
+    }
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success", new TestActionForm( "init val" ) );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="begin"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "begin") 
+        })
+    public Forward done()
+    {
+        return new Forward( "done" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward testAction(TestActionForm form)
+    {
+        ++testActionCount;
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="previousAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+    protected Forward returnToPreviousAction()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="action"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+    protected Forward returnToAction()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="action"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+    protected Forward returnToActionOverrideForm()
+    {
+        return new Forward("success", new TestActionForm( "overridden1" ) );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="previousAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+    protected Forward returnToPreviousActionOverrideForm()
+    {
+        return new Forward("success", new TestActionForm( "overridden2" ) );
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class TestActionForm extends FormData
+    {
+        private String foo;
+
+        public TestActionForm()
+        {
+        }
+        
+        public TestActionForm( String s )
+        {
+            foo = s;
+        }
+        
+        public void setFoo(String foo)
+        {
+            this.foo = foo;
+        }
+
+        public String getFoo()
+        {
+            return this.foo;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/testActionPage1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToAction/testActionPage1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-template:template templatePage="/resources/jsp/template.jsp">
+    <netui-template:setAttribute value="testAction" name="title"/>
+    <netui-template:section name="bodySection">
+        <br/>
+        <netui:form action="testAction">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.foo"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+    </netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToTestController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageFlowCore/returnToTest/returnToTestController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1117 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Sat Jul 19 13:39:36 MDT 2003
+//  By: rich
+// -----------------------------------------------------------------------------
+package pageFlowCore.returnToTest;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller 
+ * @jpf:message-resources resources="returnToTest.Messages"
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/returnToTest/returnToTestController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="540" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:input.do#returnToTest.returnToTestController.InputForm">
+ *   <property value="540" name="x"/>
+ *   <property value="620" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPage.do">
+ *   <property value="720" name="x"/>
+ *   <property value="840" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToCurrentPage.do">
+ *   <property value="720" name="x"/>
+ *   <property value="320" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToCurrentPageWithForm.do#returnToTest.returnToTestController.InputForm">
+ *   <property value="720" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousPage.do">
+ *   <property value="340" name="x"/>
+ *   <property value="840" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToCurrentPageOverrideInputs.do">
+ *   <property value="720" name="x"/>
+ *   <property value="400" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToCurrentPageOverrideForm.do">
+ *   <property value="720" name="x"/>
+ *   <property value="560" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousPageOverrideInputs.do">
+ *   <property value="340" name="x"/>
+ *   <property value="740" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousPageOverrideForm.do">
+ *   <property value="340" name="x"/>
+ *   <property value="940" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPageOverrideInputs.do">
+ *   <property value="720" name="x"/>
+ *   <property value="740" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPageOverrideForm.do">
+ *   <property value="720" name="x"/>
+ *   <property value="940" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="40" name="x"/>
+ *   <property value="1020" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToCurrentPageOverrideForm.do">
+ *   <property value="280" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPage.do">
+ *   <property value="280" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPageOverrideInputs.do">
+ *   <property value="280" name="x"/>
+ *   <property value="500" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToCurrentPage.do">
+ *   <property value="280" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPageOverrideForm.do">
+ *   <property value="280" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToCurrentPageWithForm.do">
+ *   <property value="280" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPageWithForm.do">
+ *   <property value="280" name="x"/>
+ *   <property value="560" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToCurrentPageOverrideInputs.do">
+ *   <property value="280" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:returnToCurrentPageWithForm.do#returnToTest.returnToTestController.InputForm@">
+ *   <property value="576,630,630,684" name="elbowsX"/>
+ *   <property value="472,472,472,472" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:returnToCurrentPageOverrideForm.do@">
+ *   <property value="576,630,630,684" name="elbowsX"/>
+ *   <property value="472,472,552,552" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:globalReturnToCurrentPageOverrideForm.do@">
+ *   <property value="504,409,409,315" name="elbowsX"/>
+ *   <property value="472,472,252,252" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:globalReturnToPage.do@">
+ *   <property value="504,409,409,315" name="elbowsX"/>
+ *   <property value="472,472,372,372" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:returnToCurrentPageOverrideInputs.do@">
+ *   <property value="576,630,630,684" name="elbowsX"/>
+ *   <property value="472,472,392,392" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:goNested.do@">
+ *   <property value="504,290,290,76" name="elbowsX"/>
+ *   <property value="483,483,1012,1012" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:input.do#returnToTest.returnToTestController.InputForm@">
+ *   <property value="540,540,540,540" name="elbowsX"/>
+ *   <property value="524,550,550,576" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:globalReturnToPageOverrideInputs.do@">
+ *   <property value="504,409,409,315" name="elbowsX"/>
+ *   <property value="472,472,492,492" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:globalReturnToCurrentPage.do@">
+ *   <property value="504,409,409,315" name="elbowsX"/>
+ *   <property value="472,472,192,192" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:globalReturnToPageOverrideForm.do@">
+ *   <property value="504,409,409,315" name="elbowsX"/>
+ *   <property value="472,472,432,432" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:globalReturnToCurrentPageWithForm.do@">
+ *   <property value="504,410,410,316" name="elbowsX"/>
+ *   <property value="472,472,112,112" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:globalReturnToPageWithForm.do@">
+ *   <property value="504,410,410,316" name="elbowsX"/>
+ *   <property value="472,472,552,552" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:returnToCurrentPage.do@">
+ *   <property value="576,630,630,684" name="elbowsX"/>
+ *   <property value="472,472,312,312" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:inputPage.jsp@#@action:globalReturnToCurrentPageOverrideInputs.do@">
+ *   <property value="504,409,409,315" name="elbowsX"/>
+ *   <property value="472,472,52,52" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:inputPage.jsp">
+ *   <property value="540" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPreviousPageOverrideInputs.do">
+ *   <property value="320" name="x"/>
+ *   <property value="1300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPreviousPage.do">
+ *   <property value="540" name="x"/>
+ *   <property value="1300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:globalReturnToPreviousPageOverrideForm.do">
+ *   <property value="760" name="x"/>
+ *   <property value="1300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:returnToPreviousPageOverrideInputs.do@">
+ *   <property value="504,440,440,376" name="elbowsX"/>
+ *   <property value="1032,1032,732,732" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:globalReturnToPreviousPageOverrideInputs.do@">
+ *   <property value="504,430,430,356" name="elbowsX"/>
+ *   <property value="1032,1032,1292,1292" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:globalReturnToPreviousPage.do@">
+ *   <property value="540,540,540,540" name="elbowsX"/>
+ *   <property value="1084,1170,1170,1256" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:returnToPageOverrideForm.do@">
+ *   <property value="576,630,630,684" name="elbowsX"/>
+ *   <property value="1032,1032,932,932" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:returnToPageOverrideInputs.do@">
+ *   <property value="576,630,630,684" name="elbowsX"/>
+ *   <property value="1032,1032,732,732" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:goNested.do@">
+ *   <property value="504,290,290,76" name="elbowsX"/>
+ *   <property value="1021,1021,1012,1012" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:returnToPage.do@">
+ *   <property value="576,630,630,684" name="elbowsX"/>
+ *   <property value="1032,1032,832,832" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:returnToPreviousPageOverrideForm.do@">
+ *   <property value="504,440,440,376" name="elbowsX"/>
+ *   <property value="1032,1032,932,932" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:globalReturnToPreviousPageOverrideForm.do@">
+ *   <property value="576,650,650,724" name="elbowsX"/>
+ *   <property value="1032,1032,1292,1292" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:nextPage.jsp@#@action:returnToPreviousPage.do@">
+ *   <property value="504,440,440,376" name="elbowsX"/>
+ *   <property value="1032,1032,832,832" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:nextPage.jsp">
+ *   <property value="540" name="x"/>
+ *   <property value="1040" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPageWithForm.do#returnToTest.returnToTestController.InputForm">
+ *   <property value="40" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnToPreviousPageWithForm.do#returnToTest.returnToTestController.InputForm">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToCurrentPageWithForm.do#returnToTest.returnToTestController.InputForm@">
+ *   <property value="76,380,380,684" name="elbowsX"/>
+ *   <property value="841,841,483,483" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToPageWithForm.do#returnToTest.returnToTestController.InputForm@">
+ *   <property value="29,29,40,40" name="elbowsX"/>
+ *   <property value="816,490,490,164" name="elbowsY"/>
+ *   <property value="North_0" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToPage.do@">
+ *   <property value="76,380,380,684" name="elbowsX"/>
+ *   <property value="852,852,832,832" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToCurrentPage.do@">
+ *   <property value="76,380,380,684" name="elbowsX"/>
+ *   <property value="863,863,323,323" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToPreviousPageWithForm.do#returnToTest.returnToTestController.InputForm@">
+ *   <property value="40,40,60,60" name="elbowsX"/>
+ *   <property value="816,450,450,84" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToPreviousPage.do@">
+ *   <property value="76,190,190,304" name="elbowsX"/>
+ *   <property value="863,863,821,821" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/returnToTest/nested/nestedController.jpf">
+ *   <property value="40" name="x"/>
+ *   <property value="860" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#inputPage.jsp#@action:begin.do@">
+ *   <property value="540,540,540,540" name="elbowsX"/>
+ *   <property value="84,260,260,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#nextPage.jsp#@action:input.do#returnToTest.returnToTestController.InputForm@">
+ *   <property value="540,540,540,540" name="elbowsX"/>
+ *   <property value="664,830,830,996" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#validationFail#currentPage#@action:input.do#returnToTest.returnToTestController.InputForm@">
+ *   <property value="416,460,460,504" name="elbowsX"/>
+ *   <property value="392,392,392,392" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="validationFail" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to-page:@forward:return-to#success#page#@action:returnToPage.do@@">
+ *   <property value="860" name="x"/>
+ *   <property value="840" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#page#@action:returnToPage.do@">
+ *   <property value="756,790,790,824" name="elbowsX"/>
+ *   <property value="832,832,832,832" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:returnToCurrentPage.do@">
+ *   <property value="184,140,140,96" name="elbowsX"/>
+ *   <property value="252,252,252,252" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:returnToCurrentPageWithForm.do#returnToTest.returnToTestController.InputForm@"/>
+ * <pageflow-object id="forward:return-to#success#previousPage#@action:returnToPreviousPage.do@">
+ *   <property value="184,140,140,96" name="elbowsX"/>
+ *   <property value="512,512,512,512" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:returnToCurrentPageOverrideInputs.do@"/>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:returnToCurrentPageOverrideForm.do@"/>
+ * <pageflow-object id="forward:return-to#success#previousPage#@action:returnToPreviousPageOverrideInputs.do@"/>
+ * <pageflow-object id="forward:return-to#success#previousPage#@action:returnToPreviousPageOverrideForm.do@"/>
+ * <pageflow-object id="return-to-page:@forward:return-to#success#page#@action:returnToPageOverrideInputs.do@@">
+ *   <property value="860" name="x"/>
+ *   <property value="740" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#page#@action:returnToPageOverrideInputs.do@">
+ *   <property value="756,790,790,824" name="elbowsX"/>
+ *   <property value="732,732,732,732" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to-page:@forward:return-to#success#page#@action:returnToPageOverrideForm.do@@">
+ *   <property value="860" name="x"/>
+ *   <property value="940" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#page#@action:returnToPageOverrideForm.do@">
+ *   <property value="756,790,790,824" name="elbowsX"/>
+ *   <property value="932,932,932,932" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#/returnToTest/nested/nestedController.jpf#@action:goNested.do@">
+ *   <property value="40,40,40,40" name="elbowsX"/>
+ *   <property value="976,940,940,904" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:returnToTest.returnToTestController.InputForm#foo#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:returnToTest.returnToTestController.InputForm#bar#java.lang.String"/>
+ * <pageflow-object id="formbean:returnToTest.returnToTestController.InputForm"/>
+ * <pageflow-object id="forward:return-to#success#page#@action:returnToPageWithForm.do#returnToTest.returnToTestController.InputForm@">
+ *   <property value="40,-26,-26,74" name="elbowsX"/>
+ *   <property value="76,76,82,82" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to-page:@forward:return-to#success#page#@action:returnToPageWithForm.do#returnToTest.returnToTestController.InputForm@@">
+ *   <property value="110" name="x"/>
+ *   <property value="90" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#previousPage#@action:returnToPreviousPageWithForm.do#returnToTest.returnToTestController.InputForm@"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "returnToTest.Messages") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/returnToTest/returnToTestController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:input.do#returnToTest.returnToTestController.InputForm'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='620' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPage.do'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='840' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToCurrentPage.do'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='320' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToCurrentPageWithForm.do#returnToTest.returnToTestController.InputForm'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousPage.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='840' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToCurrentPageOverrideInputs.do'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToCurrentPageOverrideForm.do'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousPageOverrideInputs.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='740' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousPageOverrideForm.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='940' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPageOverrideInputs.do'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='740' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPageOverrideForm.do'>",
+        "  <property value='720' name='x'/>",
+        "  <property value='940' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='40' name='x'/>",
+        "  <property value='1020' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToCurrentPageOverrideForm.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPage.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPageOverrideInputs.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='500' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToCurrentPage.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPageOverrideForm.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToCurrentPageWithForm.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPageWithForm.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToCurrentPageOverrideInputs.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:returnToCurrentPageWithForm.do#returnToTest.returnToTestController.InputForm@'>",
+        "  <property value='576,630,630,684' name='elbowsX'/>",
+        "  <property value='472,472,472,472' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:returnToCurrentPageOverrideForm.do@'>",
+        "  <property value='576,630,630,684' name='elbowsX'/>",
+        "  <property value='472,472,552,552' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:globalReturnToCurrentPageOverrideForm.do@'>",
+        "  <property value='504,409,409,315' name='elbowsX'/>",
+        "  <property value='472,472,252,252' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:globalReturnToPage.do@'>",
+        "  <property value='504,409,409,315' name='elbowsX'/>",
+        "  <property value='472,472,372,372' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:returnToCurrentPageOverrideInputs.do@'>",
+        "  <property value='576,630,630,684' name='elbowsX'/>",
+        "  <property value='472,472,392,392' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:goNested.do@'>",
+        "  <property value='504,290,290,76' name='elbowsX'/>",
+        "  <property value='483,483,1012,1012' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:input.do#returnToTest.returnToTestController.InputForm@'>",
+        "  <property value='540,540,540,540' name='elbowsX'/>",
+        "  <property value='524,550,550,576' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:globalReturnToPageOverrideInputs.do@'>",
+        "  <property value='504,409,409,315' name='elbowsX'/>",
+        "  <property value='472,472,492,492' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:globalReturnToCurrentPage.do@'>",
+        "  <property value='504,409,409,315' name='elbowsX'/>",
+        "  <property value='472,472,192,192' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:globalReturnToPageOverrideForm.do@'>",
+        "  <property value='504,409,409,315' name='elbowsX'/>",
+        "  <property value='472,472,432,432' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:globalReturnToCurrentPageWithForm.do@'>",
+        "  <property value='504,410,410,316' name='elbowsX'/>",
+        "  <property value='472,472,112,112' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:globalReturnToPageWithForm.do@'>",
+        "  <property value='504,410,410,316' name='elbowsX'/>",
+        "  <property value='472,472,552,552' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:returnToCurrentPage.do@'>",
+        "  <property value='576,630,630,684' name='elbowsX'/>",
+        "  <property value='472,472,312,312' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:inputPage.jsp@#@action:globalReturnToCurrentPageOverrideInputs.do@'>",
+        "  <property value='504,409,409,315' name='elbowsX'/>",
+        "  <property value='472,472,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:inputPage.jsp'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPreviousPageOverrideInputs.do'>",
+        "  <property value='320' name='x'/>",
+        "  <property value='1300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPreviousPage.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='1300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:globalReturnToPreviousPageOverrideForm.do'>",
+        "  <property value='760' name='x'/>",
+        "  <property value='1300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:returnToPreviousPageOverrideInputs.do@'>",
+        "  <property value='504,440,440,376' name='elbowsX'/>",
+        "  <property value='1032,1032,732,732' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:globalReturnToPreviousPageOverrideInputs.do@'>",
+        "  <property value='504,430,430,356' name='elbowsX'/>",
+        "  <property value='1032,1032,1292,1292' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:globalReturnToPreviousPage.do@'>",
+        "  <property value='540,540,540,540' name='elbowsX'/>",
+        "  <property value='1084,1170,1170,1256' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:returnToPageOverrideForm.do@'>",
+        "  <property value='576,630,630,684' name='elbowsX'/>",
+        "  <property value='1032,1032,932,932' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:returnToPageOverrideInputs.do@'>",
+        "  <property value='576,630,630,684' name='elbowsX'/>",
+        "  <property value='1032,1032,732,732' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:goNested.do@'>",
+        "  <property value='504,290,290,76' name='elbowsX'/>",
+        "  <property value='1021,1021,1012,1012' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:returnToPage.do@'>",
+        "  <property value='576,630,630,684' name='elbowsX'/>",
+        "  <property value='1032,1032,832,832' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:returnToPreviousPageOverrideForm.do@'>",
+        "  <property value='504,440,440,376' name='elbowsX'/>",
+        "  <property value='1032,1032,932,932' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:globalReturnToPreviousPageOverrideForm.do@'>",
+        "  <property value='576,650,650,724' name='elbowsX'/>",
+        "  <property value='1032,1032,1292,1292' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:nextPage.jsp@#@action:returnToPreviousPage.do@'>",
+        "  <property value='504,440,440,376' name='elbowsX'/>",
+        "  <property value='1032,1032,832,832' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:nextPage.jsp'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='1040' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPageWithForm.do#returnToTest.returnToTestController.InputForm'>",
+        "  <property value='40' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnToPreviousPageWithForm.do#returnToTest.returnToTestController.InputForm'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToCurrentPageWithForm.do#returnToTest.returnToTestController.InputForm@'>",
+        "  <property value='76,380,380,684' name='elbowsX'/>",
+        "  <property value='841,841,483,483' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToPageWithForm.do#returnToTest.returnToTestController.InputForm@'>",
+        "  <property value='29,29,40,40' name='elbowsX'/>",
+        "  <property value='816,490,490,164' name='elbowsY'/>",
+        "  <property value='North_0' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToPage.do@'>",
+        "  <property value='76,380,380,684' name='elbowsX'/>",
+        "  <property value='852,852,832,832' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToCurrentPage.do@'>",
+        "  <property value='76,380,380,684' name='elbowsX'/>",
+        "  <property value='863,863,323,323' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToPreviousPageWithForm.do#returnToTest.returnToTestController.InputForm@'>",
+        "  <property value='40,40,60,60' name='elbowsX'/>",
+        "  <property value='816,450,450,84' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:/returnToTest/nested/nestedController.jpf@#@action:returnToPreviousPage.do@'>",
+        "  <property value='76,190,190,304' name='elbowsX'/>",
+        "  <property value='863,863,821,821' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/returnToTest/nested/nestedController.jpf'>",
+        "  <property value='40' name='x'/>",
+        "  <property value='860' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#inputPage.jsp#@action:begin.do@'>",
+        "  <property value='540,540,540,540' name='elbowsX'/>",
+        "  <property value='84,260,260,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#nextPage.jsp#@action:input.do#returnToTest.returnToTestController.InputForm@'>",
+        "  <property value='540,540,540,540' name='elbowsX'/>",
+        "  <property value='664,830,830,996' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#validationFail#currentPage#@action:input.do#returnToTest.returnToTestController.InputForm@'>",
+        "  <property value='416,460,460,504' name='elbowsX'/>",
+        "  <property value='392,392,392,392' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='validationFail' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to-page:@forward:return-to#success#page#@action:returnToPage.do@@'>",
+        "  <property value='860' name='x'/>",
+        "  <property value='840' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#page#@action:returnToPage.do@'>",
+        "  <property value='756,790,790,824' name='elbowsX'/>",
+        "  <property value='832,832,832,832' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:returnToCurrentPage.do@'>",
+        "  <property value='184,140,140,96' name='elbowsX'/>",
+        "  <property value='252,252,252,252' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:returnToCurrentPageWithForm.do#returnToTest.returnToTestController.InputForm@'/>",
+        "<pageflow-object id='forward:return-to#success#previousPage#@action:returnToPreviousPage.do@'>",
+        "  <property value='184,140,140,96' name='elbowsX'/>",
+        "  <property value='512,512,512,512' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:returnToCurrentPageOverrideInputs.do@'/>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:returnToCurrentPageOverrideForm.do@'/>",
+        "<pageflow-object id='forward:return-to#success#previousPage#@action:returnToPreviousPageOverrideInputs.do@'/>",
+        "<pageflow-object id='forward:return-to#success#previousPage#@action:returnToPreviousPageOverrideForm.do@'/>",
+        "<pageflow-object id='return-to-page:@forward:return-to#success#page#@action:returnToPageOverrideInputs.do@@'>",
+        "  <property value='860' name='x'/>",
+        "  <property value='740' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#page#@action:returnToPageOverrideInputs.do@'>",
+        "  <property value='756,790,790,824' name='elbowsX'/>",
+        "  <property value='732,732,732,732' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to-page:@forward:return-to#success#page#@action:returnToPageOverrideForm.do@@'>",
+        "  <property value='860' name='x'/>",
+        "  <property value='940' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#page#@action:returnToPageOverrideForm.do@'>",
+        "  <property value='756,790,790,824' name='elbowsX'/>",
+        "  <property value='932,932,932,932' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#/returnToTest/nested/nestedController.jpf#@action:goNested.do@'>",
+        "  <property value='40,40,40,40' name='elbowsX'/>",
+        "  <property value='976,940,940,904' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:returnToTest.returnToTestController.InputForm#foo#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:returnToTest.returnToTestController.InputForm#bar#java.lang.String'/>",
+        "<pageflow-object id='formbean:returnToTest.returnToTestController.InputForm'/>",
+        "<pageflow-object id='forward:return-to#success#page#@action:returnToPageWithForm.do#returnToTest.returnToTestController.InputForm@'>",
+        "  <property value='40,-26,-26,74' name='elbowsX'/>",
+        "  <property value='76,76,82,82' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to-page:@forward:return-to#success#page#@action:returnToPageWithForm.do#returnToTest.returnToTestController.InputForm@@'>",
+        "  <property value='110' name='x'/>",
+        "  <property value='90' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#previousPage#@action:returnToPreviousPageWithForm.do#returnToTest.returnToTestController.InputForm@'/>",
+        "</view-properties>"
+    })
+public class returnToTestController extends PageFlowController
+{
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="inputPage.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "inputPage.jsp") 
+        })
+    protected Forward begin()
+    {
+        Forward fwd = new Forward( "success" );
+        fwd.addPageInput( "input1", "page input 1" );
+        fwd.addPageInput( "input2", "page input 2" );
+        InputForm form = new InputForm();
+        form.setFoo( "init foo" );
+        form.setBar( "init bar" );
+        fwd.addOutputForm( form );
+        return fwd;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="nextPage.jsp"
+     * @jpf:validation-error-forward name="validationFail" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "nextPage.jsp") 
+        },
+        validationErrorForward=@Jpf.Forward(name="validationFail", navigateTo=Jpf.NavigateTo.currentPage))
+    protected Forward input(InputForm form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="page"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.page) 
+        })
+    protected Forward returnToPage()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward returnToCurrentPage()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward returnToCurrentPageWithForm( InputForm form )
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="page"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.page) 
+        })
+    protected Forward returnToPageWithForm( InputForm form )
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="previousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+    protected Forward returnToPreviousPageWithForm( InputForm form )
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="previousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+    protected Forward returnToPreviousPage()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward returnToCurrentPageOverrideInputs()
+    {
+        Forward fwd = new Forward( "success", "input1", "overridden #1" );
+        fwd.addPageInput( "input2", "overridden #2" );
+        return fwd;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward returnToCurrentPageOverrideForm()
+    {
+        InputForm overrideForm = new InputForm();
+        overrideForm.setFoo( "override foo" );
+        overrideForm.setBar( "override bar" );
+        return new Forward("success", overrideForm);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="previousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+    protected Forward returnToPreviousPageOverrideInputs()
+    {
+        Forward fwd = new Forward( "success", "input1", "overridden #1" );
+        fwd.addPageInput( "input2", "overridden #2" );
+        return fwd;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="previousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+    protected Forward returnToPreviousPageOverrideForm()
+    {
+        InputForm overrideForm = new InputForm();
+        overrideForm.setFoo( "override foo" );
+        overrideForm.setBar( "override bar" );
+        return new Forward("success", overrideForm);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="page"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.page) 
+        })
+    protected Forward returnToPageOverrideInputs()
+    {
+        Forward fwd = new Forward( "success", "input1", "overridden #1" );
+        fwd.addPageInput( "input2", "overridden #2" );
+        return fwd;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="page"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.page) 
+        })
+    protected Forward returnToPageOverrideForm()
+    {
+        InputForm overrideForm = new InputForm();
+        overrideForm.setFoo( "override foo" );
+        overrideForm.setBar( "override bar" );
+        return new Forward("success", overrideForm);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="nested/nestedController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "nested/nestedController.jpf") 
+        })
+    protected Forward goNested()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class InputForm extends FormData
+    {
+        private String bar;
+
+        private String foo;
+
+
+        public void setFoo(String foo)
+        {
+            this.foo = foo;
+        }
+
+        public String getFoo()
+        {
+            return this.foo;
+        }
+
+        public void setBar(String bar)
+        {
+            this.bar = bar;
+        }
+
+        public String getBar()
+        {
+            return this.bar;
+        }
+        
+        public ActionErrors validate( ActionMapping mapping, HttpServletRequest request )
+        {
+            if ( foo.length() == 0 )
+            {
+                ActionErrors errs = new ActionErrors();
+                errs.add( "foo", new ActionError( "anError" ) );
+                return errs;
+            }
+            
+            return null;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,116 @@
+package pageInput.test1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   public   String   pageValue1  = "PageValue 1";
+   public   String   pageValue2  = "PageValue 2";
+
+   /**
+    * This should be okay as the Forward names should have nothing to do with
+    * the pageInput names.
+    *
+    * @jpf:action
+    * @jpf:forward name="pgKey" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "pgKey",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("pgKey", "pgKey", pageValue1);
+      }
+
+   /**
+    * This will give no warning.  If you add a pageInput name twice the second
+    * one will just replace the first and no warning will be issued.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      Forward fwd = new Forward("gotoPg2", "pgKey", pageValue1);
+      fwd.addPageInput("pgKey", pageValue2);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoAction3" path="action3.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAction3",
+                path = "action3.do") 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      Forward fwd = new Forward("gotoAction3", "pgKey", pageValue1);
+      return fwd;
+      }
+
+   /**
+    * This however this will write a warning message to netui.log that the
+    * pageInput name is being added to the request twice.  Action2 above added
+    * "pgKey" to the pageInput then forwared to action3 and now action3 is
+    * trying to add the same name again.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action3()
+      { 
+      System.out.println(">>> Jpf1.action3");
+      Forward fwd = new Forward("gotoPg3", "pgKey", pageValue1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test1</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test1 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui-data:declarePageInput name="pgKey" type="java.lang.String" />
+
+            PageInput value1: <netui:label value="${pageInput.pgKey}" />
+            <br/><br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test1</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test1 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui-data:declarePageInput name="pgKey" type="java.lang.String" />
+
+            PageInput value2: <netui:label value="${pageInput.pgKey}" />
+            <br/><br/>
+            <netui:anchor action="action2">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test1</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test1 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui-data:declarePageInput name="pgKey" type="java.lang.String" />
+
+            PageInput value2: <netui:label value="${pageInput.pgKey}" />
+            <br/><br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test1/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test1</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test1 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,117 @@
+package pageInput.test10;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public static final String  FORM_FLD_1      = "Page Input form field 1 value";
+    public static final String  FORM_FLD_2      = "Page Input form field 2 value";
+    public              FormOne form1           = new FormOne();
+
+    public static final String  NEW_FORM_FLD_1  = "New - Page Input form field 1 value";
+    public static final String  NEW_FORM_FLD_2  = "New - Page Input form field 2 value";
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        Forward fwd = new Forward("gotoPg1");
+        fwd.addPageInput("pgInputForm", form1);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoSubJpf1" path="sub1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSubJpf1",
+                path = "sub1/SubJpf1.jpf") 
+        })
+    protected Forward action1()
+        {
+        System.out.println(">>> Jpf1.action1");
+        return new Forward("gotoSubJpf1", form1);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward action2()
+        {
+        System.out.println(">>> Jpf1.action2");
+        Forward fwd = new Forward("gotoPg2");
+        fwd.addPageInput("pgInputForm", form1);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+        }
+
+    /**
+     * FormOne is an inner formBean class.
+     */
+    public static class FormOne extends FormData
+        {
+        private String  fld1    = "Field one value";
+        private String  fld2    = "Field two value";
+
+        // Fld1 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld1(String inFld1)
+            { this.fld1 = inFld1; }
+        public String getFld1()
+            { return this.fld1; }
+
+        // Fld2 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld2(String inFld2)
+            { this.fld2 = inFld2; }
+        public String getFld2()
+            { return this.fld2; }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test10</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test10 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test10.Jpf1.FormOne" />
+
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test10</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test10 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test10.Jpf1.FormOne" />
+
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test10</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test10 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/sub1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/sub1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+package pageInput.test10.sub1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import pageInput.test10.Jpf1;
+import pageInput.test10.Jpf1.FormOne;
+
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    nested = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class SubJpf1 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoSubPg1" path="SubJsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSubPg1",
+                path = "SubJsp1.jsp") 
+        })
+    protected Forward begin(pageInput.test10.Jpf1.FormOne inForm)
+        {
+        System.out.println(">>> SubJpf1.begin");
+        inForm.setFld1(Jpf1.NEW_FORM_FLD_1);
+        inForm.setFld2(Jpf1.NEW_FORM_FLD_2);
+        Forward fwd = new Forward("gotoSubPg1");
+        fwd.addPageInput("pgInputForm", inForm);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="continue" return-action="action2"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "continue",
+                returnAction = "action2") 
+        })
+    protected Forward action1()
+        {
+        System.out.println(">>> Jpf1.action1");
+        return new Forward("continue");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/sub1/SubJsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test10/sub1/SubJsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test10</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test10 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test10.Jpf1.FormOne" />
+
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,216 @@
+package pageInput.test11;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import javax.servlet.http.HttpServletRequest;
+
+public class Jpf1 extends PageFlowController
+   {
+   public static final String  PG_FLD_1        = "Page Input field 1 value";
+   public static final String  PG_FLD_2        = "Page Input field 2 value";
+   public static final String  FORM_FLD_1      = "Page Input form field 1 value";
+   public static final String  FORM_FLD_2      = "Page Input form field 2 value";
+   public              String  pageValueOne1   = PG_FLD_1;
+   public              String  pageValueTwo1   = PG_FLD_2;
+   public              FormOne form1           = new FormOne();
+
+   public static final String  NEW_PG_FLD_1    = "New - Page Input field 1 value";
+   public static final String  NEW_PG_FLD_2    = "New - Page Input field 2 value";
+   public static final String  NEW_FORM_FLD_1  = "New - Page Input form field 1 value";
+   public static final String  NEW_FORM_FLD_2  = "New - Page Input form field 2 value";
+
+   private             int     _cnter          = 0;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _cnter = 0;
+
+      // Set the initial values of the pageInput fields.
+      //------------------------------------------------------------------------
+      pageValueOne1 = PG_FLD_1;
+      pageValueTwo1 = PG_FLD_2;
+      form1.setFld1(FORM_FLD_1);
+      form1.setFld2(FORM_FLD_2);
+
+      // Add the second set of pageInput fields to the Forward.
+      //------------------------------------------------------------------------
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("pgInput1", pageValueOne1);
+      fwd.addPageInput("pgInput2", pageValueTwo1);
+      fwd.addPageInput("pgInputForm", form1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    * @jpf:forward name="gotoSecure1" path="/pageInput/test11/secure1.do"
+    * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp"),
+            @Jpf.Forward(
+                name = "gotoSecure1",
+                path = "/pageInput/test11/secure1.do"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _cnter++;
+
+      // If this is the second time thru go, to the finish page.  We're done.
+      //------------------------------------------------------------------------
+      if (_cnter == 2)
+         {
+         Forward fwd = new Forward("gotoPg3");
+         fwd.addPageInput("pgInput1", pageValueOne1);
+         fwd.addPageInput("pgInput2", pageValueTwo1);
+         fwd.addPageInput("pgInputForm", form1);
+         return fwd;
+         }
+
+      // This had better be the first time thru.  If not we have a programming
+      // error.
+      //------------------------------------------------------------------------
+      if (_cnter != 1) return new Forward("gotoError");
+
+      // Update the values of the second set of pageInput fields.
+      //------------------------------------------------------------------------
+      pageValueOne1 = NEW_PG_FLD_1;
+      pageValueTwo1 = NEW_PG_FLD_2;
+      form1.setFld1(NEW_FORM_FLD_1);
+      form1.setFld2(NEW_FORM_FLD_2);
+
+      return new Forward("gotoSecure1");
+      }
+
+   /**
+    * This action has been designated as secure in the <security-constraint>
+    * section of the web.xml file.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward secure1()
+      {
+      System.out.println(">>> Jpf1.secure1");
+      if (this.getRequest().isSecure() == false)
+         {
+         return new Forward("gotoError");
+         }
+      Forward fwd = new Forward("gotoPg2");
+      fwd.addPageInput("pgInput1", pageValueOne1);
+      fwd.addPageInput("pgInput2", pageValueTwo1);
+      fwd.addPageInput("pgInputForm", form1);
+      return fwd;
+      }
+
+   /**
+    * This action has been designated as unsecure in the <security-constraint>
+    * section of the web.xml file.  So this action effectivly "turns off" the
+    * ssl connection.
+    *
+    * @jpf:action
+    * @jpf:forward name="returnPage" return-to="previousPage"
+    * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "returnPage",
+                navigateTo = Jpf.NavigateTo.previousPage),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      if (this.getRequest().isSecure() == true)
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward("returnPage");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp") 
+        })
+   protected Forward action3()
+      {
+      System.out.println(">>> Jpf1.action3");
+      if (this.getRequest().isSecure() == true)
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * FormOne is an inner formBean class.
+    */
+   public static class FormOne extends FormData
+      {
+      private String  fld1    = Jpf1.FORM_FLD_1;
+      private String  fld2    = Jpf1.FORM_FLD_2;
+
+      // Fld1 getter and setter methods
+      //------------------------------------------------------------------------
+      public void setFld1(String inFld1)
+         {
+         this.fld1 = inFld1;
+         }
+      public String getFld1()
+         {
+         return this.fld1;
+         }
+
+      // Fld2 getter and setter methods
+      //------------------------------------------------------------------------
+      public void setFld2(String inFld2)
+         {
+         this.fld2 = inFld2;
+         }
+      public String getFld2()
+         {
+         return this.fld2;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test11</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test11 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInput1"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test11.Jpf1$FormOne" />
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInput1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInput2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            <font color="green">
+                The 1st time you see this page, none of the values above should
+                begin with the word "New".
+                <br/>
+                The 2nd time you see this page, {pageInput.pgInput1} and {pageInput.pgInput2}
+                should not begin with the word "New" but {pageInput.pgInputForm.fld1} and
+                {pageInput.pgInputForm.fld2} will.
+            </font>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test11</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test11 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInput1"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test11.Jpf1$FormOne" />
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInput1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInput2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <netui:anchor action="action2">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test11</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test11 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInput1"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test11.Jpf1$FormOne" />
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInput1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInput2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <netui:anchor action="action3">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test11/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JPF Security Test11</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test11 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,189 @@
+package pageInput.test12;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForward;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources resources="pageInput/test12/messages"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"  path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "pageInput/test12/messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='formbean:FormOne'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='action:action1.do#pageInput.test12.Jpf1.FormOne'/>", 
+        "<pageflow-object id='page:/resources/jsp/error.jsp'/>", 
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>", 
+        "<pageflow-object id='page:/resources/jsp/done.jsp'/>", 
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>", 
+        "<pageflow-object id='page:Jsp1.jsp'/>", 
+        "<pageflow-object id='forward:path#gotoPg1#Jsp1.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='page:StartTest.jsp'/>", 
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:action1.do#pageInput.test12.Jpf1.FormOne@'>", 
+        "  <property value='304,240,240,176' name='elbowsX'/>", 
+        "  <property value='83,83,232,232' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnTo#failure#currentPage#@action:action1.do#pageInput.test12.Jpf1.FormOne@'>", 
+        "  <property value='104,100,100,96' name='elbowsX'/>", 
+        "  <property value='232,232,32,32' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='failure' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='return-to:@forward:returnTo#failure#currentPage#@action:action1.do#pageInput.test12.Jpf1.FormOne@@'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='40' name='y'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Jpf1 extends PageFlowController
+   {
+   public static final String    PG_FLD_1       = "Page Input field 1 value";
+   public static final String    PG_FLD_2       = "Page Input field 2 value";
+   public static final String    PASS_PG_FLD_1  = "Field 1 value - pass";
+   public static final String    PASS_PG_FLD_2  = "Field 2 value - pass";
+   public              String    pageValueOne1  = PG_FLD_1;
+   public              String    pageValueTwo1  = PG_FLD_2;
+   public              FormOne   form1          = new FormOne();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+
+      // Set the initial values of the pageInput fields.
+      //------------------------------------------------------------------------
+      pageValueOne1 = PG_FLD_1;
+      pageValueTwo1 = PG_FLD_2;
+
+      // Add the form and the pageInput fields to the Forward.
+      //------------------------------------------------------------------------
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addOutputForm(form1);
+      fwd.addPageInput("pgInput1", pageValueOne1);
+      fwd.addPageInput("pgInput2", pageValueTwo1);
+      fwd.addPageInput("pgInputForm", form1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:validation-error-forward name="failure" return-to="currentPage"
+    */
+    @Jpf.Action(validationErrorForward = @org.apache.beehive.netui.pageflow.annotations.Jpf.Forward(name = "failure", navigateTo = org.apache.beehive.netui.pageflow.annotations.Jpf.NavigateTo.currentPage)
+        )
+   protected Forward action1(FormOne inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean FormOne
+    ***************************************************************************/
+   public static class FormOne extends FormData
+      {
+      public final static String VALUE1 = "Field one value";
+      public final static String VALUE2 = "Field two value";
+
+      private String _fld1 = VALUE1;
+      private String _fld2 = VALUE2;
+
+      public void setFld1(String inFld1)
+         {
+         this._fld1 = inFld1;
+         }
+
+      public String getFld1()
+         {
+         return this._fld1;
+         }
+
+      public void setFld2(String inFld2)
+         {
+         this._fld2 = inFld2;
+         }
+
+      public String getFld2()
+         {
+         return this._fld2;
+         }
+
+      /*************************************************************************
+       * Method: reset
+       ************************************************************************/
+      public void reset(ActionMapping mapping, HttpServletRequest request)
+         {
+         System.out.println(">>> FormOne:reset");
+         return;
+         }
+
+      /*************************************************************************
+       * Method: validate
+       ************************************************************************/
+      public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
+         {
+         // Did we get a valid Username and Password?
+         //---------------------------------------------------------------------
+         System.out.println(">>> FormOne:validate");
+
+         ActionErrors errors = new ActionErrors();
+         if (_fld1.equals(PASS_PG_FLD_1) == false)
+            {
+            System.out.println("Field one is invalid");
+            _fld1 = PASS_PG_FLD_1;
+            errors.add("field1", new ActionError("error.fld1"));
+            }
+
+         if (_fld2.equals(PASS_PG_FLD_2) == false)
+            {
+            System.out.println("Field two is invalid");
+            _fld2 = PASS_PG_FLD_2;
+            errors.add("field2", new ActionError("error.fld2"));
+            }
+
+         return errors;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+<html>
+   <head>
+      <title>PageInput Test12</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test12 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui-data:declarePageInput name="pgInput1" type="java.lang.String" />
+         <netui-data:declarePageInput name="pgInput2" type="java.lang.String" />
+
+         {pageInput.pgInput1}:
+         <font color="blue">
+            "<netui:label value="${pageInput.pgInput1}"/>"
+         </font>
+         <br/>
+         {pageInput.pgInput2}:
+         <font color="blue">
+            "<netui:label value="${pageInput.pgInput2}"/>"
+         </font>
+
+         <br/><br/>
+         <hr width="95%"/>
+         <br/>
+         <netui:form action="action1">
+            {actionForm.fld1}:
+               <netui:textBox dataSource="actionForm.fld1"/>
+               <netui:error value="field1"/>
+             <br/>
+             {actionForm.fld2}:
+                <netui:textBox dataSource="actionForm.fld2"/>
+                <netui:error value="field2"/>
+             <br/><br/>
+             <netui:button action="action1" value="Continue..." type="submit"/>
+         </netui:form>
+
+         <netui:errors/>
+         <br/>
+         <font color="green">
+            <b>
+               You will visit this page twice.  Just press "continue" each time.
+            </b>
+            <br/>
+            <p align="left">
+            - The first time the form fields and the pageInput fields will
+              display.  Note their values.<br/>
+            - The second time the same form and pageInput fields will display
+             along with some error messages.  Make sure the pageInput fields
+             data is present and has the same value as the first time. The form
+             data will change.  That's expected.
+            </p>
+         </font>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test12/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>JPF Security Test12</title>
+   </head>
+   <body>
+      <h3 align="center">JPF Security Test12 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+package pageInput.test14;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public  String  pageValue1  = "PageValue 1";
+    public  String  pageValue2  = "PageValue 2";
+    public  String  pageValue3  = null;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        Forward fwd = new Forward("gotoPg1");
+        fwd.addPageInput("XYZ&%#", pageValue1);
+        fwd.addPageInput("pgInput2", pageValue2);
+        fwd.addPageInput("pgInput3", pageValue3);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.done");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test14</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test14 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui-data:declarePageInput name="XYZ&%#" type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2" type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput3" type="java.lang.String" />
+
+            PageInput value1: <font color="blue">"<netui:label value="${pageInput.XYZ&%#}" />"</font>
+            <br/>
+            PageInput value2: <font color="blue">"<netui:label value="${pageInput.pgInput2}" />"</font>
+            <br/>
+            PageInput value3: <font color="blue">"<netui:label value="${pageInput.pgInput3}" />"</font>
+            <br/><br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test14/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test14</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test14 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+package pageInput.test16;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public  String  value1  = "Value 1";
+    public  String  value2  = "Value 2";
+    public  String  value3  = "Value 3";
+
+    /**
+     * The case of the pageInput names is what this test is testing.  Don't fix
+     * the names.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        Forward fwd = new Forward("gotoPg1");
+        fwd.addPageInput("Name1", value1);
+        fwd.addPageInput("name2", value2);
+        fwd.addPageInput("Name2", value3);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.done");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test16</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test16 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <!--
+         The case of the pageinput names is what is being tested here.
+         Don't fix them.
+         -->
+         <netui-data:declarePageInput name="name1" type="java.lang.String" />
+         <netui-data:declarePageInput name="name2" type="java.lang.String" />
+         <netui-data:declarePageInput name="Name2" type="java.lang.String" />
+         <netui-data:declarePageInput name="BadName" type="java.lang.String" />
+
+         PageInput value1: <font color="blue">"<netui:label value="${pageInput.name1}" />"</font>
+         <br/>
+         PageInput value2: <font color="blue">"<netui:label value="${pageInput.name2}" />"</font>
+         <br/>
+         PageInput value3: <font color="blue">"<netui:label value="${pageInput.Name2}" />"</font>
+         <br/>
+         PageInput value4: <font color="blue">"<netui:label value="${pageInput.BadName}" />"</font>
+         <br/>
+         PageInput value5: <font color="blue">"<netui:label value="${pageInput.UndeclaredName}" />"</font>
+         <br/><br/>
+         <netui
+
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test16/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test16</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test16 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,124 @@
+package pageInput.test17;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.ClassA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private ClassA _a    = new ClassA();
+   private String _str;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("ObjectA", _a);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      Forward fwd = new Forward("gotoPg2");
+      fwd.addPageInput("ObjectA", _a);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      Forward fwd = new Forward("gotoPg3");
+      fwd.addPageInput("ObjectA", _a);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg4" path="Jsp4.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg4",
+                path = "Jsp4.jsp") 
+        })
+   protected Forward action3()
+      {
+      System.out.println(">>> Jpf1.action3");
+      Forward fwd = new Forward("gotoPg4");
+      fwd.addPageInput("ObjectA", _a);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for String field "string"
+    */
+   public void setString(String newValue)
+      {
+      _str = newValue;
+      return;
+      }
+   public String getString()
+      {
+      return _str;
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test17</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test17 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing netui:label</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="ObjectA" type="shared.ClassA" />
+
+         Class A string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.stringValue}" />"</font>
+         <br/>
+         Class B string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.stringValue}" />"</font>
+         <br/>
+         Class C string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.stringValue}" />"</font>
+         <br/>
+         Class D string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.stringValue}" />"</font>
+         <br/>
+         Class E string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.classE.stringValue}" />"</font>
+         <br/>
+         Class F string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.classE.classF.stringValue}" />"</font>
+         <br/>
+         Class G string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.stringValue}" />"</font>
+         <br/>
+         Class H string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.stringValue}" />"</font>
+         <br/>
+         Class I string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.stringValue}" />"</font>
+         <br/>
+         Class J string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.stringValue}" />"</font>
+         <br/>
+         Class K string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK.stringValue}" />"</font>
+         <br/>
+         shared.ClassK@nnnnnnn" <font color="blue">"<netui:label value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK}" />"</font>
+
+         <br/><br/>
+         <netui:anchor action="action1">Continue...</netui:anchor>
+         <br/><br/>
+         <hr width="95%"/>
+         <font color="green">
+            The blue values to the right must match the values on the left.
+            If they don't the test has failed.
+            <br/><br/>
+            This test is manual because the last value is the result of a
+            <br/>
+            toString() on an object and the HEX reference will always change.
+         </font>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test17</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test17 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing netui:textBox</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="ObjectA" type="shared.ClassA" />
+
+         <netui:form action="action2">
+            Class A string value.<font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.stringValue}" /></font>
+            <br/>
+            Class B string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.stringValue}" /></font>
+            <br/>
+            Class C string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.stringValue}" /></font>
+            <br/>
+            Class D string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.stringValue}" /></font>
+            <br/>
+            Class E string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.classE.stringValue}" /></font>
+            <br/>
+            Class F string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.classE.classF.stringValue}" /></font>
+            <br/>
+            Class G string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.stringValue}" /></font>
+            <br/>
+            Class H string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.stringValue}" /></font>
+            <br/>
+            Class I string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.stringValue}" /></font>
+            <br/>
+            Class J string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.stringValue}" /></font>
+            <br/>
+            Class K string value. <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK.stringValue}" /></font>
+            <br/>
+            shared.ClassK@nnnnnnn" <font color="blue"><netui:textBox dataSource="pageFlow.string" defaultValue="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK}" /></font>
+         </netui:form>
+         <br/><br/>
+         <netui:anchor action="action2">Continue...</netui:anchor>
+         <br/><br/>
+         <hr width="95%"/>
+         <font color="green">
+            The blue values on the right must match the values on the left.
+            If they don't the test has failed.
+         </font>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test17</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test17 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing netui:anchor & netui:content</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="ObjectA" type="shared.ClassA" />
+
+         Class A string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.stringValue}" ><netui:content value="${pageInput.ObjectA.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class B string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class C string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class D string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class E string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.classE.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.classE.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class F string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.classE.classF.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.classE.classF.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class G string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class H string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class I string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class J string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.stringValue}" /></netui:anchor></font>
+         <br/>
+         Class K string value. <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK.stringValue}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK.stringValue}" /></netui:anchor></font>
+         <br/>
+         shared.ClassK@nnnnnnn" <font color="blue"><netui:anchor href="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK}" ><netui:content value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK}" /></netui:anchor></font>
+         <br/><br/>
+         <netui:anchor action="action3">Continue...</netui:anchor>
+         <br/><br/>
+         <hr width="95%"/>
+         <font color="green">
+            The values of the links must match the values on the left.  If they
+            don't the test failed.
+            <br/><br/>
+            Also hover the mouse over the links and look at the URLs in the
+            status bar below.  The last part of the URL should be the same text
+            as the link you've hovered over.  If it's not the test failed.
+         </font>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/Jsp4.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test17</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test17 - Jsp4.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing netui:button</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="ObjectA" type="shared.ClassA" />
+
+         <netui:form action="action2">
+            Class A string value.<font color="blue"><netui:button value="${pageInput.ObjectA.stringValue}" /></font>
+            <br/>
+            Class B string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.stringValue}" /></font>
+            <br/>
+            Class C string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.stringValue}" /></font>
+            <br/>
+            Class D string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.stringValue}" /></font>
+            <br/>
+            Class E string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.classE.stringValue}" /></font>
+            <br/>
+            Class F string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.classE.classF.stringValue}" /></font>
+            <br/>
+            Class G string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.stringValue}" /></font>
+            <br/>
+            Class H string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.stringValue}" /></font>
+            <br/>
+            Class I string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.stringValue}" /></font>
+            <br/>
+            Class J string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.stringValue}" /></font>
+            <br/>
+            Class K string value. <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK.stringValue}" /></font>
+            <br/>
+            shared.ClassK@nnnnnnn" <font color="blue"><netui:button value="${pageInput.ObjectA.classB.classC.classD.classE.classF.classG.classH.classI.classJ.classK}" /></font>
+         </netui:form>
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+         <br/><br/>
+         <hr width="95%"/>
+         <font color="green">
+            The button labels must match the values on the left.  If they don't
+            the test failed.
+         </font>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test17/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test17</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test17 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+package pageInput.test18;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.ClassA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private final static int      _SIZE       = 50;
+   private final static String   _STRING     = "Repeater string: ";
+   private              ClassA   _obj[];
+   private              String   _str[];
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _obj = new ClassA[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _obj[i] = new ClassA();
+         _obj[i].setStringValue(_STRING + Integer.toString(i));
+         }
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("RepeaterA", _obj);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _str = new String[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _str[i] = new String(_STRING + Integer.toString(i));
+         }
+      Forward fwd = new Forward("gotoPg2");
+      fwd.addPageInput("RepeaterB", _str);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+       protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test18</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test18 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="RepeaterA" type="shared.ClassA" />
+
+         <netui-data:repeater dataSource="pageInput.RepeaterA" >
+            <ul>
+               <netui-data:repeaterItem>
+                  <li><netui:content value="${container.item.stringValue}" /></li>
+               </netui-data:repeaterItem>
+            </ul>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action1">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test18</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test18 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="RepeaterB" type="java.lang.String" />
+
+         <netui-data:repeater dataSource="pageInput.RepeaterB" >
+            <ul>
+               <netui-data:repeaterItem>
+                  <li><netui:content value="${container.item}" /></li>
+               </netui-data:repeaterItem>
+            </ul>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test18/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test18</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test18 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+package pageInput.test19;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.ClassA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private final static int      _SIZE       = 50;
+   private final static String   _STRING     = "Repeater string: ";
+   private              ClassA   _obj[];
+   private              int      _int[];
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _obj = new ClassA[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _obj[i] = new ClassA();
+         _obj[i].setIntValue(i);
+         }
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("RepeaterA", _obj);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _int = new int[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _int[i] = i;
+         }
+      Forward fwd = new Forward("gotoPg2");
+      fwd.addPageInput("RepeaterB", _int);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test19</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test19 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="RepeaterA" type="shared.ClassA" />
+
+         <netui-data:repeater dataSource="pageInput.RepeaterA" >
+            <ul>
+               <netui-data:repeaterItem>
+                  <li><netui:content value="${container.item.intValue}" /></li>
+               </netui-data:repeaterItem>
+            </ul>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action1">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test19</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test19 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="RepeaterB" type="int" />
+
+         <netui-data:repeater dataSource="pageInput.RepeaterB" >
+            <ul>
+               <netui-data:repeaterItem>
+                  <li><netui:content value="${container.item}" /></li>
+               </netui-data:repeaterItem>
+            </ul>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test19/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test19</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test19 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,342 @@
+package pageInput.test20;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.Arrays;
+import java.util.Hashtable;
+import java.util.ArrayList;
+import java.util.Vector;
+import java.lang.StringBuffer;
+import java.lang.Integer;
+import java.lang.Float;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private final static int            _SIZE       = 50;
+   private final static String         _STRING     = "Str: ";
+   private              String         _str[];
+   private              String         _strMulti[][];
+   private              int            _int[];
+   private              boolean        _bool[];
+   private              ArrayList      _aLst;
+   private              float          _flt[];
+   private              Hashtable      _hash;
+   private              Vector         _vec;
+   private              Integer        _integer[];
+   private              Float          _float[];
+   private              Boolean        _boolean[];
+   private              StringBuffer   _strBuf[];
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _str = new String[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _str[i] = _STRING + Integer.toString(i);
+         }
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("Repeater", _str);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _int = new int[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _int[i] = i;
+         }
+      Forward fwd = new Forward("gotoPg2");
+      fwd.addPageInput("Repeater", _int);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      boolean x = true;
+      _bool = new boolean[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _bool[i] = x;
+         if (x == true) { x = false; } else { x = true; }
+         }
+      Forward fwd = new Forward("gotoPg3");
+      fwd.addPageInput("Repeater", _bool);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg4" path="Jsp4.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg4",
+                path = "Jsp4.jsp") 
+        })
+   protected Forward action3()
+      {
+      System.out.println(">>> Jpf1.action3");
+      _aLst = new ArrayList(_SIZE);
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _aLst.add(_STRING + Integer.toString(i));
+         }
+      Forward fwd = new Forward("gotoPg4");
+      fwd.addPageInput("Repeater", _aLst);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg5" path="Jsp5.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg5",
+                path = "Jsp5.jsp") 
+        })
+   protected Forward action4()
+      {
+      System.out.println(">>> Jpf1.action4");
+      _flt = new float[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _flt[i] = new Integer(i).floatValue();
+         }
+      Forward fwd = new Forward("gotoPg5");
+      fwd.addPageInput("Repeater", _flt);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg6" path="Jsp6.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg6",
+                path = "Jsp6.jsp") 
+        })
+   protected Forward action5()
+      {
+      System.out.println(">>> Jpf1.action5");
+      _hash = new Hashtable(_SIZE);
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _hash.put(new Integer(i), new String(_STRING + Integer.toString(i)));
+         }
+      Forward fwd = new Forward("gotoPg6");
+      fwd.addPageInput("Repeater", _hash);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg7" path="Jsp7.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg7",
+                path = "Jsp7.jsp") 
+        })
+   protected Forward action6()
+      {
+      System.out.println(">>> Jpf1.action6");
+      _vec = new Vector(_SIZE);
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _vec.add(new String(_STRING + Integer.toString(i)));
+         }
+      Forward fwd = new Forward("gotoPg7");
+      fwd.addPageInput("Repeater", _hash);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg8" path="Jsp8.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg8",
+                path = "Jsp8.jsp") 
+        })
+   protected Forward action7()
+      {
+      System.out.println(">>> Jpf1.action7");
+      _float = new Float[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _float[i] = new Float(Integer.toString(i));
+         }
+      Forward fwd = new Forward("gotoPg8");
+      fwd.addPageInput("Repeater", _float);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg9" path="Jsp9.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg9",
+                path = "Jsp9.jsp") 
+        })
+   protected Forward action8()
+      {
+      System.out.println(">>> Jpf1.action8");
+      _integer = new Integer[_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _integer[i] = new Integer(i);
+         }
+      Forward fwd = new Forward("gotoPg9");
+      fwd.addPageInput("Repeater", _integer);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg10" path="Jsp10.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg10",
+                path = "Jsp10.jsp") 
+        })
+   protected Forward action9()
+      {
+      System.out.println(">>> Jpf1.action9");
+      _boolean = new Boolean[_SIZE];
+      boolean  x = true;
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _boolean[i] = new Boolean(x);
+         if (x == true) { x = false; } else { x = true; }
+         }
+      Forward fwd = new Forward("gotoPg10");
+      fwd.addPageInput("Repeater", _boolean);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg11" path="Jsp11.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg11",
+                path = "Jsp11.jsp") 
+        })
+   protected Forward action10()
+      {
+      System.out.println(">>> Jpf1.action10");
+      _strBuf = new StringBuffer[_SIZE];
+      boolean  x = true;
+      for (int i = 0; i < _SIZE; i++)
+         {
+         _strBuf[i] = new StringBuffer(_STRING + Integer.toString(i));
+         }
+      Forward fwd = new Forward("gotoPg11");
+      fwd.addPageInput("Repeater", _strBuf);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg12" path="Jsp12.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg12",
+                path = "Jsp12.jsp") 
+        })
+   protected Forward action11()
+      {
+      System.out.println(">>> Jpf1.action11");
+      _strMulti = new String[_SIZE][_SIZE];
+      for (int i = 0; i < _SIZE; i++)
+         {
+         for (int j = 0; j < _SIZE; j++)
+            {
+            _strMulti[i][j] = _STRING + Integer.toString(i);
+            }
+         }
+      Forward fwd = new Forward("gotoPg12");
+      fwd.addPageInput("Repeater", _strMulti);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with String PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.lang.String" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+         <br/><br/>
+         <netui:anchor action="action1">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp10.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp10.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp10.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Boolean PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.lang.Boolean" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action10">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp11.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp11.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp11.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with StringBuffer PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.lang.StringBuffer" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action11">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp12.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp12.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp12.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with a multidimensional String array</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.lang.String[][]" />
+
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+
+               <netui-data:repeater dataSource="container.item" >
+                  <netui-data:repeaterItem>
+                     <netui:content value="${container.item}" />
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  </netui-data:repeaterItem>
+               </netui-data:repeater >
+
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with int PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="int" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action2">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with boolean PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="boolean" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action3">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp4.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp4.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with ArrayList PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.util.ArrayList" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action4">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp5.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp5.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp5.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with float PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="float" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action5">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp6.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp6.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp6.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Hashtable PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.lang.String" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action6">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp7.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp7.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp7.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Vector PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.lang.String" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action7">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp8.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp8.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp8.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Float PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.lang.Float" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action8">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp9.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/Jsp9.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp9.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Integer PageInput</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="Repeater" type="java.lang.Integer" />
+         <netui-data:repeater dataSource="pageInput.Repeater" >
+            <netui-data:repeaterItem>
+               <netui:content value="${container.item}" />
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            </netui-data:repeaterItem>
+         </netui-data:repeater >
+
+         <br/><br/>
+         <netui:anchor action="action9">Continue...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test20/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+package pageInput.test21;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.ClassA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private ClassA    _obj  = new ClassA();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("ObjectA", _obj);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test21</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test21 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing nonExistant value</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="ObjectA" type="shared.ClassA" />
+
+         Class A string value. <font color="blue">"<netui:label value="${pageInput.ObjectA.nonExistString}" />"</font>
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+         </font>
+         <br/><br/>
+         Note the expected behavior is an empty string.
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test21/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test21</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test21 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,61 @@
+package pageInput.test22;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private String  _STR_VALUE    = "PageValue 1";
+   public  String  pageValue1    = _STR_VALUE;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("pgInput1", pageValue1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      if (pageValue1.equals(_STR_VALUE) != true)
+         {
+         System.out.println(">>> pageValue1: " + pageValue1);
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test22</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test22 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <netui-data:declarePageInput name="pgInput1" type="java.lang.String" />
+
+         PageInput value1:
+         <font color="blue">
+            <netui:textBox dataSource="pageInput.pgInput1" />
+         </font>
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+         <br/><br/>
+         <font color="green">
+            Try to change the value in the textBox then press Finish.
+         </font>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test22/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test22</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test22 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+package pageInput.test23;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForward;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources           resources="pageInput/test23/messages"
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "pageInput/test23/messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   public MyForm _form    = new MyForm();
+
+   /**
+    * We are going to add the SAME FormBean "_form" to the "Forward" once as
+    * a formBean and once as pageInput.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addOutputForm(_form);
+      fwd.addPageInput("theForm", _form);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:validation-error-forward name="failure" return-to="currentPage"
+    */
+    @Jpf.Action(validationErrorForward = @org.apache.beehive.netui.pageflow.annotations.Jpf.Forward(name = "failure", navigateTo = org.apache.beehive.netui.pageflow.annotations.Jpf.NavigateTo.currentPage)
+        )
+   protected Forward action1(MyForm inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoError");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean MyForm
+    ***************************************************************************/
+   public static class MyForm extends FormA
+      {
+      /*************************************************************************
+       * Method: reset
+       ************************************************************************/
+      public void reset(ActionMapping mapping, HttpServletRequest request)
+         {
+         System.out.println(">>> MyForm:reset");
+         return;
+         }
+
+      /*************************************************************************
+       * Method: validate
+       ************************************************************************/
+      public ActionErrors validate(ActionMapping mapping
+                                   ,HttpServletRequest request)
+         {
+         // Force validation errors.
+         //---------------------------------------------------------------------
+         System.out.println(">>> MyForm:validate");
+
+         ActionErrors errors = new ActionErrors();
+         errors.add("forcedError", new ActionError("error.forced"));
+         return errors;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test23</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test23 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui-data:declarePageInput  name="theForm"
+                                       type="pageInput.test23.Jpf1$MyForm" />
+         <h3>
+            All fields being displayed below are from the same formBean just
+            using different data-binding contexts.
+         </h3>
+         <b>These values are from the {actionForm} context.</b>
+         <br/>
+         <netui:form action="action1">
+
+            {actionForm.String1}:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            {actionForm.String2}:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/>
+
+            {actionForm.Int1}:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.int1"/>
+            </font>
+            <br/>
+
+            {actionForm.Int2}:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.int2"/>
+            </font>
+            <br/><br/>
+            <netui:button  action="action1" value="Submit changes"
+                           type="submit"/>
+         </netui:form>
+         <netui:errors/>
+         <hr width="95%"/>
+
+         <br/>
+         <b>These values are from the {pageInput} context.</b>
+         <br/><br/>
+
+         {pageInput.theForm.String1}:
+         <font color="blue">
+            <netui:label value="${pageInput.theForm.string1}" />
+         </font>
+         <br/>
+
+         {pageInput.theForm.String2}:
+         <font color="blue">
+            <netui:label value="${pageInput.theForm.string2}" />
+         </font>
+         <br/>
+
+         {pageInput.theForm.Int1}:
+         <font color="blue">
+            <netui:label value="${pageInput.theForm.int1}" />
+         </font>
+         <br/>
+
+         {pageInput.theForm.Int2}:
+         <font color="blue">
+            <netui:label value="${pageInput.theForm.int2}" />
+         </font>
+         <br/><br/>
+         <hr width="95%"/>
+
+         <br/>
+         <font color="green">
+            <b>
+               You will see this page twice.
+               <br/>
+               - The first time please change the values in all the textBoxes then
+               press the submit button.
+               <br/>
+               - The second time check the values of the checkBoxes and the
+               PageInputs.  The textBoxs should have your modified values and
+               the pageInput fields should have their original values.  If this
+               in not the case the test have failed.  Then press Finish.
+            </b>
+         </font>
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test23/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test23</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test23 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+package pageInput.test24;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.ClassA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private final static String   _STRING     = "Sting value";
+   private              String   _str        = _STRING;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("string", _str);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      Forward fwd = new Forward("gotoPg2");
+      fwd.addPageInput("string", _str);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Setter/Getter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test24</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test24 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="string" type="java.lang.String" />
+
+         PageInput context value:
+         <font color="blue">
+            <netui:label value="${pageInput.string}" />
+         </font>
+         <br/><br/>
+         PageFlow context value:
+         <netui:form action="action1" >
+            <font color="blue">
+               <netui:textBox dataSource="pageFlow.string" />
+               <br/><br/>
+               <netui:button action="action1">Continue</netui:button>
+            </font>
+         </netui:form>
+         <br/><br/>
+         <font color="green">
+            Change the value in the textBox and press continue.
+         </font>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test24</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test24 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="string" type="java.lang.String" />
+
+         PageInput context value:
+         <font color="blue">
+            <netui:label value="${pageInput.string}" />
+         </font>
+         <br/><br/>
+         PageFlow context value:
+         <font color="blue">
+            <netui:label value="${pageFlow.string}" />
+         </font>
+         <br/><br/>
+
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test24/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test24</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test24 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+package pageInput.test25;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private final static String   _STRING     = "String value";
+   private              String   _str        = _STRING;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("string", _str);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Setter/Getter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page    contentType="text/html;charset=UTF-8"  language="java" %>
+<%@ taglib  uri="beehive-netui-tags-html.tld"              prefix="netui" %>
+<%@ taglib  uri="beehive-netui-tags-databinding.tld"       prefix="netui-data" %>
+<%@ taglib  uri="beehive-netui-tags-template.tld"          prefix="netui-template"%>
+
+<netui-template:template templatePage="template.jsp">
+   <netui-template:setAttribute  value="PageInput Test25" name="title"/>
+   <netui-template:setAttribute  value="PageInput Test25 - Jsp1.jsp"
+                                 name="heading"/>
+   <netui-template:section       name="bodySection">
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         PageInput context value in the main page:
+         <font color="blue">
+            <netui:label value="${pageInput.string}" />
+         </font>
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </netui-template:section>
+</netui-template:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test25</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test25 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test25/template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<html>
+   <head>
+      <title><netui-template:attribute name="title"/></title>
+   </head>
+      <body>
+      <h3 align="center"><netui-template:attribute name="heading"/></h3>
+      <hr width="95%"/>
+      <br/>
+      <netui-data:declarePageInput name="string" type="java.lang.String" />
+      <center>
+         PageInput context value in the template:
+         <font color="blue">
+            <netui:label value="${pageInput.string}" />
+         </font>
+         <br/><br/>
+      </center>
+      <netui-template:includeSection name="bodySection">
+      </netui-template:includeSection>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+package pageInput.test26;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private final static String   _STRING     = "String value";
+   private              String   _str        = _STRING;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addPageInput("string", _str);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Setter/Getter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test26</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test26 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput data-binding</font></h2>
+         <br/><br/>
+         <netui-data:declarePageInput name="string" type="java.lang.String" />
+
+         <jsp:include page="include1.jsp"/>
+
+         <%@ include file="include2.jsp" %>
+
+         <font color="deeppink">
+            PageInput from this jsp: <netui:label value="${pageInput.string}" />
+         </font>
+         <br/><br/>
+
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test26</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test26 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/include1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/include1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<html>
+   <body>
+      <center>
+         <font color="tomato">
+            PageInput value from [%@ include]:
+            <netui:label value="${pageInput.string}" />
+         </font>
+         <br/><br/>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/include2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test26/include2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,5 @@
+<font color="brown">
+   PageInput value from [jsp:include]:
+   <netui:label value="${pageInput.string}" />
+</font>
+<br/><br/>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+package pageInput.test29;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private String _str    = new String("Test String Value.");
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        Forward fwd = new Forward("gotoPg1");
+        fwd.addPageInput("myString", _str);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+       {
+       System.out.println(">>> Jpf1.finish");
+       return new Forward("gotoDone");
+       }
+
+    /**
+     * Getter/Setter for String
+     */
+    public String getString()
+       { return _str; }
+    public void setString(String inVal)
+       { _str = inVal; }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>PageInput Test29</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test29 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            This page has no delcarePageInput yet displays pageInput values.
+         </font></h3>
+         <br/><br/>
+
+         PageInput value1: <netui:label value="${pageInput.myString}" />
+         <br/><br/>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test29/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test29</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test29 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,399 @@
+package pageInput.test3;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:catch type="java.lang.Throwable" method="exceptionHandler"
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = java.lang.Throwable.class,
+            method = "exceptionHandler") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public  String  pageValue1  = "PageValue 1";
+    public  String  pageValue2  = "PageValue 2";
+    private int     cnter       = 0;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        cnter = 0;
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * This should fail as the forwardName parameter value is null;
+     *
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward action1()
+        {
+        System.out.println(">>> Jpf1.action1");
+        cnter = 1;
+        return new Forward(null, "pgInput", pageValue1);
+        }
+
+    /**
+     * This should fail as the pageInputName parameter value is null;
+     *
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward action2()
+        {
+        System.out.println(">>> Jpf1.action2");
+        cnter = 2;
+        return new Forward("gotoError", null, pageValue1);
+        }
+
+    /**
+     * This should succeed.  It is valid to pass a null pageInput value.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoPg4" path="Jsp4.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg4",
+                path = "Jsp4.jsp") 
+        })
+    protected Forward action3()
+        {
+        System.out.println(">>> Jpf1.action3");
+        cnter = 3;
+        return new Forward("gotoPg4", "pgInput", null);
+        }
+
+    /**
+     * This should fail as an empty string is not valid as a pageInput name.
+     *
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward action4()
+        {
+        System.out.println(">>> Jpf1.action4");
+        cnter = 4;
+        return new Forward("", "pgInput", pageValue1);
+        }
+
+    /**
+     * This should fail as an empty string is not a valid pageInputName
+     * parameter value.
+     *
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward action5()
+        {
+        System.out.println(">>> Jpf1.action5");
+        cnter = 5;
+        return new Forward("gotoError", "", pageValue1);
+        }
+
+    /**
+     * This should succeed as an empty string is a valid value for the
+     * pageInputValue.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoPg7" path="Jsp7.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg7",
+                path = "Jsp7.jsp") 
+        })
+    protected Forward action6()
+        {
+        System.out.println(">>> Jpf1.action6");
+        cnter = 6;
+        return new Forward("gotoPg7", "pgInput", "");
+        }
+
+    /**
+     * This should fail as the pageInputName parameter value is null.
+     *
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward action7()
+        {
+        System.out.println(">>> Jpf1.action7");
+        cnter = 7;
+        Forward fwd = new Forward("gotoError");
+        fwd.addPageInput(null, pageValue1);
+        return fwd;
+        }
+
+    /**
+     * This should pass as the pageInputValue parameter can be null.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoPg9" path="Jsp9.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg9",
+                path = "Jsp9.jsp") 
+        })
+    protected Forward action8()
+        {
+        System.out.println(">>> Jpf1.action8");
+        cnter = 8;
+        Forward fwd = new Forward("gotoPg9");
+        fwd.addPageInput("pgInput", null);
+        return fwd;
+        }
+
+    /**
+     * This should fail as an empty string is not a valid pageInputName
+     * parameter value.
+     *
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward action9()
+        {
+        System.out.println(">>> Jpf1.action9");
+        cnter = 9;
+        Forward fwd = new Forward("gotoPg10");
+        fwd.addPageInput("", null);
+        return fwd;
+        }
+
+    /**
+     * This should succeed as an empty string is a valid value for the
+     * pageInputValue.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoPg11" path="Jsp11.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg11",
+                path = "Jsp11.jsp") 
+        })
+    protected Forward action10()
+        {
+        System.out.println(">>> Jpf1.action10");
+        cnter = 10;
+        Forward fwd = new Forward("gotoPg11");
+        fwd.addPageInput("pgInput", "");
+        return fwd;
+        }
+
+    /**
+     * This should succeed.  The runtime will log a warning that the value is
+     * being overwritten.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoPg12" path="Jsp12.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg12",
+                path = "Jsp12.jsp") 
+        })
+    protected Forward action11()
+        {
+        System.out.println(">>> Jpf1.action11");
+        cnter = 11;
+        Forward fwd = new Forward("gotoPg12");
+        fwd.addPageInput("value1", pageValue1);
+        fwd.addPageInput("value1", pageValue2);
+        return fwd;
+        }
+
+    /**
+     * This should succeed.  This is normal, expected behavior.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoPg13" path="Jsp13.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg13",
+                path = "Jsp13.jsp") 
+        })
+    protected Forward action12()
+        {
+        System.out.println(">>> Jpf1.action12");
+        cnter = 12;
+        Forward fwd = new Forward("gotoPg13");
+        fwd.addPageInput("value1", pageValue1);
+        fwd.addPageInput("value2", pageValue2);
+        return fwd;
+        }
+
+    /**
+     *
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.finish");
+        cnter = 13;
+        return new Forward("gotoDone");
+        }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="exGotoPg2" path="Jsp2.jsp"
+     * @jpf:forward name="exGotoPg3" path="Jsp3.jsp"
+     * @jpf:forward name="exGotoPg5" path="Jsp5.jsp"
+     * @jpf:forward name="exGotoPg6" path="Jsp6.jsp"
+     * @jpf:forward name="exGotoPg7" path="Jsp7.jsp"
+     * @jpf:forward name="exGotoPg8" path="Jsp8.jsp"
+     * @jpf:forward name="exGotoPg10" path="Jsp10.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "exGotoPg2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "exGotoPg3",
+                path = "Jsp3.jsp"),
+            @Jpf.Forward(
+                name = "exGotoPg5",
+                path = "Jsp5.jsp"),
+            @Jpf.Forward(
+                name = "exGotoPg6",
+                path = "Jsp6.jsp"),
+            @Jpf.Forward(
+                name = "exGotoPg7",
+                path = "Jsp7.jsp"),
+            @Jpf.Forward(
+                name = "exGotoPg8",
+                path = "Jsp8.jsp"),
+            @Jpf.Forward(
+                name = "exGotoPg10",
+                path = "Jsp10.jsp") 
+        })
+    protected Forward exceptionHandler(Throwable inEx
+                                       ,String inActionName
+                                       ,String inMessage
+                                       ,Object inForm)
+        {
+        System.out.println(">>> Jpf1.exceptionHandler");
+        System.out.println("\t>>> Exception message: "
+                           + inEx.getLocalizedMessage());
+
+        switch (cnter)
+            {
+            case 1:
+                {
+                System.out.println("\t>>> case:1");
+                return new Forward("exGotoPg2");
+                }
+            case 2:
+                {
+                System.out.println("\t>>> case:2");
+                return new Forward("exGotoPg3");
+                }
+            case 3:
+                {
+                System.out.println("\t>>> case:3");
+                return new Forward("exGotoError");
+                }
+            case 4:
+                {
+                System.out.println("\t>>> case:4");
+                return new Forward("exGotoPg5");
+                }
+            case 5:
+                {
+                System.out.println("\t>>> case:5");
+                return new Forward("exGotoPg6");
+                }
+            case 6:
+                {
+                System.out.println("\t>>> case:6");
+                return new Forward("exGotoError");
+                }
+            case 7:
+                {
+                System.out.println("\t>>> case:7");
+                return new Forward("exGotoPg8");
+                }
+            case 8:
+                {
+                System.out.println("\t>>> case:8");
+                return new Forward("exGotoError");
+                }
+            case 9:
+                {
+                System.out.println("\t>>> case:9");
+                return new Forward("exGotoPg10");
+                }
+            case 10:
+                {
+                System.out.println("\t>>> case:10");
+                return new Forward("exGotoError");
+                }
+            case 11:
+                {
+                System.out.println("\t>>> case:11");
+                return new Forward("exGotoError");
+                }
+            case 12:
+                {
+                System.out.println("\t>>> case:12");
+                return new Forward("exGotoError");
+                }
+            case 13:
+                {
+                System.out.println("\t>>> case:13");
+                return new Forward("exGotoError");
+                }
+            default:
+                {
+                System.out.println("\t>>> case:default");
+                return new Forward("exGotoError");
+                }
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp10.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp10.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp10.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action10">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp11.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp11.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp11.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInput" type="java.lang.String" />
+            <br/>
+            PageInput field: "<netui:label value="${pageInput.pgInput}" />"
+            <br/>
+            <font color="blue">
+                <b>
+                    Note: The above string is supposed to be an empty string.
+                </b>
+            </font>
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <netui:anchor action="action11">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp12.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp12.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp12.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="value1" type="java.lang.String" />
+            <br/>
+            PageInput field: "<netui:label value="${pageInput.value1}" />"
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <netui:anchor action="action12">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp13.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp13.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp13.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="value1" type="java.lang.String" />
+            <netui-data:declarePageInput name="value2" type="java.lang.String" />
+            <br/>
+            PageInput field1: "<netui:label value="${pageInput.value1}" />"
+            <br/>
+            PageInput field2: "<netui:label value="${pageInput.value2}" />"
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action2">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action3">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp4.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp4.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action4">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp5.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp5.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp5.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action5">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp6.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp6.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp6.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action6">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp7.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp7.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp7.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInput" type="java.lang.String" />
+            <br/>
+            PageInput field: "<netui:label value="${pageInput.pgInput}" />"
+            <br/>
+            <font color="blue">
+                <b>
+                    Note: The above string is supposed to be an empty string.
+                </b>
+            </font>
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <netui:anchor action="action7">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp8.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp8.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp8.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action8">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp9.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/Jsp9.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp9.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action9">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test3/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test3</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test3 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,119 @@
+package pageInput.test4;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private FormOne theForm     = new FormOne();
+
+    /**
+     * We are going to add the SAME FormBean "theForm" to the "Forward" once as
+     * a formBean and once as pageInput.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        Forward fwd = new Forward("gotoPg1");
+        fwd.addOutputForm(theForm);
+        fwd.addPageInput("theForm", theForm);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward action1(FormOne inForm)
+        {
+        System.out.println(">>> Jpf1.action1");
+
+        // If the form field values have changed then the user was allowed to
+        // change the values of the pageInput fields and this is not allowed
+        // and is a bug.  There should also be a junit test too that makes sure
+        // the run time is doing the right thing and an NEUI ERROR is logged to
+        // the console.  Note we check both the form passed in and the original
+        // form instance.
+        //----------------------------------------------------------------------
+        if (FormOne.VALUE1.equals(theForm.getFld1()) != true)
+            {
+            System.out.println("theForm.fld1: " + inForm.getFld1());
+            return new Forward("gotoError");
+            }
+        if (FormOne.VALUE2.equals(theForm.getFld2()) != true)
+            {
+            System.out.println("theForm.fld2: " + inForm.getFld2());
+            return new Forward("gotoError");
+            }
+        if (FormOne.VALUE1.equals(inForm.getFld1()) != true)
+            {
+            System.out.println("inForm.fld1: " + inForm.getFld1());
+            return new Forward("gotoError");
+            }
+        if (FormOne.VALUE2.equals(inForm.getFld2()) != true)
+            {
+            System.out.println("inForm.fld2: " + inForm.getFld2());
+            return new Forward("gotoError");
+            }
+        return new Forward("gotoDone");
+        }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class FormOne extends FormData
+        {
+        public final static String VALUE1 = "Field one value";
+        public final static String VALUE2 = "Field two value";
+
+        private String fld1 = VALUE1;
+        private String fld2 = VALUE2;
+
+        public void setFld1(String fld1)
+            {
+            this.fld1 = fld1;
+            }
+
+        public String getFld1()
+            {
+            return this.fld1;
+            }
+
+        public void setFld2(String fld2)
+            {
+            this.fld2 = fld2;
+            }
+
+        public String getFld2()
+            {
+            return this.fld2;
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test4</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test4 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="theForm" type="pageInput.test4.Jpf1$FormOne" />
+            <h3>
+                All fields being displayed below are from the same formBean just
+                using different data-binding contexts.
+            </h3>
+            <b>These two are from the {actionForm} context.</b>
+            <br/>
+            <netui:form action="action1">
+                {actionForm.fld1}: <font color="blue"><netui:label value="${actionForm.fld1}"/></font>
+                <br/>
+                {actionForm.fld2}: <font color="blue"><netui:label value="${actionForm.fld2}"/></font>
+                <br/>
+            </netui:form>
+            <hr width="95%"/>
+
+            <br/>
+            <b>These two are from the {pageInput} context.</b>
+            <br/><br/>
+            {pageInput.theForm.fld1}: <font color="blue"><netui:label value="${pageInput.theForm.fld1}" /></font>
+            <br/>
+            {pageInput.theForm.fld2}: <font color="blue"><netui:label value="${pageInput.theForm.fld2}" /></font>
+            <br/><br/>
+            <hr width="95%"/>
+
+            <br/>
+            <font color="green">
+                <strong>
+                Please change the value of "{pageInput.theForm.fld1}" to "test1"
+                and the value of "{pageInput.theForm.fld2}" to "test2".  Then
+                press the "Submit changes" button.  (These values are supposed
+                to be read-only, so we'll see about that.)
+                </strong>
+            </font>
+            <br/>
+            <netui:form action="action1">
+                {pageInput.theForm.fld1}: <netui:textBox dataSource="pageInput.theForm.fld1"/>
+                <br/>
+                {pageInput.theForm.fld2}: <netui:textBox dataSource="pageInput.theForm.fld2"/>
+                <br/>
+                <br/>
+                <netui:button action="action1" value="Submit changes" type="submit"/>
+            </netui:form>
+        </center>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test4/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<html>
+    <head>
+        <title>PageInput Test5</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test5 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green" >
+                <h2>This is a manual test!</h2>
+            </font>
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+package pageInput.test5;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public  String  pageValue1  = "PageValue 1";
+    public  String  pageValue2  = "PageValue 2";
+    public  FormOne form1       = new FormOne();
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        Forward fwd = new Forward("gotoPg1", form1);
+        fwd.addPageInput("pgInput1", pageValue1);
+        fwd.addPageInput("pgInput2", pageValue2);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.done");
+        return new Forward("gotoDone");
+        }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class FormOne extends FormData
+        {
+        private String fld1 = "Field one value";
+        private String fld2 = "Field two value";
+
+        public void setFld1(String fld1)
+            {
+            this.fld1 = fld1;
+            }
+
+        public String getFld1()
+            {
+            return this.fld1;
+            }
+
+        public void setFld2(String fld2)
+            {
+            this.fld2 = fld2;
+            }
+
+        public String getFld2()
+            {
+            return this.fld2;
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test5</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test5 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui-data:declarePageInput name="pgInput1" type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2" type="java.lang.String" />
+
+            PageInput value1: <font color="blue">"<netui:label value="${pageInput.pgInput1}" />"</font>
+            <br/>
+            PageInput value2: <font color="blue">"<netui:label value="${pageInput.pgInput2}" />"</font>
+            <br/><br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test5/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test5</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test5 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+package pageInput.test6;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public  String  pageValue1  = "PageValue 1";
+    public  FormOne theForm     = new FormOne();
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        Forward fwd = new Forward("gotoPg1", "pgInput", pageValue1);
+        fwd.addOutputForm(theForm);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish(FormOne inForm)
+        {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+        }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class FormOne extends FormData
+        {
+        private String fld1 = "Field one value";
+        private String fld2 = "Field two value";
+
+        public void setFld1(String fld1)
+            {
+            this.fld1 = fld1;
+            }
+
+        public String getFld1()
+            {
+            return this.fld1;
+            }
+
+        public void setFld2(String fld2)
+            {
+            this.fld2 = fld2;
+            }
+
+        public String getFld2()
+            {
+            return this.fld2;
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test6</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test6 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInput" type="java.lang.String" />
+            <br/>
+            <netui:form action="finish">
+                {actionForm.fld1}: <font color="blue">"<netui:label value="${actionForm.fld1}"/>"</font>
+                <br/>
+                {actionForm.fld2}: <font color="blue">"<netui:label value="${actionForm.fld2}"/>"</font>
+                <br/>
+            </netui:form>
+            <br/><br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test6/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test6</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test6 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+package pageInput.test7;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public  String  pageValue1  = "PageValue 1";
+    public  String  pageValue2  = "PageValue 2";
+    public  FormOne theForm     = new FormOne();
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        Forward fwd = new Forward("gotoPg1");
+        fwd.addPageInput("pgInputVal_1", pageValue1);
+        fwd.addPageInput("pgInputVal_2", pageValue2);
+        fwd.addPageInput("pgInputForm", theForm);
+        fwd.addPageInput("pgInputFormInner", theForm.getFld3());
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+        }
+
+    /**
+     * FormOne is an inner formBean class.
+     */
+    public static class FormOne extends FormData
+        {
+        private String  fld1    = "Field one value";
+        private String  fld2    = "Field two value";
+        private FormTwo fld3    = new FormTwo();
+
+        // Fld1 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld1(String inFld1)
+            { this.fld1 = inFld1; }
+        public String getFld1()
+            { return this.fld1; }
+
+        // Fld2 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld2(String inFld2)
+            { this.fld2 = inFld2; }
+        public String getFld2()
+            { return this.fld2; }
+
+        // Fld3 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld3(FormTwo inFld3)
+            { this.fld3 = inFld3; }
+        public FormTwo getFld3()
+            { return this.fld3; }
+
+        /**
+         * FormTwo is an inner formBean class to the inner FormOne class.
+         */
+        public static class FormTwo extends FormData
+            {
+            private String fld1 = "form2 Field one value";
+            private String fld2 = "form2 Field two value";
+
+            // Fld1 getter and setter methods
+            //------------------------------------------------------------------
+            public void setFld1(String inFld1)
+                { this.fld1 = inFld1; }
+            public String getFld1()
+                { return this.fld1; }
+
+            // Fld2 getter and setter methods
+            //------------------------------------------------------------------
+            public void setFld2(String inFld2)
+                { this.fld2 = inFld2; }
+            public String getFld2()
+                { return this.fld2; }
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test7</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test7 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <!--
+                I learned that the "type" attribute is required but is totaly
+                ignored at run-time.  Note the garbage I've put in the first
+                delarePageInput tag.
+            -->
+            <netui-data:declarePageInput name="pgInputVal_1"        type="blah.blah.blah" />
+            <netui-data:declarePageInput name="pgInputVal_2"        type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm"         type="pageInput.test7.Jpf1$FormOne" />
+            <netui-data:declarePageInput name="pgInputFormInner"    type="pageInput.test7.Jpf1$FormOne$FormTwo" />
+            <br/>
+            {pageInput.pgInputVal_1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputVal_1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputVal_2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInputVal_2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputFormInner.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputFormInner.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputFormInner.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputFormInner.fld2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld3.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld3.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld3.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld3.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test7/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test7</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test7 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,222 @@
+package pageInput.test8;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public static final String  PG_FLD_1        = "Page Input field 1 value";
+    public static final String  PG_FLD_2        = "Page Input field 2 value";
+    public static final String  FORM_FLD_1      = "Page Input form field 1 value";
+    public static final String  FORM_FLD_2      = "Page Input form field 2 value";
+    public              String  pageValueOne1   = PG_FLD_1;
+    public              String  pageValueTwo1   = PG_FLD_2;
+    public              MyForm  form1           = new MyForm();
+
+    public static final String  NEW_PG_FLD_1    = "New - Page Input field 1 value";
+    public static final String  NEW_PG_FLD_2    = "New - Page Input field 2 value";
+    public static final String  NEW_FORM_FLD_1  = "New - Page Input form field 1 value";
+    public static final String  NEW_FORM_FLD_2  = "New - Page Input form field 2 value";
+    public              String  pageValueOne2   = NEW_PG_FLD_1;
+    public              String  pageValueTwo2   = NEW_PG_FLD_2;
+    public              MyForm  form2           = new MyForm();
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+
+        // Set the initial value of the first set of pageInput fields.
+        //----------------------------------------------------------------------
+        pageValueOne1 = PG_FLD_1;
+        pageValueTwo1 = PG_FLD_2;
+        form1.setFld1(FORM_FLD_1);
+        form1.setFld2(FORM_FLD_2);
+
+        // Add the pageInput fields to the Forward.
+        //----------------------------------------------------------------------
+        Forward fwd = new Forward("gotoPg1");
+        fwd.addPageInput("pgInput1", pageValueOne1);
+        fwd.addPageInput("pgInput2", pageValueTwo1);
+        fwd.addPageInput("pgInputForm", form1);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward action1()
+        {
+        System.out.println(">>> Jpf1.action1");
+
+        // Set the values of the second set of pageInput fields.
+        //----------------------------------------------------------------------
+        pageValueOne2 = NEW_PG_FLD_1;
+        pageValueTwo2 = NEW_PG_FLD_2;
+        form2.setFld1(NEW_FORM_FLD_1);
+        form2.setFld2(NEW_FORM_FLD_2);
+
+        // Add the second set of pageInput fields to the Forward.
+        //----------------------------------------------------------------------
+        Forward fwd = new Forward("gotoPg2");
+        fwd.addPageInput("pgInput1", pageValueOne2);
+        fwd.addPageInput("pgInput2", pageValueTwo2);
+        fwd.addPageInput("pgInputForm", form2);
+        return fwd;
+        }
+
+    /**
+     * The idea here is that we're going to go back to Jsp1.jsp with a
+     * "return-to" to see if the pageInput values for Jsp1.jsp are the original
+     * values or the values set in "action1" above.  They should be the original
+     * values.
+     *
+     * @jpf:action
+     * @jpf:forward name="rtnToPg1" return-to="previousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "rtnToPg1",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+    protected Forward action2()
+        {
+        System.out.println(">>> Jpf1.action2");
+        return new Forward("rtnToPg1");
+        }
+
+    /**
+     * The difference between action2 and action3 is that we are going to test
+     * that the return-to="previousPage" will NOT restore the original values if
+     * we add new pageInput values to the forward.  Action2 did not add any
+     * pageinput fields and the original fields should be restored but here we
+     * are adding new fields so these fields should be used.
+     *
+     * @jpf:action
+     * @jpf:forward name="rtnToPg1" return-to="previousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "rtnToPg1",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+    protected Forward action3()
+        {
+        System.out.println(">>> Jpf1.action3");
+
+        // Set the values of the second set of pageInput fields.
+        //----------------------------------------------------------------------
+        pageValueOne2 = NEW_PG_FLD_1;
+        pageValueTwo2 = NEW_PG_FLD_2;
+        form2.setFld1(NEW_FORM_FLD_1);
+        form2.setFld2(NEW_FORM_FLD_2);
+
+        // Add the second set of pageInput fields to the Forward.
+        //----------------------------------------------------------------------
+        Forward fwd = new Forward("rtnToPg1");
+        fwd.addPageInput("pgInput1", pageValueOne2);
+        fwd.addPageInput("pgInput2", pageValueTwo2);
+        fwd.addPageInput("pgInputForm", form2);
+        return fwd;
+        }
+
+    /**
+     * The difference between action4 and action3 is that we are going to change
+     * only one of the pageInput fields.
+     *
+     * @jpf:action
+     * @jpf:forward name="rtnToPg1" return-to="previousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "rtnToPg1",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+    protected Forward action4()
+        {
+        System.out.println(">>> Jpf1.action4");
+
+        // Update all of the pageInput values.
+        //----------------------------------------------------------------------
+        pageValueOne2 = NEW_PG_FLD_1;
+        pageValueTwo2 = NEW_PG_FLD_2;
+        form2.setFld1(NEW_FORM_FLD_1);
+        form2.setFld2(NEW_FORM_FLD_2);
+
+        // Only add the pageValueTwo2 pageInput to the Forward.
+        //----------------------------------------------------------------------
+        Forward fwd = new Forward("rtnToPg1");
+        fwd.addPageInput("pgInput2", pageValueTwo2);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+        }
+
+    /**
+     * MyForm is an inner formBean class.
+     */
+    public static class MyForm extends FormData
+        {
+        private String  fld1    = Jpf1.FORM_FLD_1;
+        private String  fld2    = Jpf1.FORM_FLD_2;
+
+        // Fld1 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld1(String inFld1)
+            { this.fld1 = inFld1; }
+        public String getFld1()
+            { return this.fld1; }
+
+        // Fld2 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld2(String inFld2)
+            { this.fld2 = inFld2; }
+        public String getFld2()
+            { return this.fld2; }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,86 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInput1"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test8.Jpf1$FormOne" />
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInput1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInput2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <netui:anchor action="action1">Press here</netui:anchor>
+            <br/>
+            The 1st time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <netui:anchor action="action1">Press here</netui:anchor>
+            <br/>
+            The 2nd time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <netui:anchor action="action1">Press here</netui:anchor>
+            <br/>
+            The 3rd time you see this page, all the values should begin with the
+            word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Forth time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <netui:anchor action="finish">Press here</netui:anchor>
+            <br/>
+            The 4th time you see this page, only the {pageInput.pgInput2} value
+            should begin with the word "New".
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui-data:declarePageInput name="pgInput1"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test8.Jpf1$FormOne" />
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInput1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInput2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <netui:anchor action="action2">Press here</netui:anchor>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <netui:anchor action="action3">Press here</netui:anchor>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <netui:anchor action="action4">Press here</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test8/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test8</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test8 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,204 @@
+package pageInput.test9;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public static final String  PG_FLD_1        = "Page Input field 1 value";
+    public static final String  PG_FLD_2        = "Page Input field 2 value";
+    public static final String  FORM_FLD_1      = "Page Input form field 1 value";
+    public static final String  FORM_FLD_2      = "Page Input form field 2 value";
+    public              String  pageValueOne1   = PG_FLD_1;
+    public              String  pageValueTwo1   = PG_FLD_2;
+    public              MyForm  form1           = new MyForm();
+
+    public static final String  NEW_PG_FLD_1    = "New - Page Input field 1 value";
+    public static final String  NEW_PG_FLD_2    = "New - Page Input field 2 value";
+    public static final String  NEW_FORM_FLD_1  = "New - Page Input form field 1 value";
+    public static final String  NEW_FORM_FLD_2  = "New - Page Input form field 2 value";
+    public              String  pageValueOne2   = NEW_PG_FLD_1;
+    public              String  pageValueTwo2   = NEW_PG_FLD_2;
+    public              MyForm  form2           = new MyForm();
+
+    private             int     cnter           = 0;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        cnter = 0;              // reset the cnter.
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg2"  path="Jsp2.jsp"
+     * @jpf:forward name="gotoPg3"  path="Jsp3.jsp"
+     * @jpf:forward name="gotoPg4"  path="Jsp4.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp"),
+            @Jpf.Forward(
+                name = "gotoPg4",
+                path = "Jsp4.jsp") 
+        })
+    protected Forward action1()
+        {
+        System.out.println(">>> Jpf1.action1");
+
+        // Switch to a different page each time we come thru action1.
+        //----------------------------------------------------------------------
+        cnter++;
+        Forward fwd;
+        switch (cnter)
+            {
+            case 1:
+                {
+                System.out.println("\t>>> case:1");
+                pageValueOne1 = PG_FLD_1;
+                pageValueTwo1 = PG_FLD_2;
+                form1.setFld1(FORM_FLD_1);
+                form1.setFld2(FORM_FLD_2);
+                fwd = new Forward("gotoPg2");
+                break;
+                }
+            case 2:
+                {
+                System.out.println("\t>>> case:2");
+                fwd = new Forward("gotoPg3");
+                break;
+                }
+            case 3:
+                {
+                System.out.println("\t>>> case:3");
+                fwd = new Forward("gotoPg4");
+                break;
+                }
+            default:
+                {
+                System.out.println("\t>>> default");
+                System.out.println("\t>>> Restart the browser");
+                fwd = new Forward("gotoError");
+                break;
+                }
+            }
+        fwd.addPageInput("pgInput1", pageValueOne1);
+        fwd.addPageInput("pgInput2", pageValueTwo1);
+        fwd.addPageInput("pgInputForm", form1);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="rtnToAction1" return-to="previousAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "rtnToAction1",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+    protected Forward action2()
+        {
+        System.out.println(">>> Jpf1.action2");
+        return new Forward("rtnToAction1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="rtnToAction1" return-to="previousAction"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "rtnToAction1",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+    protected Forward action3()
+        {
+        System.out.println(">>> Jpf1.action3");
+
+        // Set the values of the second set of pageInput fields.
+        //----------------------------------------------------------------------
+        pageValueOne2 = NEW_PG_FLD_1;
+        pageValueTwo2 = NEW_PG_FLD_2;
+        form2.setFld1(NEW_FORM_FLD_1);
+        form2.setFld2(NEW_FORM_FLD_2);
+
+        // Add the pageInput fields to the Forward.  They should all be
+        // ignored.
+        //----------------------------------------------------------------------
+        Forward fwd = new Forward("rtnToAction1");
+        fwd.addPageInput("pgInput1", pageValueOne2);
+        fwd.addPageInput("pgInput2", pageValueTwo2);
+        fwd.addPageInput("pgInputForm", form2);
+        return fwd;
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+        }
+
+    /**
+     * MyForm is an inner formBean class.
+     */
+    public static class MyForm extends FormData
+        {
+        private String  fld1    = Jpf1.FORM_FLD_1;
+        private String  fld2    = Jpf1.FORM_FLD_2;
+
+        // Fld1 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld1(String inFld1)
+            { this.fld1 = inFld1; }
+        public String getFld1()
+            { return this.fld1; }
+
+        // Fld2 getter and setter methods
+        //----------------------------------------------------------------------
+        public void setFld2(String inFld2)
+            { this.fld2 = inFld2; }
+        public String getFld2()
+            { return this.fld2; }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test10</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test10 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green">
+                This page is here because I don't want the "begin" action method
+                to be the action "returned-to", so just click thru the page.
+            </font>
+            <br/><br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test9</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test9 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><b>
+                PageInput values.
+            <b/></font>
+            <netui-data:declarePageInput name="pgInput1"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test9.Jpf1$MyForm" />
+            <br/><br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInput1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInput2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green">
+                If any of the values above begin with the word "New" then the
+                test has failed.
+            </font>
+            <br/><br/>
+            <netui:anchor action="action2">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test9</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test9 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><b>
+                PageInput values.
+            <b/></font>
+            <netui-data:declarePageInput name="pgInput1"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test9.Jpf1$MyForm" />
+            <br/><br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInput1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInput2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green">
+                If any of the values above begin with the word "New" then the
+                test has failed.
+            </font>
+            <br/><br/>
+            <netui:anchor action="action3">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/Jsp4.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>PageInput Test9</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test9 - Jsp4.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><b>
+                PageInput values.
+            <b/></font>
+            <netui-data:declarePageInput name="pgInput1"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInput2"    type="java.lang.String" />
+            <netui-data:declarePageInput name="pgInputForm" type="pageInput.test9.Jpf1$MyForm" />
+            <br/><br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInput1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <netui:label value="${pageInput.pgInput2}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld1}"/>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<netui:label value="${pageInput.pgInputForm.fld2}"/>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green">
+                If any of the values above begin with the word "New" then the
+                test has failed.
+            </font>
+            <br/><br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/pageInput/test9/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>PageInput Test9</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test9 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/css/style.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/css/style.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,101 @@
+
+
+body
+{
+background-color: #ffffff;
+background-repeat: no-repeat;
+font-family: Arial, Verdana;
+font-size: 14px;
+font-style: normal;
+font-weight: normal;
+/* color: #333333; */
+/* margin-top: 10px; */
+/* margin-left: 10px; */
+/* margin-right: 10px; */
+/* margin-bottom: 10px; */
+}
+
+
+/* Style for in-page header of the generated rowset pages */
+.pagehead
+{
+font-size: 16px;
+font-weight: bold;
+}
+
+
+/* Table row style referenced in generated various generated pages */
+.tablebody
+{
+/* background-color: #CCDDEE; */
+color: #111111;
+font-size: 14px;
+text-align: left;
+vertical-align: middle;
+padding: 5px 10px 5px 10px;
+}
+
+
+/* Grid header style referenced in gridStyle tag for generated rowset pages */
+.tablehead
+{
+background-color: #CCDDEE;
+color: #555588;
+font-size: 14px;
+text-align: left;
+vertical-align: baseline;
+line-height: 18px;
+border-color: #999999;
+border-style: solid;
+border-width: 1px;
+padding-left: 10px;
+}
+
+
+/* Grid base row style referenced in gridStyle tag for generated rowset pages */
+.data-td
+{
+background-color: #FFFFFF;
+color: #111111;
+font-size: 14px;
+text-align: left;
+border-color: #999999;
+border-style: solid;
+border-width: 1px;
+padding-left: 12px;
+}
+
+
+/* Grid alternate row style referenced in gridStyle tag for generated rowset pages */
+.data-alt-td
+{
+background-color: #CCDDEE;
+color: #111111;
+font-size: 14px;
+text-align: left;
+border-color: #999999;
+border-style: solid;
+border-width: 1px;
+padding-left: 12px;
+}
+
+
+/* Used for prompts in generated pages */
+.prompt
+{
+color: #993333;
+font-style: italic;
+}
+
+
+A:hover {
+color: #9999FF;
+background: transparent;
+text-decoration: underline;
+}
+
+
+A:visited, A:link, A:active {
+color: #7777AA;
+text-decoration: underline;
+}
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/back.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/bar-background.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/cancel.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/delete.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/details.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/edit.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/folder_16_pad.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/goButton.jpg
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/grid.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/handledownlast.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/handledownmiddle.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/handlerightlast.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/handlerightmiddle.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/insert.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/linelastnode.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/linemiddlenode.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/linevertical.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/spacer.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/update.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/weblogic-img-lt.jpg
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/images/weblogic-img-rt.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/javascript/netui-tree.js
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/javascript/netui-tree.js	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,414 @@
+// The variable netUI already exists and the type NetUI has been
+// defined.  There isn't anything in it at the moment.
+// NOTE: Using this file requires that runAtClient be turned on in the
+//      script container.
+
+///////////////////////////////// NetUI //////////////////////////
+NetUI.prototype.action = function(command)
+{
+    var f = new Function("members","members." + command);
+    f(this.members);
+    return false;
+}
+
+
+///////////////////////////////// Tree //////////////////////////
+function NetUITree()
+{
+    this.imgExpandName = "/resources/images/handledownlast.gif";
+    this.imgCollapseName = "/resources/images/handlerightlast.gif";
+}
+
+NetUITree.prototype.init = function()
+{
+    for (var i=0;i<document.links.length;i++) {
+        var attr = document.links[i].getAttribute("netui-tree-anchor");
+        if (attr != null) {
+             document.links[i].onclick = NetUICollapseTree;
+            if (attr == "collapse") {
+                NetUICollapseTreeNode(document.links[i]);
+            }
+
+        }
+    }
+}
+
+//  this will run the code necessary to submit an achor
+function NetUIAnchorInvoke(node,onclickStuff)
+{
+    var f = new Function(onclickStuff);
+    var ret = f.call(node);
+    if (ret != null && ret == false)
+        return false;
+    netUI.netUITree.rewriteAnchor(node);
+}
+
+// this will add the tree state to the passed anchor
+NetUITree.prototype.rewriteAnchor = function(node)
+{
+    var sep = '?';
+    if (node.href.indexOf('?') != -1)
+        sep = '&';
+    var state = "";
+    for (var i=0;i<document.links.length;i++) {
+        var attr = document.links[i].getAttribute("netui-tree-anchor");
+        if (attr != null) {
+            var div = this.getDiv(document.links[i]);
+            if (!div)
+                return reportError("Expected Node was not a DIV:" + node.nodeName);
+            var att = div.getAttribute("netui-tree-anchor");
+            if (att == null)
+                att = attr;
+
+            if (att == "expand") {
+                state = state + sep;
+                state = state + "tree-state=" +
+                    document.links[i].getAttribute("netui-tree-id");
+                sep = '&';
+            }
+        }
+    }
+    node.href = node.href + state;
+}
+
+function NetUIExpandTree()
+{
+    if (this.nodeName != "A")
+        return reportError("Expected Node was not an A:" + node.nodeName);
+
+    // find the image child so we can change the image
+    var children = this.childNodes;
+    var img = null;
+    for (var i=0;i<children.length;i++) {
+        if (children[i].nodeName == "IMG") {
+            img = children[i];
+            break;
+        }
+    }
+    if (img == null)
+        return reportError("IMG tag not found");
+    img.src = netUI.webAppName + netUI.netUITree.imgExpandName;
+    this.onclick = NetUICollapseTree;
+
+    // go up the level and get the Div
+    var parentDiv = this.parentNode;
+    if (parentDiv.nodeName != "DIV")
+        return reportError("Expected Node was not an DIV:" + parentDiv.nodeName);
+
+    var depth = netUI.netUITree.getDepth(parentDiv);
+    parentDiv.setAttribute("netui-tree-anchor","expand");
+    parentDiv = parentDiv.nextSibling;
+    while (parentDiv != null && parentDiv.nodeName != "DIV") {
+        parentDiv = parentDiv.nextSibling;
+    }
+    if (parentDiv == null) {
+        return false;
+    }
+
+    netUI.netUITree.expandTreeSection(depth,parentDiv);
+    return false;
+}
+
+// this will cause a collapse to happend in the tree
+// this function is not name spaced because it is 
+function NetUICollapseTree()
+{
+    if (this.nodeName != "A")
+        return reportError("Expected Node was not an A:" + node.nodeName);
+    return NetUICollapseTreeNode(this);
+}
+
+// this will cause a collapse to happend in the tree
+// this function is not name spaced because it is 
+function NetUICollapseTreeNode(node)
+{
+    if (node.nodeName != "A")
+        return reportError("Expected Node was not an A:" + node.nodeName);
+
+    var children = node.childNodes;
+    var img = null;
+    for (var i=0;i<children.length;i++) {
+        if (children[i].nodeName == "IMG") {
+            img = children[i];
+            break;
+        }
+    }
+    if (img == null)
+        return reportError("IMG tag not found");
+
+    // set the image to be the collapse image
+    img.src = netUI.webAppName + netUI.netUITree.imgCollapseName;
+    node.onclick = NetUIExpandTree;
+
+    // go up the level
+    var parentDiv = node.parentNode;
+    if (parentDiv.nodeName != "DIV")
+        return reportError("Expected Node was not a DIV:" + parentDiv.nodeName);
+
+    // get the depth and then begin to collapse rows
+    var depth = netUI.netUITree.getDepth(parentDiv);
+    parentDiv.setAttribute("netui-tree-anchor","collapse");
+    netUI.netUITree.collapseTreeSection(depth,parentDiv.nextSibling);
+    
+    // change the method the 
+   return false;
+}
+
+// Look above this node to find a Parent node that is a <tr>
+NetUITree.prototype.getDiv = function(a)
+{
+    var parentDiv = a.parentNode;
+    if (parentDiv.nodeName != "DIV")
+        return reportError("Exception Node was not a DIV:" + parentDiv.nodeName);
+    return parentDiv;
+}
+
+// This will return the <TD> that contains the colspan attribute,
+// it will always return a TD or null.
+NetUITree.prototype.getDepth = function(div)
+{
+    if (div.nodeName != "DIV")
+        return reportError("getDepth only support DIV nodes, found: " + div.nodeName);
+    
+    var attr = div.getAttribute("netui-tree-level");
+    return attr;
+}
+
+// This will collapse a set of rows
+NetUITree.prototype.collapseTreeSection = function(depth,div)
+{
+    // convert the depth into an integer...
+    depth = parseInt(depth);
+
+    // now we walk the rows collapsing 
+    while (div != null) {
+        if (div.nodeName != "DIV") {
+            if (div.nodeType != 1) {
+                div = div.nextSibling;
+                continue;
+            }
+            break;
+        }
+        
+        // @todo: need to verify that the div is inside the tree or not
+        // do we just get to the end if we only walk siblings?
+        
+        // Get the colspan so we can see the indent level.  
+        var csp = this.getDepth(div);
+        csp = parseInt(csp);
+
+        // if the colSpan is less than the collapse colspan set the
+        // the display of the div to none.
+        if (csp > depth) {
+            div.style.display = "none";
+        }
+        if (csp <= depth)
+            break;
+        div = div.nextSibling;
+    }
+}
+
+NetUITree.prototype.expandTreeSection = function(depth,div)
+{
+    //alert("ExpandTreeSection:" + div);
+    depth = parseInt(depth);
+    
+    // Find the next div after the node we are expanding...
+    while (div != null && div.nodeName != "DIV") {
+        div = div.nextSibling;
+    }
+    if (div == null) {
+        return false;
+    }
+
+    while (div != null) {
+        div = this.expandTree(depth+1,div);
+        if (div == null)
+           return false;
+        var csp = this.getDepth(div);
+        csp = parseInt(csp);
+        if (csp <= depth)
+           return false;
+    }
+    return false;
+}
+
+NetUITree.prototype.expandTree = function(depth,div)
+{
+    if (div.nodeName != "DIV")
+        return reportError("expandTree only support DIV nodes, found: " + div.nodeName);
+        
+    //alert("inside expand:" + depth);
+    while (true) {
+        div.style.display = "";
+
+        var at = div.getAttribute("netui-tree-anchor");
+
+        // get the next sibling
+        div = div.nextSibling;
+        while (div != null && div.nodeName != "DIV") {
+            div = div.nextSibling;
+        }
+        if (div == null)
+            return null;
+
+        // see what depth it is...
+        // if the depth is the same then we continue expanding it..
+        var csp = this.getDepth(div);
+        csp = parseInt(csp);
+        //alert("csp:" + csp + " attr:" + at);
+        if (csp == depth)
+           continue;
+
+        // if this is less than depth return it to the previous level
+        if (csp < depth)
+           return div;
+        
+        // if the attribute is not set, then we need to expand the subtree
+        if (at == null || at == "expand") {
+            div = this.expandTree(csp,div);
+            if (div == null)
+                return div;
+            csp = this.getDepth(div);
+            csp = parseInt(csp);
+            if (csp < depth)
+                return div;
+        }
+        else {
+            //alert("inside collapsed region");
+            while (true) {
+                while (div != null && div.nodeName != "DIV") {
+                    div = div.nextSibling;
+                }
+                if (div == null)
+                    return null;
+
+                csp = this.getDepth(div);
+                csp = parseInt(csp);
+                if (csp <= depth)
+                    break;
+                div = div.nextSibling;
+            }
+            if (csp < depth)
+                return div;
+        }
+    }
+}
+
+///////////////////////////////// DivPanel //////////////////////////
+// @Todo: this should be moved?
+
+// This is a DivPaneContainer
+function NetUIDivPanelInstance()
+{
+    this.pages = new Object();
+    this.curPage = null;
+    this.pageName = null;
+}
+
+NetUIDivPanelInstance.prototype.showPage = function(page)
+{
+    var newPage = this.pages[page];
+    if (newPage != null) {
+	    this.curPage.style.display = "none";
+	    this.curPage = newPage;
+	    this.curPage.style.display = "";
+            this.pageName = page;
+	}
+}
+
+// panels -- this is a hash of all the panels defined.  It is a mapping
+//      from ID to panel
+function NetUIDivPanel()
+{
+    this.panels = new Object();
+}
+
+// The initialization routine will walk all the div's looking
+// for DivPanels.
+NetUIDivPanel.prototype.init = function()
+{
+    this.loadDivPanels(document);
+}
+
+// This method will call the individual panel to showPage a page
+NetUIDivPanel.prototype.showPage = function(panel,page)
+{
+    this.panels[panel].showPage(page);
+}
+
+// This method will walk the DOM looking for a netui-div-panel attribute
+// it then takes the DivPanel and inserts into the object
+NetUIDivPanel.prototype.loadDivPanels = function(node)
+{
+    if (node.nodeType == 1 || node.nodeType == 9) {
+        if (node.nodeType == 1 && node.nodeName == "DIV") {
+            var attr = node.getAttribute("netui-div-panel");
+            if (attr != null) {
+                //alert("here:" + node.id);
+                var dp = new NetUIDivPanelInstance();
+                netUI.members[node.id] = dp;
+                this.panels[node.id] = dp;
+                this.createDivPanel(node,dp);
+
+                attr = node.getAttribute("netui-div-panel-first");
+                if (attr != null) {
+                    this.panels[node.id].showPage(attr);
+                }
+                return;
+            }
+        }
+        var children = node.childNodes;
+        for (var i=0;i<children.length;i++) {
+            this.loadDivPanels(children[i]);
+        }
+    }
+}
+
+// This method will create the initial runtime view of the
+// divPanel.  The first div is made visible and all others
+// are not visible.  It will also initialize the pages variable
+// and the curPage variable.
+NetUIDivPanel.prototype.createDivPanel = function(node,dp)
+{
+    var children = node.childNodes;
+    var displayFirst = false;
+    for (var i=0;i<children.length;i++)  {
+        if (children[i].nodeType == 1 && node.nodeName == "DIV")  {
+            var divName = children[i].id;
+            //alert("Page:" + divName);
+            if (divName != null) {
+               dp.pages[divName] = children[i];
+            }
+            if (displayFirst == false) {
+                displayFirst = true;
+                dp.curPage = children[i];
+                continue;
+            }
+            children[i].style.display = "none";
+        }
+    }
+}
+
+// this will add the tree state to the passed anchor
+NetUIDivPanel.prototype.rewriteAnchor = function(node)
+{
+    var sep = '?';
+    if (node.href.indexOf('?') != -1)
+        sep = '&';
+    var state = "";
+    for (var pan in this.panels) {
+        state = state + sep;
+        state = state + "netui_divpanel_" + pan + "=" + this.panels[pan].pageName;
+        sep = '&';
+    }
+
+    node.href = node.href + state;
+}
+
+// Utility function to report an error
+function reportError(msg)
+{
+    alert(msg);
+    return false;
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/done.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/done.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - error.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="red"><h2>Test failed with an error.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/grid_template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/grid_template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<html>
+  <head>
+    <netui:base />
+    <title><netui-template:attribute name="title"/></title>
+    <link href="<%=request.getContextPath()%>/resources/css/style.css" type="text/css" rel="stylesheet"/>
+  </head>
+  <body style="margin:0">
+    <script language="javascript" type="text/javascript" src="<%=request.getContextPath()%>/resources/grid/_grid.js" >
+    </script>
+    <jsp:include page="/resources/jsp/header.jsp" />
+    <br/>
+    <netui-template:includeSection name="bodySection"></netui-template:includeSection>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/header.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/header.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+
+  <!-- header.jsp -->
+
+  <table width="100%" border="0" cellpadding="0" cellspacing="0">
+  <!-- Topmost table containing the primary header graphics and color -->
+   <tr>
+   <!--Primary header color defined here in the form of 'bgcolor="#8fc5ff"' -->
+    <td width="100%" height="96" valign="top" bgcolor="#8fc5ff">
+    <!-- Left justified graphic image with arrows -->
+    <img src="<%=request.getContextPath ()%>/resources/images/weblogic-img-lt.jpg" border="0" align="left">
+    <!-- Right justified graphic text 'Weblogic Workshop version 2.0' -->
+    <img src="<%=request.getContextPath ()%>/resources/images/weblogic-img-rt.gif" border="0" align="right">
+    </td>
+   </tr>
+  </table>
+  <table width="100%" border="0" cellpadding="0" cellspacing="0">
+  <!-- Smaller, lower table containing the decorative 'bar' which could be used for navigation -->
+   <tr>
+    <!-- Styled, graphical look of 'bar' defined here using a repeatable image specified as 'background="bar-background.gif"' -->
+    <td width="100%" height="21" background="<%=request.getContextPath ()%>/resources/images/bar-background.gif">&nbsp;</td>
+  </tr>
+  </table>
+  <!-- end header.jsp -->

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/qaPageSnap.jspf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/qaPageSnap.jspf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+         <!-- QA test harness ---------------------------------------------- -->
+         <script>
+            function snapPage()
+                {
+                var blah = document.getElementById(getNetuiTagName("txtBox"));
+                blah.value = "";
+                blah.value = document.documentElement.outerHTML;
+                return true;
+                }
+        </script>
+
+        <br/><br/>
+        <netui:form tagId="qaForm" action="logPage">
+            <center>
+            <netui:hidden tagId="txtBox" dataSource="{actionForm.pageText}" />
+            <netui:button type="submit" value="QA - LogPage" onClick="return snapPage()"/>
+            </center>
+        </netui:form>
+        <br/><br/>
+        <!-- end QA test harness ------------------------------------------- -->
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/qaTraceResults.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/qaTraceResults.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>QA Trace results</title>
+    </head>
+    <body>
+        <h3 align="center" style="color: green;">QA Trace results - TraceResults.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <ul>
+            <netui-data:repeater dataSource="session.QaTrace.tracePoints">
+                <li>
+                    <netui:label value="${container.item}" />
+                </li>
+            </netui-data:repeater>
+        </ul>
+        <center>
+            <hr width="95%"/>
+            <br/>
+            <a href="done.jsp">Okay</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/resources/jsp/template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+
+<html>
+  <head>
+    <netui:base />
+    <title><netui-template:attribute name="title"/></title>
+    <link href="<%=request.getContextPath()%>/resources/css/style.css" type="text/css" rel="stylesheet"/>
+  </head>
+  <body style="margin:0">
+    <jsp:include page="/resources/jsp/header.jsp" />
+    <br/>
+    <netui-template:includeSection name="bodySection"></netui-template:includeSection>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/results/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/results/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>results</title>
+</head>
+<body>
+<h2>results</h2>
+<p style="color:green">
+This displays the contents of the global property <b>globalApp.results</b>.  The Lifecycle test calls this PageFlow through
+the globalApp so that is can capture the onDestroy event within the lifecycle.
+</p>
+<hr />
+<netui:content value="${globalApp.results}"/>
+<hr />
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/results/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/results/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package results;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin(){
+        return new Forward("begin");
+    }
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+package returnTo.test28;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="previousPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test28</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test28 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage"
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test28</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test28 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui:anchor action="action2">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test28/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test28</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test28 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+package returnTo.test30;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="page"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.page) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test30</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test30 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage"
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test30</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test30 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui:anchor action="action2">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test30/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test30</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test30 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,94 @@
+package returnTo.test31;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private  String _str ="uninitialized";
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _str = "1";
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      _str = "2";
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test31</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test31 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+            Test return-to="currentPage"
+            </font></h2>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test31</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test31 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <netui:label value="${pageFlow.string}"/>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action2">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test31/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test31</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test31 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,128 @@
+package returnTo.test32;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private  String _str ="uninitialized";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _str = "1";
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goSub" path="sub1/SubJpf1.jpf"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goSub",
+                path = "sub1/SubJpf1.jpf") 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("goSub");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action3()
+      {
+      System.out.println(">>> Jpf1.action3");
+      _str = "2";
+      return new Forward("goPg3");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goPrev" return-to="previousPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goPrev",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+   protected Forward action4()
+      {
+      System.out.println(">>> Jpf1.action4");
+      _str = "2";
+      return new Forward("goPrev");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+            Test return-to="currentPage"
+            </font></h2>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <netui:label value="${pageFlow.string}"/>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action2">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/><br/>
+            <netui:anchor action="action4">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test32</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test32 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/sub1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/sub1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+package returnTo.test32.sub1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    nested = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class SubJpf1 extends PageFlowController
+   {
+   private  String _str ="uninitialized";
+
+   /**
+     * @jpf:action
+     * @jpf:forward name="gotoSubPg1" path="SubJsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSubPg1",
+                path = "SubJsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> SubJpf1.begin");
+      _str = "1";
+      return new Forward("gotoSubPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-to="previousPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _str = "2";
+      return new Forward("return");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="action3"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "action3") 
+        })
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("return");
+      }
+
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/sub1/SubJsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test32/sub1/SubJsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <netui:label value="${pageFlow.string}"/>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select return:
+            <netui:anchor action="finish">Return...</netui:anchor>
+            <br/><br/>
+            <font color="green">
+            The first visit is kind of a negative test.  It tests that if you do
+            a return-to="previousPage" and there is no previous page for the
+            pageFlow that you go back to the current page in the pageFlow.
+            </font>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test33/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test33/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,91 @@
+package returnTo.test33;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:catch type="java.lang.Throwable" method="exceptionHandler"
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = java.lang.Throwable.class,
+            method = "exceptionHandler") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoAct1" path="action1.do"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoAct1",
+                path = "action1.do") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoAct1");
+      }
+
+   /**
+    * This should cause the runtime to throw an exception as there is no
+    * previousPage.
+    *
+    * @jpf:action
+    * @jpf:forward name="gotoPrev" return-to="previousPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPrev",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoPrev");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   /**
+    * @jpf:exception-handler
+    */
+    @Jpf.ExceptionHandler(
+        )
+   public Forward exceptionHandler(java.lang.Throwable e
+                                   ,String actionName
+                                   ,String message
+                                   ,Object inForm
+                                  )
+      {
+      System.out.println(">>> Jpf1.exceptionHandler");
+      System.out.println("\t>>> Exception: " + e.toString());
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test33/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test33/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test33</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test33 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,78 @@
+package returnTo.test34;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private  String _str ="uninitialized";
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _str = "1";
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPrev" return-to="previousPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPrev",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _str = "2";
+      return new Forward("gotoPrev");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test34</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test34 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <netui:label value="${pageFlow.string}"/>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test34/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test34</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test34 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+package returnTo.test35;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test35</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test35 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage" from the Global.app.
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test35</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test35 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <!--
+            test35GlobalAction is not handled by the Jpf2.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <netui:anchor action="test35GlobalAction">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test35/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test35</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test35 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+package returnTo.test36;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPrev" return-to="previousPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPrev",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("gotoPrev");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test36</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test36 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <!--
+            test36GlobalAction is not handled by the Jpf1.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <netui:anchor action="test36GlobalAction">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test36</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test36 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage" just after returning from the
+            Global.app.
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test36</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test36 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui:anchor action="action2">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test36/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test36</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test36 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+package returnTo.test37;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private  String _str ="uninitialized";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _str = "1";
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _str = "2";
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for Counter
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test37</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test37 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <netui:label value="${pageFlow.string}"/>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test37/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test37</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test37 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+package returnTo.test39;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static String _str ="uninitialized";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _str = "1";
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for Counter
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test39</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test39 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <!--
+            test39GlobalAction is not handled by the Jpf1.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <netui:anchor action="test39GlobalAction">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select finish:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test39/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test39</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test39 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+package returnTo.test40;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static String _str ="uninitialized";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _str = "1";
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _str = "2";
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for Counter
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test40</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test40 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <!--
+            test40GlobalAction is not handled by the Jpf1.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <netui:anchor action="test40GlobalAction">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test40</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test40 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page three times.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <!--
+            test40GlobalAction_B is not handled by the Jpf1.jpf pageflow instead\
+            it is handled by the Global.app.  This is by design.
+            -->
+            First time select here:
+            <netui:anchor action="test40GlobalAction_B">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select here:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Third time select here:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test40/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test40</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test40 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+package returnTo.test41;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private  String _str ="uninitialized";
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goSub" path="sub1/SubJpf1.jpf"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goSub",
+                path = "sub1/SubJpf1.jpf") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _str = "1";
+      return new Forward("goSub");
+      }
+
+   /**
+    * This will take us to Jsp1.jsp not the SubJsp1.jsp in the nested pageFlow.
+    *
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test41</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test41 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+            Test return-to="currentPage" with a nested pageflow.
+            </font></h2>
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select here:
+            <netui:anchor action="action1">Continue...</netui:anchor>
+            <br/><br/>
+            Second time select here:
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test41</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test41 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/sub1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/sub1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+package returnTo.test41.sub1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    nested = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class SubJpf1 extends PageFlowController
+   {
+   private  String _str ="uninitialized";
+
+   /**
+     * @jpf:action
+     * @jpf:forward name="gotoSubPg1" path="SubJsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSubPg1",
+                path = "SubJsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> SubJpf1.begin");
+      _str = "1";
+      return new Forward("gotoSubPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="action2"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "action2") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> SubJpf1.action1");
+      _str = "2";
+      return new Forward("return");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="action3"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "action3") 
+        })
+   protected Forward finish()
+      {
+      System.out.println(">>> SubJpf1.finish");
+      return new Forward("return");
+      }
+
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/sub1/SubJsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test41/sub1/SubJsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test41</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test41 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+package returnTo.test42;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static String   _str     = "uninitialized";
+   private static int      _cnter   = 0;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _cnter = 0;
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _cnter++;
+      if (_cnter == 1)
+         {
+         return new Forward("gotoPg2");
+         }
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="previousAction"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for Counter
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test42</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test42 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+         </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test42</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test42 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action2">Continue...</netui:anchor>
+         </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test42/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test42</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test42 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+package returnTo.test44;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private  String   _str     = "uninitialized";
+   private  int      _cnter   = 0;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _cnter = 0;
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goSub" path="sub1/SubJpf1.jpf"
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goSub",
+                path = "sub1/SubJpf1.jpf"),
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _cnter++;
+      if (_cnter == 1)
+         {
+         return new Forward("goSub");
+         }
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * This should take us back to action1 above not to the nested pageflow
+    * we just came from.
+    *
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="previousAction"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test44</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test44 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+             Test return-to="currentPage" from within a nested pageflow and just
+             after returning from a nested pageFlow.
+            </font></h2>
+            <br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test44</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test44 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test44</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test44 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,91 @@
+package returnTo.test44.sub1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    nested = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class SubJpf1 extends PageFlowController
+   {
+   private  String   _str     = "uninitialized";
+   private  int      _cnter   = 0;
+
+   /**
+     * @jpf:action
+     * @jpf:forward name="gotoSubPg1" path="SubJsp1.jsp"
+     * @jpf:forward name="gotoSubPg2" path="SubJsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSubPg1",
+                path = "SubJsp1.jsp"),
+            @Jpf.Forward(
+                name = "gotoSubPg2",
+                path = "SubJsp2.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> SubJpf1.begin");
+      _cnter++;
+      if (_cnter == 1)
+         {
+         return new Forward("gotoSubPg1");
+         }
+      return new Forward("gotoSubPg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="back" return-to="previousAction"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "back",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> SubJpf1.action1");
+      return new Forward("back");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="return" return-action="action2"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "action2") 
+        })
+   protected Forward finish()
+      {
+      System.out.println(">>> SubJpf1.finish");
+      return new Forward("return");
+      }
+
+   /**
+    * Getter/Setter for String
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test44</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test44 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test44/sub1/SubJsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test44</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test44 - SubJsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="finish">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+package returnTo.test45;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static String   _str     = "uninitialized";
+   private        int      _cnter   = 0;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _cnter = 0;
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _cnter++;
+      if (_cnter == 1)
+         {
+         return new Forward("gotoPg2");
+         }
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for Counter
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test45</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test45 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test45</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test45 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <!--
+            test45GlobalAction is not handled by the Jpf1.jpf pageflow instead
+            it is handled by the Global.app.  This is by design.
+            -->
+            <netui:anchor action="test45GlobalAction">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test45</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test45 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test45/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test45</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test45 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,107 @@
+package returnTo.test46;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static String   _str     = "uninitialized";
+   private        int      _cnter   = 0;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _cnter = 0;
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      _cnter++;
+      if (_cnter == 1)
+         {
+         return new Forward("gotoPg2");
+         }
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * This should NOT take us back to the Global.app but instead to action1
+    * above.
+    *
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="previousAction"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+   protected Forward action2()
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for Counter
+    */
+   public String getString()
+      { return _str; }
+   public void setString(String inVal)
+      { _str = inVal; }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test46</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test46 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test46</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test46 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+           <!--
+            test46GlobalAction is not handled by the Jpf1.jpf pageflow instead
+            it is handled by the Global.app.  This is by design.
+            -->
+            <netui:anchor action="test46GlobalAction">Continue...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test46</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test46 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test46/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test46</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test46 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,133 @@
+package returnTo.test47;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static String   _str     = "uninitialized";
+   private        int      _cnter   = 0;
+   private        String   _holdStr1;
+   private        String   _holdStr2;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _cnter = 0;
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> Form instance: " + inForm.toString());
+      _cnter++;
+      if (_cnter == 1)
+         {
+         _holdStr1 = inForm.getString1();
+         _holdStr2 = inForm.getString2();
+         return new Forward("gotoPg2");
+         }
+      if (inForm.getString1().equals(_holdStr1) == false
+                  ||
+          inForm.getString2().equals(_holdStr2) == false)
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="goBack" return-to="previousAction"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "goBack",
+                navigateTo = Jpf.NavigateTo.previousAction) 
+        })
+   protected Forward action2(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> Form instance: " + inForm.toString());
+      return new Forward("goBack");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward action3(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action3");
+      System.out.println("\t>>> Form instance: " + inForm.toString());
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for Counter
+    */
+   public String getString()
+      {
+      return _str;
+      }
+   public void setString(String inVal)
+      {
+      _str = inVal;
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test47</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test47 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="action1">
+               String 1: <netui:textBox dataSource="string1" />
+               <br/>
+               String 2: <netui:textBox dataSource="string2" />
+               <br/><br/>
+               <h3><font color="green">
+                  Change the values in the above textboxes.
+               </font></h3>
+               <br/>
+               <netui:button>Continue...</netui:button>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ReturnTo Test47</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test47 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <netui:form action="action2">
+               String 1: <netui:label value="${actionForm.string1}"/>
+               <br/>
+               String 2: <netui:label value="${actionForm.string2}"/>
+               <br/><br/>
+               <netui:button>Continue...</netui:button>
+            </netui:form>
+        </center>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test47</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test47 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="action3">
+               String 1: <netui:textBox dataSource="string1" />
+               <br/>
+               String 2: <netui:textBox dataSource="string2" />
+               <br/><br/>
+               <netui:button>Finish...</netui:button>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test47/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test47</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test47 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+package returnTo.test48;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   private static String   _str     = "uninitialized";
+   private        int      _cnter   = 0;
+   private        String   _holdStr1;
+   private        String   _holdStr2;
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      _cnter = 0;
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> Form instance: " + inForm.toString());
+      _cnter++;
+      if (_cnter == 1)
+         {
+         System.out.println(">>> 1");
+         _holdStr1 = inForm.getString1();
+         _holdStr2 = inForm.getString2();
+         return new Forward("gotoPg2");
+         }
+
+      System.out.println(">>> 2");
+      if (inForm.getString1().equals(_holdStr1) == false
+                  ||
+          inForm.getString2().equals(_holdStr2) == false)
+         {
+         return new Forward("gotoError");
+         }
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward action2(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> Form instance: " + inForm.toString());
+      return new Forward("gotoDone");
+      }
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward action3(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action3");
+      System.out.println("\t>>> Form instance: " + inForm.toString());
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * Getter/Setter for Counter
+    */
+   public String getString()
+      {
+      return _str;
+      }
+   public void setString(String inVal)
+      {
+      _str = inVal;
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test48</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test48 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="action1">
+               String 1: <netui:textBox dataSource="string1" />
+               <br/>
+               String 2: <netui:textBox dataSource="string2" />
+               <br/><br/>
+               <h3><font color="green">
+                  Change the values in the above textboxes.
+               </font></h3>
+               <br/>
+               <netui:button>Continue...</netui:button>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ReturnTo Test48</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test48 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+         <netui:form action="test48GlobalAction">
+            String 1: <netui:label value="${actionForm.string1}"/>
+            <br/>
+            String 2: <netui:label value="${actionForm.string2}"/>
+            <br/><br/>
+            <netui:button>Continue...</netui:button>
+         </netui:form>
+         <br/><br/>
+  <!--       <netui:anchor action="test48GlobalAction">Continue...</netui:anchor> -->
+        </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test48</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test48 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="action3">
+               String 1: <netui:textBox dataSource="string1" />
+               <br/>
+               String 2: <netui:textBox dataSource="string2" />
+               <br/><br/>
+               <netui:button>Finish...</netui:button>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test48/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test48</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test48 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,196 @@
+package returnTo.test63;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources resources="returnTo.test63.messages"
+ * @jpf:forward name="done" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="error" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "returnTo.test63.messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "done",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "error",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='formbean:FormB'/>", 
+        "<pageflow-object id='action:begin.do'/>", 
+        "<pageflow-object id='action:action1.do'/>", 
+        "<pageflow-object id='action:action2.do#returnTo.test63.Jpf1.FormB'/>", 
+        "<pageflow-object id='action:action3.do'/>", 
+        "<pageflow-object id='action:finish.do'/>", 
+        "<pageflow-object id='page:/resources/jsp/done.jsp'/>", 
+        "<pageflow-object id='forward:path#done#/resources/jsp/done.jsp'/>", 
+        "<pageflow-object id='page:/resources/jsp/error.jsp'/>", 
+        "<pageflow-object id='forward:path#error#/resources/jsp/error.jsp'/>", 
+        "<pageflow-object id='page:Jsp1.jsp'/>", 
+        "<pageflow-object id='forward:path#pg1#Jsp1.jsp#@action:begin.do@'/>", 
+        "<pageflow-object id='page:Jsp2.jsp'/>", 
+        "<pageflow-object id='forward:path#pg2#Jsp2.jsp#@action:action1.do@'/>", 
+        "<pageflow-object id='return-to:@forward:returnTo#prev#previousPage#@action:action2.do#returnTo.test63.Jpf1.FormB@@'/>", 
+        "<pageflow-object id='forward:returnTo#prev#previousPage#@action:action2.do#returnTo.test63.Jpf1.FormB@'/>", 
+        "<pageflow-object id='return-to:@forward:returnTo#prev#previousPage#@action:action3.do@@'/>", 
+        "<pageflow-object id='forward:returnTo#prev#previousPage#@action:action3.do@'/>", 
+        "<pageflow-object id='page:StartTest.jsp'/>", 
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:action3.do@'>", 
+        "  <property value='304,240,240,176' name='elbowsX'/>", 
+        "  <property value='83,83,521,521' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:finish.do@'>", 
+        "  <property value='304,240,240,176' name='elbowsX'/>", 
+        "  <property value='83,83,672,672' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:action1.do@'>", 
+        "  <property value='304,240,240,176' name='elbowsX'/>", 
+        "  <property value='83,83,221,221' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:Jsp2.jsp@#@action:action2.do#returnTo.test63.Jpf1.FormB@'>", 
+        "  <property value='304,240,240,176' name='elbowsX'/>", 
+        "  <property value='243,243,361,361' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnTo#failure#currentPage#@action:action2.do#returnTo.test63.Jpf1.FormB@'>", 
+        "  <property value='104,100,100,96' name='elbowsX'/>", 
+        "  <property value='372,372,32,32' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='failure' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='return-to:@forward:returnTo#failure#currentPage#@action:action2.do#returnTo.test63.Jpf1.FormB@@'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='40' name='y'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Jpf1 extends PageFlowController
+   {
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="pg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "pg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("pg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="pg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "pg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1()
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("pg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="prev" return-to="previousPage"
+    * @jpf:validation-error-forward name="failure" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "prev",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        }, validationErrorForward = @org.apache.beehive.netui.pageflow.annotations.Jpf.Forward(name = "failure", navigateTo = org.apache.beehive.netui.pageflow.annotations.Jpf.NavigateTo.currentPage))
+   protected Forward action2(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      return new Forward("prev");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="prev" return-to="previousPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "prev",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+   protected Forward action3()
+      {
+      System.out.println(">>> Jpf1.action3");
+      return new Forward("prev");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.finish");
+      return new Forward("done");
+      }
+
+   /****************************************************************************
+    * FormBean FormB
+    ***************************************************************************/
+   public static class FormB extends FormA
+      {
+      // validate method
+      //------------------------------------------------------------------------
+      public ActionErrors validate(ActionMapping mapping
+                                   ,HttpServletRequest request)
+         {
+         // Force validation errors.
+         //---------------------------------------------------------------------
+         System.out.println(">>> FormB:validate");
+         ActionErrors errors = new ActionErrors();
+         if ((getString1().equals(FormA.STR_VAL1) == true)
+             ||
+             (getString2().equals(FormA.STR_VAL2) == true))
+            {
+            errors.add("changeError", new ActionError("error.mustChange"));
+            }
+         return errors;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ReturnTo Test63</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test63 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+         <netui:anchor action="action1">First visit...</netui:anchor>
+         <br/><br/>
+         <netui:anchor action="action3">Second visit...</netui:anchor>
+         <br/><br/>
+         <netui:anchor action="finish">Third visit...</netui:anchor>
+        </center>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+    <head>
+        <title>ReturnTo Test63</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test63 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="action2">
+               String 1: <netui:textBox dataSource="actionForm.string1" />
+               <br/>
+               String 2: <netui:textBox dataSource="actionForm.string2" />
+               <br/><br/>
+               <font color="green">
+                  We will visit this page several times.
+                  <br/>
+                  1st visit just press continue.
+                  <br/>
+                  2nd visit, change both values then press continue.
+                  <br/>
+                  3nd visit, just press continue.
+                  <br/>
+                  4th visit, change both values then press continue.
+               </font>
+               <br/><br/>
+                  <netui:errors/>
+               <br/><br/>
+               <netui:button>Continue...</netui:button>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/returnTo/test63/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ReturnTo Test63</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test63 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1340 @@
+package richTree;
+
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tags.tree.TreeElement;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/richTree/Controller.jpf'/>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='160' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goBaseTree.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:postback.do'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='320' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goStaticBaseTree.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goEmptyTree.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='220' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goTreeBinding.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='280' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goSelectStyles.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goTreeStyle.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goCr182056.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='340' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goCr180331.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='400' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:initTrees.do'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='240' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goWriteTreeError.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='220' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goBaseClient.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='460' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goTreeHtml.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='280' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goPartialClient.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='400' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goTreeHtmlTwo.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='340' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goContent.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='460' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goClientContent.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='520' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goContentAnchor.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='580' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:contentPostback.do'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='400' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:contentPostbackTwo.do'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='480' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goClientContentAnchor.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='640' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goDisabled.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='520' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goOverride.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='580' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:postbackTwo.do'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='560' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:postbackThree.do'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='640' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goOverrideTwo.do'>", 
+        "  <property value='640' name='x'/>", 
+        "  <property value='640' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goHref.do'>", 
+        "  <property value='860' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goTreeFrame.do'>", 
+        "  <property value='860' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='160' name='x'/>", 
+        "  <property value='240' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+        "  <property value='160,160,160,160' name='elbowsX'/>", 
+        "  <property value='204,204,196,196' name='elbowsY'/>", 
+        "  <property value='South_1' name='fromPort'/>", 
+        "  <property value='North_1' name='toPort'/>", 
+        "  <property value='index' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:baseTree.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='80' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#baseTree.jsp#@action:goBaseTree.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='92,92,72,72' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='return-to:@forward:returnTo#success#currentPage#@action:postback.do@@'>", 
+        "  <property value='160' name='x'/>", 
+        "  <property value='320' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnTo#success#currentPage#@action:postback.do@'>", 
+        "  <property value='96,110,110,124' name='elbowsX'/>", 
+        "  <property value='312,312,312,312' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:baseTreeTwo.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#baseTreeTwo.jsp#@action:goStaticBaseTree.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='152,152,152,152' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:emptyTree.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='220' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#emptyTree.jsp#@action:goEmptyTree.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='212,212,212,212' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:treeBinding.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='280' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#treeBinding.jsp#@action:goTreeBinding.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='272,272,272,272' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:selectStyles.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#selectStyles.jsp#@action:goSelectStyles.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:treeStyle.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#treeStyle.jsp#@action:goTreeStyle.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='152,152,152,152' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:cr182056.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='340' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#cr182056.jsp#@action:goCr182056.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='332,332,332,332' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:cr180331.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='400' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#cr180331.jsp#@action:goCr180331.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='392,392,392,392' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:initTrees.do@'>", 
+        "  <property value='96,110,110,124' name='elbowsX'/>", 
+        "  <property value='232,232,232,232' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:writeTreeError.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='220' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#writeTreeError.jsp#@action:goWriteTreeError.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='212,212,212,212' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:baseClient.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='460' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#baseClient.jsp#@action:goBaseClient.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='452,452,452,452' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:treeHtml.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='280' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#treeHtml.jsp#@action:goTreeHtml.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='272,272,272,272' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:partialClient.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='400' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#partialClient.jsp#@action:goPartialClient.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='392,392,392,392' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:treeHtmlTwo.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='340' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#treeHtmlTwo.jsp#@action:goTreeHtmlTwo.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='332,332,332,332' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:content.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='460' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#content.jsp#@action:goContent.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='452,452,452,452' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:clientContent.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='520' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#clientContent.jsp#@action:goClientContent.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='512,512,512,512' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:contentAnchor.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='580' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#contentAnchor.jsp#@action:goContentAnchor.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='572,572,572,572' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='return-to:@forward:returnTo#success#currentPage#@action:contentPostback.do@@'>", 
+        "  <property value='160' name='x'/>", 
+        "  <property value='400' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnTo#success#currentPage#@action:contentPostback.do@'>", 
+        "  <property value='96,110,110,124' name='elbowsX'/>", 
+        "  <property value='392,392,392,392' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='return-to:@forward:returnTo#success#currentPage#@action:contentPostbackTwo.do@@'>", 
+        "  <property value='160' name='x'/>", 
+        "  <property value='480' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnTo#success#currentPage#@action:contentPostbackTwo.do@'>", 
+        "  <property value='96,110,110,124' name='elbowsX'/>", 
+        "  <property value='472,472,472,472' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:clientContentAnchor.jsp'>", 
+        "  <property value='500' name='x'/>", 
+        "  <property value='640' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#clientContentAnchor.jsp#@action:goClientContentAnchor.do@'>", 
+        "  <property value='396,430,430,464' name='elbowsX'/>", 
+        "  <property value='632,632,632,632' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:disabled.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='520' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#disabled.jsp#@action:goDisabled.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='512,512,512,512' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:override.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='580' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#override.jsp#@action:goOverride.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='572,572,572,572' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='return-to:@forward:returnTo#success#currentPage#@action:postbackTwo.do@@'>", 
+        "  <property value='160' name='x'/>", 
+        "  <property value='560' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnTo#success#currentPage#@action:postbackTwo.do@'>", 
+        "  <property value='96,110,110,124' name='elbowsX'/>", 
+        "  <property value='552,552,552,552' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='return-to:@forward:returnTo#success#currentPage#@action:postbackThree.do@@'>", 
+        "  <property value='160' name='x'/>", 
+        "  <property value='640' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:returnTo#success#currentPage#@action:postbackThree.do@'>", 
+        "  <property value='96,110,110,124' name='elbowsX'/>", 
+        "  <property value='632,632,632,632' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:overrideTwo.jsp'>", 
+        "  <property value='780' name='x'/>", 
+        "  <property value='640' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#overrideTwo.jsp#@action:goOverrideTwo.do@'>", 
+        "  <property value='676,710,710,744' name='elbowsX'/>", 
+        "  <property value='632,632,632,632' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:href.jsp'>", 
+        "  <property value='960' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#href.jsp#@action:goHref.do@'>", 
+        "  <property value='896,910,910,924' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:treeFrame.jsp'>", 
+        "  <property value='960' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#treeFrame.jsp#@action:goTreeFrame.do@'>", 
+        "  <property value='896,910,910,924' name='elbowsX'/>", 
+        "  <property value='152,152,152,152' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:emptyFrame.jsp'>", 
+        "  <property value='960' name='x'/>", 
+        "  <property value='220' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:nullAction.jsp'/>", 
+        "<pageflow-object id='action-call:@page:overrideTwo.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='632,632,163,163' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:clientContent.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='501,501,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goOverrideTwo.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='243,243,632,632' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goTreeBinding.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='243,243,272,272' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goCr180331.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='243,243,392,392' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:clientContentAnchor.jsp@#@action:contentPostbackTwo.do@'>", 
+        "  <property value='464,280,280,96' name='elbowsX'/>", 
+        "  <property value='621,621,483,483' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:cr182056.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='332,332,163,163' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goDisabled.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='243,243,512,512' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:treeHtml.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='261,261,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goSelectStyles.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='221,221,92,92' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goContent.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='221,221,452,452' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:writeTreeError.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='201,201,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goClientContent.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='243,243,512,512' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:cr180331.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='392,392,163,163' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goOverride.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='243,243,572,572' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goBaseClient.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='243,243,452,452' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:selectStyles.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='103,103,152,152' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goStaticBaseTree.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='221,221,152,152' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:contentAnchor.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='561,561,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:baseClient.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='441,441,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goTreeStyle.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='221,221,152,152' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:disabled.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='501,501,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:override.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='572,572,163,163' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goCr182056.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='243,243,332,332' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goContentAnchor.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='243,243,572,572' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goPartialClient.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='221,221,392,392' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goEmptyTree.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='243,243,212,212' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:clientContentAnchor.jsp@#@action:contentPostback.do@'>", 
+        "  <property value='464,280,280,96' name='elbowsX'/>", 
+        "  <property value='621,621,403,403' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:treeStyle.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='141,141,141,141' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goBaseTree.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='232,232,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goHref.do@'>", 
+        "  <property value='196,510,510,824' name='elbowsX'/>", 
+        "  <property value='221,221,92,92' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:initTrees.do@'>", 
+        "  <property value='124,110,110,96' name='elbowsX'/>", 
+        "  <property value='232,232,232,232' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:clientContentAnchor.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='621,621,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goClientContentAnchor.do@'>", 
+        "  <property value='196,260,260,324' name='elbowsX'/>", 
+        "  <property value='243,243,632,632' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goTreeHtmlTwo.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='243,243,332,332' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goWriteTreeError.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='221,221,212,212' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goTreeHtml.do@'>", 
+        "  <property value='196,400,400,604' name='elbowsX'/>", 
+        "  <property value='243,243,272,272' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:contentAnchor.jsp@#@action:contentPostbackTwo.do@'>", 
+        "  <property value='464,280,280,96' name='elbowsX'/>", 
+        "  <property value='561,561,483,483' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:baseTree.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='72,72,141,141' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:treeBinding.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='261,261,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:content.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='441,441,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:treeHtmlTwo.jsp@#@action:begin.do@'>", 
+        "  <property value='744,470,470,196' name='elbowsX'/>", 
+        "  <property value='321,321,163,163' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:contentAnchor.jsp@#@action:contentPostback.do@'>", 
+        "  <property value='464,280,280,96' name='elbowsX'/>", 
+        "  <property value='561,561,403,403' name='elbowsY'/>", 
+        "  <property value='West_0' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:baseTreeTwo.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='152,152,141,141' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:emptyTree.jsp@#@action:begin.do@'>", 
+        "  <property value='464,330,330,196' name='elbowsX'/>", 
+        "  <property value='212,212,163,163' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:nullAction.jsp@#@action:begin.do@'>", 
+        "  <property value='52,88,88,124' name='elbowsX'/>", 
+        "  <property value='16,16,152,152' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    // make sure the initialize the trees.
+    private TreeElement _tree1;
+    private TreeElement _tree2;
+    private TreeElement _tree3;
+    private TreeElement _tree4;
+    private TreeElement _tree5;
+    private TreeElement _tree6;
+    private TreeElement _tree7;
+    private TreeElement _tree8;
+    private TreeElement _tree9;
+    private TreeElement _tree10;
+    private TreeElement _tree11;
+    private TreeElement _tree12;
+    private TreeElement _tree13;
+    private TreeElement _tree14;
+    private TreeElement _tree15;
+    private TreeElement _tree16;
+    private TreeElement _tree17;
+    private TreeElement _tree18;
+    private TreeElement _tree19;
+
+
+    private String _expand = "&nbsp;";
+    private String _node = "&nbsp;";
+    private String _status = "&nbsp;";
+    private String _action = "&nbsp;";
+
+    public TreeElement getTree1() {
+        return _tree1;
+    }
+
+    public void setTree1(TreeElement tn) {
+        _tree1 = tn;
+    }
+
+    public TreeElement getTree2() {
+        return _tree2;
+    }
+
+    public void setTree2(TreeElement tn) {
+        _tree2 = tn;
+    }
+
+    public TreeElement getTree3() {
+        return _tree3;
+    }
+
+    public void setTree3(TreeElement tn) {
+        _tree3 = tn;
+    }
+
+    public TreeElement getTree4() {
+        return _tree4;
+    }
+
+    public void setTree4(TreeElement tn) {
+        _tree4 = tn;
+    }
+
+    public TreeElement getTree5() {
+        return _tree5;
+    }
+
+    public void setTree5(TreeElement tn) {
+        _tree5 = tn;
+    }
+
+    public TreeElement getTree6() {
+        return _tree6;
+    }
+
+    public void setTree6(TreeElement tn) {
+        _tree6 = tn;
+    }
+
+    // Tree7 does not have a setter which should cause an error
+    public TreeElement getTree7() {
+        return _tree7;
+    }
+
+    public TreeElement getTree8() {
+        return _tree8;
+    }
+
+    public void setTree8(TreeElement tn) {
+        _tree8 = tn;
+    }
+
+    public TreeElement getTree9() {
+        return _tree9;
+    }
+
+    public void setTree9(TreeElement tn) {
+        _tree9 = tn;
+    }
+
+    public TreeElement getTree10() {
+        return _tree10;
+    }
+
+    public void setTree10(TreeElement tn) {
+        _tree10 = tn;
+    }
+
+    public TreeElement getTree11() {
+        return _tree11;
+    }
+
+    public void setTree11(TreeElement tn) {
+        _tree11 = tn;
+    }
+
+    public TreeElement getTree12() {
+        return _tree12;
+    }
+
+    public void setTree12(TreeElement tn) {
+        _tree12 = tn;
+    }
+
+    public TreeElement getTree13() {
+        return _tree13;
+    }
+
+    public void setTree13(TreeElement tn) {
+        _tree13 = tn;
+    }
+
+    public TreeElement getTree14() {
+        return _tree14;
+    }
+
+    public void setTree14(TreeElement tn) {
+        _tree14 = tn;
+    }
+
+    public TreeElement getTree15() {
+        return _tree15;
+    }
+
+    public void setTree15(TreeElement tn) {
+        _tree15 = tn;
+    }
+    
+    public TreeElement getTree16() {
+        return _tree16;
+    }
+
+    public void setTree16(TreeElement tn) {
+        _tree16 = tn;
+    }
+    
+    public TreeElement getTree17() {
+        return _tree17;
+    }
+
+    public void setTree17(TreeElement tn) {
+        _tree17 = tn;
+    }
+    
+    public TreeElement getTree18() {
+        return _tree18;
+    }
+
+    public void setTree18(TreeElement tn) {
+        _tree18 = tn;
+    }
+    
+    public TreeElement getTree19() {
+        return _tree19;
+    }
+
+    public void setTree19(TreeElement tn) {
+        _tree19 = tn;
+    }
+    
+    
+    //************************************************************************
+    
+    protected void onCreate()
+    {
+        buildTrees();
+    }
+
+    public String getExpand() {
+        return _expand;
+    }
+
+    public String getNode() {
+        return _node;
+    }
+
+    public String getStatus() {
+        return _status;
+    }
+    
+    public String getAction() {
+        return _action;
+    }
+
+    public String getLeafPrefix() {
+        return "Leaf:";
+    }
+
+    public String getContainerPrefix() {
+        return "Container:";
+    }
+
+    
+    @Jpf.Action(
+                forwards={
+                    @Jpf.Forward(name="index", path="index.jsp")
+                }
+                )
+        protected Forward begin()
+    {
+        clearExpand();
+        return new Forward("index");
+    }
+
+    
+
+    
+    @Jpf.Action(forwards = {
+        @Jpf.Forward(name = "success", path = "baseTree.jsp")
+    })
+    protected Forward goBaseTree()        {
+        Forward forward = new Forward("success");
+        clearExpand();
+        return forward;
+    }
+    
+              
+              
+    /**
+     * This action is the default postback for a tree.  It will set the
+     * Pageflow variables that indicate if the most recent event was an expand or select.
+     */
+    @Jpf.Action(forwards = { @org.apache.beehive.netui.pageflow.annotations.Jpf.Forward(name = "success", navigateTo = org.apache.beehive.netui.pageflow.annotations.Jpf.NavigateTo.currentPage)})
+    protected Forward postback()
+    {
+        Forward forward = new Forward("success");
+
+        clearExpand();
+        String name = null;
+        String expand = null;
+
+        // Handle a tree expand/contract event
+        name = getRequest().getParameter(TreeElement.SELECTED_NODE);
+        expand = getRequest().getParameter(TreeElement.EXPAND_NODE);
+
+        if (expand != null)
+            _expand = expand;
+        if (name != null)
+            _node = name;
+        _action = "postback";
+        return forward;
+    }
+
+    private void clearExpand()
+    {
+        _expand = "&nbsp;";
+        _node = "&nbsp;";
+        _status = "&nbsp;";
+        _action = "&nbsp;";
+    }
+
+    private void buildTrees()
+    {
+        String icon = "folder_16_pad.gif";
+        
+        // Build TreeOne
+        {
+            TreeElement tree2;
+            _tree1 = new TreeElement("Tree 0",true);
+            _tree1.setAction("postback");
+            TreeElement t1 = new TreeElement("Node: 0.0",true);
+            _tree1.addChild(t1);
+            TreeElement t2 = new TreeElement("Node: 0.0.0",true);
+            t1.addChild(t2);
+
+            tree2 = new TreeElement("Node 0.1",true);
+            t1 = new TreeElement("Node: 0.1.0",true);
+            tree2.addChild(t1);
+            t2 = new TreeElement("Node: 0.1.0.0",true);
+            t1.addChild(t2);
+            t2 = new TreeElement("Node: 0.1.0.1",true);
+            t1.addChild(t2);
+            _tree1.addChild(tree2);
+            t1 = new TreeElement("Node: 0.2",true);
+            _tree1.addChild(t1);
+        }
+        
+        // build treeFive
+        {
+            _tree5 = new TreeElement("Tree 0",true);
+            _tree5.setAction("postback");
+            TreeElement tree1 = new TreeElement("bug1", true);
+            TreeElement tree2 = new TreeElement("bug2", true);
+            TreeElement tree3 = new TreeElement("bug3", true);
+            TreeElement tree4 = new TreeElement("bug4", true);
+            tree3.addChild(tree4);
+            tree2.addChild(tree3);
+            tree1.addChild(tree2);
+            _tree5.addChild(tree1);
+        }
+        
+    }
+
+    
+    @Jpf.Action(forwards = {
+        @Jpf.Forward(name = "success", path = "baseTreeTwo.jsp")
+    })
+    protected Forward goStaticBaseTree()        {
+        Forward forward = new Forward("success");
+        clearExpand();
+        return forward;
+    }
+             
+              
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "emptyTree.jsp")
+})
+    protected Forward goEmptyTree()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+             
+              
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "treeBinding.jsp")
+})
+    protected Forward goTreeBinding()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "selectStyles.jsp")
+})
+    protected Forward goSelectStyles()        {
+        Forward forward = new Forward("success");
+        clearExpand();
+        return forward;
+    }
+             
+              
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "treeStyle.jsp")
+})
+    protected Forward goTreeStyle()        {
+        Forward forward = new Forward("success");
+        clearExpand();
+        return forward;
+    }
+             
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "cr182056.jsp")
+})
+    protected Forward goCr182056()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+             
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "cr180331.jsp")
+})
+    protected Forward goCr180331()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "index.jsp")
+        })
+    protected Forward initTrees()        {
+        Forward forward = new Forward("success");
+        _tree1 = null;
+        _tree2 = null;
+        _tree3 = null;
+        _tree4 = null;
+        _tree5 = null;
+        _tree6 = null;
+        _tree7 = null;
+        _tree8 = null;
+        _tree9 = null;
+        _tree10 = null;
+        _tree11 = null;
+        _tree12 = null;
+        _tree13 = null;
+        _tree14 = null;
+        _tree15 = null;
+        _tree16 = null;
+        _tree17 = null;
+        _tree18 = null;
+        _tree19 = null;
+
+        buildTrees();
+        return forward;
+    }
+
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "writeTreeError.jsp")
+})
+    protected Forward goWriteTreeError()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+             
+              
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "baseClient.jsp")
+})
+    protected Forward goBaseClient()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+             
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "treeHtml.jsp")
+})
+    protected Forward goTreeHtml()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+                
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "partialClient.jsp")
+})
+    protected Forward goPartialClient()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "treeHtmlTwo.jsp")
+})
+    protected Forward goTreeHtmlTwo()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+                
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "content.jsp")
+})
+    protected Forward goContent()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "clientContent.jsp")
+})
+    protected Forward goClientContent()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+                
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "contentAnchor.jsp")
+})
+    protected Forward goContentAnchor()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage)
+})
+    protected Forward contentPostback()        {
+        Forward forward = new Forward("success");
+        clearExpand();
+        _status = "content: ";
+        return forward;
+    }
+                
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage)
+})
+    protected Forward contentPostbackTwo()        {
+        Forward forward = new Forward("success");
+        clearExpand();
+        _status = "contentTwo: ";
+        return forward;
+    }
+                
+    
+    @Jpf.Action(forwards = {
+    @Jpf.Forward(name = "success", path = "clientContentAnchor.jsp")
+})
+    protected Forward goClientContentAnchor()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "disabled.jsp")
+})
+    protected Forward goDisabled()        {
+        Forward success = new Forward("success");
+        clearExpand();
+        return success;
+    }
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "override.jsp")
+})
+    protected Forward goOverride()        {
+        Forward success = new Forward("success");
+        clearExpand();        
+        return success;
+    }
+                
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage)
+})
+    protected Forward postbackTwo()        {
+        Forward forward = new Forward("success");
+        String name = null;
+        String expand = null;
+
+        // Handle a tree expand/contract event
+        name = getRequest().getParameter(TreeElement.SELECTED_NODE);
+        expand = getRequest().getParameter(TreeElement.EXPAND_NODE);
+
+        if (expand != null)
+            _expand = expand;
+        if (name != null)
+            _node = name;
+        _action="postbackTwo";
+        return forward;
+    }
+                
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", navigateTo = Jpf.NavigateTo.currentPage)
+})
+    protected Forward postbackThree()        {
+        Forward forward = new Forward("success");
+          String name = null;
+        String expand = null;
+
+        // Handle a tree expand/contract event
+        name = getRequest().getParameter(TreeElement.SELECTED_NODE);
+        expand = getRequest().getParameter(TreeElement.EXPAND_NODE);
+
+        if (expand != null)
+            _expand = expand;
+        if (name != null)
+            _node = name;
+      _action="postbackThree";
+      return forward;
+    }
+                
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "overrideTwo.jsp")
+})
+    protected Forward goOverrideTwo()        {
+        Forward forward = new Forward("success");
+        clearExpand();                
+        return forward;
+    }
+                
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "href.jsp")
+})
+    protected Forward goHref()        {
+        Forward success = new Forward("success");
+        clearExpand();                
+        return success;
+    }
+    
+    @Jpf.Action(forwards = { 
+        @Jpf.Forward(name = "success", path = "treeFrame.jsp")
+})
+    protected Forward goTreeFrame()        {
+        Forward forward = new Forward("success");
+        clearExpand();                
+        return forward;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/alien.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseClient.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseClient.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html runAtClient="true">
+    <head>
+        <title>baseClient.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:scriptHeader treeSupport='true'/>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>baseClient.jsp [goBaseClient.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree8}</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree8" selectionAction="postback" tagId="tree" runAtClient="true">
+            <netui:treeItem expanded="true" action="postback">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true" action="postback">
+                    <netui:treeLabel>0.0</netui:treeLabel>
+                    <netui:treeItem expanded="true" action="postback">
+                        <netui:treeLabel>0.0.0</netui:treeLabel>
+                        <netui:treeItem action="postback">0.0.0.0</netui:treeItem>
+                        <netui:treeItem action="postback">0.0.0.1</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" action="postback">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem action="postback">0.1.0</netui:treeItem>
+                    <netui:treeItem action="postback">0.1.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" action="postback">0.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseTree.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseTree.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree1" selectionAction="postback" tagId="tree"/>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseTreeTwo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/baseTreeTwo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>baseTreeTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>baseTreeTwo.jsp [goStaticBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree2}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set. The tree is defined in the JSP page.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree2" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true" action="postback">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true" action="postback">
+                    <netui:treeLabel>0.0</netui:treeLabel>
+                    <netui:treeItem action="postback">
+                        <netui:treeLabel>0.0.0</netui:treeLabel>
+                        <netui:treeItem action="postback">0.0.0.0</netui:treeItem>
+                        <netui:treeItem action="postback">0.0.0.1</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" action="postback">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem action="postback">0.1.0</netui:treeItem>
+                    <netui:treeItem action="postback">0.1.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" action="postback">0.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/clientContent.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/clientContent.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,94 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html runAtClient="true">
+    <head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:scriptHeader treeSupport='true'/>
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 170pt;
+        }
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>clientContent.jsp [goClientContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree13}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        This samples demonstrates the use of both the &lt;treeItem> and &lt;treeContent>
+        tags.  The tree is also expanded and collapsed on the Client.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree13" selectionAction="postback" tagId="tree" runAtClient="true">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0</b></span></netui:treeLabel>
+                <netui:treeContent><span class='alien'><img src="omg.gif" border="0"></span></netui:treeContent>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0.0</b></span></netui:treeLabel>
+                    <netui:treeContent><span class='alien'><img src="alien.gif" border="0"></span></netui:treeContent>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0.0.0</b></span></netui:treeLabel>
+                        <netui:treeContent><span class='alien'><img src="cool.gif" border="0"></span></netui:treeContent>
+                        <netui:treeItem>
+                            <netui:treeLabel><span class="leaf"><netui:content value="${pageFlow.leafPrefix}"/>&nbsp;<b>0.0.0.0</b></span></netui:treeLabel>
+                            <netui:treeContent><span class='alien'><img src="ninja.gif" border="0"></span></netui:treeContent>
+                        </netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel><span class="leaf"><netui:content value="${pageFlow.leafPrefix}"/>&nbsp;<b>0.0.0.1</b></span></netui:treeLabel>
+                            <netui:treeContent><span class='alien'><img src="ninja.gif" border="0"></span></netui:treeContent>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0.1</b></span></netui:treeLabel>
+                    <netui:treeContent><span class='alien'><img src="alien.gif" border="0"></span></netui:treeContent>
+                    <netui:treeItem>
+                        <netui:treeLabel><span class="leaf"><netui:content value="${pageFlow.leafPrefix}"/>&nbsp;<b>0.1.0</b></span></netui:treeLabel>
+                        <netui:treeContent><span class='alien'><img src="cool.gif" border="0"></span></netui:treeContent>
+                    </netui:treeItem>
+                    <netui:treeItem>
+                        <netui:treeLabel><span class="leaf"><netui:content value="${pageFlow.leafPrefix}"/>&nbsp;<b>0.1.1</b></span></netui:treeLabel>
+                        <netui:treeContent><span class='alien'><img src="cool.gif" border="0"></span></netui:treeContent>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0.2</b></span></netui:treeLabel>
+                    <netui:treeContent><span class='alien'><img src="alien.gif" border="0"></span></netui:treeContent>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/clientContentAnchor.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/clientContentAnchor.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html runAtClient="true">
+    <head>
+        <title>clientContentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:scriptHeader treeSupport='true'/>
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>clientContentAnchor.jsp [goClientContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree15}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td><netui:content value="${pageFlow.status}"/><netui:content value="${param.status}"/></td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.  In addition, because this is expanded
+        on the client, the state of the tree must be written on the anchors.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree15" selectionAction="postback" tagId="tree" runAtClient="true">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeContent></netui:treeContent>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0</netui:treeLabel>
+                    <netui:treeContent>
+                        <netui:anchor action="contentPostback" styleClass="anchor">[Content PostBack]
+                            <netui:parameter name="status" value="0.0"/>
+                        </netui:anchor>
+                    </netui:treeContent>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0</netui:treeLabel>
+                        <netui:treeContent></netui:treeContent>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0</netui:treeLabel>
+                            <netui:treeContent>
+                                <netui:anchor action="contentPostbackTwo" styleClass="anchor">[Content PostBack Two]
+                                    <netui:parameter name="status" value="0.0.0.0"/>
+                                </netui:anchor>
+                            </netui:treeContent>
+                        </netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.1</netui:treeLabel>
+                            <netui:treeContent></netui:treeContent>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeContent></netui:treeContent>
+                    <netui:treeItem>
+                        <netui:treeLabel>0.1.0</netui:treeLabel>
+                        <netui:treeContent></netui:treeContent>
+                    </netui:treeItem>
+                    <netui:treeItem>
+                        <netui:treeLabel>0.1.1</netui:treeLabel>
+                        <netui:treeContent></netui:treeContent>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel>0.2</netui:treeLabel>
+                    <netui:treeContent></netui:treeContent>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/content.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/content.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,84 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>content.jsp [goContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree12}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of both the &lt;treeLabel> and the
+        &lt;treeContent> tags.  The tree content in this case is the absolutely
+        positioned images.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree12" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeContent><span class='alien'><img src="omg.gif" border="0"></span></netui:treeContent>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0</netui:treeLabel>
+                    <netui:treeContent><span class='alien'><img src="alien.gif" border="0"></span></netui:treeContent>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0</netui:treeLabel>
+                        <netui:treeContent><span class='alien'><img src="cool.gif" border="0"></span></netui:treeContent>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0</netui:treeLabel>
+                            <netui:treeContent><span class='alien'><img src="ninja.gif" border="0"></span></netui:treeContent>
+                        </netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.1</netui:treeLabel>
+                            <netui:treeContent><span class='alien'><img src="ninja.gif" border="0"></span></netui:treeContent>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeContent><span class='alien'><img src="alien.gif" border="0"></span></netui:treeContent>
+                    <netui:treeItem>
+                        <netui:treeLabel>0.1.0</netui:treeLabel>
+                        <netui:treeContent><span class='alien'><img src="cool.gif" border="0"></span></netui:treeContent>
+                    </netui:treeItem>
+                    <netui:treeItem>
+                        <netui:treeLabel>0.1.1</netui:treeLabel>
+                        <netui:treeContent><span class='alien'><img src="cool.gif" border="0"></span></netui:treeContent>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel>0.2</netui:treeLabel>
+                    <netui:treeContent><span class='alien'><img src="alien.gif" border="0"></span></netui:treeContent>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/contentAnchor.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/contentAnchor.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,182 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>contentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>contentAnchor.jsp [goContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree14}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td><netui:content value="${pageFlow.status}"/><netui:content value="${param.status}"/></td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree14" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeContent></netui:treeContent>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0</netui:treeLabel>
+                    <netui:treeContent>
+                        <netui:anchor action="contentPostback" styleClass="anchor">[Content PostBack]
+                            <netui:parameter name="status" value="0.0"/>
+                        </netui:anchor>
+                    </netui:treeContent>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0</netui:treeLabel>
+                        <netui:treeContent></netui:treeContent>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0</netui:treeLabel>
+                            <netui:treeContent>
+                                <netui:anchor action="contentPostbackTwo" styleClass="anchor">[Content PostBack Two]
+                                    <netui:parameter name="status" value="0.0.0.0"/>
+                                </netui:anchor>
+                            </netui:treeContent>
+                        </netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.1</netui:treeLabel>
+                            <netui:treeContent></netui:treeContent>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeContent></netui:treeContent>
+                    <netui:treeItem>
+                        <netui:treeLabel>0.1.0</netui:treeLabel>
+                        <netui:treeContent></netui:treeContent>
+                    </netui:treeItem>
+                    <netui:treeItem>
+                        <netui:treeLabel>0.1.1</netui:treeLabel>
+                        <netui:treeContent></netui:treeContent>
+                            &lt;netui:html&gt; &lt;head&gt;
+                            &lt;title&gt;contentAnchor.jsp&lt;/title&gt;
+                            &lt;link href="style.css" rel="stylesheet"
+                            type="text/css"&gt; &lt;style type="text/css"&gt;
+                            .anchor { position: absolute; left: 150pt; }
+                            &lt;/style&gt; &lt;netui:base/&gt; &lt;/head&gt;
+                            &lt;netui:body&gt; &lt;h4
+                            class="title"&gt;&lt;netui:anchor action="begin"
+                            styleClass="homeAnchor"&gt;Home&lt;/netui:anchor&gt;contentAnchor.jsp
+                            [goContentAnchor.do] &lt;/h4&gt; &lt;!-- Attribute
+                            Information --&gt; &lt;div
+                            style='float:left;width:300px'&gt; &lt;table
+                            cellpadding="2" cellspacing="0" border="1"
+                            width="300px"&gt;
+                            &lt;tr&gt;&lt;th&gt;Creation&lt;/th&gt;&lt;td&gt;Static&lt;/td&gt;&lt;/tr&gt;
+                            &lt;tr&gt;&lt;th&gt;tree&lt;/th&gt;&lt;td&gt;{pageFlow.tree14}&lt;/td&gt;&lt;/tr&gt;
+                            &lt;tr&gt;&lt;th&gt;action&lt;/th&gt;&lt;td&gt;postback&lt;/td&gt;&lt;/tr&gt;
+                            &lt;tr&gt;&lt;th&gt;runAtClient&lt;/th&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
+                            &lt;/table&gt; &lt;/div&gt; &lt;!-- Postback
+                            information --&gt; &lt;div
+                            style='float:right;width:250px;border:solid 1pt
+                            gray;margin:2 4;'&gt; &lt;p
+                            style="font-weight:bold;text-align:center;margin:
+                            0;padding:0;"&gt;Tree Postback Information&lt;/p&gt;
+                            &lt;table cellpadding='0' cellspacing='2'
+                            width="100%"&gt; &lt;tr&gt;&lt;th
+                            style="text-align:right"
+                            width="100pt"&gt;Expand:&lt;/th&gt;&lt;td&gt;&lt;netui:content
+                            value="${pageFlow.expand}"/&gt;&lt;/td&gt;&lt;/tr&gt;
+                            &lt;tr&gt;&lt;th style="text-align:right"
+                            width="100pt"&gt;Selection:&lt;/th&gt;&lt;td&gt;&lt;netui:content
+                            value="${pageFlow.node}"/&gt;&lt;/td&gt;&lt;/tr&gt;
+                            &lt;tr&gt;&lt;th style="text-align:right"
+                            width="100pt"&gt;Status:&lt;/th&gt;&lt;td&gt;&lt;netui:content
+                            value="${pageFlow.status}"/&gt;&lt;netui:content
+                            value="${param.status}"/&gt;&lt;/td&gt;&lt;/tr&gt;
+                            &lt;/table&gt; &lt;/div&gt; This sample demonstrates
+                            the use of anchors in the &amp;lt;treeContent&gt;
+                            tag.  The anchors will navigate cause a postback to
+                            the same page. When the anchors are pressed, the
+                            Status will be set in the Tree Postback Information
+                            box. &lt;hr style="clear:left"&gt; &lt;div
+                            class="content"&gt; &lt;netui:richTree
+                            dataSource="pageFlow.tree14"
+                            selectionAction="postback" tagId="tree"&gt;
+                            &lt;netui:treeItem expanded="true"&gt;
+                            &lt;netui:treeLabel&gt;0&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt;&lt;/netui:treeContent&gt;
+                            &lt;netui:treeItem expanded="true"&gt;
+                            &lt;netui:treeLabel&gt;0.0&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt; &lt;netui:anchor
+                            action="contentPostback"
+                            styleClass="anchor"&gt;[Content PostBack]
+                            &lt;netui:parameter name="status" value="0.0"/&gt;
+                            &lt;/netui:anchor&gt; &lt;/netui:treeContent&gt;
+                            &lt;netui:treeItem expanded="true"&gt;
+                            &lt;netui:treeLabel&gt;0.0.0&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt;&lt;/netui:treeContent&gt;
+                            &lt;netui:treeItem&gt;
+                            &lt;netui:treeLabel&gt;0.0.0.0&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt; &lt;netui:anchor
+                            action="contentPostbackTwo"
+                            styleClass="anchor"&gt;[Content PostBack Two]
+                            &lt;netui:parameter name="status"
+                            value="0.0.0.0"/&gt; &lt;/netui:anchor&gt;
+                            &lt;/netui:treeContent&gt; &lt;/netui:treeItem&gt;
+                            &lt;netui:treeItem&gt;
+                            &lt;netui:treeLabel&gt;0.0.0.1&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt;&lt;/netui:treeContent&gt;
+                            &lt;/netui:treeItem&gt; &lt;/netui:treeItem&gt;
+                            &lt;/netui:treeItem&gt; &lt;netui:treeItem&gt;
+                            &lt;netui:treeLabel&gt;0.1&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt;&lt;/netui:treeContent&gt;
+                            &lt;netui:treeItem&gt;
+                            &lt;netui:treeLabel&gt;0.1.0&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt;&lt;/netui:treeContent&gt;
+                            &lt;/netui:treeItem&gt; &lt;netui:treeItem&gt;
+                            &lt;netui:treeLabel&gt;0.1.1&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt;&lt;/netui:treeContent&gt;
+                            &lt;/netui:treeItem&gt; &lt;/netui:treeItem&gt;
+                            &lt;netui:treeItem&gt;
+                            &lt;netui:treeLabel&gt;0.2&lt;/netui:treeLabel&gt;
+                            &lt;netui:treeContent&gt;&lt;/netui:treeContent&gt;
+                            &lt;/netui:treeItem&gt; &lt;/netui:treeItem&gt;
+                            &lt;/netui:richTree&gt; &lt;/div&gt;
+                            &lt;/netui:body&gt; &lt;/netui:html&gt; 
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel>0.2</netui:treeLabel>
+                    <netui:treeContent></netui:treeContent>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/cool.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/cr180331.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/cr180331.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>cr180331.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>cr180331.jsp [goCr180331.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree5}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        This was a layout issue in the old tree.  The error here was that the colspan was not calculated correctly resulting
+        in an error in the layout when the dynamic tree was built.  This is not an issue in the new the RichTree because
+        it doesn't use tables for layout.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree5" selectionAction="postback" tagId="tree"/>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/cr182056.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/cr182056.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>cr182056.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>cr182056.jsp [goCr182056.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree6}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        This layout issue occurs when there is a very large label inside the tree.  In the table based layout the
+        problem was that cells were proportionally spaced below the very large label causing them to space out instead
+        of being placed to the right.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree6" selectionAction="postback" tagId="tree">
+                <netui:treeItem action="postback" expanded="true">
+                    <netui:treeLabel>0</netui:treeLabel>
+                    <netui:treeItem action="postback" expanded="true">
+                        <netui:treeLabel>0.0 Very Long Very Long Very Long Very Long 0.0</netui:treeLabel>
+                        <netui:treeItem action="postback" expanded="true">0.0.0</netui:treeItem>
+                        <netui:treeItem action="postback" expanded="true">0.0.1</netui:treeItem>
+                        <netui:treeItem action="postback" expanded="true">0.0.2</netui:treeItem>
+                    </netui:treeItem>
+                    <netui:treeItem action="postback" expanded="true">
+                        <netui:treeLabel>0.1</netui:treeLabel>
+                        <netui:treeItem action="postback" expanded="true">0.1.0</netui:treeItem>
+                        <netui:treeItem action="postback" expanded="true">
+                            <netui:treeLabel>0.1.1  Very Long Very Long Very Long Very Long 0.1.1</netui:treeLabel>
+                            <netui:treeItem action="postback" expanded="true">
+                                <netui:treeLabel>0.1.1.0</netui:treeLabel>
+                            </netui:treeItem>
+                            <netui:treeItem action="postback" expanded="true">0.1.1.1</netui:treeItem>
+                            <netui:treeItem action="postback" expanded="true">0.1.1.2</netui:treeItem>
+                            <netui:treeItem action="postback" expanded="true">0.1.1.3</netui:treeItem>
+                        </netui:treeItem>
+                        <netui:treeItem action="postback" expanded="true">0.1.2</netui:treeItem>
+                    </netui:treeItem>
+                    <netui:treeItem action="postback" expanded="false">
+                        <netui:treeLabel>0.2</netui:treeLabel>
+                        <netui:treeItem action="postback" expanded="true">0.2.0</netui:treeItem>
+                        <netui:treeItem action="postback" expanded="true">0.2.1</netui:treeItem>
+                        <netui:treeItem action="postback" expanded="true">0.2.2</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/disabled.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/disabled.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,65 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body style="border: 20pt 5%">
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree16" selectionAction="postback" tagId="tree" selectionClass="treeSelected" treeClass="treeStyle" disableClass="treeDisabled" unselectClass="treeUnselected">
+            <netui:treeItem expanded="true" action="postback">
+                <netui:treeLabel>Node 0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>Node 0.0</netui:treeLabel>
+                    <netui:treeItem action="postback">
+                        <netui:treeLabel>Node 0.0.0</netui:treeLabel>
+                        <netui:treeItem>Node 0.0.0.0</netui:treeItem>
+                        <netui:treeItem>Node 0.0.0.1</netui:treeItem>
+                        <netui:treeItem>Node 0.0.0.2</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" disabled="true">
+                    <netui:treeLabel>Node 0.1</netui:treeLabel>
+                    <netui:treeItem>Node 0.1.0</netui:treeItem>
+                    <netui:treeItem>Node 0.1.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>Node 0.2</netui:treeLabel>
+                    <netui:treeItem disabled="true">Node 0.2.0</netui:treeItem>
+                    <netui:treeItem>Node 0.2.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">Node 0.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/emptyFrame.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/emptyFrame.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<%@page contentType="text/html;charset=UTF-8" language="java"%>
+<html>
+    <head>
+    </head>
+    <body>
+    This example uses a frameset and a couple of frames.  In the left frame is a <b>Tree</b> where a selection event will 
+    populate the right frame.  The tree can be expanded an collapsed.  The way this works is that the target of the 
+    The <b>treeItems</b> set an href and a target of the other frame.  The tree must set a different action and a target of the
+    containing frame for the expansion target.
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/emptyTree.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/emptyTree.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>emptyTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base />
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>emptyTree.jsp [goEmptyTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Null TreeNode Root</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree9}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        This binds to a Page Flow variable that is never initialized.  In addition, the JSP page does
+        not define &lt;node> elements.  The result is a &lt;tree> that doesn't bind to a data Structure.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree9" selectionAction="postback" tagId="tree" />
+        </div>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/href.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/href.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,6 @@
+<html>
+<frameset cols="20%,80%">
+<frame name="treeFrame" src="treeFrame.jsp">
+<frame name="contentFrame" src="emptyFrame.jsp">
+</frameset>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>Tree Tests</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+    <netui:anchor action="initTrees">Reinitialize Trees</netui:anchor>
+    <h4>Base Tree Tests</h4>
+    <ul>
+    <li><netui:anchor action="goBaseTree">Dynamic Base Tree</netui:anchor> -- [tree1] Simplest Tree Defined Dynamically</li>
+    <li><netui:anchor action="goStaticBaseTree">Static Base Tree</netui:anchor> -- [tree2] Simplest Tree Defined Statically</li>
+    <li><netui:anchor action="goSelectStyles">Selection Style</netui:anchor> -- [tree3] Simplest Tree with selection styles</li>
+    <li><netui:anchor action="goTreeStyle">Tree Style</netui:anchor> -- [tree4] Simplest Tree the tree style set</li>
+    <li><netui:anchor action="goTreeHtml">HTML Label Tree Item</netui:anchor> -- [tree10] Tree Items specify their own label through HTML content</li>
+    <li><netui:anchor action="goTreeHtmlTwo">HTML Label Tree Item Two</netui:anchor> -- [tree11] Tree Items specify their own label through HTML content</li>
+    <li><netui:anchor action="goContent">TreeContent</netui:anchor> -- [tree12] Demonstrate the use of tree content.</li>
+    <li><netui:anchor action="goDisabled">Disabled Nodes</netui:anchor> -- [tree16] Disabled Nodes within the tree</li>
+    <li><netui:anchor action="goOverride">Override tree attributes</netui:anchor> -- [tree17] Override tree attributes</li>
+    <li><netui:anchor action="goOverrideTwo">Override tree attributes two</netui:anchor> -- [tree18] Override the whole tree actions from the root</li>
+    <li><netui:anchor action="goHref">Verify Href</netui:anchor> -- [tree19] Verify that HRefs and target work</li>
+    </ul>
+    <h4>Client Side Support</h4>
+    <ul>
+    <li><netui:anchor action="goBaseClient">Base runAtClient Support</netui:anchor> -- [tree8] Simplest Tree with runAtClient Support.</li>
+    <li><netui:anchor action="goClientContent">Client TreeContent</netui:anchor> -- [tree13] Client expansion with content and labels</li>
+    <li><netui:anchor action="goContentAnchor">Content Anchors</netui:anchor> -- [tree14] Using an Anchor inside of the Content with runAtClient</li>
+    <li><netui:anchor action="goClientContentAnchor">Client Content Anchors</netui:anchor> -- [tree15] Using an Anchor inside of the Content</li>
+    </ul>    
+    <h4>Layout Bugs</h4>
+    <ul>
+    <li><netui:anchor action="goCr180331">Invalid Layout</netui:anchor> -- [cr180331] [tree5] Layout of a tree four layers deep.</li>
+    <li><netui:anchor action="goCr182056">Long Label Names</netui:anchor> -- [cr182056] [tree6] Layout of a tree with long label names.</li>
+    </ul>    
+    <h4>Error Conditions</h4>
+    <ul>
+    <li><netui:anchor action="goEmptyTree">Empty Tree</netui:anchor> -- [tree9] Just a Tree tag without backing TreeNode</li>
+    <li><netui:anchor action="goTreeBinding">Tree Binding Error</netui:anchor> -- [badPageFlowTree - doesn't exist] Invalid Binding a tree.</li>
+    <li><netui:anchor action="goWriteTreeError">Write Tree Error</netui:anchor> -- [tree7] No property defined to set the tree.</li>
+    <li>Need to verify a node with both an href and action defined</li>
+    </ul>    
+    </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/ninja.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/nullAction.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/nullAction.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>nullAction.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        In this test, nodes become disabled because they don't have an action defined on them.  When a node doesn't have
+        action, it may not be selected so we disable it.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree17" selectionAction="postback" tagId="tree" selectionClass="treeSelected" disableClass="treeDisabled" unselectClass="treeUnselected" treeClass="treeStyle"/>
+        </div>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/omg.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/override.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/override.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,69 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body style="border: 20pt 5%">
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td><netui:content value="${pageFlow.action}"/></td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree17" selectionAction="postback" tagId="tree" selectionClass="treeSelected" treeClass="treeStyle" disableClass="treeDisabled" unselectClass="treeUnselected">
+            <netui:treeItem expanded="true" action="postback">
+                <netui:treeLabel>Node 0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>Node 0.0</netui:treeLabel>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>Node 0.0.0 [2]</netui:treeLabel>
+                        <netui:treePropertyOverride selectionAction="postbackTwo" />
+                        <netui:treeItem>Node 0.0.0.0[2]</netui:treeItem>
+                        <netui:treeItem action="postbackThree">Node 0.0.0.1 [3]</netui:treeItem>
+                        <netui:treeItem>Node 0.0.0.2 [2]</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>Node 0.1</netui:treeLabel>
+                    <netui:treeItem>Node 0.1.0</netui:treeItem>
+                    <netui:treeItem>Node 0.1.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>Node 0.2</netui:treeLabel>
+                    <netui:treeItem>Node 0.2.0</netui:treeItem>
+                    <netui:treeItem>Node 0.2.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">Node 0.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/overrideTwo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/overrideTwo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body style="border: 20pt 5%">
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td><netui:content value="${pageFlow.action}"/></td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree18" selectionAction="postback" tagId="tree" selectionClass="treeSelected" treeClass="treeStyle" disableClass="treeDisabled" unselectClass="treeUnselected">
+            <netui:treeItem expanded="true">
+                <netui:treePropertyOverride selectionAction="postbackTwo" />
+                <netui:treeLabel>0 [2]</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [2]</netui:treeLabel>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [2]</netui:treeLabel>
+                        <netui:treeItem>0.0.0.0[2]</netui:treeItem>
+                        <netui:treeItem action="postbackThree">0.0.0.1 [3]</netui:treeItem>
+                        <netui:treeItem>0.0.0.2 [2]</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1 [2]</netui:treeLabel>
+                    <netui:treeItem>0.1.0 [2]</netui:treeItem>
+                    <netui:treeItem>0.1.1 [2]</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.2 [2]</netui:treeLabel>
+                    <netui:treeItem>0.2.0 [2]</netui:treeItem>
+                    <netui:treeItem>0.2.1 [2]</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">0.2 [2]</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/partialClient.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/partialClient.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/selectStyles.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/selectStyles.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body style="border: 20pt 5%">
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree3" selectionAction="postback" tagId="tree" selectionClass="treeSelected" unselectClass="treeUnselected">
+            <netui:treeItem expanded="true" action="postback">
+                <netui:treeLabel>Node 0</netui:treeLabel>
+                <netui:treeItem expanded="true" action="postback">
+                    <netui:treeLabel>Node 0.0</netui:treeLabel>
+                    <netui:treeItem action="postback">
+                        <netui:treeLabel>Node 0.0.0</netui:treeLabel>
+                        <netui:treeItem action="postback">Node 0.0.0.0</netui:treeItem>
+                        <netui:treeItem action="postback">Node 0.0.0.1</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" action="postback">
+                    <netui:treeLabel>Node 0.1</netui:treeLabel>
+                    <netui:treeItem action="postback">Node 0.1.0</netui:treeItem>
+                    <netui:treeItem action="postback">Node 0.1.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" action="postback">Node 0.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/style.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/style.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,44 @@
+body {
+    margin: 10pt 2%;
+    background-color:#e6e6f0;
+}
+
+.content {
+    background-color:#ffffff;
+    height: 350px;
+    padding: 4pt;
+}
+
+.homeAnchor {
+    text-decoration: none;
+    float:right;
+}
+
+.treeSelected {
+    color: #ff6600;
+    font-family: "new century schoolbook", serif ; 
+    font-weight: bold;
+    text-decoration: none;
+}
+
+.treeDisabled {
+    color: #999999;
+    font-family: "new century schoolbook", serif ; 
+    text-decoration: none;
+}
+
+.treeUnselected {
+    color: #993300;
+    font-family: "new century schoolbook", serif ; 
+    text-decoration: none;
+}
+
+.treeStyle {
+    border: solid 1pt #ff6600;
+    font-family: "new century schoolbook", serif ; 
+    font-size: 10pt;
+    color: #ff6600;
+    height: 175pt;
+    width: 200pt;
+}
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeBinding.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeBinding.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>treeBinding.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base />
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>treeBinding.jsp [goTreeBinding.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Binding Error</td></tr>
+        <tr><th>tree</th><td>{pageFlow.badPageFlowTree}</td></tr>
+        </table>
+        </div>
+        This binds to a Page Flow variable that doesn't exist. The result is an expression error.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.badPageFlowTree" selectionAction="postback" tagId="tree" >
+            <netui:treeItem expanded="true" action="postback">Tree Root</netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeFrame.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeFrame.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>treeFrame.jsp</title>
+    </head>
+    <netui:body style="border: 20pt 5%;background-color:#ccffcc;">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree19" selectionAction="goTreeFrame" tagId="tree" selectionClass="treeSelected" treeClass="treeStyle" 
+                disableClass="treeDisabled" unselectClass="treeUnselected" expansionTarget="treeFrame">
+            <netui:treeItem expanded="true" disabled="true">
+                <netui:treeLabel>HREF Test Tree</netui:treeLabel>
+                <netui:treeItem action="begin" target="_top">Home</netui:treeItem>
+                <netui:treeItem href="PageOne.html" target="contentFrame">Page One</netui:treeItem>
+                <netui:treeItem href="PageTwo.html" target="contentFrame">Page Two</netui:treeItem>
+                <netui:treeItem href="PageThree.html" target="contentFrame">Page Three</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeHtml.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeHtml.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,61 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>treeHtml.jsp [goTreeHtml.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree10}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        This example shows the new feature allowing the user to specify the label content either through
+        body content in the &lt;treeItem> tag or using the &lt;treeLabel> tag.  The most common usage pattern
+        is that leaf nodes will specify their labels as body content of the &lt;treeItem> tag.  Interior 
+        nodes must specify their label either through the label attribute or through the &lt;treeLabel> tag.<br>
+        In addition, the action is only specified on the &lt;table> tag.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree10" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0</netui:treeLabel>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0</netui:treeLabel>
+                        <netui:treeItem>0.0.0.0</netui:treeItem>
+                        <netui:treeItem>0.0.0.1</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>0.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeHtmlTwo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeHtmlTwo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>treeHtmlTwo.jsp [goTreeHtmlTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree11}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        This is an additional test of specifying the label content through the body content of the &lt;treeItem>
+        and &lt;treeLabel> tags.  In this case, there is HTML markup and other netui tags inside the body content.  All expressions will
+        only be evaluated when the tree is created, which happens the first time when the tree variable is null.  Otherwise the tree
+        is generated from the TreeNodes.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree11" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0</b></span></netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0.0</b></span></netui:treeLabel>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0.0.0</b></span></netui:treeLabel>
+                        <netui:treeItem><span class="leaf"><netui:content value="${pageFlow.leafPrefix}"/>&nbsp;<b>0.0.0.0</b></span></netui:treeItem>
+                        <netui:treeItem><span class="leaf"><netui:content value="${pageFlow.leafPrefix}"/>&nbsp;<b>0.0.0.1</b></span></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem>
+                    <netui:treeLabel><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0.1</b></span></netui:treeLabel>
+                    <netui:treeItem><span class="leaf"><netui:content value="${pageFlow.leafPrefix}"/>&nbsp;<b>0.1.0</b></span></netui:treeItem>
+                    <netui:treeItem><span class="leaf"><netui:content value="${pageFlow.leafPrefix}"/>&nbsp;<b>0.1.1</b></span></netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem><span class="container"><netui:content value="${pageFlow.containerPrefix}"/>&nbsp;<b>0.2</b></span></netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeStyle.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/treeStyle.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body style="border: 20pt 5%">
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>treeStyle.jsp [goTreeStyle.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree4}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td><netui:content value="${pageFlow.expand}"/></td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td><netui:content value="${pageFlow.node}"/></td></tr>
+        </table>
+        </div>
+        This test demonstrates using the <i>treeClass</i> to set the overall style around the tree.  In this case
+        we are setting a border and the height and width of the &lt;div> containing the table.  In addition,
+        the overall font is set for the tree.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree4" selectionAction="postback" tagId="tree" selectionClass="treeSelected" treeClass="treeStyle">
+            <netui:treeItem expanded="true" action="postback">
+                <netui:treeLabel>Node 0</netui:treeLabel>
+                <netui:treeItem expanded="true" action="postback">
+                    <netui:treeLabel>Node 0.0</netui:treeLabel>
+                    <netui:treeItem action="postback">
+                        <netui:treeLabel>Node 0.0.0</netui:treeLabel>
+                        <netui:treeItem action="postback">Node 0.0.0.0</netui:treeItem>
+                        <netui:treeItem action="postback">Node 0.0.0.1</netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" action="postback">
+                    <netui:treeLabel>Node 0.1</netui:treeLabel>
+                    <netui:treeItem action="postback">Node 0.1.0</netui:treeItem>
+                    <netui:treeItem action="postback">Node 0.1.1</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true" action="postback">Node 0.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/writeTreeError.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/richTree/writeTreeError.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>writeTreeError.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>writeTreeError.jsp [goWriteTreeError.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree7}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        This test demonstrates the error reported when the tree cannot write to the expression being bound to.  This is an error because
+        we used the contents of the tree to generate the initial representation, but then didn't have the ability to write it
+        to the backing variable.
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree7" selectionAction="postback" tagId="tree">
+            <netui:treeItem action="postback" expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem action="postback" expanded="true">0.0</netui:treeItem>
+                <netui:treeItem action="postback" expanded="true">0.1</netui:treeItem>
+                <netui:treeItem action="postback" expanded="true">0.2</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+
+  
+ 
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,156 @@
+package scopedJpf.jpfTest1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import scopedJpf.jpfTest1.jpf1.Jpf1;
+import scopedJpf.jpfTest1.jpf2.Jpf2;
+import scopedJpf.jpfTest1.subJpf1.SubJpf1;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest1/JpfTest1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="140" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="340" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="540" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:MainFrame.jsp">
+ *   <property value="340" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest1.jsp@#@action:finish.do@">
+ *   <property value="176,240,240,304" name="elbowsX"/>
+ *   <property value="72,72,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:JspTest1.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="680" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@">
+ *   <property value="176,240,240,304" name="elbowsX"/>
+ *   <property value="232,232,232,232" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="gotoPg1" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest1/JpfTest1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='540' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:MainFrame.jsp'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest1.jsp@#@action:finish.do@'>",
+        "  <property value='176,240,240,304' name='elbowsX'/>",
+        "  <property value='72,72,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest1.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='680' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@'>",
+        "  <property value='176,240,240,304' name='elbowsX'/>",
+        "  <property value='232,232,232,232' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='gotoPg1' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class JpfTest1 extends PageFlowController
+    {
+    private static  Integer _lock       = new Integer(0);
+    public          String  scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="MainFrame.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "MainFrame.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> JpfTest1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+       {
+       System.out.println(">>> JpfTest1.finish");
+       return new Forward("gotoDone");
+       }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/JspTest1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/JspTest1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - JspTest1.jsp</h3>
+        <netui:anchor action="finish" target="_top">Done</netui:anchor>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/MainFrame.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/MainFrame.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<frameset rows="30%,35%,35%,35%,35%,35%,35%">
+
+    <frame src="JspTest1.jsp" name="topFrame">
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameA" name="frameA">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameB" name="frameB">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameC" name="frameC">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameD" name="frameD">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameE" name="frameE">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameF" name="frameF">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameG" name="frameG">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameH" name="frameH">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameI" name="frameI">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameJ" name="frameJ">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameK" name="frameK">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameL" name="frameL">
+    </frameset>
+
+</frameset>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ScopedJpf JpfTest1</title>
+   </head>
+   <body>
+      <h3 align="center">ScopedJpf JpfTest1 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,314 @@
+package scopedJpf.jpfTest1.jpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest1/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:refresh.do">
+ *   <property value="240" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="100" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="150" name="x"/>
+ *   <property value="250" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="360" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="180" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="210" name="x"/>
+ *   <property value="190" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1.jsp@#@action:goNested.do@">
+ *   <property value="234,185,185,136" name="elbowsX"/>
+ *   <property value="253,253,72,72" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1.jsp@#@action:finish.do@">
+ *   <property value="276,300,300,324" name="elbowsX"/>
+ *   <property value="212,212,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1.jsp@#@action:refresh.do@">
+ *   <property value="259,259,276,276" name="elbowsX"/>
+ *   <property value="294,299,299,332" name="elbowsY"/>
+ *   <property value="South_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1.jsp">
+ *   <property value="270" name="x"/>
+ *   <property value="250" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="234,210,210,186" name="elbowsX"/>
+ *   <property value="253,253,242,242" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="270" name="x"/>
+ *   <property value="250" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1.jsp#@action:begin.do@">
+ *   <property value="96,150,150,204" name="elbowsX"/>
+ *   <property value="43,43,212,212" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1.jsp#@action:refresh.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="296,280,280,264" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@">
+ *   <property value="136,185,185,234" name="elbowsX"/>
+ *   <property value="72,72,242,242" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="321" name="x"/>
+ *   <property value="324" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="186,235,235,285" name="elbowsX"/>
+ *   <property value="253,253,316,316" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="action-call:@page:Jsp1.jsp@#@action:nestedDone.do@">
+ *   <property value="234,210,210,186" name="elbowsX"/>
+ *   <property value="253,253,242,242" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest1/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:refresh.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='150' name='x'/>",
+        "  <property value='250' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='210' name='x'/>",
+        "  <property value='190' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:goNested.do@'>",
+        "  <property value='234,185,185,136' name='elbowsX'/>",
+        "  <property value='253,253,72,72' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:finish.do@'>",
+        "  <property value='276,300,300,324' name='elbowsX'/>",
+        "  <property value='212,212,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:refresh.do@'>",
+        "  <property value='259,259,276,276' name='elbowsX'/>",
+        "  <property value='294,299,299,332' name='elbowsY'/>",
+        "  <property value='South_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1.jsp'>",
+        "  <property value='270' name='x'/>",
+        "  <property value='250' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='234,210,210,186' name='elbowsX'/>",
+        "  <property value='253,253,242,242' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='270' name='x'/>",
+        "  <property value='250' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1.jsp#@action:begin.do@'>",
+        "  <property value='96,150,150,204' name='elbowsX'/>",
+        "  <property value='43,43,212,212' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1.jsp#@action:refresh.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='296,280,280,264' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@'>",
+        "  <property value='136,185,185,234' name='elbowsX'/>",
+        "  <property value='72,72,242,242' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='321' name='x'/>",
+        "  <property value='324' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='186,235,235,285' name='elbowsX'/>",
+        "  <property value='253,253,316,316' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='action-call:@page:Jsp1.jsp@#@action:nestedDone.do@'>",
+        "  <property value='234,210,210,186' name='elbowsX'/>",
+        "  <property value='253,253,242,242' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    public          String  scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf1.begin - scope: " + scope);
+        return new Forward( "success" );
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward refresh()
+        {
+        System.out.println(">>> Jpf1.refresh: " + this.toString());
+        return new Forward( "success" );
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested()
+        {
+        System.out.println(">>> Jpf1.goNested: " + this.toString());
+        return new Forward( "success" );
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone()
+        {
+        System.out.println(">>> Jpf1.nestedDone: " + this.toString());
+        return new Forward( "success" );
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+       {
+       System.out.println(">>> Jpf1.finish");
+       return new Forward("gotoDone");
+       }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf1/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf1/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+            ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <br/>
+            scope: <netui:label value="${pageFlow.scope}"/>
+            </span>
+            <netui:form action="finish">
+                <netui:button action="refresh" type="submit">Refresh page</netui:button>
+                &nbsp;&nbsp;
+                <netui:button action="goNested" type="submit">Goto nested</netui:button>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,314 @@
+package scopedJpf.jpfTest1.jpf2;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest1/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="640" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:refresh.do">
+ *   <property value="940" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="140" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="940" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2.jsp@#@action:goNested.do@">
+ *   <property value="764,470,470,176" name="elbowsX"/>
+ *   <property value="303,303,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2.jsp@#@action:refresh.do@">
+ *   <property value="836,870,870,904" name="elbowsX"/>
+ *   <property value="303,303,372,372" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2.jsp@#@action:finish.do@">
+ *   <property value="836,870,870,904" name="elbowsX"/>
+ *   <property value="281,281,72,72" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2.jsp">
+ *   <property value="800" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="376,420,420,464" name="elbowsX"/>
+ *   <property value="232,232,341,341" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="340" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2.jsp#@action:begin.do@">
+ *   <property value="676,720,720,764" name="elbowsX"/>
+ *   <property value="232,232,303,303" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2.jsp#@action:refresh.do@">
+ *   <property value="904,870,870,836" name="elbowsX"/>
+ *   <property value="361,361,303,303" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@">
+ *   <property value="176,240,240,304" name="elbowsX"/>
+ *   <property value="232,232,232,232" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="161" name="x"/>
+ *   <property value="164" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="464,330,330,197" name="elbowsX"/>
+ *   <property value="352,352,156,156" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="action-call:@page:Jsp2.jsp@#@action:nestedDone.do@">
+ *   <property value="764,650,650,536" name="elbowsX"/>
+ *   <property value="303,303,341,341" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest1/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:refresh.do'>",
+        "  <property value='940' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='940' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2.jsp@#@action:goNested.do@'>",
+        "  <property value='764,470,470,176' name='elbowsX'/>",
+        "  <property value='303,303,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2.jsp@#@action:refresh.do@'>",
+        "  <property value='836,870,870,904' name='elbowsX'/>",
+        "  <property value='303,303,372,372' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2.jsp@#@action:finish.do@'>",
+        "  <property value='836,870,870,904' name='elbowsX'/>",
+        "  <property value='281,281,72,72' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2.jsp'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='232,232,341,341' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2.jsp#@action:begin.do@'>",
+        "  <property value='676,720,720,764' name='elbowsX'/>",
+        "  <property value='232,232,303,303' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2.jsp#@action:refresh.do@'>",
+        "  <property value='904,870,870,836' name='elbowsX'/>",
+        "  <property value='361,361,303,303' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@'>",
+        "  <property value='176,240,240,304' name='elbowsX'/>",
+        "  <property value='232,232,232,232' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='161' name='x'/>",
+        "  <property value='164' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='464,330,330,197' name='elbowsX'/>",
+        "  <property value='352,352,156,156' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='action-call:@page:Jsp2.jsp@#@action:nestedDone.do@'>",
+        "  <property value='764,650,650,536' name='elbowsX'/>",
+        "  <property value='303,303,341,341' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController
+    {
+    public          String  scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf2.begin - scope: " + scope);
+        return new Forward( "success" );
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward refresh()
+        {
+        System.out.println(">>> Jpf2.refresh: " + this.toString());
+        return new Forward( "success" );
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested()
+        {
+        System.out.println(">>> Jpf2.goNested: " + this.toString());
+        return new Forward( "success" );
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone()
+        {
+        System.out.println(">>> Jpf2.nestedDone: " + this.toString());
+        return new Forward( "success" );
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+       {
+       System.out.println(">>> Jpf2.finish");
+       return new Forward("gotoDone");
+       }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf2/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/jpf2/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+            ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <br/>
+            scope: <netui:label value="${pageFlow.scope}"/>
+            </span>
+            <netui:form action="finish">
+                <netui:button action="refresh" type="submit">Refresh page</netui:button>
+                &nbsp;&nbsp;
+                <netui:button action="goNested" type="submit">Goto nested</netui:button>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/subJpf1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/subJpf1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,134 @@
+package scopedJpf.jpfTest1.subJpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest1/subJpf1/SubJpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="300" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1.jsp@#@action:finish.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="124,180,180,236" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:SubJsp1.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#SubJsp1.jsp#@action:begin.do@">
+ *   <property value="136,200,200,264" name="elbowsX"/>
+ *   <property value="112,112,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:nestedDone">
+ *   <property value="600" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#nestedDone#@action:finish.do@">
+ *   <property value="336,450,450,564" name="elbowsX"/>
+ *   <property value="261,261,72,72" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest1/subJpf1/SubJpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1.jsp@#@action:finish.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='124,180,180,236' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:SubJsp1.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#SubJsp1.jsp#@action:begin.do@'>",
+        "  <property value='136,200,200,264' name='elbowsX'/>",
+        "  <property value='112,112,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:nestedDone'>",
+        "  <property value='600' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#nestedDone#@action:finish.do@'>",
+        "  <property value='336,450,450,564' name='elbowsX'/>",
+        "  <property value='261,261,72,72' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class SubJpf1 extends PageFlowController
+    {
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="SubJsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "SubJsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> SubJpf1.begin - scope: " + scope);
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward finish()
+        {
+        System.out.println(">>> SubJpf1.done: " + this.toString());
+        return new Forward("done");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/subJpf1/SubJsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest1/subJpf1/SubJsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+            ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <br/>
+            scope: <netui:label value="${pageFlow.scope}"/>
+            </span>
+            <netui:form action="finish">
+                <netui:button action="finish" type="submit">Done</netui:button>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/JpfTest2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/JpfTest2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,150 @@
+package scopedJpf.jpfTest2;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import scopedJpf.jpfTest2.jpf1.Jpf1;
+import scopedJpf.jpfTest2.jpf2.Jpf2;
+import scopedJpf.jpfTest2.subJpf1.SubJpf1;
+import shared.FormA;
+
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest2/JpfTest2.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="340" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="130" name="x"/>
+ *   <property value="110" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:MainFrame.jsp">
+ *   <property value="190" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest2a.jsp@#@action:finish.do@">
+ *   <property value="116,210,210,304" name="elbowsX"/>
+ *   <property value="52,52,181,181" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:JspTest2a.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@">
+ *   <property value="96,125,125,154" name="elbowsX"/>
+ *   <property value="32,32,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="gotoPg1" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::*/
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest2/JpfTest2.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='130' name='x'/>",
+        "  <property value='110' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:MainFrame.jsp'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest2a.jsp@#@action:finish.do@'>",
+        "  <property value='116,210,210,304' name='elbowsX'/>",
+        "  <property value='52,52,181,181' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest2a.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@'>",
+        "  <property value='96,125,125,154' name='elbowsX'/>",
+        "  <property value='32,32,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='gotoPg1' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class JpfTest2 extends PageFlowController {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="MainFrame.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "MainFrame.jsp") 
+        })
+    protected Forward begin() {
+        System.out.println(">>> JpfTest2.begin");
+        return new Forward("gotoPg1");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish() {
+        System.out.println(">>> JpfTest2.finish");
+        return new Forward("gotoDone");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/JspTest2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/JspTest2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest2</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest2 - JspTest2a.jsp
+            </span>
+            <br/><br/>
+            <netui:anchor action="finish" target="_top">Done</netui:anchor>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/MainFrame.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/MainFrame.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+
+<frameset rows="20%,40%,40%">
+
+    <frame src="JspTest2a.jsp" name="topFrame">
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameA" name="frameA">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameB" name="frameB">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameC" name="frameC">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameD" name="frameD">
+    </frameset>
+
+</frameset>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ScopedJpf JpfTest2</title>
+   </head>
+   <body>
+      <h3 align="center">ScopedJpf JpfTest2 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest2.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,293 @@
+package scopedJpf.jpfTest2.jpf1;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest2/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:refresh.do#shared.FormA">
+ *   <property value="500" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:goNested.do@">
+ *   <property value="464,370,370,276" name="elbowsX"/>
+ *   <property value="203,203,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:refresh.do#shared.FormA@">
+ *   <property value="489,489,489,489" name="elbowsX"/>
+ *   <property value="156,140,140,124" name="elbowsY"/>
+ *   <property value="North_0" name="fromPort"/>
+ *   <property value="South_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1a.jsp">
+ *   <property value="500" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1a.jsp#@action:begin.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="152,152,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1a.jsp#@action:refresh.do#shared.FormA@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="124,140,140,156" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="500" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="424,430,430,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest2/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:refresh.do#shared.FormA'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:goNested.do@'>",
+        "  <property value='464,370,370,276' name='elbowsX'/>",
+        "  <property value='203,203,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:refresh.do#shared.FormA@'>",
+        "  <property value='489,489,489,489' name='elbowsX'/>",
+        "  <property value='156,140,140,124' name='elbowsY'/>",
+        "  <property value='North_0' name='fromPort'/>",
+        "  <property value='South_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='152,152,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1a.jsp#@action:refresh.do#shared.FormA@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='124,140,140,156' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='424,430,430,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController {
+    private FormA _form;
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin() {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf1.begin - jpfScopeID: " + scope);
+        _form = new FormA();
+        System.out.println(">>> Jpf1.begin - _form: " + _form.toString());
+        _form.setString1(scope);
+        return new Forward("success", _form);
+    }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="success" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward refresh(FormA inForm) {
+        System.out.println(">>> Jpf1.refresh: " + this.toString()
+                + "\n\tinForm: " + inForm.toString()
+                + "\n\t_form: " + _form.toString());
+        return new Forward("success", _form);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested() {
+        System.out.println(">>> Jpf1.goNested: " + this.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone() {
+        System.out.println(">>> Jpf1.nestedDone: " + this.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish() {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<head>
+    <title>ScopedJpf JpfTest2</title>
+</head>
+<body>
+    <center>
+        <netui:form action="refresh">
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest2 - Jpf1.Jsp1a.jsp
+                <br/>
+                PageFlow scope:&nbsp; <netui:label value="${pageFlow.scope}"/>
+                <br/>
+                Form field1:&nbsp; <netui:label value="${actionForm.string1}"/>
+            </span>
+            <br/><br/>
+            <netui:button action="refresh" type="submit">Refresh page</netui:button>
+            &nbsp;&nbsp;
+            <netui:button action="goNested" type="submit">Goto nested</netui:button>
+        </netui:form>
+    </center>
+</body>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,292 @@
+package scopedJpf.jpfTest2.jpf2;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest2/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:refresh.do#shared.FormA">
+ *   <property value="800" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:refresh.do#shared.FormA@">
+ *   <property value="789,789,789,789" name="elbowsX"/>
+ *   <property value="256,240,240,224" name="elbowsY"/>
+ *   <property value="North_0" name="fromPort"/>
+ *   <property value="South_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:goNested.do@">
+ *   <property value="764,520,520,276" name="elbowsX"/>
+ *   <property value="303,303,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2a.jsp">
+ *   <property value="800" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2a.jsp#@action:begin.do@">
+ *   <property value="276,520,520,764" name="elbowsX"/>
+ *   <property value="163,163,292,292" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2a.jsp#@action:refresh.do#shared.FormA@">
+ *   <property value="800,800,800,800" name="elbowsX"/>
+ *   <property value="224,240,240,256" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="500" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="424,430,430,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest2/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:refresh.do#shared.FormA'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:refresh.do#shared.FormA@'>",
+        "  <property value='789,789,789,789' name='elbowsX'/>",
+        "  <property value='256,240,240,224' name='elbowsY'/>",
+        "  <property value='North_0' name='fromPort'/>",
+        "  <property value='South_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:goNested.do@'>",
+        "  <property value='764,520,520,276' name='elbowsX'/>",
+        "  <property value='303,303,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2a.jsp#@action:begin.do@'>",
+        "  <property value='276,520,520,764' name='elbowsX'/>",
+        "  <property value='163,163,292,292' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2a.jsp#@action:refresh.do#shared.FormA@'>",
+        "  <property value='800,800,800,800' name='elbowsX'/>",
+        "  <property value='224,240,240,256' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='424,430,430,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController {
+    private FormA _form;
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin() {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf2.begin - cnter: " + scope);
+        _form = new FormA();
+        _form.setString1(scope);
+        return new Forward("success", _form);
+    }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="success" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward refresh(FormA inForm) {
+        System.out.println(">>> Jpf2.refresh: " + this.toString()
+                + "\n\tinForm: " + inForm.toString()
+                + "\n\t_form: " + _form.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested() {
+        System.out.println(">>> Jpf2.goNested: " + this.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone() {
+        System.out.println(">>> Jpf2.nestedDone: " + this.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish() {
+        System.out.println(">>> Jpf2.finish");
+        return new Forward("gotoDone");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<head>
+    <title>ScopedJpf JpfTest2</title>
+</head>
+<body>
+    <center>
+        <netui:form action="refresh">
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest2 - Jpf2.Jsp2a.jsp
+                <br/>
+                PageFlow scope:&nbsp; <netui:label value="${pageFlow.scope}"/>
+                <br/>
+                Form field1:&nbsp; <netui:label value="${actionForm.string1}"/>
+            </span>
+            <br/><br/>
+            <netui:button action="refresh" type="submit">Refresh page</netui:button>
+            &nbsp;&nbsp;
+            <netui:button action="goNested" type="submit">Goto nested</netui:button>
+        </netui:form>
+    </center>
+</body>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,131 @@
+package scopedJpf.jpfTest2.subJpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="300" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1a.jsp@#@action:finish.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="124,180,180,236" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:SubJsp1a.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#SubJsp1a.jsp#@action:begin.do@">
+ *   <property value="136,200,200,264" name="elbowsX"/>
+ *   <property value="112,112,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:nestedDone">
+ *   <property value="600" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#nestedDone#@action:finish.do@">
+ *   <property value="336,450,450,564" name="elbowsX"/>
+ *   <property value="261,261,72,72" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1a.jsp@#@action:finish.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='124,180,180,236' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:SubJsp1a.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#SubJsp1a.jsp#@action:begin.do@'>",
+        "  <property value='136,200,200,264' name='elbowsX'/>",
+        "  <property value='112,112,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:nestedDone'>",
+        "  <property value='600' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#nestedDone#@action:finish.do@'>",
+        "  <property value='336,450,450,564' name='elbowsX'/>",
+        "  <property value='261,261,72,72' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class SubJpf1 extends PageFlowController {
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="SubJsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "SubJsp1a.jsp") 
+        })
+    protected Forward begin() {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> SubJpf1.begin - scope: " + scope);
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward finish() {
+        System.out.println(">>> SubJpf1.done: " + this.toString());
+        return new Forward("done");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/subJpf1/SubJsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest2/subJpf1/SubJsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest2</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest2 - SubJpf1.SubJsp1a.jsp
+                <br/>
+                Scope: <netui:label value="${pageFlow.scope}"/>
+            </span>
+        <netui:form action="finish">
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/JpfTest3.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/JpfTest3.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,150 @@
+package scopedJpf.jpfTest3;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import scopedJpf.jpfTest2.jpf1.Jpf1;
+import scopedJpf.jpfTest2.jpf2.Jpf2;
+import scopedJpf.jpfTest2.subJpf1.SubJpf1;
+import shared.FormA;
+
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest3/JpfTest3.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="340" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="130" name="x"/>
+ *   <property value="110" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:MainFrame.jsp">
+ *   <property value="190" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest3a.jsp@#@action:finish.do@">
+ *   <property value="116,210,210,304" name="elbowsX"/>
+ *   <property value="52,52,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:JspTest3a.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@">
+ *   <property value="96,125,125,154" name="elbowsX"/>
+ *   <property value="32,32,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="gotoPg1" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::*/
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest3/JpfTest3.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='130' name='x'/>",
+        "  <property value='110' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:MainFrame.jsp'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest3a.jsp@#@action:finish.do@'>",
+        "  <property value='116,210,210,304' name='elbowsX'/>",
+        "  <property value='52,52,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest3a.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@'>",
+        "  <property value='96,125,125,154' name='elbowsX'/>",
+        "  <property value='32,32,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='gotoPg1' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class JpfTest3 extends PageFlowController {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="MainFrame.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "MainFrame.jsp") 
+        })
+    protected Forward begin() {
+        System.out.println(">>> JpfTest3.begin");
+        return new Forward("gotoPg1");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish() {
+        System.out.println(">>> JpfTest3.finish");
+        return new Forward("gotoDone");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/JspTest3a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/JspTest3a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest3</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest3 - JspTest3a.jsp
+            </span>
+            <br/><br/>
+            <netui:anchor action="finish" target="_top">Done</netui:anchor>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/MainFrame.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/MainFrame.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+
+<frameset rows="20%,40%,40%">
+
+    <frame src="JspTest3a.jsp" name="topFrame">
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameA" name="frameA">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameB" name="frameB">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameC" name="frameC">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameD" name="frameD">
+    </frameset>
+
+</frameset>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ScopedJpf JpfTest3</title>
+   </head>
+   <body>
+      <h3 align="center">ScopedJpf JpfTest3 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest3.jpf">Start test</a>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,350 @@
+package scopedJpf.jpfTest3.jpf1;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest3/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:testSecure.do#shared.FormA">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:unsecure.do#shared.FormA">
+ *   <property value="500" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:unsecure.do#shared.FormA@">
+ *   <property value="489,489,489,489" name="elbowsX"/>
+ *   <property value="156,140,140,124" name="elbowsY"/>
+ *   <property value="North_0" name="fromPort"/>
+ *   <property value="South_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:goNested.do@">
+ *   <property value="464,370,370,276" name="elbowsX"/>
+ *   <property value="203,203,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:testSecure.do#shared.FormA@">
+ *   <property value="464,280,280,96" name="elbowsX"/>
+ *   <property value="192,192,43,43" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1a.jsp">
+ *   <property value="500" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1a.jsp#@action:begin.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="152,152,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1a.jsp#@action:testSecure.do#shared.FormA@">
+ *   <property value="96,280,280,464" name="elbowsX"/>
+ *   <property value="32,32,181,181" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1a.jsp#@action:unsecure.do#shared.FormA@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="124,140,140,156" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="500" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="424,430,430,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest3/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:testSecure.do#shared.FormA'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:unsecure.do#shared.FormA'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:unsecure.do#shared.FormA@'>",
+        "  <property value='489,489,489,489' name='elbowsX'/>",
+        "  <property value='156,140,140,124' name='elbowsY'/>",
+        "  <property value='North_0' name='fromPort'/>",
+        "  <property value='South_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:goNested.do@'>",
+        "  <property value='464,370,370,276' name='elbowsX'/>",
+        "  <property value='203,203,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:testSecure.do#shared.FormA@'>",
+        "  <property value='464,280,280,96' name='elbowsX'/>",
+        "  <property value='192,192,43,43' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='152,152,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1a.jsp#@action:testSecure.do#shared.FormA@'>",
+        "  <property value='96,280,280,464' name='elbowsX'/>",
+        "  <property value='32,32,181,181' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1a.jsp#@action:unsecure.do#shared.FormA@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='124,140,140,156' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='424,430,430,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController {
+    private FormA _form;
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin() {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf1.begin - jpfScopeID: " + scope
+                            + "jpf instance: " + this.toString());
+        _form = new FormA();
+        System.out.println(">>> Jpf1.begin - _form: " + _form.toString());
+        _form.setString1(scope);
+        return new Forward("success", _form);
+    }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="success" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward testSecure(FormA inForm) {
+        System.out.println(">>> Jpf1.testSecure: " + this.toString()
+                + "\n\tinForm: " + inForm.toString()
+                + "\n\t_form: " + _form.toString());
+        if (this.getRequest().isSecure() == true)
+            {
+            return new Forward("success");
+            }
+        return new Forward("gotoError");
+    }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="success" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward unsecure(FormA inForm) {
+        System.out.println(">>> Jpf1.unsecure: " + this.toString()
+                + "\n\tinForm: " + inForm.toString()
+                + "\n\t_form: " + _form.toString());
+        return new Forward("success", _form);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested() {
+        System.out.println(">>> Jpf1.goNested: " + this.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone() {
+        System.out.println(">>> Jpf1.nestedDone: " + this.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish() {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<head>
+    <title>ScopedJpf JpfTest3</title>
+</head>
+<body>
+    <center>
+        <netui:form action="unsecure">
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest3 - Jpf1.Jsp1a.jsp
+                <br/>
+                PageFlow scope:&nbsp; <netui:label value="${pageFlow.scope}"/>
+                <br/>
+                Form field1:&nbsp; <netui:label value="${actionForm.string1}"/>
+            </span>
+            <br/><br/>
+            <netui:anchor action="unsecure">Unsecure</netui:anchor>
+            <br/><br/>
+            <netui:button action="unsecure" type="submit">Unsecure</netui:button>
+            &nbsp;&nbsp;
+            <netui:button action="goNested" type="submit">Goto nested</netui:button>
+        </netui:form>
+        <netui:anchor action="testSecure">Test Secure</netui:anchor>
+    </center>
+</body>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,349 @@
+package scopedJpf.jpfTest3.jpf2;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest3/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:testSecure.do#shared.FormA">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:unsecure.do#shared.FormA">
+ *   <property value="800" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:testSecure.do#shared.FormA@">
+ *   <property value="764,430,430,96" name="elbowsX"/>
+ *   <property value="281,281,32,32" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:goNested.do@">
+ *   <property value="764,520,520,276" name="elbowsX"/>
+ *   <property value="303,303,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:unsecure.do#shared.FormA@">
+ *   <property value="800,800,789,789" name="elbowsX"/>
+ *   <property value="256,240,240,224" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2a.jsp">
+ *   <property value="800" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2a.jsp#@action:begin.do@">
+ *   <property value="276,520,520,764" name="elbowsX"/>
+ *   <property value="163,163,292,292" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2a.jsp#@action:testSecure.do#shared.FormA@">
+ *   <property value="96,430,430,764" name="elbowsX"/>
+ *   <property value="43,43,281,281" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2a.jsp#@action:unsecure.do#shared.FormA@">
+ *   <property value="800,800,789,789" name="elbowsX"/>
+ *   <property value="224,240,240,256" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="500" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="424,430,430,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest3/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:testSecure.do#shared.FormA'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:unsecure.do#shared.FormA'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:testSecure.do#shared.FormA@'>",
+        "  <property value='764,430,430,96' name='elbowsX'/>",
+        "  <property value='281,281,32,32' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:goNested.do@'>",
+        "  <property value='764,520,520,276' name='elbowsX'/>",
+        "  <property value='303,303,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:unsecure.do#shared.FormA@'>",
+        "  <property value='800,800,789,789' name='elbowsX'/>",
+        "  <property value='256,240,240,224' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2a.jsp#@action:begin.do@'>",
+        "  <property value='276,520,520,764' name='elbowsX'/>",
+        "  <property value='163,163,292,292' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2a.jsp#@action:testSecure.do#shared.FormA@'>",
+        "  <property value='96,430,430,764' name='elbowsX'/>",
+        "  <property value='43,43,281,281' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2a.jsp#@action:unsecure.do#shared.FormA@'>",
+        "  <property value='800,800,789,789' name='elbowsX'/>",
+        "  <property value='224,240,240,256' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='424,430,430,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController {
+    private FormA _form;
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin() {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf2.begin - jpfScopeID: " + scope
+                            + "jpf instance: " + this.toString());
+        _form = new FormA();
+        _form.setString1(scope);
+        return new Forward("success", _form);
+    }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="success" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward testSecure(FormA inForm) {
+        System.out.println(">>> Jpf2.testSecure: " + this.toString()
+                + "\n\tinForm: " + inForm.toString()
+                + "\n\t_form: " + _form.toString());
+        if (this.getRequest().isSecure() == true)
+            {
+            return new Forward("success");
+            }
+        return new Forward("gotoError");
+    }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="success" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward unsecure(FormA inForm) {
+        System.out.println(">>> Jpf2.unsecure: " + this.toString()
+                + "\n\tinForm: " + inForm.toString()
+                + "\n\t_form: " + _form.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested() {
+        System.out.println(">>> Jpf2.goNested: " + this.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone() {
+        System.out.println(">>> Jpf2.nestedDone: " + this.toString());
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish() {
+        System.out.println(">>> Jpf2.finish");
+        return new Forward("gotoDone");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<head>
+    <title>ScopedJpf JpfTest3</title>
+</head>
+<body>
+    <center>
+        <netui:form action="unsecure">
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest3 - Jpf2.Jsp2a.jsp
+                <br/>
+                PageFlow scope:&nbsp; <netui:label value="${pageFlow.scope}"/>
+                <br/>
+                Form field1:&nbsp; <netui:label value="${actionForm.string1}"/>
+            </span>
+            <br/><br/>
+            <netui:anchor action="unsecure">Unsecure</netui:anchor>
+            <br/><br/>
+            <netui:button action="unsecure" type="submit">Unsecure</netui:button>
+            &nbsp;&nbsp;
+            <netui:button action="goNested" type="submit">Goto nested</netui:button>
+        </netui:form>
+        <netui:anchor action="testSecure">Test Secure</netui:anchor>
+    </center>
+</body>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/subJpf1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/subJpf1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,131 @@
+package scopedJpf.jpfTest3.subJpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="300" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1a.jsp@#@action:finish.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="124,180,180,236" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:SubJsp1a.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#SubJsp1a.jsp#@action:begin.do@">
+ *   <property value="136,200,200,264" name="elbowsX"/>
+ *   <property value="112,112,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:nestedDone">
+ *   <property value="600" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#nestedDone#@action:finish.do@">
+ *   <property value="336,450,450,564" name="elbowsX"/>
+ *   <property value="261,261,72,72" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1a.jsp@#@action:finish.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='124,180,180,236' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:SubJsp1a.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#SubJsp1a.jsp#@action:begin.do@'>",
+        "  <property value='136,200,200,264' name='elbowsX'/>",
+        "  <property value='112,112,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:nestedDone'>",
+        "  <property value='600' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#nestedDone#@action:finish.do@'>",
+        "  <property value='336,450,450,564' name='elbowsX'/>",
+        "  <property value='261,261,72,72' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class SubJpf1 extends PageFlowController {
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="SubJsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "SubJsp1a.jsp") 
+        })
+    protected Forward begin() {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> SubJpf1.begin - scope: " + scope);
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward finish() {
+        System.out.println(">>> SubJpf1.done: " + this.toString());
+        return new Forward("done");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/subJpf1/SubJsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest3/subJpf1/SubJsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest2</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest2 - SubJpf1.SubJsp1a.jsp
+                <br/>
+                Scope: <netui:label value="${pageFlow.scope}"/>
+            </span>
+        <netui:form action="finish">
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/JpfTest4.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/JpfTest4.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,148 @@
+package scopedJpf.jpfTest4;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest4/JpfTest4.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="340" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="130" name="x"/>
+ *   <property value="110" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:MainFrame.jsp">
+ *   <property value="190" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest4a.jsp@#@action:finish.do@">
+ *   <property value="116,210,210,304" name="elbowsX"/>
+ *   <property value="52,52,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:JspTest4a.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@">
+ *   <property value="96,125,125,154" name="elbowsX"/>
+ *   <property value="32,32,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="gotoPg1" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::*/
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest4/JpfTest4.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='130' name='x'/>",
+        "  <property value='110' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:MainFrame.jsp'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest4a.jsp@#@action:finish.do@'>",
+        "  <property value='116,210,210,304' name='elbowsX'/>",
+        "  <property value='52,52,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest4a.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@'>",
+        "  <property value='96,125,125,154' name='elbowsX'/>",
+        "  <property value='32,32,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='gotoPg1' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class JpfTest4 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="MainFrame.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "MainFrame.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> JpfTest4.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> JpfTest4.finish");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/JspTest4a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/JspTest4a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest4</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest4 - JspTest4a.jsp
+            </span>
+            <br/><br/>
+            <netui:anchor action="finish" target="_top">Done</netui:anchor>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/MainFrame.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/MainFrame.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+
+<frameset rows="20%,40%,40%">
+
+    <frame src="JspTest4a.jsp" name="topFrame">
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=scopeA" name="frameA">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=scopeA" name="frameB">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=scopeA" name="frameC">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=scopeA" name="frameD">
+    </frameset>
+
+</frameset>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ScopedJpf JpfTest4</title>
+   </head>
+   <body>
+      <h3 align="center">ScopedJpf JpfTest4 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest4.jpf">Start test</a>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,267 @@
+package scopedJpf.jpfTest4.jpf1;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest4/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do#shared.FormA">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finished.do">
+ *   <property value="620" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:goNested.do#shared.FormA@">
+ *   <property value="464,370,370,276" name="elbowsX"/>
+ *   <property value="203,203,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:finished.do@">
+ *   <property value="536,560,560,584" name="elbowsX"/>
+ *   <property value="192,192,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1a.jsp">
+ *   <property value="500" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1a.jsp#@action:begin.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="152,152,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do#shared.FormA@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="500" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="424,430,430,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest4/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do#shared.FormA'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finished.do'>",
+        "  <property value='620' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:goNested.do#shared.FormA@'>",
+        "  <property value='464,370,370,276' name='elbowsX'/>",
+        "  <property value='203,203,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:finished.do@'>",
+        "  <property value='536,560,560,584' name='elbowsX'/>",
+        "  <property value='192,192,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='152,152,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do#shared.FormA@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='424,430,430,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private FormA _form;
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf1.begin - jpfScopeID: " + scope
+                           + "jpf instance: " + this.toString());
+        _form = new FormA();
+        System.out.println(">>> Jpf1.begin - _form: " + _form.toString());
+        _form.setString1(scope);
+        return new Forward("success", _form);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested(FormA form)
+        {
+        System.out.println(">>> Jpf1.goNested: " + this.toString());
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone()
+        {
+        System.out.println(">>> Jpf1.nestedDone: " + this.toString());
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<head>
+    <title>ScopedJpf JpfTest4</title>
+</head>
+<body>
+    <center>
+        <netui:form action="goNested">
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest4 - Jpf1.Jsp1a.jsp
+                <br/>
+                PageFlow scope:&nbsp; <netui:label value="${pageFlow.scope}"/>
+                <br/>
+                Form field1:&nbsp; <netui:label value="${actionForm.string1}"/>
+            </span>
+            <br/><br/>
+            <netui:button action="goNested" type="submit">Goto nested</netui:button>
+            &nbsp;&nbsp;
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+    </center>
+</body>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,266 @@
+package scopedJpf.jpfTest4.jpf2;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest4/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do#shared.FormA">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do#shared.FormA">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2a.jsp">
+ *   <property value="800" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2a.jsp#@action:begin.do@">
+ *   <property value="276,520,520,764" name="elbowsX"/>
+ *   <property value="163,163,292,292" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do#shared.FormA@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="500" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="424,430,430,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:goNested.do#shared.FormA@">
+ *   <property value="764,520,520,276" name="elbowsX"/>
+ *   <property value="303,303,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finished.do">
+ *   <property value="800" name="x"/>
+ *   <property value="180" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:finished.do@">
+ *   <property value="800,800,800,800" name="elbowsX"/>
+ *   <property value="256,240,240,224" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest4/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do#shared.FormA'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2a.jsp#@action:begin.do@'>",
+        "  <property value='276,520,520,764' name='elbowsX'/>",
+        "  <property value='163,163,292,292' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do#shared.FormA@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='424,430,430,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:goNested.do#shared.FormA@'>",
+        "  <property value='764,520,520,276' name='elbowsX'/>",
+        "  <property value='303,303,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finished.do'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='180' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:finished.do@'>",
+        "  <property value='800,800,800,800' name='elbowsX'/>",
+        "  <property value='256,240,240,224' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController
+    {
+    private FormA _form;
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf2.begin - jpfScopeID: " + scope
+                           + "jpf instance: " + this.toString());
+        _form = new FormA();
+        _form.setString1(scope);
+        return new Forward("success", _form);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested(FormA form)
+        {
+        System.out.println(">>> Jpf2.goNested: " + this.toString());
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone()
+        {
+        System.out.println(">>> Jpf2.nestedDone: " + this.toString());
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish(FormA form)
+        {
+        System.out.println(">>> Jpf2.finish");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<head>
+    <title>ScopedJpf JpfTest4</title>
+</head>
+<body>
+    <center>
+        <netui:form action="goNested">
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest4 - Jpf2.Jsp2a.jsp
+                <br/>
+                PageFlow scope:&nbsp; <netui:label value="${pageFlow.scope}"/>
+                <br/>
+                Form field1:&nbsp; <netui:label value="${actionForm.string1}"/>
+            </span>
+            <br/><br/>
+            <netui:button action="goNested" type="submit">Goto nested</netui:button>
+            &nbsp;&nbsp;
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+    </center>
+</body>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/subJpf1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/subJpf1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,134 @@
+package scopedJpf.jpfTest4.subJpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="300" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1a.jsp@#@action:finish.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="124,180,180,236" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:SubJsp1a.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#SubJsp1a.jsp#@action:begin.do@">
+ *   <property value="136,200,200,264" name="elbowsX"/>
+ *   <property value="112,112,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:nestedDone">
+ *   <property value="600" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#nestedDone#@action:finish.do@">
+ *   <property value="336,450,450,564" name="elbowsX"/>
+ *   <property value="261,261,72,72" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1a.jsp@#@action:finish.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='124,180,180,236' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:SubJsp1a.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#SubJsp1a.jsp#@action:begin.do@'>",
+        "  <property value='136,200,200,264' name='elbowsX'/>",
+        "  <property value='112,112,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:nestedDone'>",
+        "  <property value='600' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#nestedDone#@action:finish.do@'>",
+        "  <property value='336,450,450,564' name='elbowsX'/>",
+        "  <property value='261,261,72,72' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class SubJpf1 extends PageFlowController
+    {
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="SubJsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "SubJsp1a.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> SubJpf1.begin - scope: " + scope);
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward finish()
+        {
+        System.out.println(">>> SubJpf1.done: " + this.toString());
+        return new Forward("done");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/subJpf1/SubJsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest4/subJpf1/SubJsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest2</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest2 - SubJpf1.SubJsp1a.jsp
+                <br/>
+                Scope: <netui:label value="${pageFlow.scope}"/>
+            </span>
+        <netui:form action="finish">
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/JpfTest5.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/JpfTest5.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,148 @@
+package scopedJpf.jpfTest5;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest5/JpfTest5.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="340" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="130" name="x"/>
+ *   <property value="110" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:MainFrame.jsp">
+ *   <property value="190" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest5a.jsp@#@action:finish.do@">
+ *   <property value="116,210,210,304" name="elbowsX"/>
+ *   <property value="52,52,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:JspTest5a.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@">
+ *   <property value="96,125,125,154" name="elbowsX"/>
+ *   <property value="32,32,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="gotoPg1" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::*/
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest5/JpfTest5.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='130' name='x'/>",
+        "  <property value='110' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:MainFrame.jsp'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest5a.jsp@#@action:finish.do@'>",
+        "  <property value='116,210,210,304' name='elbowsX'/>",
+        "  <property value='52,52,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest5a.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoPg1#MainFrame.jsp#@action:begin.do@'>",
+        "  <property value='96,125,125,154' name='elbowsX'/>",
+        "  <property value='32,32,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='gotoPg1' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class JpfTest5 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="MainFrame.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "MainFrame.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> JpfTest5.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> JpfTest5.finish");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/JspTest5a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/JspTest5a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest5</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest5 - JspTest5a.jsp
+            </span>
+            <br/><br/>
+            <netui:anchor action="finish" target="_top">Done</netui:anchor>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/MainFrame.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/MainFrame.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+
+<frameset rows="20%,40%,40%">
+
+    <frame src="JspTest5a.jsp" name="topFrame">
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/jpf1Begin.do?jpfScopeID=scopeA" name="frameA">
+        <frame src="jpf2/jpf2Begin.do?jpfScopeID=scopeB" name="frameB">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/jpf1Begin.do?jpfScopeID=scopeC" name="frameC">
+        <frame src="jpf2/jpf2Begin.do?jpfScopeID=scopeD" name="frameD">
+    </frameset>
+
+</frameset>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ScopedJpf JpfTest5</title>
+   </head>
+   <body>
+      <h3 align="center">ScopedJpf JpfTest5 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest5.jpf">Start test</a>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,259 @@
+package scopedJpf.jpfTest5.jpf1;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest5/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do#shared.FormA">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:finish.do@">
+ *   <property value="464,440,440,416" name="elbowsX"/>
+ *   <property value="203,203,292,292" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:goNested.do#shared.FormA@">
+ *   <property value="464,370,370,276" name="elbowsX"/>
+ *   <property value="203,203,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1a.jsp">
+ *   <property value="500" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp1a.jsp#@action:begin.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="152,152,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do#shared.FormA@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="500" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="424,430,430,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest5/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do#shared.FormA'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:finish.do@'>",
+        "  <property value='464,440,440,416' name='elbowsX'/>",
+        "  <property value='203,203,292,292' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:goNested.do#shared.FormA@'>",
+        "  <property value='464,370,370,276' name='elbowsX'/>",
+        "  <property value='203,203,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='152,152,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do#shared.FormA@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='424,430,430,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private FormA _form;
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf1.begin - jpfScopeID: " + scope
+                           + " - jpf instance: " + this.toString());
+        _form = new FormA();
+        System.out.println(">>> Jpf1.begin - _form: " + _form.toString());
+        _form.setString1(scope);
+        return new Forward("success", _form);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested(FormA form)
+        {
+        System.out.println(">>> Jpf1.goNested: " + this.toString());
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone()
+        {
+        System.out.println(">>> Jpf1.nestedDone: " + this.toString());
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        System.out.println(">>> Jpf1.finish");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<head>
+    <title>ScopedJpf JpfTest5</title>
+</head>
+<body>
+    <center>
+        <netui:form action="jpf1GoNested">
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest5 - Jpf1.Jsp1a.jsp
+                <br/>
+                PageFlow scope:&nbsp; <netui:label value="${pageFlow.scope}"/>
+                <br/>
+                Form field1:&nbsp; <netui:label value="${actionForm.string1}"/>
+            </span>
+            <br/><br/>
+            <netui:button action="jpf1GoNested" type="submit">Goto nested</netui:button>
+            &nbsp;&nbsp;
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+    </center>
+</body>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,258 @@
+package scopedJpf.jpfTest5.jpf2;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest5/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="240" name="x"/>
+ *   <property value="160" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goNested.do#shared.FormA">
+ *   <property value="240" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:nestedDone.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do#shared.FormA">
+ *   <property value="380" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:finish.do#shared.FormA@">
+ *   <property value="764,590,590,416" name="elbowsX"/>
+ *   <property value="303,303,292,292" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:goNested.do#shared.FormA@">
+ *   <property value="764,520,520,276" name="elbowsX"/>
+ *   <property value="303,303,232,232" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2a.jsp">
+ *   <property value="800" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@">
+ *   <property value="276,370,370,464" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="240" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Jsp2a.jsp#@action:begin.do@">
+ *   <property value="276,520,520,764" name="elbowsX"/>
+ *   <property value="163,163,292,292" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do#shared.FormA@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="284,310,310,336" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@">
+ *   <property value="500" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:nestedDone.do@">
+ *   <property value="500,500,500,500" name="elbowsX"/>
+ *   <property value="424,430,430,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest5/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goNested.do#shared.FormA'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:nestedDone.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='764,590,590,416' name='elbowsX'/>",
+        "  <property value='303,303,292,292' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:goNested.do#shared.FormA@'>",
+        "  <property value='764,520,520,276' name='elbowsX'/>",
+        "  <property value='303,303,232,232' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:nestedDone.do@'>",
+        "  <property value='276,370,370,464' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Jsp2a.jsp#@action:begin.do@'>",
+        "  <property value='276,520,520,764' name='elbowsX'/>",
+        "  <property value='163,163,292,292' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#../subJpf1/SubJpf1.jpf#@action:goNested.do#shared.FormA@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='284,310,310,336' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:nestedDone.do@@'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:nestedDone.do@'>",
+        "  <property value='500,500,500,500' name='elbowsX'/>",
+        "  <property value='424,430,430,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController
+    {
+    private FormA _form;
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> Jpf2.begin - jpfScopeID: " + scope
+                           + " - jpf instance: " + this.toString());
+        _form = new FormA();
+        _form.setString1(scope);
+        return new Forward("success", _form);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goNested(FormA form)
+        {
+        System.out.println(">>> Jpf2.goNested: " + this.toString());
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward nestedDone()
+        {
+        System.out.println(">>> Jpf2.nestedDone: " + this.toString());
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish(FormA form)
+        {
+        System.out.println(">>> Jpf2.finish");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<head>
+    <title>ScopedJpf JpfTest5</title>
+</head>
+<body>
+    <center>
+        <netui:form action="jpf2GoNested">
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest5 - Jpf2.Jsp2a.jsp
+                <br/>
+                PageFlow scope:&nbsp; <netui:label value="${pageFlow.scope}"/>
+                <br/>
+                Form field1:&nbsp; <netui:label value="${actionForm.string1}"/>
+            </span>
+            <br/><br/>
+            <netui:button action="jpf2GoNested" type="submit">Goto nested</netui:button>
+            &nbsp;&nbsp;
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+    </center>
+</body>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/subJpf1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/subJpf1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,134 @@
+package scopedJpf.jpfTest5.subJpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="100" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="300" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1a.jsp@#@action:finish.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="124,180,180,236" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:SubJsp1a.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#SubJsp1a.jsp#@action:begin.do@">
+ *   <property value="136,200,200,264" name="elbowsX"/>
+ *   <property value="112,112,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:nestedDone">
+ *   <property value="600" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#done#nestedDone#@action:finish.do@">
+ *   <property value="336,450,450,564" name="elbowsX"/>
+ *   <property value="261,261,72,72" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="done" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/scopedJpf/jpfTest2/subJpf1/SubJpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1a.jsp@#@action:finish.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='124,180,180,236' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:SubJsp1a.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#SubJsp1a.jsp#@action:begin.do@'>",
+        "  <property value='136,200,200,264' name='elbowsX'/>",
+        "  <property value='112,112,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:nestedDone'>",
+        "  <property value='600' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#done#nestedDone#@action:finish.do@'>",
+        "  <property value='336,450,450,564' name='elbowsX'/>",
+        "  <property value='261,261,72,72' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='done' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class SubJpf1 extends PageFlowController
+    {
+    public String scope;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="SubJsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "SubJsp1a.jsp") 
+        })
+    protected Forward begin()
+        {
+        scope = getRequest().getParameter("jpfScopeID");
+        System.out.println(">>> SubJpf1.begin - scope: " + scope);
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward finish()
+        {
+        System.out.println(">>> SubJpf1.done: " + this.toString());
+        return new Forward("done");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/subJpf1/SubJsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/scopedJpf/jpfTest5/subJpf1/SubJsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest2</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest2 - SubJpf1.SubJsp1a.jsp
+                <br/>
+                Scope: <netui:label value="${pageFlow.scope}"/>
+            </span>
+        <netui:form action="finish">
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/security/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/security/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,84 @@
+package security;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="secure" path="page2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "secure",
+                path = "page2.jsp") 
+        })
+    public Forward secure()
+    {
+        return new Forward( "secure" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="unsecure" path="page2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "unsecure",
+                path = "page2.jsp") 
+        })
+    public Forward unsecure()
+    {
+        return new Forward( "unsecure" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="back_secure" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "back_secure",
+                path = "index.jsp") 
+        })
+    public Forward back_secure()
+    {
+        return new Forward( "back_secure" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="back_unsecure" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "back_unsecure",
+                path = "index.jsp") 
+        })
+    public Forward back_unsecure()
+    {
+        return new Forward( "back_unsecure" );
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/security/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/security/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<netui:html>
+<head>
+<title>Security/Proxies</title>
+</head>
+<body bgcolor="white">
+
+<h3>Secure check</h3>
+
+<netui:form tagId="form" action="unsecure">
+
+    <netui:anchor action="secure" >Secure</netui:anchor>
+    <netui:anchor action="unsecure" >Unsecure</netui:anchor>
+</netui:form>
+
+
+</body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/security/page2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/security/page2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<netui:html>
+<body bgcolor="white">
+
+<h3>This is page 2!</h3>
+
+<netui:anchor action="back_secure" >Back to index Secure</netui:anchor><br>
+<netui:anchor action="back_unsecure" >Back to index Unsecure</netui:anchor>
+
+</body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/JpfTest10.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/JpfTest10.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,199 @@
+package singletonJpf.jpfTest10;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest10/JpfTest10.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="140" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="500" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:JspTest10a.jsp">
+ *   <property value="265" name="x"/>
+ *   <property value="245" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="560" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#JspTest10a.jsp#@action:begin.do@">
+ *   <property value="176,202,202,229" name="elbowsX"/>
+ *   <property value="123,123,237,237" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="external-jpf:jpf2/Jpf2.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest10a.jsp@#@action:finish.do@">
+ *   <property value="301,382,382,464" name="elbowsX"/>
+ *   <property value="226,226,232,232" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gblJpfTest10.do">
+ *   <property value="265" name="x"/>
+ *   <property value="365" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest10a.jsp@#@action:gblJpfTest10.do@">
+ *   <property value="265,265,265,265" name="elbowsX"/>
+ *   <property value="289,305,305,322" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest10/JpfTest10.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest10a.jsp'>",
+        "  <property value='265' name='x'/>",
+        "  <property value='245' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#JspTest10a.jsp#@action:begin.do@'>",
+        "  <property value='176,202,202,229' name='elbowsX'/>",
+        "  <property value='123,123,237,237' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='external-jpf:jpf2/Jpf2.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest10a.jsp@#@action:finish.do@'>",
+        "  <property value='301,382,382,464' name='elbowsX'/>",
+        "  <property value='226,226,232,232' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gblJpfTest10.do'>",
+        "  <property value='265' name='x'/>",
+        "  <property value='365' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest10a.jsp@#@action:gblJpfTest10.do@'>",
+        "  <property value='265,265,265,265' name='elbowsX'/>",
+        "  <property value='289,305,305,322' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class JpfTest10 extends PageFlowController
+    {
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession(), true);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("JpfTest10.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="JspTest10a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "JspTest10a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("JpfTest10.begin():" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        _log.tracePoint("JpfTest10.finish():" + _cnt);
+        return new Forward("gotoTraceResults");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/JspTest10a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/JspTest10a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest10</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf JpfTest10 - JspTest10a.jsp
+            </span>
+            <br/><br/>
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                <netui:anchor action="gblJpfTest10">Goto Jpf1 via Global.app</netui:anchor>
+                &nbsp;&nbsp;
+                <netui:anchor action="finish">Finish</netui:anchor>
+            </span>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>SingletonJpf JpfTest10</title>
+   </head>
+   <body>
+      <h3 align="center">SingletonJpf JpfTest10 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest10.jpf">Start test</a>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,300 @@
+package singletonJpf.jpfTest10.jpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller singleton="true"
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest10/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do#shared.FormA">
+ *   <property value="295" name="x"/>
+ *   <property value="275" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf2.do#shared.FormA">
+ *   <property value="350" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do#shared.FormA">
+ *   <property value="190" name="x"/>
+ *   <property value="290" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="130" name="x"/>
+ *   <property value="110" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@">
+ *   <property value="190,190,190,190" name="elbowsX"/>
+ *   <property value="214,230,230,246" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@">
+ *   <property value="226,270,270,314" name="elbowsX"/>
+ *   <property value="151,151,151,151" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1a.jsp">
+ *   <property value="190" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest10/jpf2/Jpf2.jpf">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest10/JpfTest10.jpf">
+ *   <property value="90" name="x"/>
+ *   <property value="70" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp1a.jsp#@action:begin.do@">
+ *   <property value="96,125,125,154" name="elbowsX"/>
+ *   <property value="32,32,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp1a.jsp#@action:begin.do#shared.FormA@">
+ *   <property value="259,242,242,226" name="elbowsX"/>
+ *   <property value="267,267,162,162" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest10/jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@">
+ *   <property value="314,215,215,116" name="elbowsX"/>
+ *   <property value="162,162,52,52" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest10/JpfTest10.jpf#@action:finish.do#shared.FormA@">
+ *   <property value="154,140,140,126" name="elbowsX"/>
+ *   <property value="282,282,62,62" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    singleton = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest10/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do#shared.FormA'>",
+        "  <property value='295' name='x'/>",
+        "  <property value='275' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf2.do#shared.FormA'>",
+        "  <property value='350' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='290' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='130' name='x'/>",
+        "  <property value='110' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='190,190,190,190' name='elbowsX'/>",
+        "  <property value='214,230,230,246' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='226,270,270,314' name='elbowsX'/>",
+        "  <property value='151,151,151,151' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest10/jpf2/Jpf2.jpf'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest10/JpfTest10.jpf'>",
+        "  <property value='90' name='x'/>",
+        "  <property value='70' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='96,125,125,154' name='elbowsX'/>",
+        "  <property value='32,32,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp1a.jsp#@action:begin.do#shared.FormA@'>",
+        "  <property value='259,242,242,226' name='elbowsX'/>",
+        "  <property value='267,267,162,162' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest10/jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='314,215,215,116' name='elbowsX'/>",
+        "  <property value='162,162,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest10/JpfTest10.jpf#@action:finish.do#shared.FormA@'>",
+        "  <property value='154,140,140,126' name='elbowsX'/>",
+        "  <property value='282,282,62,62' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _JPF1_VALUE = "Jpf1 value";
+
+    public String field1 = _INIT_VALUE;
+    private FormA _form = null;
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf1.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("Jpf1.begin():" + _cnt);
+        if (_form == null) _form = new FormA(getSession());
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin(FormA form) throws Exception
+        {
+        _log.tracePoint("Jpf1.begin(FormA):" + _cnt);
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest10/jpf2/Jpf2.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest10/jpf2/Jpf2.jpf") 
+        })
+    protected Forward gotoJpf2(FormA form)
+        {
+        _log.tracePoint("Jpf1.gotoJpf2(FormA):" + _cnt);
+        _form.setString1(_JPF1_VALUE);
+        field1 = _JPF1_VALUE;
+        return new Forward("go", form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest10/JpfTest10.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest10/JpfTest10.jpf") 
+        })
+    protected Forward finish(FormA form)
+        {
+        _log.tracePoint("Jpf1.finish(FormA):" + _cnt);
+        return new Forward("go");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest10</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest10 - Jsp1.Jsp1a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="finish">
+               <span style="font-size: 20px; color: blue; font-weight: bold">
+                    Page Flow field: <netui:content value="${pageFlow.field1}" />
+                    <br/>
+                    Form field: <netui:content value="${actionForm.string1}" />
+                    <br/><br/>
+                    <netui:button action="gotoJpf2" type="submit">Goto Secure Jpf2</netui:button>
+                    &nbsp;&nbsp;
+                    <netui:button action="finish" type="submit">Done</netui:button>
+                </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,209 @@
+package singletonJpf.jpfTest10.jpf2;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest10/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:begin.do#shared.FormA">
+ *   <property value="140" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf1.do#shared.FormA">
+ *   <property value="500" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@">
+ *   <property value="376,420,420,464" name="elbowsX"/>
+ *   <property value="123,123,241,241" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2a.jsp">
+ *   <property value="340" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest10/jpf1/Jpf1.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp2a.jsp#@action:begin.do#shared.FormA@">
+ *   <property value="176,240,240,304" name="elbowsX"/>
+ *   <property value="112,112,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest10/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@">
+ *   <property value="536,570,570,604" name="elbowsX"/>
+ *   <property value="252,252,252,252" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest10/JpfTest10.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest10/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do#shared.FormA'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf1.do#shared.FormA'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='123,123,241,241' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest10/jpf1/Jpf1.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp2a.jsp#@action:begin.do#shared.FormA@'>",
+        "  <property value='176,240,240,304' name='elbowsX'/>",
+        "  <property value='112,112,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest10/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='252,252,252,252' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest10/JpfTest10.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _JPF2_VALUE = "Jpf2 value";
+    public String field1 = null;
+    private FormA _form = null;
+
+    private shared.QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = shared.QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf2.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin(FormA form) throws Exception
+        {
+        _log.tracePoint("Jpf2.begin(FormA):" + _cnt);
+        field1 = _INIT_VALUE;
+        return new Forward("go", form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest10/jpf1/Jpf1.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest10/jpf1/Jpf1.jpf") 
+        })
+    protected Forward gotoJpf1(FormA form)
+        {
+        _log.tracePoint("Jpf2.gotoJpf1(FormA):" + _cnt);
+        form.setString1(_JPF2_VALUE);
+        field1 = _JPF2_VALUE;
+        return new Forward("go", form);
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest10/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest10</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest10 - Jsp2.Jsp2a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="gotoJpf1">
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                Page Flow field: <netui:content value="${pageFlow.field1}" />
+                <br/>
+                Form field: <netui:content value="${actionForm.string1}" />
+                <br/><br/>
+                <netui:button action="gotoJpf1" type="submit">Goto Jpf1</netui:button>
+                <br/><br/>
+                <netui:button action="gblJpfTest10" type="submit">Goto Jpf1 via Global.app</netui:button>
+            </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/JpfTest6.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/JpfTest6.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,287 @@
+package singletonJpf.jpfTest6;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ *   <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ *   <view-properties>
+ *   <pageflow-object id="pageflow:/singletonJpf/jpfTest6/JpfTest6.jpf"/>
+ *   <pageflow-object id="action:begin.do">
+ *     <property value="140" name="x"/>
+ *     <property value="120" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action:gotoJpf1.do">
+ *     <property value="500" name="x"/>
+ *     <property value="380" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action:gotoJpf2.do">
+ *     <property value="500" name="x"/>
+ *     <property value="80" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action:finish.do">
+ *     <property value="500" name="x"/>
+ *     <property value="240" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *     <property value="140" name="x"/>
+ *     <property value="260" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:/resources/jsp/error.jsp">
+ *     <property value="140" name="x"/>
+ *     <property value="420" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action-call:@page:JspTest6a.jsp@#@action:finish.do@">
+ *     <property value="376,420,420,464" name="elbowsX"/>
+ *     <property value="112,112,232,232" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action-call:@page:JspTest6a.jsp@#@action:gotoJpf1.do@">
+ *     <property value="376,420,420,464" name="elbowsX"/>
+ *     <property value="123,123,361,361" name="elbowsY"/>
+ *     <property value="East_2" name="fromPort"/>
+ *     <property value="West_0" name="toPort"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="action-call:@page:JspTest6a.jsp@#@action:gotoJpf2.do@">
+ *     <property value="376,420,420,464" name="elbowsX"/>
+ *     <property value="101,101,83,83" name="elbowsY"/>
+ *     <property value="East_0" name="fromPort"/>
+ *     <property value="West_2" name="toPort"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:JspTest6a.jsp">
+ *     <property value="340" name="x"/>
+ *     <property value="120" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="external-jpf:jpf1/Jpf1.jpf">
+ *     <property value="640" name="x"/>
+ *     <property value="380" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="external-jpf:jpf2/Jpf2.jpf">
+ *     <property value="640" name="x"/>
+ *     <property value="80" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:StartTest.jsp">
+ *     <property value="140" name="x"/>
+ *     <property value="560" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#go#JspTest6a.jsp#@action:begin.do@">
+ *     <property value="176,240,240,304" name="elbowsX"/>
+ *     <property value="112,112,123,123" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_2" name="toPort"/>
+ *     <property value="go" name="label"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#go#jpf1/Jpf1.jpf#@action:gotoJpf1.do@">
+ *     <property value="536,570,570,604" name="elbowsX"/>
+ *     <property value="372,372,372,372" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *     <property value="go" name="label"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#go#jpf2/Jpf2.jpf#@action:gotoJpf2.do@">
+ *     <property value="536,570,570,604" name="elbowsX"/>
+ *     <property value="72,72,72,72" name="elbowsY"/>
+ *     <property value="East_1" name="fromPort"/>
+ *     <property value="West_1" name="toPort"/>
+ *     <property value="go" name="label"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ *   <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ *   <pageflow-object id="page:/resources/jsp/done.jsp">
+ *     <property value="60" name="x"/>
+ *     <property value="40" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ *   </view-properties>
+ *   ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest6/JpfTest6.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf1.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf2.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest6a.jsp@#@action:finish.do@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='112,112,232,232' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest6a.jsp@#@action:gotoJpf1.do@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='123,123,361,361' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest6a.jsp@#@action:gotoJpf2.do@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='101,101,83,83' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest6a.jsp'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:jpf1/Jpf1.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:jpf2/Jpf2.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#JspTest6a.jsp#@action:begin.do@'>",
+        "  <property value='176,240,240,304' name='elbowsX'/>",
+        "  <property value='112,112,123,123' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#jpf1/Jpf1.jpf#@action:gotoJpf1.do@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#jpf2/Jpf2.jpf#@action:gotoJpf2.do@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='72,72,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "</view-properties>"
+    })
+public class JpfTest6 extends PageFlowController
+    {
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession(), true);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("JpfTest6.onCreate:" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="JspTest6a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "JspTest6a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("JpfTest6.begin:" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="jpf1/Jpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "jpf1/Jpf1.jpf") 
+        })
+    protected Forward gotoJpf1()
+        {
+        _log.tracePoint("JpfTest6.gotoJpf1:" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="jpf2/Jpf2.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "jpf2/Jpf2.jpf") 
+        })
+    protected Forward gotoJpf2()
+        {
+        _log.tracePoint("JpfTest6.gotoJpf2:" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        _log.tracePoint("JpfTest6.finish:" + _cnt);
+        return new Forward("gotoTraceResults");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/JspTest6a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/JspTest6a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest6</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf JpfTest6 - JspTest6a.jsp
+            </span>
+            <br/><br/>
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                <netui:anchor action="gotoJpf1">Singleton test</netui:anchor>
+                &nbsp;&nbsp;
+                <netui:anchor action="gotoJpf2">Non-singleton test</netui:anchor>
+                <br/><br/>
+                <netui:anchor action="finish">Done</netui:anchor>
+            </span>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>SingletonJpf JpfTest6</title>
+   </head>
+   <body>
+      <h3 align="center">SingletonJpf JpfTest6 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest6.jpf">Start test</a>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,268 @@
+package singletonJpf.jpfTest6.jpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller singleton="true"
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest6/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf2.do#shared.FormA">
+ *   <property value="310" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do#shared.FormA">
+ *   <property value="190" name="x"/>
+ *   <property value="290" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="130" name="x"/>
+ *   <property value="110" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@">
+ *   <property value="226,250,250,274" name="elbowsX"/>
+ *   <property value="162,162,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@">
+ *   <property value="190,190,190,190" name="elbowsX"/>
+ *   <property value="214,230,230,246" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1a.jsp">
+ *   <property value="190" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest6/jpf2/Jpf2.jpf">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest6/JpfTest6.jpf">
+ *   <property value="90" name="x"/>
+ *   <property value="70" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp1a.jsp#@action:begin.do@">
+ *   <property value="96,125,125,154" name="elbowsX"/>
+ *   <property value="32,32,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest6/jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@">
+ *   <property value="274,195,195,116" name="elbowsX"/>
+ *   <property value="151,151,52,52" name="elbowsY"/>
+ *   <property value="West_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest6/JpfTest6.jpf#@action:finish.do#shared.FormA@">
+ *   <property value="154,140,140,126" name="elbowsX"/>
+ *   <property value="282,282,62,62" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    singleton = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest6/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf2.do#shared.FormA'>",
+        "  <property value='310' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='290' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='130' name='x'/>",
+        "  <property value='110' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='226,250,250,274' name='elbowsX'/>",
+        "  <property value='162,162,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='190,190,190,190' name='elbowsX'/>",
+        "  <property value='214,230,230,246' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest6/jpf2/Jpf2.jpf'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest6/JpfTest6.jpf'>",
+        "  <property value='90' name='x'/>",
+        "  <property value='70' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='96,125,125,154' name='elbowsX'/>",
+        "  <property value='32,32,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest6/jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='274,195,195,116' name='elbowsX'/>",
+        "  <property value='151,151,52,52' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest6/JpfTest6.jpf#@action:finish.do#shared.FormA@'>",
+        "  <property value='154,140,140,126' name='elbowsX'/>",
+        "  <property value='282,282,62,62' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _NEW_VALUE = "New value";
+    public String field1 = null;
+    private FormA _form = null;
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf1.onCreate:" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("Jpf1.begin:" + _cnt);
+        if (_form == null)
+            {
+            _form = new FormA(getSession());
+            _form.setString1(_INIT_VALUE);
+            }
+        if (field1 == null)
+            {
+            field1 = _INIT_VALUE;
+            }
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest6/jpf2/Jpf2.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest6/jpf2/Jpf2.jpf") 
+        })
+    protected Forward gotoJpf2(FormA form)
+        {
+        _log.tracePoint("Jpf1.gotoJpf2:" + _cnt);
+        field1 = _NEW_VALUE;
+        form.setString1(_NEW_VALUE);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest6/JpfTest6.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest6/JpfTest6.jpf") 
+        })
+    protected Forward finish(FormA form)
+        {
+        _log.tracePoint("Jpf1.finish:" + _cnt);
+        return new Forward("go");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest6</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest6 - Jsp1.Jsp1a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="finish">
+               <span style="font-size: 20px; color: blue; font-weight: bold">
+                    Page Flow field: <netui:content value="${pageFlow.field1}" />
+                    <br/>
+                    Form field: <netui:content value="${actionForm.string1}" />
+                    <br/><br/>
+                    <netui:button action="gotoJpf2" type="submit">Goto Jpf2</netui:button>
+                    &nbsp;&nbsp;
+                    <netui:button action="finish" type="submit">Done</netui:button>
+                </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,267 @@
+package singletonJpf.jpfTest6.jpf2;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest6/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="140" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf1.do#shared.FormA">
+ *   <property value="500" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do#shared.FormA">
+ *   <property value="500" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:finish.do#shared.FormA@">
+ *   <property value="376,420,420,464" name="elbowsX"/>
+ *   <property value="112,112,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@">
+ *   <property value="376,420,420,464" name="elbowsX"/>
+ *   <property value="123,123,241,241" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2a.jsp">
+ *   <property value="340" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest6/jpf1/Jpf1.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest6/JpfTest6.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp2a.jsp#@action:begin.do@">
+ *   <property value="176,240,240,304" name="elbowsX"/>
+ *   <property value="112,112,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest6/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@">
+ *   <property value="536,570,570,604" name="elbowsX"/>
+ *   <property value="252,252,252,252" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest6/JpfTest6.jpf#@action:finish.do#shared.FormA@">
+ *   <property value="536,570,570,604" name="elbowsX"/>
+ *   <property value="112,112,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest6/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf1.do#shared.FormA'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='112,112,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='123,123,241,241' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest6/jpf1/Jpf1.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest6/JpfTest6.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp2a.jsp#@action:begin.do@'>",
+        "  <property value='176,240,240,304' name='elbowsX'/>",
+        "  <property value='112,112,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest6/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='252,252,252,252' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest6/JpfTest6.jpf#@action:finish.do#shared.FormA@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='112,112,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _NEW_VALUE = "New value";
+    public String field1 = null;
+    private shared.FormA _form = null;
+
+    private shared.QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = shared.QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf2.onCreate:" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        if (_form == null)
+            {
+            _form = new FormA(getSession());
+            _form.setString1(_INIT_VALUE);
+            }
+        if (field1 == null)
+            {
+            _log.tracePoint("Jpf2.begin:field1:" + _cnt);
+            field1 = _INIT_VALUE;
+            }
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest6/jpf1/Jpf1.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest6/jpf1/Jpf1.jpf") 
+        })
+    protected Forward gotoJpf1(FormA form)
+        {
+        _log.tracePoint("Jpf2.gotoJpf1:" + _cnt);
+        field1 = _NEW_VALUE;
+        form.setString1(_NEW_VALUE);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest6/JpfTest6.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest6/JpfTest6.jpf") 
+        })
+    protected Forward finish(FormA form)
+        {
+        _log.tracePoint("Jpf2.finish - instance:" + _cnt);
+        return new Forward("go");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest6</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest6 - Jsp2.Jsp2a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="finish">
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                Page Flow field: <netui:content value="${pageFlow.field1}" />
+                <br/>
+                Form field: <netui:content value="${actionForm.string1}" />
+                <br/><br/>
+                <netui:button action="gotoJpf1" type="submit">Goto Jpf1</netui:button>
+                &nbsp;&nbsp;
+                <netui:button action="finish" type="submit">Done</netui:button>
+            </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/subJpf1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/subJpf1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,59 @@
+package singletonJpf.jpfTest6.subJpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class SubJpf1 extends PageFlowController
+    {
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("SubJpf1.onCreate:" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="SubJsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "SubJsp1a.jsp") 
+        })
+    protected Forward begin()
+        {
+        _log.tracePoint("SubJpf1.begin:" + _cnt);
+        return new Forward("success");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="done" return-action="nestedDone"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "done",
+                returnAction = "nestedDone") 
+        })
+    public Forward finish()
+        {
+        _log.tracePoint("SubJpf1.done:" + _cnt);
+        return new Forward("done");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/subJpf1/SubJsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest6/subJpf1/SubJsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>ScopedJpf JpfTest2</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                ScopedJpf JpfTest2 - SubJpf1.SubJsp1a.jsp
+                <br/>
+                Scope: <netui:label value="${pageFlow.scope}"/>
+            </span>
+        <netui:form action="finish">
+            <netui:button action="finish" type="submit">Done</netui:button>
+        </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/JpfTest8.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/JpfTest8.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,237 @@
+package singletonJpf.jpfTest8;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest8/JpfTest8.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="140" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf1.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="500" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:JspTest8a.jsp">
+ *   <property value="265" name="x"/>
+ *   <property value="245" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:jpf1/Jpf1.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:jpf2/Jpf2.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="560" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#JspTest8a.jsp#@action:begin.do@">
+ *   <property value="176,202,202,229" name="elbowsX"/>
+ *   <property value="123,123,237,237" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#jpf1/Jpf1.jpf#@action:gotoJpf1.do@">
+ *   <property value="536,570,570,604" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="action-call:@page:JspTest8a.jsp@#@action:gotoJpf1.do@">
+ *   <property value="301,382,382,464" name="elbowsX"/>
+ *   <property value="237,237,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest8a.jsp@#@action:finish.do@">
+ *   <property value="301,382,382,464" name="elbowsX"/>
+ *   <property value="226,226,232,232" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest8/JpfTest8.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf1.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest8a.jsp'>",
+        "  <property value='265' name='x'/>",
+        "  <property value='245' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:jpf1/Jpf1.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:jpf2/Jpf2.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#JspTest8a.jsp#@action:begin.do@'>",
+        "  <property value='176,202,202,229' name='elbowsX'/>",
+        "  <property value='123,123,237,237' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#jpf1/Jpf1.jpf#@action:gotoJpf1.do@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='action-call:@page:JspTest8a.jsp@#@action:gotoJpf1.do@'>",
+        "  <property value='301,382,382,464' name='elbowsX'/>",
+        "  <property value='237,237,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest8a.jsp@#@action:finish.do@'>",
+        "  <property value='301,382,382,464' name='elbowsX'/>",
+        "  <property value='226,226,232,232' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class JpfTest8 extends PageFlowController
+    {
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession(), true);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("JpfTest8.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="JspTest8a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "JspTest8a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("JpfTest8.begin():" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="jpf1/Jpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "jpf1/Jpf1.jpf") 
+        })
+    protected Forward gotoJpf1()
+        {
+        _log.tracePoint("JpfTest8.gotoJpf1:" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        _log.tracePoint("JpfTest8.finish():" + _cnt);
+        return new Forward("gotoTraceResults");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/JspTest8a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/JspTest8a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest8</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf JpfTest8 - JspTest8a.jsp
+            </span>
+            <br/><br/>
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                <netui:anchor action="gotoJpf1">Goto Jpf1</netui:anchor>
+                &nbsp;&nbsp;
+                <netui:anchor action="finish">Finish</netui:anchor>
+            </span>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>SingletonJpf JpfTest8</title>
+   </head>
+   <body>
+      <h3 align="center">SingletonJpf JpfTest8 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest8.jpf">Start test</a>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,376 @@
+package singletonJpf.jpfTest8.jpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller singleton="true"
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest8/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:finish.do#shared.FormA">
+ *   <property value="190" name="x"/>
+ *   <property value="290" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="130" name="x"/>
+ *   <property value="110" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@">
+ *   <property value="190,190,190,190" name="elbowsX"/>
+ *   <property value="214,230,230,246" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1a.jsp">
+ *   <property value="190" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest8/jpf2/Jpf2.jpf">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest8/JpfTest8.jpf">
+ *   <property value="90" name="x"/>
+ *   <property value="70" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest8/JpfTest8.jpf#@action:finish.do#shared.FormA@">
+ *   <property value="154,140,140,126" name="elbowsX"/>
+ *   <property value="282,282,62,62" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="action:goSubJpf.do#shared.FormA">
+ *   <property value="310" name="x"/>
+ *   <property value="50" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:../subJpf1/SubJpf1.jpf">
+ *   <property value="270" name="x"/>
+ *   <property value="250" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#../subJpf1/SubJpf1.jpf#@action:goSubJpf.do#shared.FormA@">
+ *   <property value="274,270,270,270" name="elbowsX"/>
+ *   <property value="42,42,124,206" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnSubJpf.do#shared.FormA">
+ *   <property value="245" name="x"/>
+ *   <property value="225" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#go#currentPage#@action:returnSubJpf.do#shared.FormA@">
+ *   <property value="209,185,185,161" name="elbowsX"/>
+ *   <property value="217,217,337,337" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#go#currentPage#@action:returnSubJpf.do#shared.FormA@@">
+ *   <property value="125" name="x"/>
+ *   <property value="345" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:returnSubJpf.do">
+ *   <property value="390" name="x"/>
+ *   <property value="250" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:returnSubJpf.do@">
+ *   <property value="306,330,330,354" name="elbowsX"/>
+ *   <property value="242,242,242,242" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:goSubJpf.do#shared.FormA@">
+ *   <property value="226,250,250,274" name="elbowsX"/>
+ *   <property value="173,173,31,31" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp1a.jsp#@action:begin.do@">
+ *   <property value="96,125,125,154" name="elbowsX"/>
+ *   <property value="32,32,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do#shared.FormA">
+ *   <property value="295" name="x"/>
+ *   <property value="275" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp1a.jsp#@action:begin.do#shared.FormA@">
+ *   <property value="259,242,242,226" name="elbowsX"/>
+ *   <property value="267,267,162,162" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    singleton = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest8/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='290' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='130' name='x'/>",
+        "  <property value='110' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='190,190,190,190' name='elbowsX'/>",
+        "  <property value='214,230,230,246' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest8/jpf2/Jpf2.jpf'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest8/JpfTest8.jpf'>",
+        "  <property value='90' name='x'/>",
+        "  <property value='70' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest8/JpfTest8.jpf#@action:finish.do#shared.FormA@'>",
+        "  <property value='154,140,140,126' name='elbowsX'/>",
+        "  <property value='282,282,62,62' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='action:goSubJpf.do#shared.FormA'>",
+        "  <property value='310' name='x'/>",
+        "  <property value='50' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:../subJpf1/SubJpf1.jpf'>",
+        "  <property value='270' name='x'/>",
+        "  <property value='250' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#../subJpf1/SubJpf1.jpf#@action:goSubJpf.do#shared.FormA@'>",
+        "  <property value='274,270,270,270' name='elbowsX'/>",
+        "  <property value='42,42,124,206' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnSubJpf.do#shared.FormA'>",
+        "  <property value='245' name='x'/>",
+        "  <property value='225' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#go#currentPage#@action:returnSubJpf.do#shared.FormA@'>",
+        "  <property value='209,185,185,161' name='elbowsX'/>",
+        "  <property value='217,217,337,337' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#go#currentPage#@action:returnSubJpf.do#shared.FormA@@'>",
+        "  <property value='125' name='x'/>",
+        "  <property value='345' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:returnSubJpf.do'>",
+        "  <property value='390' name='x'/>",
+        "  <property value='250' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:../subJpf1/SubJpf1.jpf@#@action:returnSubJpf.do@'>",
+        "  <property value='306,330,330,354' name='elbowsX'/>",
+        "  <property value='242,242,242,242' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:goSubJpf.do#shared.FormA@'>",
+        "  <property value='226,250,250,274' name='elbowsX'/>",
+        "  <property value='173,173,31,31' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='96,125,125,154' name='elbowsX'/>",
+        "  <property value='32,32,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do#shared.FormA'>",
+        "  <property value='295' name='x'/>",
+        "  <property value='275' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp1a.jsp#@action:begin.do#shared.FormA@'>",
+        "  <property value='259,242,242,226' name='elbowsX'/>",
+        "  <property value='267,267,162,162' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _JPF1_VALUE = "Jpf1 value";
+    private FormA _form = null;
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf1.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("Jpf1.begin():" + _cnt);
+        if (_form == null)
+            {
+            _form = new FormA(getSession());
+            _form.setString1(_INIT_VALUE);
+            }
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin(FormA form) throws Exception
+        {
+        _log.tracePoint("Jpf1.begin(FormA):" + _cnt);
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="../subJpf1/SubJpf1.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "../subJpf1/SubJpf1.jpf") 
+        })
+    protected Forward goSubJpf(FormA form)
+        {
+        _log.tracePoint("Jpf1.goSubJpf(FormA):" + _cnt);
+        _form.setString1(_JPF1_VALUE);
+        return new Forward("go", form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" return-to="currentPage"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        })
+    protected Forward returnSubJpf(FormA form)
+        {
+        _log.tracePoint("Jpf1.returnSubJpf(FormA):" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest8/JpfTest8.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest8/JpfTest8.jpf") 
+        })
+    protected Forward finish(FormA form)
+        {
+        _log.tracePoint("Jpf1.finish(FormA):" + _cnt);
+        return new Forward("go");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest8</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest8 - Jsp1.Jsp1a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="finish">
+               <span style="font-size: 20px; color: blue; font-weight: bold">
+                    Form field: <netui:content value="${actionForm.string1}" />
+                    <br/><br/>
+                    <netui:button action="goSubJpf" type="submit">Goto SubJpf1</netui:button>
+                    &nbsp;&nbsp;
+                    <netui:button action="finish" type="submit">Finish</netui:button>
+                </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,205 @@
+package singletonJpf.jpfTest8.jpf2;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest8/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:gotoJpf1.do#shared.FormA">
+ *   <property value="500" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@">
+ *   <property value="376,420,420,464" name="elbowsX"/>
+ *   <property value="123,123,241,241" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2a.jsp">
+ *   <property value="340" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest8/jpf1/Jpf1.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest8/JpfTest8.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest8/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@">
+ *   <property value="536,570,570,604" name="elbowsX"/>
+ *   <property value="252,252,252,252" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="action:begin.do#shared.FormA">
+ *   <property value="140" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp2a.jsp#@action:begin.do#shared.FormA@">
+ *   <property value="176,240,240,304" name="elbowsX"/>
+ *   <property value="112,112,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest8/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:gotoJpf1.do#shared.FormA'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='123,123,241,241' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest8/jpf1/Jpf1.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest8/JpfTest8.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest8/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='252,252,252,252' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='action:begin.do#shared.FormA'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp2a.jsp#@action:begin.do#shared.FormA@'>",
+        "  <property value='176,240,240,304' name='elbowsX'/>",
+        "  <property value='112,112,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController
+    {
+    private static final String _JPF2_VALUE = "Jpf2 value";
+    private shared.FormA _form = null;
+
+    private shared.QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = shared.QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf2.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin(FormA form) throws Exception
+        {
+        _log.tracePoint("Jpf2.begin(FormA):" + _cnt);
+        return new Forward("go", form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest8/jpf1/Jpf1.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest8/jpf1/Jpf1.jpf") 
+        })
+    protected Forward gotoJpf1(FormA form)
+        {
+        _log.tracePoint("Jpf2.gotoJpf1(FormA):" + _cnt);
+        form.setString1(_JPF2_VALUE);
+        return new Forward("go", form);
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest8</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest8 - Jsp2.Jsp2a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="gotoJpf1">
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                Form field: <netui:content value="${actionForm.string1}" />
+                <br/><br/>
+                <netui:button action="gotoJpf1" type="submit">Goto Jpf1</netui:button>
+            </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/subJpf1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/subJpf1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,212 @@
+package singletonJpf.jpfTest8.subJpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest8/subJpf1/SubJpf1.jpf"/>
+ * <pageflow-object id="action:begin.do#shared.FormA">
+ *   <property value="100" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do#shared.FormA">
+ *   <property value="60" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1a.jsp@#@action:finish.do#shared.FormA@">
+ *   <property value="204,150,150,96" name="elbowsX"/>
+ *   <property value="123,123,281,281" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:SubJsp1a.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:returnSubJpf">
+ *   <property value="540" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#go#returnSubJpf#@action:finish.do#shared.FormA@">
+ *   <property value="96,300,300,504" name="elbowsX"/>
+ *   <property value="292,292,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf2.do#shared.FormA">
+ *   <property value="240" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest8/jpf2/Jpf2.jpf">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest8/jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="332,332,52,52" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#SubJsp1a.jsp#@action:begin.do#shared.FormA@">
+ *   <property value="136,170,170,204" name="elbowsX"/>
+ *   <property value="132,132,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:SubJsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="164,230,230,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    nested = true)
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest8/subJpf1/SubJpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do#shared.FormA'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='204,150,150,96' name='elbowsX'/>",
+        "  <property value='123,123,281,281' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:SubJsp1a.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:returnSubJpf'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#go#returnSubJpf#@action:finish.do#shared.FormA@'>",
+        "  <property value='96,300,300,504' name='elbowsX'/>",
+        "  <property value='292,292,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf2.do#shared.FormA'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest8/jpf2/Jpf2.jpf'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest8/jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='332,332,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#SubJsp1a.jsp#@action:begin.do#shared.FormA@'>",
+        "  <property value='136,170,170,204' name='elbowsX'/>",
+        "  <property value='132,132,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:SubJsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='164,230,230,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class SubJpf1 extends PageFlowController
+    {
+    private static final String _SUB_VALUE = "SubJpf value";
+    private FormA _form = null;
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("SubJpf1.onCreate:" + _cnt);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="SubJsp1a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "SubJsp1a.jsp") 
+        })
+    protected Forward begin(FormA form)
+        {
+        _log.tracePoint("SubJpf1.begin:" + _cnt);
+        return new Forward("go");
+        }
+
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest8/jpf2/Jpf2.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest8/jpf2/Jpf2.jpf") 
+        })
+    protected Forward gotoJpf2(FormA form)
+        {
+        _log.tracePoint("SubJpf1.gotoJpf2(FormA):" + _cnt);
+        form.setString1(_SUB_VALUE);
+        return new Forward("go", form);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" return-action="returnSubJpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                returnAction = "returnSubJpf") 
+        })
+    public Forward finish(FormA form)
+        {
+        _log.tracePoint("SubJpf1.finish(FormA):" + _cnt);
+        form.setString1(_SUB_VALUE);
+        return new Forward("go", form);
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/subJpf1/SubJsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest8/subJpf1/SubJsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest8</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest8 - SubJsp1.SubJsp1a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="finish">
+               <span style="font-size: 20px; color: blue; font-weight: bold">
+                    Form field: <netui:content value="${actionForm.string1}" />
+                    <br/><br/>
+                    <netui:button action="gotoJpf2" type="submit">Goto Jpf2</netui:button>
+                    &nbsp;&nbsp;
+                    <netui:button action="finish" type="submit">Return</netui:button>
+                </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/JpfTest9.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/JpfTest9.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,237 @@
+package singletonJpf.jpfTest9;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest9/JpfTest9.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="140" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf1.do">
+ *   <property value="500" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do">
+ *   <property value="500" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:JspTest9a.jsp">
+ *   <property value="265" name="x"/>
+ *   <property value="245" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:jpf1/Jpf1.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="380" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:jpf2/Jpf2.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:StartTest.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="560" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#JspTest9a.jsp#@action:begin.do@">
+ *   <property value="176,202,202,229" name="elbowsX"/>
+ *   <property value="123,123,237,237" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#jpf1/Jpf1.jpf#@action:gotoJpf1.do@">
+ *   <property value="536,570,570,604" name="elbowsX"/>
+ *   <property value="372,372,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="action-call:@page:JspTest9a.jsp@#@action:gotoJpf1.do@">
+ *   <property value="301,382,382,464" name="elbowsX"/>
+ *   <property value="237,237,372,372" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:JspTest9a.jsp@#@action:finish.do@">
+ *   <property value="301,382,382,464" name="elbowsX"/>
+ *   <property value="226,226,232,232" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest9/JpfTest9.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf1.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:JspTest9a.jsp'>",
+        "  <property value='265' name='x'/>",
+        "  <property value='245' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:jpf1/Jpf1.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:jpf2/Jpf2.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:StartTest.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#JspTest9a.jsp#@action:begin.do@'>",
+        "  <property value='176,202,202,229' name='elbowsX'/>",
+        "  <property value='123,123,237,237' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#jpf1/Jpf1.jpf#@action:gotoJpf1.do@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='372,372,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='action-call:@page:JspTest9a.jsp@#@action:gotoJpf1.do@'>",
+        "  <property value='301,382,382,464' name='elbowsX'/>",
+        "  <property value='237,237,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:JspTest9a.jsp@#@action:finish.do@'>",
+        "  <property value='301,382,382,464' name='elbowsX'/>",
+        "  <property value='226,226,232,232' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class JpfTest9 extends PageFlowController
+    {
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession(), true);
+        _cnt = _log.newClass(this);
+        _log.tracePoint("JpfTest9.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="JspTest9a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "JspTest9a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _log.tracePoint("JpfTest9.begin():" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="jpf1/Jpf1.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "jpf1/Jpf1.jpf") 
+        })
+    protected Forward gotoJpf1()
+        {
+        _log.tracePoint("JpfTest9.gotoJpf1:" + _cnt);
+        return new Forward("go");
+        }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward finish()
+        {
+        _log.tracePoint("JpfTest9.finish():" + _cnt);
+        return new Forward("gotoTraceResults");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/JspTest9a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/JspTest9a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest9</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf JpfTest9 - JspTest9a.jsp
+            </span>
+            <br/><br/>
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                <netui:anchor action="gotoJpf1">Goto Jpf1</netui:anchor>
+                &nbsp;&nbsp;
+                <netui:anchor action="finish">Finish</netui:anchor>
+            </span>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>SingletonJpf JpfTest9</title>
+   </head>
+   <body>
+      <h3 align="center">SingletonJpf JpfTest9 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="JpfTest9.jpf">Start test</a>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf1/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf1/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,309 @@
+package singletonJpf.jpfTest9.jpf1;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest9/jpf1/Jpf1.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:finish.do#shared.FormA">
+ *   <property value="190" name="x"/>
+ *   <property value="290" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="130" name="x"/>
+ *   <property value="110" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="140" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@">
+ *   <property value="190,190,190,190" name="elbowsX"/>
+ *   <property value="214,230,230,246" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp1a.jsp">
+ *   <property value="190" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:Jpf1.jpf">
+ *   <property value="270" name="x"/>
+ *   <property value="250" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest9/JpfTest9.jpf">
+ *   <property value="90" name="x"/>
+ *   <property value="70" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp1a.jsp#@action:begin.do@">
+ *   <property value="96,125,125,154" name="elbowsX"/>
+ *   <property value="32,32,162,162" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest9/JpfTest9.jpf#@action:finish.do#shared.FormA@">
+ *   <property value="154,140,140,126" name="elbowsX"/>
+ *   <property value="282,282,62,62" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest9/jpf2/Jpf2.jpf">
+ *   <property value="80" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@">
+ *   <property value="226,270,270,314" name="elbowsX"/>
+ *   <property value="151,151,151,151" name="elbowsY"/>
+ *   <property value="East_0" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do#shared.FormA">
+ *   <property value="295" name="x"/>
+ *   <property value="275" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf2.do#shared.FormA">
+ *   <property value="350" name="x"/>
+ *   <property value="170" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp1a.jsp#@action:begin.do#shared.FormA@">
+ *   <property value="259,242,242,226" name="elbowsX"/>
+ *   <property value="267,267,162,162" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest9/jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@">
+ *   <property value="314,215,215,116" name="elbowsX"/>
+ *   <property value="162,162,52,52" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest9/jpf1/Jpf1.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:finish.do#shared.FormA'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='290' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='130' name='x'/>",
+        "  <property value='110' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:finish.do#shared.FormA@'>",
+        "  <property value='190,190,190,190' name='elbowsX'/>",
+        "  <property value='214,230,230,246' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp1a.jsp'>",
+        "  <property value='190' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:Jpf1.jpf'>",
+        "  <property value='270' name='x'/>",
+        "  <property value='250' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest9/JpfTest9.jpf'>",
+        "  <property value='90' name='x'/>",
+        "  <property value='70' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp1a.jsp#@action:begin.do@'>",
+        "  <property value='96,125,125,154' name='elbowsX'/>",
+        "  <property value='32,32,162,162' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest9/JpfTest9.jpf#@action:finish.do#shared.FormA@'>",
+        "  <property value='154,140,140,126' name='elbowsX'/>",
+        "  <property value='282,282,62,62' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest9/jpf2/Jpf2.jpf'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp1a.jsp@#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='226,270,270,314' name='elbowsX'/>",
+        "  <property value='151,151,151,151' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do#shared.FormA'>",
+        "  <property value='295' name='x'/>",
+        "  <property value='275' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf2.do#shared.FormA'>",
+        "  <property value='350' name='x'/>",
+        "  <property value='170' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp1a.jsp#@action:begin.do#shared.FormA@'>",
+        "  <property value='259,242,242,226' name='elbowsX'/>",
+        "  <property value='267,267,162,162' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest9/jpf2/Jpf2.jpf#@action:gotoJpf2.do#shared.FormA@'>",
+        "  <property value='314,215,215,116' name='elbowsX'/>",
+        "  <property value='162,162,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf1 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _JPF1_VALUE = "Jpf1 value";
+
+    public String field1 = null;
+    private FormA _form = null;
+
+    private QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf1.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="go" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin() throws Exception
+        {
+        _form = new FormA(getSession());
+        _form.setString1(_INIT_VALUE);
+        field1 = _INIT_VALUE;
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="Jsp1a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp1a.jsp") 
+        })
+    protected Forward begin(FormA form) throws Exception
+        {
+        _log.tracePoint("Jpf1.begin(FormA):" + _cnt);
+        field1 = _INIT_VALUE;
+        return new Forward("go", _form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest9/jpf2/Jpf2.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest9/jpf2/Jpf2.jpf") 
+        })
+    protected Forward gotoJpf2(FormA form)
+        {
+        _log.tracePoint("Jpf1.gotoJpf2(FormA):" + _cnt);
+        _form.setString1(_JPF1_VALUE);
+        field1 = _JPF1_VALUE;
+        return new Forward("go", form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest9/JpfTest9.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest9/JpfTest9.jpf") 
+        })
+    protected Forward finish(FormA form)
+        {
+        _log.tracePoint("Jpf1.finish(FormA):" + _cnt);
+        return new Forward("go");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf1/Jsp1a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf1/Jsp1a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest9</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest9 - Jsp1.Jsp1a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="finish">
+               <span style="font-size: 20px; color: blue; font-weight: bold">
+                    Page Flow field: <netui:content value="${pageFlow.field1}" />
+                    <br/>
+                    Form field: <netui:content value="${actionForm.string1}" />
+                    <br/><br/>
+                    <netui:button action="gotoJpf2" type="submit">Goto Secure Jpf2</netui:button>
+                    &nbsp;&nbsp;
+                    <netui:button action="finish" type="submit">Done</netui:button>
+                </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf2/Jpf2.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf2/Jpf2.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,210 @@
+package singletonJpf.jpfTest9.jpf2;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+import shared.QaTrace;
+
+/**
+ * @jpf:controller singleton="true"
+ * @jpf:forward name="gotoDone" redirect="true" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoTraceResults" redirect="true" path="/resources/jsp/qaTraceResults.jsp"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/singletonJpf/jpfTest9/jpf2/Jpf2.jpf"/>
+ * <pageflow-object id="action:begin.do#shared.FormA">
+ *   <property value="140" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:gotoJpf1.do#shared.FormA">
+ *   <property value="500" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/done.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/error.jsp">
+ *   <property value="140" name="x"/>
+ *   <property value="420" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:/resources/jsp/qaTraceResults.jsp">
+ *   <property value="60" name="x"/>
+ *   <property value="40" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@">
+ *   <property value="376,420,420,464" name="elbowsX"/>
+ *   <property value="123,123,241,241" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Jsp2a.jsp">
+ *   <property value="340" name="x"/>
+ *   <property value="120" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest9/jpf1/Jpf1.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="260" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#Jsp2a.jsp#@action:begin.do#shared.FormA@">
+ *   <property value="176,240,240,304" name="elbowsX"/>
+ *   <property value="112,112,112,112" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#go#/singletonJpf/jpfTest9/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@">
+ *   <property value="536,570,570,604" name="elbowsX"/>
+ *   <property value="252,252,252,252" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="go" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#gotoDone#/resources/jsp/done.jsp"/>
+ * <pageflow-object id="forward:path#gotoError#/resources/jsp/error.jsp"/>
+ * <pageflow-object id="forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp"/>
+ * <pageflow-object id="external-jpf:/singletonJpf/jpfTest9/JpfTest9.jpf">
+ *   <property value="640" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ *
+ */
+@Jpf.Controller(
+    singleton = true,
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            redirect = true,
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoTraceResults",
+            redirect = true,
+            path = "/resources/jsp/qaTraceResults.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/singletonJpf/jpfTest9/jpf2/Jpf2.jpf'/>",
+        "<pageflow-object id='action:begin.do#shared.FormA'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:gotoJpf1.do#shared.FormA'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/done.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/error.jsp'>",
+        "  <property value='140' name='x'/>",
+        "  <property value='420' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:/resources/jsp/qaTraceResults.jsp'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='40' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:Jsp2a.jsp@#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='376,420,420,464' name='elbowsX'/>",
+        "  <property value='123,123,241,241' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Jsp2a.jsp'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest9/jpf1/Jpf1.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#Jsp2a.jsp#@action:begin.do#shared.FormA@'>",
+        "  <property value='176,240,240,304' name='elbowsX'/>",
+        "  <property value='112,112,112,112' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#go#/singletonJpf/jpfTest9/jpf1/Jpf1.jpf#@action:gotoJpf1.do#shared.FormA@'>",
+        "  <property value='536,570,570,604' name='elbowsX'/>",
+        "  <property value='252,252,252,252' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='go' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#gotoDone#/resources/jsp/done.jsp'/>",
+        "<pageflow-object id='forward:path#gotoError#/resources/jsp/error.jsp'/>",
+        "<pageflow-object id='forward:path#gotoTraceResults#/resources/jsp/qaTraceResults.jsp'/>",
+        "<pageflow-object id='external-jpf:/singletonJpf/jpfTest9/JpfTest9.jpf'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Jpf2 extends PageFlowController
+    {
+    private static final String _INIT_VALUE = "Initial value";
+    private static final String _JPF2_VALUE = "Jpf2 value";
+    public String field1 = null;
+    private FormA _form = null;
+
+    private shared.QaTrace _log = null;
+    private int     _cnt = 0;
+
+    /**
+     * onCreate
+     */
+    public void onCreate() throws Exception
+        {
+        _log = shared.QaTrace.getTrace(getSession());
+        _cnt = _log.newClass(this);
+        _log.tracePoint("Jpf2.onCreate():" + _cnt);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="Jsp2a.jsp"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "Jsp2a.jsp") 
+        })
+    protected Forward begin(FormA form) throws Exception
+        {
+        _log.tracePoint("Jpf2.begin(FormA):" + _cnt);
+        field1 = _INIT_VALUE;
+        return new Forward("go", form);
+        }
+
+    /**
+     * @jpf:action form="_form"
+     * @jpf:forward name="go" path="/singletonJpf/jpfTest9/jpf1/Jpf1.jpf"
+     */
+    @Jpf.Action(
+        useFormBean = "_form",
+        forwards = {
+            @Jpf.Forward(
+                name = "go",
+                path = "/singletonJpf/jpfTest9/jpf1/Jpf1.jpf") 
+        })
+    protected Forward gotoJpf1(FormA form)
+        {
+        _log.tracePoint("Jpf2.gotoJpf1(FormA):" + _cnt);
+        form.setString1(_JPF2_VALUE);
+        field1 = _JPF2_VALUE;
+        return new Forward("go", form);
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf2/Jsp2a.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/singletonJpf/jpfTest9/jpf2/Jsp2a.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+    <head>
+        <title>SingletonJpf JpfTest9</title>
+    </head>
+    <body>
+        <center>
+            <span style="font-size: 20px; color: green; font-weight: bold">
+                SingletonJpf
+                <br/>
+                JpfTest9 - Jsp2.Jsp2a.jsp
+            </span>
+            <br/><br/>
+            <netui:form action="gotoJpf1">
+           <span style="font-size: 20px; color: blue; font-weight: bold">
+                Page Flow field: <netui:content value="${pageFlow.field1}" />
+                <br/>
+                Form field: <netui:content value="${actionForm.string1}" />
+                <br/><br/>
+                <netui:button action="gotoJpf1" type="submit">Goto Jpf1</netui:button>
+            </span>
+            </netui:form>
+        </center>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/site/SiteTemplate.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/site/SiteTemplate.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title><temp:attribute name="title"/></title>
+<link rel="stylesheet" href="/coreWeb/site/style.css">
+<netui:base />
+</head>
+<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
+<table class="header" width="100%">
+<tr><td width="150" style="padding:4,0,0,4">
+  <img src="/coreWeb/images/launch.jpg" height="66" width="48"/>
+</td><td valign="top">
+<h1 class="title"><temp:attribute name="title"/></h1>
+</td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+</table>
+
+<table class="outer" cellpadding="0" cellspacing="0">
+<tr>
+<span>
+<td class="toc" valign="top" width="150">
+<temp:includeSection name="toc" defaultPage="/testToc.jsp"/>
+</td>
+<td valign="top">
+<div class="body">
+<temp:includeSection name="body"/>
+</div>
+</td>
+</tr>
+</table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/site/style.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/site/style.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+a.outer { font-family:Verdana; font-size:8pt; }
+a.outer:hover { color:660066 }
+a:hover { color:996699 }
+a.link { font-family:Verdana; font-size:8pt; padding-left:25; padding-top:25}
+
+h1.title { font-family:Verdana; font-size:16pt; color:660066; }
+
+table.header {background-color:99CC99; }
+table.site {background-color:99CC99; }
+
+td.toc { font-family:Verdana; font-size:8pt; background-color:99CC99; }
+td.demo { font-family:Verdana; font-size:8pt; }
+
+div.toc {
+        margin-top: 20px;
+        width: 140;
+        margin-left: 10px;
+        font-family: Verdana, Arial, Helvetica; 
+        background-color:99CC99;        
+}
+
+div.indent {
+        font-family:Verdana;
+        font-size:8pt;
+        padding-left:10;
+        padding-top:10
+}
+
+div.body {
+        margin-top:20px;
+        margin-left:15px;
+        margin-right:15px;
+        font-size:10pt;
+        font-family: Verdana, Tahoma, Arial, Helvetica; 
+        background-color:FFFFFF;
+}
+
+table.test {
+        margin:0,0,0,0;
+        padding:0,0,0,0;
+        border-color=660066;
+        border:thick;
+        background-color:white;
+}
+
+
+
+span.subhead   { font-size:12pt }
+
+hr { text-align:left; }
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsFormBeanIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsFormBeanIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,58 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%----------------- Struts Form Bean tests -----------------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center">
+               <font color="blue">Struts Form Bean Tests</font>
+            </h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%----------------------------------------------------------------%>
+            <%---------------------- Table headings --------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%-------------------- Struts FormBean Test 1 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="formBean/test1/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test1
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="formBean/test1/TestDescription.txt"/>
+               </td>
+            </tr>
+            <%----------------------------------------------------------------%>
+            <%-------------------- Struts FormBean Test 2 --------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="formBean/test2/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test2
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="formBean/test2/TestDescription.txt"/>
+               </td>
+            </tr>
+            </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsInteropIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsInteropIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+         <%-------------------------------------------------------------------%>
+         <%------------------- Struts Interop Tests --------------------------%>
+         <%-------------------------------------------------------------------%>
+         <h3 align="center"><font color="blue">Interop Tests</font></h3>
+         <table border="1" width="100%" cellspacing="0">
+            <%----------------------------------------------------------------%>
+            <%---------------------- Table headings --------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+            <%----------------------------------------------------------------%>
+            <%---------------------- Test 1 ----------------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top >
+                  <a href="interOp/test1/Start.jsp">Test1</a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <% request.setAttribute("position", "Index"); %>
+                  <jsp:include page="interOp/test1/TestHeader.jsp"/>
+               </td>
+            </tr>
+            <%----------------------------------------------------------------%>
+            <%---------------------- Test 2 ----------------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="interOp/test2/Start.jsp">Test2</a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <% request.setAttribute("position", "Index"); %>
+                  <jsp:include page="interOp/test2/TestHeader.jsp"/>
+               </td>
+            </tr>
+            <%----------------------------------------------------------------%>
+            <%---------------------- Test 3 ----------------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="interOp/test3/Start.jsp">Test3</a>
+               </td>
+               <td width="10%" valign=top >
+                 Automated
+               </td>
+               <td>
+                  <% request.setAttribute("position", "Index"); %>
+                  <jsp:include page="interOp/test3/TestHeader.jsp"/>
+               </td>
+            </tr>
+            <%----------------------------------------------------------------%>
+            <%---------------------- Test 4 ----------------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="interOp/test4/Start.jsp">Test4</a>
+               </td>
+                <td width="10%" valign=top >
+                  Automated
+                </td>
+                <td>
+                  <% request.setAttribute("position", "Index"); %>
+                  <jsp:include page="interOp/test4/TestHeader.jsp"/>
+                </td>
+            </tr>
+            <%----------------------------------------------------------------%>
+            <%---------------------- Test 5 ----------------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+                <td width="15%" valign=top>
+                  <a href="interOp/test5/Start.jsp">Test5</a>
+                </td>
+                <td width="10%" valign=top >
+                  Automated
+                </td>
+                <td>
+                  <% request.setAttribute("position", "Index"); %>
+                  <jsp:include page="interOp/test5/TestHeader.jsp"/>
+                </td>
+            </tr>
+       </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+package strutsMerge.test2;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.ActionMapping;
+
+public class Jpf1 extends PageFlowController
+    {
+    protected transient global.Global globalApp;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp") 
+        })
+    protected Forward action1()
+        { 
+        ActionMapping mapping = getMapping();
+        System.out.println(">>> Jpf1.action1");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>Merge Test2</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test2 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor href="unHandledAction.do">Raise action unKnown</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test2/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Merge Test2</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test2 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,103 @@
+package strutsMerge.test3;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller struts-merge="/strutsMerge/test3/merge-jpf-struts-config.xml"
+ */
+@Jpf.Controller(
+    strutsMerge = "/strutsMerge/test3/merge-jpf-struts-config.xml")
+public class Jpf1 extends PageFlowController
+    {
+    protected transient global.Global globalApp;
+    private static final String TEST_STR = "Test Value";
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward jpfAction1(Form1 inForm)
+        {
+        System.out.println(">>> Jpf1.jpfAction1 - form instance: ("
+                           + inForm.toString() + ").");
+        inForm.setField1(TEST_STR);
+        return new Forward("gotoPg2");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+     * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward jpfAction2(Form1 inForm)
+        {
+        System.out.println(">>> Jpf1.jpfAction2 - form instance: ("
+                           + inForm.toString() + ").");
+        if (inForm.getField1().equals(TEST_STR) != true)
+            {
+            return new Forward("gotoError");
+            }
+        return new Forward("gotoDone");
+        }
+
+    /***************************************************************************
+     *
+     **************************************************************************/
+    public static class Form1 extends org.apache.beehive.netui.pageflow.FormData
+        {
+        private String field1 = "Default value";
+        public Form1()
+            {
+            super();
+            System.out.println(">>> Form1.constructor - instance: ("
+                               + this.toString() + ").");
+            }
+        public void setField1(String inField1)
+            {
+            System.out.println(">>> Form1.setField1 - instance: (" + this.toString()
+                               + ") old value: (" + field1
+                               + ") new value: (" + inField1 + ").");
+            this.field1 = inField1;
+            }
+        public String getField1()
+            {
+            System.out.println(">>> Form1.getField1 - instance: (" + this.toString()
+                               + ") field1 value: (" + field1 + ").");
+            return this.field1;
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>Merge Test3</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test3 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="jpfAction1">
+                <table>
+                    <tr>
+                        <td>Field1</td>
+                        <td><netui:textBox dataSource="actionForm.field1"/></td>
+                    </tr>
+                </table>
+                <netui:button action="jpfAction1" value="continue" type="submit"/>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>Merge Test3</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test3 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="jpfAction2">
+                <table>
+                    <tr class="tablebody">
+                        <td>Field1</td>
+                        <td>
+                            <netui:textBox dataSource="actionForm.field1"/>
+                        </td>
+                    </tr>
+                </table>
+                <netui:button action="jpfAction2" value="continue" type="submit"/>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Merge Test3</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test3 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test3/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions =================================== -->
+    <form-beans>
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================== -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+        <action
+            path="/jpfAction1"
+            scope="session"
+            parameter="jpfAction1" >
+        </action>
+        <action
+            path="/jpfAction2"
+            scope="session"
+            parameter="jpfAction2" >
+        </action>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,132 @@
+package strutsMerge.test4;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller struts-merge="/strutsMerge/test4/merge-jpf-struts-config.xml"
+ */
+@Jpf.Controller(
+    strutsMerge = "/strutsMerge/test4/merge-jpf-struts-config.xml")
+public class Jpf1 extends PageFlowController
+    {
+    protected transient global.Global globalApp;
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward jpfAction1(Form1 inForm)
+        {
+        System.out.println(">>> Jpf1.jpfAction1(Form1)");
+        return new Forward("gotoPg2");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+    protected Forward jpfAction1(Form2 inForm)
+        {
+        System.out.println(">>> Jpf1.jpfAction1(Form2)");
+        return new Forward("gotoPg2");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward jpfAction2(Form1 inForm)
+        {
+        System.out.println(">>> Jpf1.jpfAction2(Form1)");
+        return new Forward("gotoError");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+     * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp"),
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward jpfAction2(Form2 inForm)
+        {
+        System.out.println(">>> Jpf1.jpfAction2(Form2)");
+        if (inForm.getField1().equals(Form2.DEFAULT_FORM_VALUE) != true)
+            {
+            return new Forward("gotoError");
+            }
+        return new Forward("gotoDone");
+        }
+
+    /***************************************************************************
+     *
+     **************************************************************************/
+    public static class Form1 extends org.apache.beehive.netui.pageflow.FormData
+        {
+        private String field1 = "Form1 default value";
+
+        public Form1()
+            {
+            super();
+            System.out.println(">>> Form1.constructor - instance: ("
+                               + this.toString() + ").");
+            }
+        public void setField1(String inField1)
+            {
+            System.out.println(">>> Form1.setField1 - instance: (" + this.toString()
+                               + ")\n\told value: (" + field1
+                               + ")\n\tnew value: (" + inField1 + ").");
+            this.field1 = inField1;
+            }
+        public String getField1()
+            {
+            System.out.println(">>> Form1.getField1 - instance: (" + this.toString()
+                               + ")\n\tfield1 value: (" + field1 + ").");
+            return this.field1;
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>Merge Test4</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test4 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="jpfAction1">
+                <table>
+                    <tr>
+                        <td>Field1</td>
+                        <td>
+                            <netui:textBox dataSource="actionForm.field1"/>
+                        </td>
+                    </tr>
+                </table>
+            </netui:form>
+            <netui:anchor action="jpfAction1">continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+    <head>
+        <title>Merge Test4</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test4 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:form action="jpfAction2_strutsMerge_test4_Form2">
+                <table>
+                    <tr>
+                        <td>Field1</td>
+                        <td>
+                            <netui:textBox dataSource="actionForm.field1"/>
+                        </td>
+                    </tr>
+                </table>
+            </netui:form>
+            <netui:anchor action="jpfAction2_strutsMerge_test4_Form2">continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Merge Test4</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test4 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test4/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions =================================== -->
+    <form-beans>
+        <form-bean name="form1" type="strutsMerge.test4.Form2"/>
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================== -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,141 @@
+package strutsMerge.test6;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller struts-merge="/strutsMerge/test6/merge-jpf-struts-config.xml"
+ */
+@Jpf.Controller(
+    strutsMerge = "/strutsMerge/test6/merge-jpf-struts-config.xml")
+public class Jpf1 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * Special note:  I have added the forward "gotoDone" here in this method
+     * as the exception handler "xHandler2" will forward to "gotoDone" if the
+     * "struts-merge" works as it should.  And since exception handlers
+     * "forwards" are actually added to config xml for the action that threw
+     * the error I needed to add the "gotoDone" forward here.  The
+     * exception-handlers forwards are added based based on the "jpf:catch"
+     * annotation.  This is a bit of a hack but I did it to simply this test.
+     *
+     * @jpf:action
+     * @jpf:forward name="gotoError1" path="/resources/jsp/error.jsp"
+     * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+     * @jpf:catch type="strutsMerge.test6.Jpf1$Test1Exception"
+     *              method="xHandler1"
+     *              message="Test message text from jpfAction1"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoError1",
+                path = "/resources/jsp/error.jsp"),
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp") 
+        },
+        catches = {
+            @Jpf.Catch(
+                type = strutsMerge.test6.Jpf1.Test1Exception.class,
+                method = "xHandler1",
+                message = "Test message text from jpfAction1") 
+        })
+    protected Forward jpfAction1(Form1 inForm) throws Exception
+        {
+        System.out.println(">>> Jpf1.jpfAction1");
+        if (inForm.getField1() == true)
+            {
+            System.out.println(">>> Jpf1.jpfAction1 - Throw exception.");
+            throw new Test1Exception();
+            }
+        System.out.println(">>> Jpf1.jpfAction1 - Going to gotoError1.");
+        return new Forward("gotoError1");
+        }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="gotoError2" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoError2",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward xHandler1(Test1Exception InX, String inActionName
+                                ,String inMessage, Object inForm)
+        {
+        System.out.println(">>> Jpf1.xHandler1");
+        return new Forward( "gotoError2" );
+        }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/done.jsp") 
+        })
+    protected Forward xHandler2(Test1Exception InX, String inActionName
+                                ,String inMessage, Object inForm)
+        {
+        System.out.println(">>> Jpf1.xHandler2");
+        return new Forward( "gotoDone" );
+        }
+
+    /***************************************************************************
+     *
+     **************************************************************************/
+    public static class Test1Exception extends Exception
+        {
+        }
+
+    /***************************************************************************
+     *
+     **************************************************************************/
+    public static class Form1 extends org.apache.beehive.netui.pageflow.FormData
+        {
+        private boolean field1 = true;
+
+        public Form1()
+            {
+            super();
+            System.out.println(">>> Form1.constructor - instance: ("
+                               + this.toString() + ").");
+            }
+        public void setField1(boolean inField1)
+            {
+            System.out.println(">>> Form1.setField1 - instance: ("
+                               + this.toString() + ").");
+            this.field1 = inField1;
+            }
+        public boolean getField1()
+            {
+            System.out.println(">>> Form1.getField1 - instance: ("
+                               + this.toString() + ").");
+            return this.field1;
+            }
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+    <head>
+        <title>Merge Test6</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test6 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <h3 align="center">
+            If you check the box and "submit" you should be<br/>
+            taken to the "done.jsp" page.  If you uncheck the<br/>
+            box you should be taken to the "error.jsp" page.
+        </h3>
+        <center>
+            <netui:form action="jpfAction1">
+                <table>
+                    <tr>
+                        <td>Check to throw the exception</td>
+                        <td><netui:checkBox dataSource="actionForm.field1"/></td>
+                    </tr>
+                </table>
+                <netui:button action="jpfAction1" value="Submit" type="submit"/>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Merge Test6</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test6 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test6/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions =================================== -->
+    <form-beans>
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================== -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+        <action
+            path="/jpfAction1"
+            parameter="throw-exception" >
+            <exception
+                type="strutsMerge.test6.Jpf1$Test1Exception"
+                key=""
+                handler="xHandler2">
+                <set-property value="true" property="isHandlerMethod"/>
+            </exception>
+        </action>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+package strutsMerge.test62;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import shared.FormA;
+
+/**
+ * @jpf:controller struts-merge="/strutsMerge/test62/merge-jpf-struts-config.xml"
+ * @jpf:forward name="gotoDone" path="/resources/jsp/done.jsp"
+ * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+ */
+@Jpf.Controller(
+    strutsMerge = "/strutsMerge/test62/merge-jpf-struts-config.xml",
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp"),
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1(FormA inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean FormB
+    ***************************************************************************/
+   public static class FormB extends FormA
+      {
+      public static final  String   STR_VAL3 = "String 3 value";
+      private              String   _str     = STR_VAL3;
+
+      // String1 getter/setter
+      //------------------------------------------------------------------------
+      public void setString3(String inVal)
+         {
+         _str = inVal;
+         }
+      public String getString3()
+         {
+         return _str;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+    <head>
+        <title>Merge Test62</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test62 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+         <netui:form action="action1">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/>
+
+            String 3:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string3"/>
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+         </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>StrutsMerge Test62</title>
+   </head>
+   <body>
+      <h3 align="center">StrutsMerge Test62 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <netui:anchor action="finish">Finish...</netui:anchor>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Merge Test62</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test62 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test62/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions =================================== -->
+    <form-beans>
+       <form-bean name="formB" type="strutsMerge.test62.Jpf1$FormB"/>
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================== -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+        <action path="/action1" name="formB" >
+        </action>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+package strutsMerge.test7;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import strutsMerge.test7.Form1;
+
+/**
+ * @jpf:controller struts-merge="/strutsMerge/test7/merge-jpf-struts-config.xml"
+ */
+@Jpf.Controller(
+    strutsMerge = "/strutsMerge/test7/merge-jpf-struts-config.xml")
+public class Jpf1 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoError" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoError",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward jpfAction1(Form1 inForm) throws Exception
+        {
+        System.out.println(">>> Jpf1.jpfAction1");
+        return new Forward("gotoError");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+    <head>
+        <title>Merge Test7</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test7 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <h3 align="center">
+            Press submit and you should be taken to the "done.jsp" page.
+        </h3>
+        <center>
+            <netui:form action="jpfAction1">
+                <table>
+                    <tr>
+                        <td><netui:textBox dataSource="actionForm.field1"/></td>
+                    </tr>
+                </table>
+                <netui:button action="jpfAction1" value="Submit" type="submit"/>
+            </netui:form>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Merge Test7</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test7 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test7/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions =================================== -->
+    <form-beans>
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================== -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+        <action path="/jpfAction1" type="strutsMerge.test7.Struts1" parameter="jpfAction1" >
+            <forward name="gotoStrutsDone" contextRelative="true" path="/resources/jsp/done.jsp" />
+        </action>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,46 @@
+package strutsMerge.test8;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller struts-merge="/strutsMerge/test8/merge-jpf-struts-config.xml"
+ */
+@Jpf.Controller(
+    strutsMerge = "/strutsMerge/test8/merge-jpf-struts-config.xml")
+public class Jpf1 extends PageFlowController
+    {
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+    protected Forward begin()
+        {
+        System.out.println(">>> Jpf1.begin");
+        return new Forward("gotoPg1");
+        }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="gotoDone" path="/resources/jsp/error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoDone",
+                path = "/resources/jsp/error.jsp") 
+        })
+    protected Forward jpfAction1() throws Exception
+        {
+        System.out.println(">>> Jpf1.jpfAction1");
+        return new Forward("gotoDone");
+        }
+    }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+    <head>
+        <title>Merge Test8</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test8 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <netui:anchor action="jpfAction1">Continue</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Merge Test8</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test8 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/merge-jpf-struts-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMerge/test8/merge-jpf-struts-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE struts-config PUBLIC
+          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+
+<struts-config>
+
+    <!-- ========== Form Bean Definitions =================================== -->
+    <form-beans>
+    </form-beans>
+
+    <!-- ========== Global Forward Definitions ============================== -->
+    <global-forwards>
+    </global-forwards>
+
+    <!-- ========== Action Mapping Definitions ============================== -->
+    <action-mappings>
+        <action path="/jpfAction1" parameter="jpfAction1" >
+            <forward contextRelative="true" path="/resources/jsp/done.jsp" name="gotoDone"/>
+        </action>
+    </action-mappings>
+
+</struts-config>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMergeIndex.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/strutsMergeIndex.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,147 @@
+<html>
+   <head>
+     <title>Struts Interop BVT Test Suite</title>
+   </head>
+   <body>
+            <%----------------------------------------------------------------%>
+            <%-------------------- Struts Merge Tests ------------------------%>
+            <%----------------------------------------------------------------%>
+            <h3 align="center"><font color="blue">Struts Merge Tests</font></h3>
+            <table border="1" width="100%" cellspacing="0">
+            <%----------------------------------------------------------------%>
+            <%---------------------- Table headings --------------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <th align="left">Test Name</th>
+               <th align="left">Test Status</th>
+               <th align="left">Test Description</th>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- StrutsMerge Test 2 ----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="strutsMerge/test2/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test2
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="strutsMerge/test2/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- StrutsMerge Test 3 ----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="strutsMerge/test3/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test3
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="strutsMerge/test3/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- StrutsMerge Test 4 ----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="strutsMerge/test4/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test4
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="strutsMerge/test4/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- StrutsMerge Test 6 ----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="strutsMerge/test6/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test6
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="strutsMerge/test6/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- StrutsMerge Test 7 ----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="strutsMerge/test7/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test7
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+               <td>
+                  <jsp:include page="strutsMerge/test7/TestDescription.txt"/>
+               </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- StrutsMerge Test 8 ----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="strutsMerge/test8/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test8
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+                <td>
+                   <jsp:include page="strutsMerge/test8/TestDescription.txt"/>
+                </td>
+            </tr>
+
+            <%----------------------------------------------------------------%>
+            <%---------------------- StrutsMerge Test 62 ----------------------%>
+            <%----------------------------------------------------------------%>
+            <tr>
+               <td width="15%" valign=top>
+                  <a href="strutsMerge/test62/StartTest.jsp">
+                     <img  src="resources/images/bullet.gif" border="0"
+                           alt="Run the test"> Test62
+                  </a>
+               </td>
+               <td width="10%" valign=top >
+                  Automated
+               </td>
+                <td>
+                   <jsp:include page="strutsMerge/test62/TestDescription.txt"/>
+                </td>
+            </tr>
+        </table>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,175 @@
+package tags.RepeatCheck;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:Options"/>
+ * <pageflow-object id="action:post.do"/>
+ * <pageflow-object id="forward:path#index#Results.jsp#@action:post.do@"/>
+ * <pageflow-object id="page:Results.jsp"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:post.do@"/>
+ * <pageflow-object id="action-call:@page:Results.jsp@#@action:begin.do@"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:Options'/>",
+        "<pageflow-object id='action:post.do'/>",
+        "<pageflow-object id='forward:path#index#Results.jsp#@action:post.do@'/>",
+        "<pageflow-object id='page:Results.jsp'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do@'/>",
+        "<pageflow-object id='action-call:@page:Results.jsp@#@action:begin.do@'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private Options[] opts;
+    private String[] resultsOne;
+    private String[] resultsTwo;
+
+    public Options[] getOpts()
+    {
+        return opts;
+    }
+
+    public void setOpts(Options[] opts)
+    {
+        this.opts = opts;
+    }
+
+    public String[] getResultsOne()
+    {
+        return resultsOne;
+    }
+
+    public void setResultsOne(String[] resultsOne)
+    {
+        this.resultsOne = resultsOne;
+    }
+
+    public String[] getResultsTwo()
+    {
+        return resultsTwo;
+    }
+
+    public void setResultsTwo(String[] resultsTwo)
+    {
+        this.resultsTwo = resultsTwo;
+    }
+
+    protected void onCreate()
+    {        
+        // initialize the opts
+        opts = new Options[3];
+        opts[0] = new Options("Option One","opt-1", "normal");
+        opts[1] = new Options("Option Two","opt-2", "normal2");
+        opts[2] = new Options("Option Three","opt-3", "normal3");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "Results.jsp") 
+        })
+    protected Forward post()
+    {
+        return new Forward("index");
+    }
+
+    public static class Options implements java.io.Serializable {
+        private String _name;
+        private String _optionValue;
+        private String _style;
+        
+        public Options(String name, String value, String style) {
+            _name = name;
+            _optionValue = value;
+            _style = style;
+        }
+        
+        public void setName(String name) {
+            _name = name;
+        }
+        public String getName() {
+            return _name;
+        }
+
+        public void setOptionValue(String optionValue) {
+            _optionValue = optionValue;
+        }
+        public String getOptionValue() {
+            return _optionValue;
+        }
+        
+        public void setStyle(String style) {
+            _style = style;
+        }
+        public String getStyle() {
+            return _style;
+        }
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@page contentType="text/html;charset=UTF-8" language="java"%>
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+    </head>
+    <body>
+        <h4>Results One</h4>
+        <netui:anchor action="begin">Home</netui:anchor>
+        <ul>
+        <netui-data:repeater dataSource="pageFlow.resultsOne">
+            <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+        <br/>
+        <h4>Results Two:</h4>
+        <ul>
+        <netui-data:repeater dataSource="pageFlow.resultsTwo">
+            <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheck/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <head>
+    <title>Basic Repeating Checkbox Group</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Checkbox Group</h4>
+        <netui:form action="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">CheckBox Group</caption>
+            <netui:checkBoxGroup dataSource="pageFlow.resultsOne" optionsDataSource="${pageFlow.opts}" repeater="true">
+                <tr align="center"><td align="right" width="25%"><netui:checkBoxOption value="${container.item.optionValue}" /></td>
+                    <td align="left"><netui:label styleClass="${container.item.style}" value="${container.item.name}" />
+                </td></tr>
+            </netui:checkBoxGroup>
+            </table>
+        </td></tr>
+        <tr><td>
+            <table>
+            <caption class="normalAttr">CheckBox Group Two</caption>
+            <tr><td>
+            <netui:checkBoxGroup dataSource="pageFlow.resultsTwo" optionsDataSource="${pageFlow.opts}" repeater="true" >
+                 <netui:label styleClass="${container.item.style}"  value="${container.item.name}" />
+                 <netui:checkBoxOption value="${container.item.optionValue}" />&nbsp;                
+            </netui:checkBoxGroup>
+            </td></tr>
+            </table>
+        </td></tr>
+        <tr><td><netui:button value="Post" /></td></tr>
+        </table>
+        </netui:form>
+  </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheckOptionError/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheckOptionError/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,161 @@
+package tags.RepeatCheckOptionError;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:Options"/>
+ * <pageflow-object id="action:post.do"/>
+ * <pageflow-object id="forward:path#index#Results.jsp#@action:post.do@"/>
+ * <pageflow-object id="page:Results.jsp"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:post.do@"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:Options'/>",
+        "<pageflow-object id='action:post.do'/>",
+        "<pageflow-object id='forward:path#index#Results.jsp#@action:post.do@'/>",
+        "<pageflow-object id='page:Results.jsp'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do@'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private Options[] opts;
+    private String[] resultsOne;
+    private String[] resultsTwo;
+
+    public Options[] getOpts()
+    {
+        return opts;
+    }
+
+    public void setOpts(Options[] opts)
+    {
+        this.opts = opts;
+    }
+
+    public String[] getResultsOne()
+    {
+        return resultsOne;
+    }
+
+    public void setResultsOne(String[] resultsOne)
+    {
+        this.resultsOne = resultsOne;
+    }
+
+    public String[] getResultsTwo()
+    {
+        return resultsTwo;
+    }
+
+    public void setResultsTwo(String[] resultsTwo)
+    {
+        this.resultsTwo = resultsTwo;
+    }
+
+    protected void onCreate()
+    {        
+        // initialize the opts
+        opts = new Options[3];
+        opts[0] = new Options("Option One","opt-1", "normal");
+        opts[1] = new Options("Option Two","opt-2", "normal2");
+        opts[2] = new Options("Option Three","opt-3", "normal3");
+    }
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+    
+    @Jpf.Action(
+        )
+    protected Forward post()
+    {
+        return new Forward("index");
+    }
+
+    public static class Options implements java.io.Serializable {
+        private String _name;
+        private String _optionValue;
+        private String _style;
+        
+        public Options(String name, String value, String style) {
+            _name = name;
+            _optionValue = value;
+            _style = style;
+        }
+        
+        public void setName(String name) {
+            _name = name;
+        }
+        public String getName() {
+            return _name;
+        }
+
+        public void setOptionValue(String optionValue) {
+            _optionValue = optionValue;
+        }
+        public String getOptionValue() {
+            return _optionValue;
+        }
+        
+        public void setStyle(String style) {
+            _style = style;
+        }
+        public String getStyle() {
+            return _style;
+        }
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheckOptionError/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatCheckOptionError/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <head>
+    <title>Repeating Checkbox Group Error</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <netui:body>
+    <h4>Repeating Checkbox Group Error</h4>
+        <netui:form action="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">CheckBox Group</caption>
+            <netui:checkBoxGroup dataSource="pageFlow.resultsOne" optionsDataSource="${pageFlow.opts}">
+                <tr align="center"><td align="right" width="25%"><netui:checkBoxOption value="${container.item.optionValue}" /></td>
+                    <td align="left"><netui:label styleClass="${container.item.style}" value="${container.item.name}" />
+                </td></tr>
+            </netui:checkBoxGroup>
+            </table>
+        </td></tr>
+      <tr><td><netui:button value="Post" /></td></tr>
+        </table>
+        </netui:form>
+  </netui:body></netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,175 @@
+package tags.RepeatRadio;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="formbean:Options"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:post.do"/>
+ * <pageflow-object id="forward:path#index#Results.jsp#@action:post.do@"/>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Results.jsp"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:post.do@"/>
+ * <pageflow-object id="action-call:@page:Results.jsp@#@action:begin.do@"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='formbean:Options'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:post.do'/>",
+        "<pageflow-object id='forward:path#index#Results.jsp#@action:post.do@'/>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Results.jsp'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do@'/>",
+        "<pageflow-object id='action-call:@page:Results.jsp@#@action:begin.do@'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private Options[] Opts;
+    private String ResultsOne;
+    private String ResultsTwo;
+
+    public Options[] getOpts()
+    {
+        return Opts;
+    }
+
+    public void setOpts(Options[] opts)
+    {
+        Opts = opts;
+    }
+
+    public String getResultsTwo()
+    {
+        return ResultsTwo;
+    }
+
+    public void setResultsTwo(String resultsTwo)
+    {
+        ResultsTwo = resultsTwo;
+    }
+
+    public String getResultsOne()
+    {
+        return ResultsOne;
+    }
+
+    public void setResultsOne(String resultsOne)
+    {
+        ResultsOne = resultsOne;
+    }
+
+    protected void onCreate()
+    {        
+        // initialize the opts
+        Opts = new Options[3];
+        Opts[0] = new Options("Option One","opt-1", "normal");
+        Opts[1] = new Options("Option Two","opt-2", "normal2");
+        Opts[2] = new Options("Option Three","opt-3", "normal3");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "Results.jsp") 
+        })
+    protected Forward post()
+    {
+        return new Forward("index");
+    }
+
+    public static class Options implements java.io.Serializable {
+        private String _name;
+        private String _optionValue;
+        private String _style;
+        
+        public Options(String name, String value, String style) {
+            _name = name;
+            _optionValue = value;
+            _style = style;
+        }
+        
+        public void setName(String name) {
+            _name = name;
+        }
+        public String getName() {
+            return _name;
+        }
+
+        public void setOptionValue(String optionValue) {
+            _optionValue = optionValue;
+        }
+        public String getOptionValue() {
+            return _optionValue;
+        }
+        
+        public void setStyle(String style) {
+            _style = style;
+        }
+        public String getStyle() {
+            return _style;
+        }
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@page contentType="text/html;charset=UTF-8" language="java"%>
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+    </head>
+    <body>
+        <netui:anchor action="begin">Home</netui:anchor>
+        <h4>Results One: <netui:label value="${pageFlow.resultsOne}"/></h4>
+        <h4>Results Two: <netui:label value="${pageFlow.resultsTwo}"/></h4>
+        <br/>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadio/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <head>
+    <title>Basic Repeating Checkbox Group</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Checkbox Group</h4>
+        <netui:form action="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">RadioButton Group</caption>
+            <netui:radioButtonGroup dataSource="pageFlow.resultsOne" optionsDataSource="${pageFlow.opts}" repeater="true">
+                <tr align="center"><td align="right" width="25%"><netui:radioButtonOption value="${container.item.optionValue}" /></td>
+                    <td align="left"><netui:label styleClass="${container.item.style}" value="${container.item.name}" />
+                </td></tr>
+            </netui:radioButtonGroup>
+            </table>
+        </td></tr>
+        <tr><td>
+            <table>
+            <caption class="normalAttr">RadioButton Group Two</caption>
+            <tr><td>
+            <netui:radioButtonGroup dataSource="pageFlow.resultsTwo" optionsDataSource="${pageFlow.opts}" repeater="true" >
+                 <netui:label styleClass="${container.item.style}"  value="${container.item.name}" />
+                 <netui:radioButtonOption value="${container.item.optionValue}" />&nbsp;                
+            </netui:radioButtonGroup>
+            </td></tr>
+            </table>
+        </td></tr>
+        <tr><td><netui:button value="Post" /></td></tr>
+        </table>
+        </netui:form>
+  </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadioOptionError/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadioOptionError/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,168 @@
+package tags.RepeatRadioOptionError;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:Options"/>
+ * <pageflow-object id="action:post.do"/>
+ * <pageflow-object id="forward:path#index#Results.jsp#@action:post.do@"/>
+ * <pageflow-object id="page:Results.jsp"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:post.do@"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:Options'/>",
+        "<pageflow-object id='action:post.do'/>",
+        "<pageflow-object id='forward:path#index#Results.jsp#@action:post.do@'/>",
+        "<pageflow-object id='page:Results.jsp'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do@'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private Options[] Opts;
+    private String[] ResultsOne;
+    private String[] ResultsTwo;
+
+    public Options[] getOpts()
+    {
+        return Opts;
+    }
+
+    public void setOpts(Options[] opts)
+    {
+        Opts = opts;
+    }
+
+    public String[] getResultsOne()
+    {
+        return ResultsOne;
+    }
+
+    public void setResultsOne(String[] resultsOne)
+    {
+        ResultsOne = resultsOne;
+    }
+
+    public String[] getResultsTwo()
+    {
+        return ResultsTwo;
+    }
+
+    public void setResultsTwo(String[] resultsTwo)
+    {
+        ResultsTwo = resultsTwo;
+    }
+
+    protected void onCreate()
+    {        
+        // initialize the opts
+        Opts = new Options[3];
+        Opts[0] = new Options("Option One","opt-1", "normal");
+        Opts[1] = new Options("Option Two","opt-2", "normal2");
+        Opts[2] = new Options("Option Three","opt-3", "normal3");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+    
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward post()
+    {
+        return new Forward("index");
+    }
+
+    public static class Options implements java.io.Serializable {
+        private String _name;
+        private String _optionValue;
+        private String _style;
+        
+        public Options(String name, String value, String style) {
+            _name = name;
+            _optionValue = value;
+            _style = style;
+        }
+        
+        public void setName(String name) {
+            _name = name;
+        }
+        public String getName() {
+            return _name;
+        }
+
+        public void setOptionValue(String optionValue) {
+            _optionValue = optionValue;
+        }
+        public String getOptionValue() {
+            return _optionValue;
+        }
+        
+        public void setStyle(String style) {
+            _style = style;
+        }
+        public String getStyle() {
+            return _style;
+        }
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadioOptionError/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/RepeatRadioOptionError/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <head>
+    <title>Repeating RadioButton Group Error</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <netui:body>
+    <h4>Repeating RadioButton Group Error</h4>
+        <netui:form action="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">CheckBox Group</caption>
+            <netui:radioButtonGroup dataSource="pageFlow.resultsOne" optionsDataSource="${pageFlow.opts}">
+                <tr align="center"><td align="right" width="25%"><netui:radioButtonOption value="${container.item.optionValue}" /></td>
+                    <td align="left"><netui:label styleClass="${container.item.style}" value="${container.item.name}" />
+                </td></tr>
+            </netui:radioButtonGroup>
+            </table>
+        </td></tr>
+      <tr><td><netui:button value="Post" /></td></tr>
+        </table>
+        </netui:form>
+  </netui:body></netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+package tags.accesskey;
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.FormData;
+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
+{
+    public String getAltText() {
+        return "PageFlow Text for Alt";
+    }
+    public String[] getTypes() {
+        return new String[] {"foo","bar","baz"};
+    }
+    public String[] getColors() {
+        return new String[] {"red","blue","yellow"}; 
+    }
+    public String[] getAttributes() {
+        return new String[] {"fenders", "wheels", "windows"};
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "page2.jsp") 
+        })
+    protected Forward post(MyBean form)
+    {
+        return new Forward("success","form",form);
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class MyBean extends FormData
+    {
+        private String[] attributes;
+
+        private String color;
+
+        private boolean disabled;
+
+        private String name;
+
+        private String type;
+
+        private String description;
+
+        public void setDescription(String description)
+        {
+            this.description = description;
+        }
+
+        public String getDescription()
+        {
+            return this.description;
+        }
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType()
+        {
+            return this.type;
+        }
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public String getName()
+        {
+            return this.name;
+        }
+
+        public void setDisabled(boolean disabled)
+        {
+            this.disabled = disabled;
+        }
+
+        public boolean getDisabled()
+        {
+            return this.disabled;
+        }
+
+        public void setColor(String color)
+        {
+            this.color = color;
+        }
+
+        public String getColor()
+        {
+            return this.color;
+        }
+
+        public void setAttributes(String[] attributes)
+        {
+            this.attributes = attributes;
+        }
+
+        public String[] getAttributes()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.attributes == null || this.attributes.length == 0)
+            {
+                this.attributes = new String[1];
+            }
+
+            return this.attributes;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/folder.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Access Key Test</h4>
+        <p style="color:green">
+        This test defines a set of access keys that allow access to the various page components.  The access keys are marked
+        next to the component.  These don't always work for every type of component.
+        </p>
+        <netui:anchor action="begin" accessKey="H"><b>(H)</b>ome</netui:anchor>
+        <br>
+        <netui:anchor action="post" accessKey="P"><b>(P)</b>ost</netui:anchor>
+        <br>
+        <netui:imageAnchor action="begin" src="./folder.gif" accessKey="W"></netui:imageAnchor><b>(W)</b>
+        <netui:form action="post">
+            <table>
+                <tr valign="top">
+                    <td>Color:</td>
+                    <td>
+                    <netui:radioButtonGroup dataSource="actionForm.color" defaultValue="red">
+                        <netui:radioButtonOption value="${pageFlow.types[0]}" alt="${pageFlow.altText}" accessKey="8"></netui:radioButtonOption> <b>(8)</b><br/>
+                        <netui:radioButtonOption value="${pageFlow.types[1]}" accessKey="9" alt="${pageFlow.altText}"></netui:radioButtonOption> <b>(9)</b><br/>
+                        <netui:radioButtonOption value="${pageFlow.types[2]}" accessKey="0" alt="${pageFlow.altText}"></netui:radioButtonOption> <b>(0)</b><br/>
+                    </netui:radioButtonGroup>
+                   </td>
+                </tr>
+                <tr valign="top">
+                    <td>Des<b>(C)</b>ription:</td>
+                    <td>
+                    <netui:textArea dataSource="actionForm.description" accessKey='C'/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td><b>(D)</b>isabled:</td>
+                    <td>
+                    <netui:checkBox dataSource="actionForm.disabled" accessKey="D" alt="${pageFlow.altText}"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>na<b>(M)</b>e:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.name" accessKey="M" alt="${pageFlow.altText}"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td><b>(K)</b>ype:</td>
+                    <td>
+                    <netui:select dataSource="actionForm.type" optionsDataSource="${pageFlow.types}" accessKey="K"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Attributes:</td>
+                    <td>
+                    <netui:checkBoxGroup dataSource="actionForm.attributes" defaultValue="windows">
+                        <netui:checkBoxOption value="${pageFlow.attributes[0]}" alt="${pageFlow.altText}" accessKey="1"></netui:checkBoxOption> <b>(1)</b><br/>
+                        <netui:checkBoxOption value="${pageFlow.attributes[1]}" accessKey="2" alt="${pageFlow.altText}"></netui:checkBoxOption> <b>(2)</b><br/>
+                        <netui:checkBoxOption value="${pageFlow.attributes[2]}" accessKey="3" alt="${pageFlow.altText}"></netui:checkBoxOption> <b>(3)</b><br/>
+                    </netui:checkBoxGroup>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Form Submit" type="submit" accessKey="F" alt="${pageFlow.altText}"/><b>(F)</b>
+            <netui:button type="Reset" value="Reset" accessKey="R" alt="${pageFlow.altText}"/><b>(R)</b>
+            <netui:imageButton src="./folder.gif" accessKey="X"></netui:imageButton><b>(X)</b>
+        </netui:form>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/page2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskey/page2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="form" type="accesskey.Controller.MyBean"/>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin" accessKey="H">Home</netui:anchor><br/>
+        <b>Attributes:</b><br/>
+        <netui-data:repeater dataSource="pageInput.form.attributes">
+            <netui-data:repeaterHeader><ol></netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <li>
+                    <netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label>
+                </li>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></ol></netui-data:repeaterFooter>
+        </netui-data:repeater><br>
+        <b>Color:</b> <netui:label value="${pageInput.form.color}"></netui:label><br/>
+        <b>Description:</b> <netui:label value="${pageInput.form.description}"></netui:label><br/>
+        <b>Disabled:</b> <netui:label value="${pageInput.form.disabled}"></netui:label><br/>
+        <b>Name:</b> <netui:label value="${pageInput.form.name}"></netui:label><br/>
+        <b>Type:</b> <netui:label value="${pageInput.form.type}"></netui:label><br/>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,153 @@
+package tags.accesskeyGroup;
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.util.tags.GroupOption;
+
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/tags/accesskeyGroup/Controller.jpf'/>", 
+        "<pageflow-object id='formbean:MyBean'/>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='420' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:post.do#tags.accesskeyGroup.Controller.MyBean'>", 
+        "  <property value='140' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='60' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>", 
+        "  <property value='384,360,360,336' name='elbowsX'/>", 
+        "  <property value='152,152,52,52' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:page2.jsp'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='280' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#page2.jsp#@action:post.do#tags.accesskeyGroup.Controller.MyBean@'>", 
+        "  <property value='176,220,220,264' name='elbowsX'/>", 
+        "  <property value='163,163,272,272' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:page2.jsp@#@action:begin.do@'>", 
+        "  <property value='336,360,360,384' name='elbowsX'/>", 
+        "  <property value='272,272,163,163' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do#tags.accesskeyGroup.Controller.MyBean@'>", 
+        "  <property value='264,220,220,176' name='elbowsX'/>", 
+        "  <property value='52,52,152,152' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{    
+    private GroupOption[] attributes = {
+        new GroupOption("fenders (1)","fenders","finders","1"),
+        new GroupOption("wheels (2)","wheels","wheels","2"),
+        null,
+        new GroupOption("windows (3)","windows","windows","3"),
+        };
+        
+    private GroupOption[] colors = {
+        new GroupOption("red (a)","red","red","A"),
+        new GroupOption("blue (b)","blue","blue","B"),
+        null,
+        new GroupOption("yellow (c)","yellow","yellow","C"),
+        };
+
+    public GroupOption[] getAttributes() {
+        return attributes;
+    }
+    public GroupOption[] getColors() {
+        return colors;
+    }
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "page2.jsp") 
+        })
+    protected Forward post(MyBean form)
+    {
+        return new Forward("success","form",form);
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class MyBean extends FormData
+    {
+        private String[] attributes;
+
+        private String type;
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType()
+        {
+            return this.type;
+        }
+
+        public void setAttributes(String[] attributes)
+        {
+            this.attributes = attributes;
+        }
+
+        public String[] getAttributes()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.attributes == null || this.attributes.length == 0)
+            {
+                this.attributes = new String[1];
+            }
+
+            return this.attributes;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <br>
+        <netui:form action="post">
+            <table>
+                <tr valign="top">
+                    <td>Attributes:</td>
+                    <td>
+                    <netui:checkBoxGroup dataSource="actionForm.attributes" optionsDataSource="${pageFlow.attributes}"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <netui:radioButtonGroup dataSource="actionForm.type" optionsDataSource="${pageFlow.colors}"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="post" type="submit"/>
+        </netui:form>
+        <br>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/page2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/accesskeyGroup/page2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="form" type="accesskey.Controller.MyBean"/>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin" accessKey="H">Home</netui:anchor><br/>
+        <b>Attributes:</b><br/>
+        <netui-data:repeater dataSource="pageInput.form.attributes">
+            <netui-data:repeaterHeader><ol></netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <li>
+                    <netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label>
+                </li>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></ol></netui-data:repeaterFooter>
+        </netui-data:repeater><br>
+        <b>Type:</b> <netui:label value="${pageInput.form.type}"></netui:label><br/>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Test of Anchor</title>
+<netui:base />
+</head>
+<body>
+<netui:anchor tagId="Top"/>
+<h4>Anchor Tests</h4>
+<p style="color:green">
+This is a set of tests of anchors.  The following anchors will navigate to a target page.  At the
+top and the bottom of the page are anchors which use the <b>linkName</b> attribute.
+<br>
+Anchor supports <b>action</b> and <b>href</b> as the primary means of navigation.  In addition
+<b>linkName</b> can also be used to navigate within a page.  To create a named anchor, you simply
+set the <b>tagId</b> attribute and nothing else.  This creates an anchor that can be a target
+of another anchor.  Finally, the <b>location</b> attribute many be used with the <b>href</b>
+attribute to create an anchor of the form of href#location.  The <b>location</b> attribute does
+not work with an <b>action</b> attribute.
+</p>
+<ul>
+<li><netui:anchor action="navigate">Navigate</netui:anchor> --
+        Navigation through an <b>action</b></li>
+<li><netui:anchor action="simpleAction">Navigate</netui:anchor> --
+        Navigation through a <b>Simple Action</b></li>
+<li><netui:anchor href="myForward.jsp">Navigate</netui:anchor> --
+        Navigation through an <b>href</b> directly to the JSP</li>
+<li><netui:anchor href="navigate.do">Navigate</netui:anchor> --
+        Navigation through an <b>href</b> to the action</li>
+<li><netui:anchor linkName="Label">Navigate</netui:anchor> --
+        Navigate to a link on this page through an <b>linkName</b></li>
+</ul>
+<p>There is a bunch of blank space to create a target on the bottom of the page</p>
+<hr />
+<div style="height: 500px">
+<p>Spacer Div</p>
+</div>
+<hr />
+<p>
+This is a named location 'Label'.  The link will take you back to the top of the page<br>
+<netui:anchor tagId="Label"/>
+<netui:anchor linkName="#Top">Go To Top</netui:anchor>
+</p>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.anchor;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+@Jpf.Controller(
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="Begin.jsp"),
+        @Jpf.SimpleAction(name="simpleAction", path="myForward.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+    String _foo = "Foo";
+    public String getFoo() {
+	return _foo;
+    }
+
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "myForward.jsp")
+        })
+    public Forward navigate()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/myForward.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchor/myForward.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Forward Target</title>
+<netui:base />
+</head>
+<body>
+<netui:anchor linkName="Top"/>
+<h4>Forward Target</h4>
+<p>
+<netui:anchor action="begin">Home</netui:anchor> Use an explicit <b>href</b> contain action<br>
+<netui:anchor href="Begin.jsp" location="Label">Home</netui:anchor>
+        Go to the bottom of the Home page using the <b>location</b><br />
+</p>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,163 @@
+package tags.anchorActions;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/tags/anchorActions/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:ActionOne.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:ActionTwo.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:ActionThree.do'>",
+        "  <property value='500' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='136,230,230,324' name='elbowsX'/>",
+        "  <property value='132,132,132,132' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:ActionOne.do@'>",
+        "  <property value='464,430,430,396' name='elbowsX'/>",
+        "  <property value='132,132,121,121' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:ActionTwo.do@'>",
+        "  <property value='464,430,430,396' name='elbowsX'/>",
+        "  <property value='72,72,132,132' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:ActionThree.do@'>",
+        "  <property value='464,430,430,396' name='elbowsX'/>",
+        "  <property value='212,212,143,143' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:error.jsp'>",
+        "  <property value='480' name='x'/>",
+        "  <property value='320' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goErrors.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='320' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#error.jsp#@action:goErrors.do@'>",
+        "  <property value='396,420,420,444' name='elbowsX'/>",
+        "  <property value='312,312,312,312' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goErrors.do@'>",
+        "  <property value='360,360,360,360' name='elbowsX'/>",
+        "  <property value='184,230,230,276' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    
+    private String[] actions = {"ActionOne", "ActionTwo", "ActionThree"};
+    private String nullAction = null;
+    private String lastAction = null;
+    private String invalidAction = "invalidAction";
+
+    public String[] getActions() {
+        return actions;
+    }
+    public String getNullAction() {
+        return nullAction;
+    }
+    public String getInvalidAction() {
+        return invalidAction;
+    }
+    public String getLastAction() {
+        return lastAction;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        lastAction = "begin";
+        return new Forward( "success" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward ActionOne()
+    {
+        lastAction = "ActionOne";
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward ActionTwo()
+    {
+        lastAction = "ActionTwo";
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward ActionThree()
+    {
+        lastAction = "ActionThree";
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "error.jsp") 
+        })
+    protected Forward goErrors()
+    {
+		return new Forward( "success" );
+	}
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <h4>Anchor Errors</h4>
+        <p style="color:green">
+        This test has a set of anchors that have a databound action.  In the first case there is
+        a null action.  The second case is an invalid action.  There is a different error message for
+        each.
+        </p>
+        <p>
+        Null Action:<netui:anchor action="${pageFlow.nullAction}">Null Action</netui:anchor><br>
+        Invalid Action:<netui:anchor action="${pageFlow.invalidAction}">Invalid Action</netui:anchor><br>
+        <hr>
+        <netui:anchor action="${pageFlow.actions[1]}">Home</netui:anchor><br>
+        </p>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/anchorActions/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+    <h4>Anchor bound inside a repeater</h4>
+    <p style="color:green">
+    This test has two parts.  the first is an anchor found inside of a repeater.  The repeater is bound
+    to a list of actions which are bound as the action for the anchor and the label of the anchor.  When any
+    of these are preseed, the last action will be updated.
+    </p>
+    <p style="color:green">
+    The second part of the test is the errors.  Pushing this link leads to a page of errors.
+    </p>
+    <netui-data:repeater dataSource="pageFlow.actions">
+            <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <li>
+                <netui:anchor action="${container.item}">
+                    <netui:label value="${container.item}"></netui:label>
+                </netui:anchor>
+                </li>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+    </netui-data:repeater>
+    <netui:anchor action="goErrors">Errors</netui:anchor><br>
+    <hr>
+    <b>Last Action:</b>&nbsp;<netui:label value="${pageFlow.lastAction}"/>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/bindingUpdateErrors/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/bindingUpdateErrors/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,152 @@
+package tags.bindingUpdateErrors;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/tags/bindingUpdateErrors/Controller.jpf'/>", 
+        "<pageflow-object id='formbean:NameBean'/>", 
+        "<pageflow-object id='formbean:TypeBean'/>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:postName.do#tags.bindingUpdateErrors.Controller.NameBean'>", 
+        "  <property value='400' name='x'/>", 
+        "  <property value='260' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:postType.do#tags.bindingUpdateErrors.Controller.TypeBean'>", 
+        "  <property value='400' name='x'/>", 
+        "  <property value='120' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='240' name='x'/>", 
+        "  <property value='140' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>", 
+        "  <property value='116,160,160,204' name='elbowsX'/>", 
+        "  <property value='92,92,132,132' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#postType.do#@action:postName.do#tags.bindingUpdateErrors.Controller.NameBean@'>", 
+        "  <property value='400,400,400,400' name='elbowsX'/>", 
+        "  <property value='216,190,190,164' name='elbowsY'/>", 
+        "  <property value='North_1' name='fromPort'/>", 
+        "  <property value='South_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:postType.do#tags.bindingUpdateErrors.Controller.TypeBean@'>", 
+        "  <property value='364,320,320,276' name='elbowsX'/>", 
+        "  <property value='123,123,132,132' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postName.do#tags.bindingUpdateErrors.Controller.NameBean@'>", 
+        "  <property value='276,320,320,364' name='elbowsX'/>", 
+        "  <property value='143,143,252,252' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    String firstName;
+    String lastName;
+    /**
+     * This method represents the point of entry into the pageflow
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "postType.do") 
+        })
+    protected Forward postName(NameBean form)
+    {
+        System.err.println("FirstName:" + form.getFirstName());
+        System.err.println("LastName:" + form.getLastName());
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward postType(TypeBean form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameBean extends FormData
+    {
+        private String lastName;
+
+        private String firstName;
+
+        public void setFirstName(String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public String getFirstName()
+        {
+            return this.firstName;
+        }
+
+        public void setLastName(String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public String getLastName()
+        {
+            return this.lastName;
+        }
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class TypeBean extends FormData
+    {
+        private String type;
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType()
+        {
+            return this.type;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/bindingUpdateErrors/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/bindingUpdateErrors/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <h4>BindingUpdateErrors test</h4>
+        <p style="color:green">
+        This test will post a form to an action that doesn't accept a form.  This will generate a set
+        of binding update errors because the values don't update anything.  These errors will be
+        reported below by the<b>bindingUpdateErrors</b> tag.  You should enter a value into the form and
+        hit the submit button.  Then this page will redisplay with the binding errors.
+        </p>
+        <hr>
+        <netui:form action="postName">
+            <table>
+                <tr valign="top">
+                    <td>FirstName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.firstName"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>LastName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.lastName"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="postName" type="submit"/>&nbsp;
+        <hr>
+        <netui:bindingUpdateErrors/><br>
+        Errors for actionForm.firstName: <netui:bindingUpdateErrors alwaysReport="true"  expression="actionForm.firstName"/><br>
+        Errors for actionForm.lastame: <netui:bindingUpdateErrors alwaysReport="true" expression="actionForm.lastName"/><br>
+         </netui:form>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/buttonSubmitTagId/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/buttonSubmitTagId/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,111 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.buttonSubmitTagId;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+@Jpf.Controller(
+)
+public class Controller extends PageFlowController
+{
+    private boolean advanced = true;
+    private boolean verbose = false;
+    private String action;
+
+    public boolean getAdvanced() {
+        return advanced;
+    }
+    public boolean getVerbose() {
+        return verbose;
+    }
+    public String getAction() {
+        return action;
+    }
+    
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        action = "begin";
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.jsp") 
+        })
+    protected Forward EnterName(Name form)
+    {
+        action = "EnterName";
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.jsp") 
+        })
+    protected Forward DeleteName(Name form)
+    {
+        action = "DeleteName";
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class Name extends FormData
+    {
+        private java.lang.String lastName;
+
+        private java.lang.String firstName;
+
+
+        public void setFirstName(java.lang.String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public java.lang.String getFirstName()
+        {
+            return this.firstName;
+        }
+
+        public void setLastName(java.lang.String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public java.lang.String getLastName()
+        {
+            return this.lastName;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/buttonSubmitTagId/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/buttonSubmitTagId/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Bug 34263
+        </title>
+    </head>
+    <netui:body>
+        <netui:form action="EnterName" focus="" tagId="FormOne">
+            <table>
+                <tr>
+                    <td>LastName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.lastName"></netui:textBox>
+                    </td>
+                </tr>
+                <tr>
+                    <td>FirstName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.firstName"></netui:textBox>
+                    </td>
+                </tr>
+            </table>
+            <netui:button value="Enter" tagId="NameEnter"></netui:button>
+            <netui:button type="submit" value="Delete" action="DeleteName" tagId="NameDelete"></netui:button>
+        </netui:form>
+        <hr />
+        <netui:label value="${pageFlow.action}"/>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/content/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/content/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Content and Literal</title>
+</head>
+<body>
+<h4>Content And Literal</h4>
+<h4>Label</h4>
+nbsp [<netui:label value="${pageFlow.nbsp}"/>]<br />
+& [<netui:label value="${pageFlow.amp}"/>]<br />
+< [<netui:label value="${pageFlow.lessThan}"/>]<br />
+html [<netui:label value="${pageFlow.html}"/>]<br />
+text [<netui:label value="${pageFlow.text}"/>]<br />
+<h4>Content</h4>
+nbsp [<netui:content value="${pageFlow.nbsp}"/>]<br />
+& [<netui:content value="${pageFlow.amp}"/>]<br />
+< [<netui:content value="${pageFlow.lessThan}"/>]<br />
+html [<netui:content value="${pageFlow.html}"/>]<br />
+text [<netui:content value="${pageFlow.text}"/>]<br />
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/content/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/content/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.content;
+
+import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/tags/content/Controller.jpf'/>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='100' name='x'/>", 
+        "  <property value='80' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:Begin.jsp'>", 
+        "  <property value='240' name='x'/>", 
+        "  <property value='80' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#begin#Begin.jsp'/>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    
+    private String _nbsp = "&nbsp";
+    public String getNbsp() {
+        return _nbsp;
+    }
+
+    private String _amp = "&amp;";
+    public String getAmp() {
+        return _amp;
+    }
+
+    private String _lt = "&lt;";
+    public String getLessThan() {
+        return _lt;
+    }
+
+    private String _html = "<b>Bold</b>";
+    public String getHtml() {
+	return _html;
+    }
+
+    private String _text = "Some Text";
+        public String getText() {
+	return _text;
+    }
+
+    @Jpf.Action(
+        )
+    protected Forward begin(){
+        return new Forward("begin");
+    }
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,192 @@
+package tags.dateConverter;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.Date;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/bug/BugController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:bug.BugController.FormBean"/>
+ * <pageflow-object id="formbeanprop:bug.BugController.FormBean#date#java.util.Date"/>
+ * <pageflow-object id="formbeanprop:bug.BugController.FormBean#type#java.lang.String"/>
+ * <pageflow-object id="action:results.do#bug.BugController.FormBean">
+ *   <property value="380" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:showResults.jsp">
+ *   <property value="520" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#showResults.jsp#@action:results.do#bug.BugController.FormBean@">
+ *   <property value="416,450,450,484" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:results.do#bug.BugController.FormBean@">
+ *   <property value="276,310,310,344" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/bug/BugController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:bug.BugController.FormBean'/>",
+        "<pageflow-object id='formbeanprop:bug.BugController.FormBean#date#java.util.Date'/>",
+        "<pageflow-object id='formbeanprop:bug.BugController.FormBean#type#java.lang.String'/>",
+        "<pageflow-object id='action:results.do#bug.BugController.FormBean'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:showResults.jsp'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#showResults.jsp#@action:results.do#bug.BugController.FormBean@'>",
+        "  <property value='416,450,450,484' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:results.do#bug.BugController.FormBean@'>",
+        "  <property value='276,310,310,344' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        FormBean fb = new FormBean();
+        fb.setDate(new Date("10/25/2003"));
+        fb.setType("This is the type");
+        return new Forward("success",fb);
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="showResults.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "showResults.jsp") 
+        })
+    protected Forward results(FormBean form)
+    {
+        System.err.println("form date:" + form.getDate());
+        Forward f = new Forward("success");
+        f.addPageInput("form",form);
+        return f; 
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class FormBean extends FormData
+    {
+        private String type;
+
+        private Date date;
+
+        public void setDate(Date date)
+        {
+            this.date = date;
+        }
+
+        public Date getDate()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null. This type doesn't have
+            // a default constructor, so Workshop cannot initialize it for you.
+
+            // TODO: Initialize date if it is null.
+            //if(this.date == null)
+            //{
+            //    this.date = new Date(?);
+            //}
+
+            return this.date;
+        }
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType()
+        {
+            return this.type;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:form action="results">
+            <table>
+                <tr valign="top">
+                    <td>Date:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.date" size="16" readonly="true">
+                        <netui:formatDate pattern="M/d/yy HH:mm"/>
+                    </netui:textBox>
+                    
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.type"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="results" type="submit"/>
+        </netui:form>
+     </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/showResults.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateConverter/showResults.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="form" type="bug.BugController.FormBean"/>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        Date:<netui:label value="${pageInput.form.date}">
+            <netui:formatDate pattern="M/d/yy  HH:mm"/>
+        </netui:label><br/> 
+        Type:<netui:label value="${pageInput.form.type}"></netui:label><br/>   
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateFormatString/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateFormatString/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+package tags.dateFormatString;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/dateFormatString/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    public String getDateOne() {
+        return dateOne;
+    }
+    public String getDateTwo() {
+        return dateTwo;
+    }
+    public String getDateThree() {
+        return dateThree;
+    }
+    public String getPattOne() {
+        return pattOne;
+    }
+    public String getPattTwo() {
+        return pattTwo;
+    }
+    public String getPattError() {
+        return pattError;
+    }
+    
+    private String dateOne = "2003/10/25";
+    private String dateTwo = "2003-10-25";
+    private String dateThree = "2003.10.25";
+    private String pattOne = "yy/MM/dd";
+    private String pattTwo = "yy.MM.dd";
+    private String pattError = "yy.MN.dd";
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateFormatString/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/dateFormatString/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <h4>Date Format Tests</h4>
+    <p style="color:green">
+    This test verifies formating of the date.  The first set of contains the
+    pattern inside the tag and binds to various dates that are properties of
+    the pageflow.  The second set binds to the pattern in the page flow.
+    The final set are errors and generate error messages.
+    </p>
+    <hr>
+    <netui:body><h4>In tags</h4>
+        2003/10/25: <netui:label value="${pageFlow.dateOne}"><netui:formatDate pattern="MM/dd/yyyy" stringInputPattern="yy/MM/dd"/></netui:label> <br>
+        2003-10-25: <netui:label value="${pageFlow.dateTwo}"><netui:formatDate pattern="MM/dd/yyyy"/></netui:label> <br>
+        2003.10.25: <netui:label value="${pageFlow.dateThree}"><netui:formatDate pattern="MM/dd/yyyy" stringInputPattern="yy.MM.dd"/></netui:label> <br>
+        <hr ><h4>Data Binding</h4>
+        2003/10/25: <netui:label value="${pageFlow.dateOne}"><netui:formatDate pattern="MM/dd/yyyy" stringInputPattern="${pageFlow.pattOne}"/></netui:label> <br>
+        2003-10-25: <netui:label value="${pageFlow.dateTwo}"><netui:formatDate pattern="MM/dd/yyyy"/></netui:label> <br>
+        2003.10.25: <netui:label value="${pageFlow.dateThree}"><netui:formatDate pattern="MM/dd/yyyy" stringInputPattern="${pageFlow.pattTwo}"/></netui:label> <br>
+        <hr><h4>Errors</h4>
+        2003.10.25: <netui:label value="${pageFlow.dateThree}"><netui:formatDate pattern="MM/dd/yyyy" stringInputPattern="${pageFlow.pattError}"/></netui:label> <br>
+        2003.10.25: <netui:label value="${pageFlow.dateThree}"><netui:formatDate pattern="MM/dd/yyyy" stringInputPattern="${pageFlow.pattOne}"/></netui:label> <br>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,184 @@
+package tags.disable;
+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;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+
+    private String[] radioOptions = {"Radio 1", "Radio 2", "Radio 3"};
+    private String[] selectOptions = {"Option 1", "Option 2", "Option 3"};
+    private String[] checkOptions = {"Check 1", "Check 2", "Check 3"};
+
+    public String[] getRadioOptions() {
+        return radioOptions;
+    }
+    public String[] getSelectOptions() {
+        return selectOptions;
+    }
+    public String[] getCheckOptions() {
+        return checkOptions;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward submitForm(Form form)
+    {
+        getRequest().setAttribute("form",form);
+        return new Forward("success");
+    }
+
+    public static class Form extends FormData
+    {
+        private String textBox;
+        private String textArea;
+        private String[] select;
+        private String[] selectTwo;
+        private String[] selectThree;
+        private String radioGroup;
+        private String radioGroup2;
+        private boolean check1 = true;
+        private boolean check2 = false;
+        private String[] checkOne;
+        private String[] checkTwo;
+
+        public String getTextBox()
+        {
+            return textBox;
+        }
+
+        public void setTextBox(String textBox)
+        {
+            this.textBox = textBox;
+        }
+
+        public String getTextArea()
+        {
+            return textArea;
+        }
+
+        public void setTextArea(String textArea)
+        {
+            this.textArea = textArea;
+        }
+
+        public String[] getSelect()
+        {
+            return select;
+        }
+
+        public void setSelect(String[] select)
+        {
+            this.select = select;
+        }
+
+        public String[] getSelectTwo()
+        {
+            return selectTwo;
+        }
+
+        public void setSelectTwo(String[] selectTwo)
+        {
+            this.selectTwo = selectTwo;
+        }
+
+        public String[] getSelectThree()
+        {
+            return selectThree;
+        }
+
+        public void setSelectThree(String[] selectThree)
+        {
+            this.selectThree = selectThree;
+        }
+
+        public String getRadioGroup()
+        {
+            return radioGroup;
+        }
+
+        public void setRadioGroup(String radioGroup)
+        {
+            this.radioGroup = radioGroup;
+        }
+
+        public String getRadioGroup2()
+        {
+            return radioGroup2;
+        }
+
+        public void setRadioGroup2(String radioGroup2)
+        {
+            this.radioGroup2 = radioGroup2;
+        }
+
+        public boolean isCheck1()
+        {
+            return check1;
+        }
+
+        public void setCheck1(boolean check1)
+        {
+            this.check1 = check1;
+        }
+
+        public boolean isCheck2()
+        {
+            return check2;
+        }
+
+        public void setCheck2(boolean check2)
+        {
+            this.check2 = check2;
+        }
+
+        public String[] getCheckOne()
+        {
+            return checkOne;
+        }
+
+        public void setCheckOne(String[] checkOne)
+        {
+            this.checkOne = checkOne;
+        }
+
+        public String[] getCheckTwo()
+        {
+            return checkTwo;
+        }
+
+        public void setCheckTwo(String[] checkTwo)
+        {
+            this.checkTwo = checkTwo;
+        }
+     }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,142 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+        <h4>This test disabled all of the form elements</h4>
+        <p style="color:green">
+        In this test we disable all of the elements that may be found in a form.  For all of the elements
+        the <b>disable</b> attribute is set to true.  The form is posted and the values posted will be
+        dumped in the results page.
+        </p>
+        <hr>
+        <netui:form action="submitForm">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.textBox"
+                                defaultValue="Default Value" disabled="true" />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <netui:textArea dataSource="actionForm.textArea"
+                                defaultValue="Default Value" disabled="true" />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options</td>
+                    <td>
+                        <netui:select dataSource="actionForm.select" disabled="true" defaultValue="Option Two">
+                        <netui:selectOption value="Option One"/>
+                        <netui:selectOption value="Option Two"/>
+                        <netui:selectOption value="Option Three"/>
+                        <netui:selectOption value="Option Four"/>
+                        <netui:selectOption value="Option Five"/>
+                        </netui:select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options Source</td>
+                    <td>
+                        <netui:select dataSource="actionForm.selectThree"
+                                optionsDataSource="${pageFlow.selectOptions}"
+                                defaultValue="Option 3"
+                                disabled="true" />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select (option Disabled):</td>
+                    <td>
+                        <netui:select dataSource="actionForm.selectTwo"
+                                defaultValue="Option Nine">
+                        <netui:selectOption value="Option Six"
+                                disabled="true"/> 
+                        <netui:selectOption value="Option Seven"/>
+                        <netui:selectOption value="Option Eight"
+                                disabled="true"/> 
+                        <netui:selectOption value="Option Nine"/>
+                        <netui:selectOption value="Option Ten"
+                                disabled="true"/> 
+                        </netui:select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options</td>
+                    <td>
+                        <netui:radioButtonGroup
+                                dataSource="actionForm.radioGroup"
+                                defaultValue="Radio Two"
+                                disabled="true"
+                        >
+                           <netui:radioButtonOption value="Radio One"/><br />
+                           <netui:radioButtonOption value="Radio Two"/><br />
+                           <netui:radioButtonOption value="Radio Three"/><br />
+                           <netui:radioButtonOption value="Radio Four"/><br />
+                        </netui:radioButtonGroup>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options Source</td>
+                    <td>
+                        <netui:radioButtonGroup
+                                dataSource="actionForm.radioGroup2"
+                                defaultValue="Radio 2"
+                                optionsDataSource="${pageFlow.radioOptions}"
+                                disabled="true"
+                        />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox</td>
+                    <td>
+                        Check One <netui:checkBox
+                                dataSource="actionForm.check1"
+                                disabled="true"
+                        /><br />
+                        Check Two <netui:checkBox
+                                dataSource="actionForm.check2"
+                                disabled="true"
+                        />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options Source</td>
+                    <td>
+                        <netui:checkBoxGroup
+                                dataSource="actionForm.checkOne"
+                                defaultValue="Check 3"
+                                optionsDataSource="${pageFlow.checkOptions}"
+                                disabled="true"
+                        />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options</td>
+                    <td>
+                        <netui:checkBoxGroup
+                                dataSource="actionForm.checkTwo"
+                                defaultValue="Check Four"
+                                disabled="true"
+                        >
+                           <netui:checkBoxOption value="Check One"/><br />
+                           <netui:checkBoxOption value="Check Two"/><br />
+                           <netui:checkBoxOption value="Check Three"/><br />
+                           <netui:checkBoxOption value="Check Four"/><br />
+                        </netui:checkBoxGroup>
+
+                    </td>
+                </tr>
+
+            </table>
+            <br>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+            <netui:button value="Submit (Disabled)" type="submit"
+                disabled="true"/>
+        </netui:form>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disable/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ page import="org.apache.beehive.netui.script.common.DataAccessProviderBean"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+    <h4>Disable Form Post Results</h4>
+    <p style="color:green">
+    This test dumps the contents ofthe request parameter names posted by the disable test. The only control not disabled
+    is a select that has individual options disabled.  It also reports
+    the contents of the form that was posted to the action.
+    </p>
+    <hr>
+    <h4>Parameter Data</h4>
+    <%
+    java.util.Enumeration e = request.getParameterNames();
+    java.util.List l = java.util.Collections.list(e);
+    request.setAttribute("parameterNames",l);
+    %>
+    <netui-data:repeater dataSource="request.parameterNames">
+        <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+        <netui-data:repeaterItem>
+                <li><netui:label value="${container.item}"/></li>
+                <%
+                DataAccessProviderBean bean = (DataAccessProviderBean) pageContext.getAttribute("container");
+                String name = (String) bean.getItem();
+                request.setAttribute("values",request.getParameterValues(name));
+                %>
+            </netui-data:repeaterItem>
+        <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+    </netui-data:repeater>
+    <hr>
+    <h4>Form Data</h4>
+    <table border="1" cellspacing="0">
+    <tr><td>TextBox</td><td><netui:label value="${requestScope.form.textBox}"/>&nbsp;</td></tr>
+    <tr><td>TextArea</td><td><netui:label value="${requestScope.form.textArea}"/>&nbsp;</td></tr>
+    <tr><td>Select/Options</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.select">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select/Options Source:</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.selectThree">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select (option Disabled):</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.selectTwo">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>radioGroup</td><td><netui:label value="${requestScope.form.radioGroup}"/>&nbsp;</td></tr>
+    <tr><td>radioGroup2</td><td><netui:label value="${requestScope.form.radioGroup2}"/>&nbsp;</td></tr>
+    <tr><td>check1</td><td><netui:label value="${requestScope.form.check1}"/>&nbsp;</td></tr>
+    <tr><td>check2</td><td><netui:label value="${requestScope.form.check2}"/>&nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options Source:</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.checkOne">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.checkTwo">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    </table>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,203 @@
+package tags.disableBinding;
+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;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    public boolean disableBinding = true;
+    public String[] radioOptions = {"Radio 1", "Radio 2", "Radio 3"};
+    public String[] selectOptions = {"Option 1", "Option 2", "Option 3"};
+    public String[] checkOptions = {"Check 1", "Check 2", "Check 3"};
+
+    public boolean getDisableBinding() {
+        return disableBinding;
+    }
+    public String[] getRadioOptions() {
+        return radioOptions;
+    }
+    public String[] getSelectOptions() {
+        return selectOptions;
+    }
+    public String[] getCheckOptions() {
+        return checkOptions;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward flipBinding()
+    {
+        disableBinding = !disableBinding;
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward submitForm(Form form)
+    {
+        getRequest().setAttribute("form",form);
+        return new Forward("success");
+    }
+
+    public static class Form extends FormData
+    {
+        private String textBox;
+        private String textArea;
+        private String[] select;
+        private String[] selectTwo;
+        private String[] selectThree;
+        private String radioGroup;
+        private String radioGroup2;
+        private boolean check1 = true;
+        private boolean check2 = false;
+        private String[] checkOne;
+        private String[] checkTwo;
+
+        public String getTextBox()
+        {
+            return textBox;
+        }
+
+        public void setTextBox(String textBox)
+        {
+            this.textBox = textBox;
+        }
+
+        public String getTextArea()
+        {
+            return textArea;
+        }
+
+        public void setTextArea(String textArea)
+        {
+            this.textArea = textArea;
+        }
+
+        public String[] getSelect()
+        {
+            return select;
+        }
+
+        public void setSelect(String[] select)
+        {
+            this.select = select;
+        }
+
+        public String[] getSelectTwo()
+        {
+            return selectTwo;
+        }
+
+        public void setSelectTwo(String[] selectTwo)
+        {
+            this.selectTwo = selectTwo;
+        }
+
+        public String[] getSelectThree()
+        {
+            return selectThree;
+        }
+
+        public void setSelectThree(String[] selectThree)
+        {
+            this.selectThree = selectThree;
+        }
+
+        public String getRadioGroup()
+        {
+            return radioGroup;
+        }
+
+        public void setRadioGroup(String radioGroup)
+        {
+            this.radioGroup = radioGroup;
+        }
+
+        public String getRadioGroup2()
+        {
+            return radioGroup2;
+        }
+
+        public void setRadioGroup2(String radioGroup2)
+        {
+            this.radioGroup2 = radioGroup2;
+        }
+
+        public boolean isCheck1()
+        {
+            return check1;
+        }
+
+        public void setCheck1(boolean check1)
+        {
+            this.check1 = check1;
+        }
+
+        public boolean isCheck2()
+        {
+            return check2;
+        }
+
+        public void setCheck2(boolean check2)
+        {
+            this.check2 = check2;
+        }
+
+        public String[] getCheckOne()
+        {
+            return checkOne;
+        }
+
+        public void setCheckOne(String[] checkOne)
+        {
+            this.checkOne = checkOne;
+        }
+
+        public String[] getCheckTwo()
+        {
+            return checkTwo;
+        }
+
+        public void setCheckTwo(String[] checkTwo)
+        {
+            this.checkTwo = checkTwo;
+        }
+     }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,143 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+        <h4>Disabled Bound to PageFlow</h4>
+        <p style="color:green">
+        This test is the same as the <b>Disable</b> test except that the value of the <b>disabled</b> attribute
+        is bound to a page flow variable.  In this case all of the various form items are disabled.  When the
+        form is posted a results page displays the contents of the form posted.  When you return from the
+        results page the form will become enabled (disabled="false").
+        </p>
+        <br>
+        <netui:form action="submitForm">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.textBox"
+                                defaultValue="Default Value" disabled="${pageFlow.disableBinding}" />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <netui:textArea dataSource="actionForm.textArea"
+                                defaultValue="Default Value" disabled="${pageFlow.disableBinding}" />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options</td>
+                    <td>
+                        <netui:select dataSource="actionForm.select" disabled="${pageFlow.disableBinding}" defaultValue="Option Two">
+                        <netui:selectOption value="Option One"/>
+                        <netui:selectOption value="Option Two"/>
+                        <netui:selectOption value="Option Three"/>
+                        <netui:selectOption value="Option Four"/>
+                        <netui:selectOption value="Option Five"/>
+                        </netui:select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options Source</td>
+                    <td>
+                        <netui:select dataSource="actionForm.selectThree"
+                                optionsDataSource="${pageFlow.selectOptions}"
+                                defaultValue="Option 3"
+                                disabled="${pageFlow.disableBinding}" />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select (option Disabled):</td>
+                    <td>
+                        <netui:select dataSource="actionForm.selectTwo"
+                                defaultValue="Option Nine">
+                        <netui:selectOption value="Option Six"
+                                disabled="${pageFlow.disableBinding}"/>
+                        <netui:selectOption value="Option Seven"/>
+                        <netui:selectOption value="Option Eight"
+                                disabled="${pageFlow.disableBinding}"/>
+                        <netui:selectOption value="Option Nine"/>
+                        <netui:selectOption value="Option Ten"
+                                disabled="${pageFlow.disableBinding}"/>
+                        </netui:select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options</td>
+                    <td>
+                        <netui:radioButtonGroup
+                                dataSource="actionForm.radioGroup"
+                                defaultValue="Radio Two"
+                                disabled="${pageFlow.disableBinding}"
+                        >
+                           <netui:radioButtonOption value="Radio One"/><br />
+                           <netui:radioButtonOption value="Radio Two"/><br />
+                           <netui:radioButtonOption value="Radio Three"/><br />
+                           <netui:radioButtonOption value="Radio Four"/><br />
+                        </netui:radioButtonGroup>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options Source</td>
+                    <td>
+                        <netui:radioButtonGroup
+                                dataSource="actionForm.radioGroup2"
+                                defaultValue="Radio 2"
+                                optionsDataSource="${pageFlow.radioOptions}"
+                                disabled="${pageFlow.disableBinding}"
+                        />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox</td>
+                    <td>
+                        Check One <netui:checkBox
+                                dataSource="actionForm.check1"
+                                disabled="${pageFlow.disableBinding}"
+                        /><br />
+                        Check Two <netui:checkBox
+                                dataSource="actionForm.check2"
+                                disabled="${pageFlow.disableBinding}"
+                        />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options Source</td>
+                    <td>
+                        <netui:checkBoxGroup
+                                dataSource="actionForm.checkOne"
+                                defaultValue="Check 3"
+                                optionsDataSource="${pageFlow.checkOptions}"
+                                disabled="${pageFlow.disableBinding}"
+                        />
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options</td>
+                    <td>
+                        <netui:checkBoxGroup
+                                dataSource="actionForm.checkTwo"
+                                defaultValue="Check Four"
+                                disabled="${pageFlow.disableBinding}"
+                        >
+                           <netui:checkBoxOption value="Check One"/><br />
+                           <netui:checkBoxOption value="Check Two"/><br />
+                           <netui:checkBoxOption value="Check Three"/><br />
+                           <netui:checkBoxOption value="Check Four"/><br />
+                        </netui:checkBoxGroup>
+
+                    </td>
+                </tr>
+
+            </table>
+            <br>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+            <netui:button value="Submit (Disabled)" type="submit"
+                disabled="${pageFlow.disableBinding}"/>
+        </netui:form>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableBinding/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+<%@ page import="org.apache.beehive.netui.script.common.DataAccessProviderBean"%><!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+    <netui:anchor action="flipBinding">Home</netui:anchor>
+    <h4>Disable Form Post Results</h4>
+    <p style="color:green">
+    This page displays the contents of the form posted by the input form.  The whole form is displayed.  The
+    <b>Home</b> link will flip the enable/disable state of the form on the previous page.
+    </p>
+    <hr>
+    <h4>Form Data</h4>
+    <table border="1" cellspacing="0">
+    <tr><td>TextBox</td><td><netui:label value="${requestScope.form.textBox}"/>&nbsp;</td></tr>
+    <tr><td>TextArea</td><td><netui:label value="${requestScope.form.textArea}"/>&nbsp;</td></tr>
+    <tr><td>Select/Options</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.select">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select/Options Source:</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.selectThree">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select (option Disabled):</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.selectTwo">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>radioGroup</td><td><netui:label value="${requestScope.form.radioGroup}"/>&nbsp;</td></tr>
+    <tr><td>radioGroup2</td><td><netui:label value="${requestScope.form.radioGroup2}"/>&nbsp;</td></tr>
+    <tr><td>check1</td><td><netui:label value="${requestScope.form.check1}"/>&nbsp;</td></tr>
+    <tr><td>check2</td><td><netui:label value="${requestScope.form.check2}"/>&nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options Source:</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.checkOne">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options</td><td>
+        <ul>
+        <netui-data:repeater dataSource="request.form.checkTwo">
+           <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+    &nbsp;</td></tr>
+    </table>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+package tags.disableImageButton;
+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;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    private boolean disableBinding = true;
+    public boolean getDisableBinding() {
+        return disableBinding;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward flipBinding()
+    {
+        disableBinding = !disableBinding;
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward submitForm(Form form)
+    {
+        getRequest().setAttribute("form",form);
+        return new Forward("success");
+    }
+
+    public static class Form extends FormData
+    {
+        private String textBox;
+
+        public String getTextBox()
+        {
+            return textBox;
+        }
+
+        public void setTextBox(String textBox)
+        {
+            this.textBox = textBox;
+        }
+     }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+        <br>
+        <h4>Disable an Image Button</h4>
+        <p style="color:green">
+        This test has an ImageButton that is disabled.  You ushould not be able to post this
+        form with that image Button.  The <b>disabled</b> attribute is databound and when you return from
+        the results page, evertying becomes enabled (both the imageButton and the textBox).  The results page
+        will display the contents of the textbox.
+        </p>
+        <hr>
+        <netui:form action="submitForm">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.textBox"
+                                defaultValue="Default Value" disabled="${pageFlow.disableBinding}" />
+                    </td>
+                </tr>
+            </table>
+            <br>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+            <netui:imageButton src="/coreWeb/resources/images/delete.gif" disabled="${pageFlow.disableBinding}"/>
+        </netui:form>
+    </body>
+</netui:html>
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/disableImageButton/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+<%@ page import="org.apache.beehive.netui.script.common.DataAccessProviderBean"%><!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+    <netui:anchor action="flipBinding">Home</netui:anchor>
+         <h4>Disable an Image Button</h4>
+         <p style="color:green">
+         This results page display the Parameter names posted and also the content of the
+         textbox posted.  When you hit the <b>Home</b> anchor, the disabled/enable state of the page will
+         be flipped.
+        </p>
+         <hr>
+         <h4>Posted Parameters</h4>
+    <%
+    java.util.Enumeration e = request.getParameterNames();
+    java.util.List l = java.util.Collections.list(e);
+    request.setAttribute("parameterNames",l);
+    %>
+    <netui-data:repeater dataSource="request.parameterNames">
+        <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+        <netui-data:repeaterItem>
+                <li><netui:label value="${container.item}"/></li>
+                <%
+                DataAccessProviderBean bean = (DataAccessProviderBean) pageContext.getAttribute("container");
+                String name = (String) bean.getItem();
+                request.setAttribute("values",request.getParameterValues(name));
+                %>
+            </netui-data:repeaterItem>
+        <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+    </netui-data:repeater>
+    <hr />
+    <h4>The textbox value</h4>
+    <table border="1" cellspacing="0">
+    <tr><td>TextBox</td><td><netui:label value="${requestScope.form.textBox}"/>&nbsp;</td></tr>
+    </table>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Errors Tag 1
+        </title>
+    </head>
+    <body>
+        <h3>Errors Tag 1</h3>
+        
+        <netui:errors/>
+        
+        <br>
+        <netui:anchor action="goPrev">go back</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Errors Tag 2-3
+        </title>
+    </head>
+    <body>
+        <h3>Errors Tag 2-3</h3>
+        
+        <netui:errors bundle="anotherBundle"/>
+        
+        <br>
+        <netui:anchor action="goPrev">go back</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Errors Tag 2-3
+        </title>
+    </head>
+    <body>
+        <h3>Errors Tag 2-3</h3>
+        
+        <netui:errors bundle="anotherBundle/tags/errors"/>
+        
+        <br>
+        <netui:anchor action="goPrev">go back</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errors4.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Errors Tag 4
+        </title>
+    </head>
+    <body>
+        <h3>Errors Tag 4</h3>
+        
+        <netui:errors bundle="rootMessages/" />
+        
+        <br>
+        <netui:anchor action="goPrev">go back</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errorsController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/errorsController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,511 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Aug 26 08:18:00 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package tags.errors;
+import org.apache.beehive.netui.pageflow.FormData;
+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 org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources resources="errors.Messages1"
+ * @jpf:message-resources resources="errors.Messages2" key="anotherBundle" 
+ * 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/tags/errors/errorsController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="60" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:errorAction.do#tags.errors.errorsController.SomeActionForm">
+ *   <property value="660" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:errorsAction1.do#tags.errors.errorsController.SomeActionForm">
+ *   <property value="120" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:errorsAction4.do#tags.errors.errorsController.SomeActionForm">
+ *   <property value="480" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goPrev.do">
+ *   <property value="300" name="x"/>
+ *   <property value="480" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:errors1.jsp@#@action:goPrev.do@">
+ *   <property value="120,120,192,264" name="elbowsX"/>
+ *   <property value="384,472,472,472" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:errors1.jsp">
+ *   <property value="120" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:errors2.jsp@#@action:goPrev.do@">
+ *   <property value="240,240,289,289" name="elbowsX"/>
+ *   <property value="384,410,410,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:errors2.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:errors3.jsp@#@action:goPrev.do@">
+ *   <property value="360,360,311,311" name="elbowsX"/>
+ *   <property value="384,410,410,436" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:errors3.jsp">
+ *   <property value="360" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:errors4.jsp@#@action:goPrev.do@">
+ *   <property value="480,480,408,336" name="elbowsX"/>
+ *   <property value="384,472,472,472" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:errors4.jsp">
+ *   <property value="480" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:errorsAction2.do#tags.errors.errorsController.SomeActionForm">
+ *   <property value="240" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:errorsAction3.do#tags.errors.errorsController.SomeActionForm">
+ *   <property value="360" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:errorsAction1.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="264,210,210,156" name="elbowsX"/>
+ *   <property value="103,103,192,192" name="elbowsY"/>
+ *   <property value="West_2" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:errorsAction2.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="289,289,282,276" name="elbowsX"/>
+ *   <property value="144,192,192,192" name="elbowsY"/>
+ *   <property value="South_0" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:errorsAction4.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="336,390,390,444" name="elbowsX"/>
+ *   <property value="103,103,192,192" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:errorsAction3.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="311,311,317,324" name="elbowsX"/>
+ *   <property value="144,192,192,192" name="elbowsY"/>
+ *   <property value="South_2" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="336,480,480,624" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="96,180,180,264" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#success#currentPage#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@@">
+ *   <property value="800" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#success#currentPage#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="696,730,730,764" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#current#currentPage#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@@">
+ *   <property value="660" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#current#currentPage#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="660,660,660,660" name="elbowsX"/>
+ *   <property value="144,170,170,196" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="current" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#errors1.jsp#@action:errorsAction1.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="120,120,120,120" name="elbowsX"/>
+ *   <property value="244,270,270,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#errors4.jsp#@action:errorsAction4.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="480,480,480,480" name="elbowsX"/>
+ *   <property value="244,270,270,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="return-to:@forward:return-to#prev#previousPage#@action:goPrev.do@@">
+ *   <property value="300" name="x"/>
+ *   <property value="600" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-to#prev#previousPage#@action:goPrev.do@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="524,540,540,556" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="prev" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:tags.errors.errorsController.SomeActionForm"/>
+ * <pageflow-object id="forward:path#success#errors2.jsp#@action:errorsAction2.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="240,240,240,240" name="elbowsX"/>
+ *   <property value="244,270,270,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#errors3.jsp#@action:errorsAction3.do#tags.errors.errorsController.SomeActionForm@">
+ *   <property value="360,360,360,360" name="elbowsX"/>
+ *   <property value="244,270,270,296" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "errors.Messages1"),
+        @Jpf.MessageResource(
+            name = "errors.Messages2",
+            bundleKey = "anotherBundle") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/tags/errors/errorsController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:errorAction.do#tags.errors.errorsController.SomeActionForm'>",
+        "  <property value='660' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:errorsAction1.do#tags.errors.errorsController.SomeActionForm'>",
+        "  <property value='120' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:errorsAction4.do#tags.errors.errorsController.SomeActionForm'>",
+        "  <property value='480' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goPrev.do'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='480' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:errors1.jsp@#@action:goPrev.do@'>",
+        "  <property value='120,120,192,264' name='elbowsX'/>",
+        "  <property value='384,472,472,472' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:errors1.jsp'>",
+        "  <property value='120' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:errors2.jsp@#@action:goPrev.do@'>",
+        "  <property value='240,240,289,289' name='elbowsX'/>",
+        "  <property value='384,410,410,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:errors2.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:errors3.jsp@#@action:goPrev.do@'>",
+        "  <property value='360,360,311,311' name='elbowsX'/>",
+        "  <property value='384,410,410,436' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:errors3.jsp'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:errors4.jsp@#@action:goPrev.do@'>",
+        "  <property value='480,480,408,336' name='elbowsX'/>",
+        "  <property value='384,472,472,472' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:errors4.jsp'>",
+        "  <property value='480' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:errorsAction2.do#tags.errors.errorsController.SomeActionForm'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:errorsAction3.do#tags.errors.errorsController.SomeActionForm'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:errorsAction1.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='264,210,210,156' name='elbowsX'/>",
+        "  <property value='103,103,192,192' name='elbowsY'/>",
+        "  <property value='West_2' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:errorsAction2.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='289,289,282,276' name='elbowsX'/>",
+        "  <property value='144,192,192,192' name='elbowsY'/>",
+        "  <property value='South_0' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:errorsAction4.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='336,390,390,444' name='elbowsX'/>",
+        "  <property value='103,103,192,192' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:errorsAction3.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='311,311,317,324' name='elbowsX'/>",
+        "  <property value='144,192,192,192' name='elbowsY'/>",
+        "  <property value='South_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='336,480,480,624' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='96,180,180,264' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#success#currentPage#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@@'>",
+        "  <property value='800' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#success#currentPage#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='696,730,730,764' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#current#currentPage#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@@'>",
+        "  <property value='660' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#current#currentPage#@action:errorAction.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='660,660,660,660' name='elbowsX'/>",
+        "  <property value='144,170,170,196' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='current' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#errors1.jsp#@action:errorsAction1.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='120,120,120,120' name='elbowsX'/>",
+        "  <property value='244,270,270,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#errors4.jsp#@action:errorsAction4.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='480,480,480,480' name='elbowsX'/>",
+        "  <property value='244,270,270,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='return-to:@forward:return-to#prev#previousPage#@action:goPrev.do@@'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='600' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-to#prev#previousPage#@action:goPrev.do@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='524,540,540,556' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='prev' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:tags.errors.errorsController.SomeActionForm'/>",
+        "<pageflow-object id='forward:path#success#errors2.jsp#@action:errorsAction2.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='240,240,240,240' name='elbowsX'/>",
+        "  <property value='244,270,270,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#errors3.jsp#@action:errorsAction3.do#tags.errors.errorsController.SomeActionForm@'>",
+        "  <property value='360,360,360,360' name='elbowsX'/>",
+        "  <property value='244,270,270,296' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class errorsController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" return-to="currentPage" 
+     * @jpf:validation-error-forward name="current" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                navigateTo = Jpf.NavigateTo.currentPage) 
+        },
+        validationErrorForward=@Jpf.Forward(name="current", navigateTo=Jpf.NavigateTo.currentPage))
+    protected Forward errorAction( SomeActionForm form )
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:validation-error-forward name="success" path="errors1.jsp"
+     */
+    @Jpf.Action(
+        validationErrorForward=@Jpf.Forward(name="success", path="errors1.jsp"))
+    protected Forward errorsAction1( SomeActionForm form )
+    {
+        return null;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:validation-error-forward name="success" path="errors4.jsp"
+     */
+    @Jpf.Action(
+        validationErrorForward=@Jpf.Forward(name="success", path="errors4.jsp"))
+    protected Forward errorsAction4( SomeActionForm form )
+    {
+        return null;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="prev" return-to="previousPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "prev",
+                navigateTo = Jpf.NavigateTo.previousPage) 
+        })
+    protected Forward goPrev()
+    {
+        return new Forward( "prev" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:validation-error-forward name="success" path="errors2.jsp"
+     */
+    @Jpf.Action(
+        validationErrorForward=@Jpf.Forward(name="success", path="errors2.jsp"))
+    protected Forward errorsAction2( SomeActionForm form )
+    {
+        return null;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:validation-error-forward name="success" path="errors3.jsp"
+     */
+    @Jpf.Action(
+        validationErrorForward=@Jpf.Forward(name="success", path="errors3.jsp"))
+    protected Forward errorsAction3( SomeActionForm form )
+    {
+        return null;
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class SomeActionForm extends FormData
+    {
+        public ActionErrors validate( ActionMapping mapping, HttpServletRequest request )
+        {
+            ActionErrors ret = new ActionErrors();
+            
+            if ( request.getParameter( "showDefaultError" ) != null )
+            {
+                ret.add( "defaultProperty", new ActionError( "defaultPropertyMessage" ) );
+            }
+            
+            if ( request.getParameter( "showBundleError1" ) != null )
+            {
+                ret.add( "bundleProperty1", new ActionError( "bundlePropertyMessage1", "ARG1" ) );
+            }
+            
+            if ( request.getParameter( "showBundleError2" ) != null )
+            {
+                ret.add( "bundleProperty2", new ActionError( "bundlePropertyMessage2", "ARG1", "ARG2" ) );
+            }
+            
+            if ( request.getParameter( "showRootError" ) != null )
+            {
+                ret.add( "rootProperty", new ActionError( "rootPropertyMessage", new Object[]{ "ARG1", "ARG2", "ARG3" } ) );
+            }
+            
+            return ret;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/errors/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Error and Errors Tags
+        </title>
+    </head>
+    <body>
+        <font color="red">
+            <netui:error value="defaultProperty"/>
+            <netui:error value="bundleProperty1" bundle="anotherBundle"/>
+            <netui:error value="bundleProperty2" bundle="anotherBundle/tags/errors"/>
+            <netui:error value="rootProperty" bundle="rootMessages/"/>
+        </font>
+        
+        <netui:anchor action="errorAction">succeed</netui:anchor>
+        <br>
+        <netui:anchor action="errorAction">
+            fail - error tag
+            <netui:parameter name="showDefaultError" value=""/>
+            <netui:parameter name="showBundleError1" value=""/>
+            <netui:parameter name="showBundleError2" value=""/>
+            <netui:parameter name="showRootError" value=""/>
+        </netui:anchor>
+        <br>
+        <netui:anchor action="errorsAction1">
+            fail - errors tag 1
+            <netui:parameter name="showDefaultError" value=""/>
+        </netui:anchor>
+        <br>
+        <netui:anchor action="errorsAction2">
+            fail - errors tag 2
+            <netui:parameter name="showBundleError1" value=""/>
+        </netui:anchor>
+        <br>
+        <netui:anchor action="errorsAction3">
+            fail - errors tag 3
+            <netui:parameter name="showBundleError2" value=""/>
+        </netui:anchor>
+        <br>
+        <netui:anchor action="errorsAction4">
+            fail - errors tag 4
+            <netui:parameter name="showRootError" value=""/>
+        </netui:anchor>
+        <br>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title>Exceptions</title>
+</head>
+<body>
+<h4>Exceptions</h3>
+<netui:anchor action="throwGlobal">Global To Method</netui:anchor><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.except;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:catch type="tags.except.Controller$MyException"
+ *            method="globalHandler"
+ */
+@Jpf.Controller(
+    catches = {
+        @Jpf.Catch(
+            type = tags.except.Controller.MyException.class,
+            method = "globalHandler") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _message;
+    public String getMessage()
+    {
+        return _message;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward begin()
+    {
+	_message = "";
+        return new Forward( "begin" );
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward throwGlobal()
+        throws Exception
+    {
+        throw new MyException("Global Exception being Thrown");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Begin.jsp") 
+        })
+    protected Forward goHome()
+    {
+        return new Forward( "begin" );
+    }
+
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="ErrorPage.jsp"
+     */
+    @Jpf.ExceptionHandler(
+        forwards = {
+            @Jpf.Forward(
+                name = "errorPage",
+                path = "ErrorPage.jsp") 
+        })
+    protected Forward globalHandler(MyException ex, String actionName,
+					  String message, Object form)
+    {
+        _message = "caught " + ex + " in globalHandler";
+        return new Forward( "errorPage" );
+    }
+
+    public static class MyException extends Exception
+    {
+	public MyException() {
+	    super();
+	}
+	public MyException(String msg) {
+	    super(msg);
+	}
+	public String toString() {
+	    return "[MyException]";
+	}
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/ErrorPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/except/ErrorPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Error Page</title>
+</head>
+<body>
+<h4>Report Exception</h4>
+Page Flow Message: <netui:label value="${pageFlow.message}"/><br />
+Exception Tag Message:<netui:exceptions showMessage="true"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatSelect/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatSelect/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,30 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Date Format Test</title>
+</head>
+<body>
+<h4>Date Format Test</h4>
+<b>Select:</b> <br />
+  <netui:select size="5" dataSource="pageFlow.select"> 
+    <netui:formatDate pattern="MM/dd/yyyy" country="USA" /> 
+    <netui:selectOption value="1">07/10/96 4:5 PM, PDT</netui:selectOption> 
+    <netui:selectOption value="2">01/28/2063</netui:selectOption> 
+    <netui:selectOption value="3">01/28/63</netui:selectOption> 
+    <netui:selectOption value="4">01012063</netui:selectOption> 
+    <netui:selectOption value="5">010163</netui:selectOption> 
+  </netui:select> 
+<hr />
+<b>TextBox:</b><br />
+  <netui:textBox dataSource="pageFlow.textBox"> 
+     <netui:formatNumber pattern="####.00"/> 
+  </netui:textBox> 
+<hr />
+<b>TextArea:</b> 
+ <netui:textArea cols="20" rows="3" dataSource="pageFlow.textArea" 
+                 defaultValue="${pageFlow.textDefault}"> 
+   <netui:formatString pattern="###.## "/> 
+   <netui:formatString pattern="###### USD"/> 
+ </netui:textArea> 
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatSelect/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatSelect/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.formatSelect;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Calendar;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private String select; 
+
+    public String getSelect() {
+        return(select);
+    } 
+    public void setSelect(String select) {
+        this.select= select;
+    } 
+
+    private Integer textBox = new Integer(123456); 
+    
+    public Integer getTextBox() {
+        return(textBox);
+    } 
+    public void setTextBox(Integer textBox) {
+        this.textBox = textBox;
+    } 
+    
+    private String textArea; 
+
+    public String getTextArea() {
+        return(textArea);
+    } 
+    public void setTextArea(String textArea) {
+        this.textArea = textArea;
+    } 
+
+    private String textDefault = "12345"; 
+
+    public String getTextDefault() {
+        return(textDefault);
+    } 
+    public void setTextDefault(String textDefault)  {
+        this.textDefault = textDefault;
+    } 
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatTags/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatTags/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,115 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Format Tests</title>
+</head>
+<body>
+<h4>Format Tests</h4>
+<b>String Format</b>
+<table border="1" cellspacing="0">
+<tr><th>Truncate</ty><td>
+<netui:label value="${pageFlow.letters}">
+     <netui:formatString pattern="#-#####-#" truncate="true"/>
+</netui:label>
+</td><td>
+<netui:label value="abcdefghijklmnopqrstuvwxyz">
+     <netui:formatString pattern="#-#####-#" truncate="true"/>
+</netui:label>
+</td><td>&nbsp</td></tr>
+<tr><th>No Truncate</th><td>
+<netui:label value="${pageFlow.letters}">
+     <netui:formatString pattern="#-#####-#" />
+</netui:label>
+</td><td>
+<netui:label value="abcdefghijklmnopqrstuvwxyz">
+     <netui:formatString pattern="#-#####-#"/>
+</netui:label>
+</td><td>&nbsp</td></tr>
+<tr><th>Contains Hash</th>
+<td><pre><netui:label value="${pageFlow.hash}"><netui:formatString pattern="#-#####-#" truncate="true"/></netui:label></pre></td>
+<th>Contains spac</th>
+<td><pre><netui:label value="${pageFlow.spaces}"><netui:formatString pattern="#-#####-#" truncate="true"/></netui:label></pre></td>
+</tr>
+<tr><th>Hash Escape</th>
+<td><netui:label value="${pageFlow.letters}"><netui:formatString pattern="$##-#####-#" truncate="true"/></netui:label></td>
+<th>Escape Chars</th>
+<td><netui:label value="${pageFlow.letters}"><netui:formatString pattern="$$#-#####-#" truncate="true"/></netui:label></td>
+</tr>
+<tr><th>Bind to Pattern</th><td>
+<netui:label value="${pageFlow.letters}">
+     <netui:formatString pattern="${pageFlow.stringPattern}" truncate="true"/>
+</netui:label>
+</td><td>
+<netui:label value="abcdefghijklmnopqrstuvwxyz">
+     <netui:formatString pattern="${pageFlow.stringPattern}" truncate="true"/>
+</netui:label>
+</td><td>&nbsp</td></tr>
+</table>
+<b>Number Format</b>
+<table border="1" cellspacing="0">
+<tr><th>EN Currency</ty><td>
+<netui:label value="12345.67">
+     <netui:formatNumber language="EN" country = "US" type="currency"/>
+</netui:label>
+<!-- removing the GB for the moment because this causes the test recorder problems -->
+<th>GB Currency</th><td>
+<netui:label value="12345.67">
+     <netui:formatNumber language="EN" country = "US" type="currency"/>
+</netui:label>
+</td></tr>
+<tr><th>EN Number</ty><td>
+<netui:label value="12345.67">
+     <netui:formatNumber language="EN" country = "US" type="number"/>
+</netui:label>
+<th>GB Number</th><td>
+<netui:label value="12345.67">
+     <netui:formatNumber language="EN" country = "GB" type="number"/>
+</netui:label>
+</td></tr>
+<tr><th>EN Percentage</ty><td>
+<netui:label value=".167">
+     <netui:formatNumber language="EN" country = "US" type="percent"/>
+</netui:label>
+<th>GB Percentage</th><td>
+<netui:label value=".167">
+     <netui:formatNumber language="EN" country = "GB" type="percent"/>
+</netui:label>
+</td></tr>
+<tr><th>Pattern</ty><td>
+    <netui:label value="${pageFlow.number}">
+        <netui:formatNumber pattern="$#,###,###.00" />
+    </netui:label>
+<th>Escaped Pattern</th><td>
+    <netui:label value="${pageFlow.number}">
+        <netui:formatNumber pattern="\##,###,###.00" />
+    </netui:label>
+</td></tr>
+</table>
+<b>Date Format</b>
+<table border="1" cellspacing="0">
+<tr><th>US Date</th><td>
+<netui:label value="${pageFlow.date}">
+     <netui:formatDate language="EN" country = "US"/>
+</netui:label>
+</td><th>GB Date</th><td>
+<netui:label value="${pageFlow.date}">
+     <netui:formatDate language="EN" country = "GB"/>
+</netui:label>
+</td></tr>
+
+<tr><th>yyyy.MM.dd G 'at' HH:mm:ss z</th><td>
+<netui:label value="${pageFlow.date}">
+     <netui:formatDate pattern="yyyy.MM.dd G 'at' HH:mm:ss z"/>
+</netui:label>
+</td><th>yyyy.MM.dd G 'at' HH:mm:ss z  (EN, GB)</th><td>
+Removed because this is not handled by the test recorder correctly
+</td></tr>
+
+<tr><th>yyyy.MM.dd G 'at' HH:mm:ss z (FR)</th><td>
+Removed because the test recorder doesn't handle the resulting encoding correctly.
+</td><th>yyyy.MM.dd G 'at' HH:mm:ss z (RU)</th><td>
+Removed because this is not handled by the test recorder correctly
+</td></tr>
+</table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatTags/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/formatTags/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,92 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.formatTags;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Calendar;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+    private String _hash = "#Hashs#";
+    private String _spaces = "<     >";
+    private String _strPattern = "##-##";
+    private String _number = "123456.789";
+    private Date _date = null;
+
+    public Controller() {
+        Calendar c = Calendar.getInstance();
+        c.set(2002,0,17,13,30,8);
+        _date = c.getTime();
+    }
+
+    public String getLetters() {
+        return _letters;
+    }
+    public String getHash() {
+        return _hash;
+    }
+    public String getSpaces() {
+        return _spaces;
+    }
+    public String getStringPattern() {
+        return _strPattern;
+    }
+    public String getNumber() {
+        return _number;
+    }
+    public Date getDate() {
+        return _date;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/hidden/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/hidden/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Sep 02 09:29:14 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package tags.hidden;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/hidden/Controller.jpf'/>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:hidden.Controller.HiddenForm'/>",
+        "<pageflow-object id='formbeanprop:hidden.Controller.HiddenForm#hidden#java.lang.String'/>",
+        "<pageflow-object id='action:post.do#hidden.Controller.HiddenForm'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do#hidden.Controller.HiddenForm@'>",
+        "  <property value='276,300,300,324' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:post.do#hidden.Controller.HiddenForm@'>",
+        "  <property value='396,396,323,251' name='elbowsX'/>",
+        "  <property value='92,56,56,56' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='North_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private String hiddenValue = "Page Flow Hidden Value";
+    private String value = "No Value Set";
+
+    public String getHiddenValue()
+    {
+        return hiddenValue;
+    }
+
+    public void setHiddenValue(String hiddenValue)
+    {
+        this.hiddenValue = hiddenValue;
+    }
+
+    public String getValue()
+    {
+        return value;
+    }
+
+    public void setValue(String value)
+    {
+        this.value = value;
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward post(HiddenForm form)
+    {
+        value = form.getHidden();
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class HiddenForm extends FormData
+    {
+        private String hidden;
+
+        public void setHidden(String hidden)
+        {
+            this.hidden = hidden;
+        }
+
+        public String getHidden()
+        {
+            return this.hidden;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/hidden/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/hidden/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,26 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <h4>Hidden Using dataInput</h4>
+        <p style="color:green">
+        This test will bind a value from the dataInput attribute which will be posted to the actionForm.
+        The value then is displayed in the hidden value below.  You should hit input to see the posted
+        value <b>Page Flow Hidden Value</b>.
+        </p>
+        <netui:form action="post">
+            <netui:hidden dataSource="actionForm.hidden" dataInput="${pageFlow.hiddenValue}"/>           
+            <netui:button value="post" type="submit"/>
+        </netui:form>
+        Hidden: <netui:label value="${pageFlow.value}"/> 
+        <hr/>
+     </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,148 @@
+package tags.imageAnchorActions;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * 
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    
+    public static class Info implements java.io.Serializable {
+        public Info(String action, String image) {
+            this.action = action;
+            this.image = image;
+        }
+        public String action;
+        public String image;
+
+        public String getAction()
+        {
+            return action;
+        }
+
+        public void setAction(String action)
+        {
+            this.action = action;
+        }
+
+        public String getImage()
+        {
+            return image;
+        }
+
+        public void setImage(String image)
+        {
+            this.image = image;
+        }
+    }
+
+    private Info[] pageFlowActions = {new Info("ActionOne","/coreWeb/resources/images/back.gif"),
+                             new Info("ActionTwo","/coreWeb/resources/images/cancel.gif"),
+                             new Info("ActionThree","/coreWeb/resources/images/details.gif")
+    };
+    private String nullAction = null;
+    private String lastAction = null;
+    private String invalidAction = "invalidAction";
+
+    public Info[] getPageFlowActions()
+    {
+        return pageFlowActions;
+    }
+
+    public String getNullAction()
+    {
+        return nullAction;
+    }
+
+    public String getLastAction()
+    {
+        return lastAction;
+    }
+
+    public String getInvalidAction()
+    {
+        return invalidAction;
+    }
+    /**
+     * This method represents the point of entry into the pageflow
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        lastAction = "begin";
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward ActionOne()
+    {
+        lastAction = "ActionOne";
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward ActionTwo()
+    {
+        lastAction = "ActionTwo";
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward ActionThree()
+    {
+        lastAction = "ActionThree";
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="error.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "error.jsp") 
+        })
+    protected Forward goErrors()
+    {
+		return new Forward( "success" );
+	}
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+    <h4>Databinding Error in ImageAnchor</h4>
+    <p style="color:green">
+    The following two links contain errors.  These errors are for databinding to an invalid action and a
+    null object.  These should both report errors at the bottom of the page.  These errors will differ.
+    </p>
+    <hr>
+        Invalid Action:<netui:imageAnchor action="${pageFlow.invalidAction}"
+                src="/coreWeb/resources/images/back.gif" /><br>
+        Null Action:<netui:imageAnchor action="${pageFlow.nullAction}"
+                src="/coreWeb/resources/images/back.gif"/><br>
+        <hr>
+        <netui:anchor action="${pageFlow.actions[1]}">Home</netui:anchor><br>
+        </p>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/imageAnchorActions/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+    <h4>Databinding to ImageAnchor</h4>
+    <p style="color:green">
+    This tests demonstrates the ability to bind to an ImageAnchor.  The <b>action</b> and <b>source</b> are databound
+    (within a repeater).  When these links are pressed, we go back to this page and the last action should be set.
+    On the bottom of the page is a link to a set of errors.
+    </p>
+    <hr>
+    <h4>Image Repeater</h4>
+    <netui-data:repeater dataSource="pageFlow.pageFlowActions">
+            <netui-data:repeaterHeader><ul></netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <li>
+                <netui:imageAnchor action="${container.item.action}" src="${container.item.image}"/>
+                </li>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></ul></netui-data:repeaterFooter>
+    </netui-data:repeater>
+    <b>Last Action:</b><netui:label value="${pageFlow.lastAction}"/><br>
+    <hr>
+    <netui:anchor action="goErrors">Errors</netui:anchor><br>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/iteratorTests/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/iteratorTests/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Test of Iterators</title>
+</head>
+<body>
+<h4>Test of Iterators</h4>
+<netui:form action="/postback">
+Select: 
+  <netui:select dataSource="pageFlow.selected"
+    optionsDataSource="${pageFlow.options}"
+    defaultValue="${pageFlow.defaultValue}"/>
+<br />
+CheckBoxGroup:
+   <netui:checkBoxGroup dataSource="pageFlow.checkGroup"
+        defaultValue="${pageFlow.defaultCheckGroup}"
+	optionsDataSource="${pageFlow.options}"/>
+<br />
+RadioButtonGroup: 
+   <netui:radioButtonGroup dataSource="pageFlow.radioGroup"
+        defaultValue="${pageFlow.defaultRadioGroup}"
+	optionsDataSource="${pageFlow.options}"/><br />
+<br/>
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/iteratorTests/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/iteratorTests/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,108 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.iteratorTests;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _selected = null;
+
+    public String[] getSelected() {
+	return _selected;
+    }
+    public void setSelected(String[] selected) {
+	_selected = selected;
+    }
+
+    public String[] getOptions() {
+	return null;
+    }
+
+    public String[] getDefaultValue() {
+	return null;
+    }
+
+    // Checkbox Group
+    private String[] _checkGroup = null;
+
+    public void setCheckGroup(String[] checkGroup) {
+	_checkGroup = checkGroup;
+    }
+    public String[] getCheckGroup() {
+	return _checkGroup;
+    }
+
+    public String[] getDefaultCheckGroup() {
+	return null;
+    }
+
+    // Radio Group
+    public String getDefaultRadioGroup() {
+	return null;
+    }
+
+    private String _radioGroup = null;
+    public void setRadioGroup(String radioGroup) {
+	_radioGroup = radioGroup;
+    }
+    public String getRadioGroup() {
+	return _radioGroup;
+    }
+
+
+
+
+    public static class Form extends FormData {
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaultValues/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaultValues/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,66 @@
+package tags.labelDefaultValues;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/labelDefaultValues/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+    private String value = null;
+    private String spacer = " ";
+
+    public String getValue() {
+        return value;
+    }
+    public String getSpacer() {
+        return spacer;
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaultValues/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaultValues/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    [nbsp]: '<netui:label escapeWhiteSpaceForHtml="false"  value="${pageFlow.value}" defaultValue="&nbsp;"/>'<br />
+    amp: '<netui:label value="${pageFlow.value}" defaultValue="&"/>'<br />
+    &amp;nbsp: '<netui:label value="${pageFlow.value}" defaultValue="&amp;nbsp;"/>'<br />
+    &amp;amp: '<netui:label value="${pageFlow.value}" defaultValue="&amp"/>'<br />
+    foo[copy]: '<netui:label value="${pageFlow.value}" defaultValue="foo &copy;"/>'<br />
+    foo[nbsp nbsp]bar: '<netui:label value="${pageFlow.value}" defaultValue="foo&nbsp;&nbsp;bar"/>'<br />
+    [nbsp]: '<netui:label value="${pageFlow.value}" defaultValue="&#160;"/>'<br />
+    spacer: '<netui:label value="${pageFlow.spacer}"/>'<br />
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaults/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaults/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.labelDefaults;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class Controller extends PageFlowController
+{
+    private String defaultBound = "[NULL - In PageFlow]";
+    private java.util.Calendar defaultDate = null;
+
+    public Object getNullValue() {
+        return null;
+    }
+    public String getDefaultBound() {
+        return defaultBound;
+    }
+    public java.util.Calendar getDefaultDate() {
+        return defaultDate;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="begin.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "begin.jsp") 
+        })
+    public Forward begin()
+    {
+        defaultDate = java.util.Calendar.getInstance();
+        defaultDate.set(2003,5,1);
+        return new org.apache.beehive.netui.pageflow.Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaults/begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelDefaults/begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Label Default Values
+        </title>
+    </head>
+    <netui:body>
+    <h4>Label Default Values</h4>
+    <p style="color:green">
+    This test has a set of labels which bind to an object that has a value of null.  In each case we will then bind
+    to the default value, if it exists.  When nothing at all is found, the empty string is output.  This happens
+    in the first an last test of each group.  The first doesn't specify a defaultValue.  The last maps to a defaultValue
+    value bound to null.  The middle two, bind to a literal in the tag and a value in the page flow.
+    </p>
+    <hr>
+    <table cellspacing="0" border="1" cellpadding="3">
+
+    <tr><td>Null Object/No Default</td><td><netui:label value="${pageFlow.nullValue}" /></td></tr>
+    <tr><td>Null Object/Default</td><td><netui:label defaultValue="[NULL]" value="${pageFlow.nullValue}" /></td></tr>
+    <tr><td>Null Object/Bound Default</td><td><netui:label defaultValue="${pageFlow.defaultBound}" value="${pageFlow.nullValue}" /></td></tr>
+    <tr><td>Null Object/Bound Null Default</td><td><netui:label defaultValue="${pageFlow.nullValue}" value="${pageFlow.nullValue}" /></td></tr>
+
+    <tr><td>Null Object, Date Formatter/No Default</td><td><netui:label value="${pageFlow.nullValue}"><netui:formatDate pattern="MM/dd/yyyy"/></netui:label></td></tr>
+    <tr><td>Null Object, Date Formatter/Default</td><td><netui:label value="${pageFlow.nullValue}" defaultValue="[NULL]"><netui:formatDate pattern="MM/dd/yyyy"/></netui:label></td></tr>
+    <tr><td>Null Object, Date Formatter/Bound Default</td><td><netui:label value="${pageFlow.nullValue}" defaultValue="${pageFlow.defaultDate}"><netui:formatDate pattern="MM/dd/yyyy"/></netui:label></td></tr>
+    <tr><td>Null Object, Date Formatter/Bound Null Default</td><td><netui:label value="${pageFlow.nullValue}" defaultValue="${pageFlow.nullValue}"><netui:formatDate pattern="MM/dd/yyyy"/></netui:label></td></tr>
+    </table>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelLiteral/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelLiteral/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+package tags.labelLiteral;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    private String litString = "<foo>\n  <bar>\n      Content\n   </bar>\n</foo>";
+    public String getLitString() {
+        return litString;
+    }
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelLiteral/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelLiteral/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Default</h4>
+        <netui:label value="${pageFlow.litString}" />
+        <hr />
+        <h4>escapeWhiteSpaceForHtml=true</h4>
+        <netui:label value="${pageFlow.litString}" escapeWhiteSpaceForHtml="true"/>
+        <hr />
+        <h4>escapeWhiteSpaceForHtml=false</h4>
+        <netui:label value="${pageFlow.litString}" escapeWhiteSpaceForHtml="false"/>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelStyles/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelStyles/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Content and Literal</title>
+<style>
+.blue {color: blue}
+.red {color: red}
+</style>
+</head>
+<body>
+<h4>Content And Literal</h4>
+<h4>Label With Style Attributes</h4>
+text [<netui:label value="${pageFlow.text}" style="color:blue"/>]<br />
+text 2 [<netui:label value="${pageFlow.text2}"  style="color:red"/>]<br />
+html [<netui:label value="${pageFlow.html}"  style="color:blue"/>]<br />
+<h4>Label With Styles</h4>
+text [<netui:label value="${pageFlow.text}" styleClass="red"/>]<br />
+text 2 [<netui:label value="${pageFlow.text2}" styleClass="blue"/>]<br />
+html [<netui:label value="${pageFlow.html}" styleClass="red"/>]<br />
+</body>
+</html>
+
+	
+
+
+			   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelStyles/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/labelStyles/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.labelStyles;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    private String _text = "Some Text";
+    public String getText() {
+	return _text;
+    }
+
+    private String _text2 = "Some Additional Text";
+    public String getText2() {
+	return _text2;
+    }
+
+    private String _html = "<b>Bold Text</b>";
+    public String getHtml() {
+	return _html;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward begin(){
+        return new Forward("begin");
+    }
+}
+
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/message/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/message/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<html>
+<head>
+<title>Message Tags</title>
+<netui:base />
+</head>
+<body>
+<netui-data:message value="${bundle.default.MessageStringTwo}" resultId="two" /> 
+<netui-data:message value="${bundle.default.MessageStringThree}" resultId="three" /> 
+<netui-data:message value="${bundle.default.MessageString}" resultId="baz"> 
+    <netui-data:messageArg value="${pageScope.two}"/> 
+    <netui-data:messageArg value="${pageScope.three}"/> 
+</netui-data:message> 
+BAZ: <netui:label value="${pageScope.baz}"/><br>
+
+<netui-data:message value="\{1} of \{0}" resultId="baz"> 
+    <netui-data:messageArg value="${pageScope.two}"/> 
+    <netui-data:messageArg value="${pageScope.three}"/> 
+</netui-data:message> 
+BAZ: <netui:label value="${pageScope.baz}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/message/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/message/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.message;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ * @jpf:message-resources resources="error.Text"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    },
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "error.Text") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/multiSelect/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/multiSelect/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<netui:form action="/postback">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <netui:select multiple="true" dataSource="pageFlow.selected"
+    optionsDataSource="${pageFlow.options}"
+    defaultValue="${pageFlow.defaultValue}" size="6"/>
+  </td></tr>
+<netui:button type="submit">Submit</netui:button>
+</td></tr>
+</table>
+</netui:form>
+<br />
+<b>Select 1:</b> size = <netui:label value="${pageFlow.selectedSize}"/><br />
+<db:repeater dataSource="pageFlow.selected">
+<db:repeaterItem>
+  <netui:label value="${container.item}"/><br />
+</db:repeaterItem>
+</db:repeater>
+<br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/multiSelect/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/multiSelect/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,103 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.multiSelect;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _options = {"Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6"};
+    String[] _selected = null;
+    String[] _selected2 = {"Option 1", "Option 3"};
+    String[] _defaultValue = {_options[3],_options[5]};
+    ArrayList _colOptions;
+
+    public String[] getSelected() {
+	return _selected;
+    }
+    public void setSelected(String[] selected) {
+	_selected = selected;
+    }
+
+    public int getSelectedSize() {
+	return (_selected != null) ? _selected.length : -1;
+    }
+
+    public String[] getSelected2() {
+	return _selected2;
+    }
+    public void setSelected2(String[] selected) {
+	_selected2 = selected;
+    }
+
+    public String[] getOptions() {
+	return _options;
+    }
+
+    public ArrayList getColOptions() {
+	return _colOptions;
+    }
+    
+    public String[] getDefaultValue() {
+	return _defaultValue;
+    }
+
+
+    public static class Form extends FormData {
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_colOptions = new ArrayList();
+	_colOptions.add("Option 1");
+	_colOptions.add("Option 2");
+	_colOptions.add("Option 3");
+	_colOptions.add("Option 4");
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/nullableSelect/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/nullableSelect/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,195 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Sep 02 09:45:40 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package tags.nullableSelect;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/nullableSelect/Controller.jpf"/>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:nullableSelect.Controller.TypeBean"/>
+ * <pageflow-object id="formbeanprop:nullableSelect.Controller.TypeBean#type#java.lang.String"/>
+ * <pageflow-object id="action:postType.do#nullableSelect.Controller.TypeBean">
+ *   <property value="380" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:postType.do#nullableSelect.Controller.TypeBean@">
+ *   <property value="276,310,310,344" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:postType.do#nullableSelect.Controller.TypeBean@">
+ *   <property value="380,314,314,276" name="elbowsX"/>
+ *   <property value="56,56,81,81" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/nullableSelect/Controller.jpf'/>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:nullableSelect.Controller.TypeBean'/>",
+        "<pageflow-object id='formbeanprop:nullableSelect.Controller.TypeBean#type#java.lang.String'/>",
+        "<pageflow-object id='action:postType.do#nullableSelect.Controller.TypeBean'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postType.do#nullableSelect.Controller.TypeBean@'>",
+        "  <property value='276,310,310,344' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:postType.do#nullableSelect.Controller.TypeBean@'>",
+        "  <property value='380,314,314,276' name='elbowsX'/>",
+        "  <property value='56,56,81,81' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+    public String[] types = {"foo","bar","baz"};
+    public String defaultType = "bar";
+    public String selectedType = "No Type Selected";
+
+    public String[] getTypes()
+    {
+        return types;
+    }
+
+    public void setTypes(String[] types)
+    {
+        this.types = types;
+    }
+
+    public String getDefaultType()
+    {
+        return defaultType;
+    }
+
+    public void setDefaultType(String defaultType)
+    {
+        this.defaultType = defaultType;
+    }
+
+    public String getSelectedType()
+    {
+        return selectedType;
+    }
+
+    public void setSelectedType(String selectedType)
+    {
+        this.selectedType = selectedType;
+    }
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward postType(TypeBean form)
+    {
+        selectedType = form.getType();
+        if (selectedType == null) {
+            selectedType = "The form.type value was null";
+        }
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class TypeBean extends FormData
+    {
+        private String type;
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType()
+        {
+            return this.type;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/nullableSelect/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/nullableSelect/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:form action="postType">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <netui:select dataSource="actionForm.type" defaultValue="${pageFlow.defaultType}" nullable="true" 
+                        optionsDataSource="${pageFlow.types}"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="postType" type="submit"/>
+        </netui:form><br>
+        Form Two:
+        <netui:form action="postType">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <netui:select dataSource="actionForm.type" defaultValue="${pageFlow.defaultType}" nullable="true" 
+                        optionsDataSource="${pageFlow.types}" nullableOptionText="[NULL]"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="postType" type="submit"/>
+        </netui:form><br>
+        Type: <netui:label value="${pageFlow.selectedType}"/> 
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/onTest/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/onTest/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,401 @@
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+<head>
+<script language="JavaScript">
+
+var opCount = 0;
+var textId = "text";
+var textAreaId = "textArea";
+var buttonId = "button";
+var formId = "formOut";
+var anchorId = "anchor";
+var checkboxId = "checkbox";
+var checkboxGroupId = "checkboxGroup";
+var radioId = "radio";
+var selectId = "select";
+var selectOptionId = "selectOption";
+var labelId = "label";
+var hiddenId = "hidden";
+var imageId = "image";
+var imageButtonId = "imageButton";
+var imageAnchorId = "imageAnchor";
+
+
+function print_blur(txtId) {
+   print_to_doc(txtId," blur");
+}
+
+function print_operation(txtId) {
+  var t = document.getElementById(txtId + "_operation");
+  var text = txtId + " operations:" + ++opCount;
+  t.firstChild.data = text;
+}
+
+function print_reset(txtId) {
+   print_to_doc(txtId," reset");
+}
+
+function print_submit(txtId) {
+   print_to_doc(txtId," submit");
+}
+
+function print_change(txtId) {
+   print_to_doc(txtId," change");
+}
+
+function print_click(txtId) {
+   print_to_doc(txtId," click");
+}
+
+function print_dblClick(txtId) {
+   print_to_doc(txtId," dblClick");
+}
+
+function print_focus(txtId) {
+   print_to_doc(txtId," focus");
+}
+
+function print_keyDown(txtId) {
+   print_to_doc(txtId," keyDown");
+}
+
+function print_keyPress(txtId) {
+   print_to_doc(txtId," keyPress");
+}
+
+function print_keyUp(txtId) {
+   print_to_doc(txtId," keyUp");
+}
+
+function print_mouseDown(txtId) {
+   print_to_doc(txtId," mouseDown");
+}
+
+function print_mouseMove(txtId) {
+   print_to_doc(txtId,".");
+}
+
+function print_mouseOver(txtId) {
+   print_to_doc(txtId," over");
+}
+
+function print_mouseOut(txtId) {
+   print_to_doc(txtId," out");
+}
+
+function print_mouseUp(txtId) {
+   print_to_doc(txtId," mouseUp");
+}
+
+function print_select(txtId) {
+   print_to_doc(txtId," select");
+}
+
+function print_to_doc(txtId,txt) {
+  var t = document.getElementById(txtId);
+  var text = t.firstChild.data;
+  text += " " + txt;
+  t.firstChild.data = text;
+}
+</script>
+<title>On Test</title>
+<!-- target -->
+<netui:base />
+</head>
+<body>
+<h4>On Test</h4>
+<table border="1" cellspacing="1" cellpadding="1" width="100%">
+<tr><td width="200pt" valign="top">
+<!-- FORM: enctype, focus, location, method, name, scope, style, styleClass,
+        tabindex, type
+-->
+<netui:form action="/postback"
+        onClick="print_operation(formId);"
+        onKeyDown="print_operation(formId);"
+        onKeyPress="print_operation(formId);"
+        onKeyUp="print_operation(formId);"
+        onMouseDown="print_operation(formId);"
+        onMouseMove="print_operation(formId);"
+        onMouseOut="print_mouseOut(formId);"
+        onMouseOver="print_mouseOver(formId);"
+        onMouseUp="print_operation(formId);"
+        onReset="print_reset(formId);"
+        onSubmit="print_submit(formId);"
+>
+<!-- TEXTBOX: defaultValue, readonly, style, styleClass, tabindex
+-->
+<netui:textBox dataSource="actionForm.text"
+        maxlength="30"
+        onBlur="print_blur(textId);"
+        onChange="print_change(textId);"
+        onClick="print_click(textId);"
+        onDblClick="print_dblClick(textId);"
+        onFocus="print_focus(textId);"
+        onKeyDown="print_keyDown(textId);"
+        onKeyPress="print_keyPress(textId);"
+        onKeyUp="print_keyUp(textId);"
+        onMouseDown="print_mouseDown(textId);"
+        onMouseMove="print_mouseMove(textId);"
+        onMouseOver="print_mouseOver(textId);"
+        onMouseOut="print_mouseOut(textId);"
+        onMouseUp="print_mouseUp(textId);"
+        onSelect="print_select(textId);"
+
+/><br />
+<!-- TEXTAREA: defaultValue, disabled, readonly, style, styleClass,
+        tabindex
+-->
+<netui:textArea dataSource="actionForm.textArea"
+        cols="20" rows="5"
+        onBlur="print_blur(textAreaId);"
+        onChange="print_change(textAreaId);"
+        onClick="print_click(textAreaId);"
+        onDblClick="print_dblClick(textAreaId);"
+        onFocus="print_focus(textAreaId);"
+        onKeyDown="print_keyDown(textAreaId);"
+        onKeyPress="print_keyPress(textAreaId);"
+        onKeyUp="print_keyUp(textAreaId);"
+        onMouseDown="print_mouseDown(textAreaId);"
+        onMouseMove="print_mouseMove(textAreaId);"
+        onMouseOver="print_mouseOver(textAreaId);"
+        onMouseOut="print_mouseOut(textAreaId);"
+        onMouseUp="print_mouseUp(textAreaId);"
+        onSelect="print_select(textAreaId);"
+
+/><br />
+<!-- CHECKBOXGROUP: defaultValue, optionsDataSource,style, styleClass
+-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup">
+<!-- CHECKBOXOPTION: style, styleClass, tabindex
+-->
+<netui:checkBoxOption value="foo"
+        onBlur="print_blur(checkboxGroupId);"
+        onChange="print_change(checkboxGroupId);"
+        onClick="print_click(checkboxGroupId);"
+        onDblClick="print_dblClick(checkboxGroupId);"
+        onFocus="print_focus(checkboxGroupId);"
+        onKeyDown="print_keyDown(checkboxGroupId);"
+        onKeyPress="print_keyPress(checkboxGroupId);"
+        onKeyUp="print_keyUp(checkboxGroupId);"
+        onMouseDown="print_mouseDown(checkboxGroupId);"
+        onMouseMove="print_mouseMove(checkboxGroupId);"
+        onMouseOut="print_mouseOut(checkboxGroupId);"
+        onMouseOver="print_mouseOver(checkboxGroupId);"
+        onMouseUp="print_mouseUp(checkboxGroupId);"
+        onSelect="print_select(checkboxGroupId);"
+/>
+</netui:checkBoxGroup><br />
+<!-- LABEL: dataSource, dataformatas, style, styleClass, tabindex
+-->
+<netui:label value="Checkbox 1"
+        onClick="print_click(labelId);"
+        onKeyDown="print_keyDown(labelId);"
+        onKeyPress="print_keyPress(labelId);"
+        onKeyUp="print_keyUp(labelId);"
+        onMouseDown="print_mouseDown(labelId);"
+        onMouseMove="print_mouseMove(labelId);"
+        onMouseOut="print_mouseOut(labelId);"
+        onMouseOver="print_mouseOver(labelId);"
+        onMouseUp="print_mouseUp(labelId);"
+/>
+<!-- CHECKBOX: defaultValue, style, styleClass, tabindex
+-->
+<netui:checkBox
+        dataSource="actionForm.checkBox1"
+        onBlur="print_blur(checkboxId);"
+        onChange="print_change(checkboxId);"
+        onClick="print_click(checkboxId);"
+        onDblClick="print_dblClick(checkboxId);"
+        onFocus="print_focus(checkboxId);"
+        onKeyDown="print_keyDown(checkboxId);"
+        onKeyPress="print_keyPress(checkboxId);"
+        onKeyUp="print_keyUp(checkboxId);"
+        onMouseDown="print_mouseDown(checkboxId);"
+        onMouseMove="print_mouseMove(checkboxId);"
+        onMouseOut="print_mouseOut(checkboxId);"
+        onMouseOver="print_mouseOver(checkboxId);"
+        onMouseUp="print_mouseUp(checkboxId);"
+        onSelect="print_select(checkboxId);"
+/><br />
+<!-- RADIOBUTTONGROUP: defaultValue, optionsDataSource, style, styleClass
+-->
+<netui:radioButtonGroup dataSource="actionForm.radio">
+<!-- RADIOBUTTONOPTION: style, styleClass, tabindex
+-->
+<netui:radioButtonOption value="1"
+        onBlur="print_blur(radioId);"
+        onChange="print_change(radioId);"
+        onClick="print_click(radioId);"
+        onFocus="print_focus(radioId);"
+        onKeyDown="print_keyDown(radioId);"
+        onKeyPress="print_keyPress(radioId);"
+        onKeyUp="print_keyUp(radioId);"
+        onMouseDown="print_mouseDown(radioId);"
+        onMouseMove="print_mouseMove(radioId);"
+        onMouseOut="print_mouseOut(radioId);"
+        onMouseOver="print_mouseOver(radioId);"
+        onMouseUp="print_mouseUp(radioId);"
+        onSelect="print_select(radioId);"
+>
+Choice 1</netui:radioButtonOption><br>
+   <netui:radioButtonOption value="2">Choice 2</netui:radioButtonOption><br>
+</netui:radioButtonGroup><br />
+<!-- SELECT: defaultValue, multiple, optionsDataSource, style, styleClass
+-->
+<netui:select 
+        dataSource="actionForm.select"
+        size="3"
+        onBlur="print_blur(selectId);"
+        onChange="print_change(selectId);"
+        onClick="print_click(selectId);"
+        onFocus="print_focus(selectId);"
+        onKeyDown="print_keyDown(selectId);"
+        onKeyPress="print_keyPress(selectId);"
+        onKeyUp="print_keyUp(selectId);"
+        onMouseDown="print_mouseDown(selectId);"
+        onMouseMove="print_mouseMove(selectId);"
+        onMouseOut="print_mouseOut(selectId);"
+        onMouseOver="print_mouseOver(selectId);"
+        onMouseUp="print_mouseUp(selectId);"
+>
+<!-- SELECTOPTION, locale, style, styleClass, tabindex
+-->
+<netui:selectOption value="1"
+        onClick="print_click(selectOptionId);"
+        onKeyDown="print_keyDown(selectOptionId);"
+        onKeyPress="print_keyPress(selectOptionId);"
+        onKeyUp="print_keyUp(selectOptionId);"
+        onMouseDown="print_mouseDown(selectOptionId);"
+        onMouseMove="print_mouseMove(selectOptionId);"
+        onMouseOut="print_mouseOut(selectOptionId);"
+        onMouseOver="print_mouseOver(selectOptionId);"
+        onMouseUp="print_mouseUp(selectOptionId);"
+        value="Choice 1"
+/>
+<netui:selectOption value="2">Choice 2</netui:selectOption>
+<netui:selectOption value="3" disabled="true">Choice 3</netui:selectOption>
+</netui:select><br />
+<!-- HIDDEN: style, styleClass, tabindex
+-->
+<netui:hidden dataSource="actionForm.hidden"
+/>
+<hr />
+<netui:button type="reset">Reset</netui:button>
+<!-- BUTTON: action, style, styleClass, tabindex, type, value
+-->
+<netui:button type="submit"
+        value="submit"
+        onBlur="print_blur(buttonId);"
+        onChange="print_change(buttonId);"
+        onClick="print_click(buttonId);"
+        onFocus="print_focus(buttonId);"
+        onKeyDown="print_keyDown(buttonId);"
+        onKeyPress="print_keyPress(buttonId);"
+        onKeyUp="print_keyUp(buttonId);"
+        onMouseDown="print_mouseDown(buttonId);"
+        onMouseMove="print_mouseMove(buttonId);"
+        onMouseMove="print_mouseOut(buttonId);"
+        onMouseMove="print_mouseOver(buttonId);"
+        onMouseUp="print_mouseUp(buttonId);"
+        onSelect="print_select(buttonId);"
+/>
+<br />
+<!-- IMAGEBUTTON: page, style, styleClass, tabIndex, value
+        (Internally the roll over stuff uses mouse over and mouse out)
+-->
+<netui:imageButton
+        align="top"
+        src="/coreWeb/images/godzilla.gif"
+        rolloverImage="/coreWeb/images/godzillaRollover.gif"
+        onBlur="print_blur(imageButtonId);"
+        onChange="print_change(imageButtonId);"
+        onClick="print_click(imageButtonId);"
+        onKeyDown="print_keyDown(imageButtonId);"
+        onKeyPress="print_keyPress(imageButtonId);"
+        onKeyUp="print_keyUp(imageButtonId);"
+        onMouseDown="print_mouseDown(imageButtonId);"
+        onMouseUp="print_mouseUp(imageButtonId);"
+        onMouseMove="print_mouseMove(imageButtonId);"
+        onSelect="print_select(imageButtonId);"
+/>
+</netui:form>
+<hr />
+<!-- ANCHOR: formSubmit, forward, href, linkName, location, page, styleClass,
+        tabindex, target
+-->
+<netui:anchor action="postback"
+        onBlur="print_blur(anchorId);"
+        onClick="print_click(anchorId);"
+        onFocus="print_focus(anchorId);" 
+        onKeyDown="print_keyDown(anchorId);"
+        onKeyPress="print_keyPress(anchorId);"
+        onKeyUp="print_keyUp(anchorId);"
+        onMouseDown="print_mouseDown(anchorId);"
+        onMouseMove="print_mouseMove(anchorId);"
+        onMouseOut="print_mouseOut(anchorId);"
+        onMouseOver="print_mouseOver(anchorId);"
+        onMouseUp="print_mouseUp(anchorId);"
+>Post Back</netui:anchor><br />
+<!-- IMAGE: isMap, location, lowsrc, page, scope, style, styleClass, tabIndex
+        usemap
+-->
+<netui:image src="/coreWeb/images/godzilla.gif"
+        align="center" 
+        border="2"
+        tagId="Godzilla"
+        hspace="10" vspace="10"
+        height="66" width="48"
+        onClick="print_click(imageId);"
+        onKeyDown="print_keyDown(imageId);"
+        onKeyPress="print_keyPress(imageId);"
+        onKeyUp="print_keyUp(imageId);"
+        onMouseDown="print_mouseDown(imageId);"
+        onMouseMove="print_mouseMove(imageId);"
+        onMouseOver="print_mouseOut(imageId);"
+        onMouseOver="print_mouseOver(imageId);"
+        onMouseUp="print_mouseUp(imageId);"
+/><br />
+<!-- IMAGEANCHOR: formSubmit, forward, href, ismap, linkName, location,
+        lowsrc, page, scope, style, styleClass, tabindex,
+        target, usemap
+
+        (Internally the roll over stuff uses mouse over and mouse out)
+-->
+<netui:imageAnchor action="postback"
+        src="/coreWeb/images/godzilla.gif"
+        rolloverImage="/coreWeb/images/godzillaRollover.gif"
+        align="center"
+        border="6"
+        hspace="10" vspace="10"
+        height="66" width="48"
+        tagId="Godzilla"
+        onBlur="print_blur(anchorAnchorId);"
+        onClick="print_click(imageAnchorId);"
+        onKeyDown="print_keyDown(imageAnchorId);"
+        onKeyPress="print_keyPress(imageAnchorId);"
+        onKeyUp="print_keyUp(imageAnchorId);"
+        onMouseDown="print_mouseDown(imageAnchorId);"
+        onMouseUp="print_mouseUp(imageAnchorId);"
+        onMouseMove="print_mouseMove(imageAnchorId);"
+/>
+</td><td>
+<p id="formOut_operation">Operation:</p>
+<p id="formOut">Form:</p>
+<p id="text">Text:</p>
+<p id="textArea">TextArea:</p>
+<p id="checkboxGroup">Checkbox Group:</p>
+<p id="label">Label:</p>
+<p id="checkbox">Checkbox:</p>
+<p id="radio">Radio:</p>
+<p id="select">Select:</p>
+<p id="selectOption">Select Option:</p>
+<p id="hidden">Hidden:</p>
+<p id="button">Button:</p>
+<p id="imageButton">ImageButton:</p>
+<p id="anchor">Anchor:</p>
+<p id="image">Image:</p>
+<p id="imageAnchor">ImageAnchor:</p>
+</td></tr></table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/onTest/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/onTest/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,119 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.onTest;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    public static class Form extends FormData
+    {
+	private String _text = "";
+	private String _textArea = "";
+        private boolean _checkBox1 = false;
+        private String[] _checkBoxGroup;
+        private String _select = "2";
+        private String _radio = "2";
+        private String _hidden = "hidden";
+
+	public String getText() {
+	    return _text;
+	}
+	public void setText(String text) {
+	    _text = text;
+	}
+
+	public String getTextArea() {
+	    return _textArea;
+	}
+	public void setTextArea(String textArea) {
+	    _textArea = textArea;
+	}
+
+	public boolean getCheckBox1() {
+	    return _checkBox1;
+	}
+	public void setCheckBox1(boolean checkBox1) {
+	    _checkBox1 = checkBox1;
+	}
+
+	public String[] getCheckBoxGroup() {
+	    return _checkBoxGroup;
+	}
+	public void setCheckBoxGroup(String checkBoxGroup[]) {
+	    _checkBoxGroup = checkBoxGroup;
+	}
+
+	public String getSelect() {
+	    return _select;
+	}
+	public void setSelect(String select) {
+	    _select = select;
+	}
+
+	public String getRadio() {
+	    return _radio;
+	}
+	public void setRadio(String radio) {
+	    _radio = radio;
+	}
+        
+	public String getHidden() {
+	    return _hidden;
+	}
+	public void setHidden(String hidden) {
+	    _hidden = hidden;
+	}
+
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramEncoding/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramEncoding/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Encoding Parameter Binding</title>
+</head>
+<body>
+<netui:anchor href="postback.do">Value in parameter
+<netui:parameter name="foo" value="value with?bad&stuff+here"/><br />
+</netui:anchor><br />
+<netui:anchor href="postback.do">Value is databound
+<netui:parameter name="foo" value="${pageFlow.param}"/><br />
+</netui:anchor>
+<hr />
+Foo Value: <netui:label value="${pageFlow.foo}"/><br />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramEncoding/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramEncoding/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.paramEncoding;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String _foo;
+    public String getFoo() {
+	return _foo;
+    }
+
+    String _param = "String With+a&lot?of stuff";
+    public String getParam() {
+	return _param;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	HttpServletRequest req = getRequest();
+	_foo = req.getParameter("foo");
+	if (_foo == null)
+	    _foo = "[Not Found]";
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,231 @@
+package tags.paramMulti;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller
+ */
+@Jpf.Controller(
+    )
+public class Controller extends PageFlowController
+{
+    private String[] formFoo;
+    private String[] stringValues = {"String 1", "String 2"};
+    private ArrayList listValues;
+    private String[] nullString = null;
+    private ArrayList nullList = null;
+    private String[] emptyString = new String[0];
+    private ArrayList emptyList = new ArrayList();
+    private String nullValue = null;
+    private int[] intValues = {1,3,5,7};
+    private String[] singleStringValue = {"Single String"};
+    private ArrayList singleListValue;
+
+    public String[] getFormFoo()
+    {
+        return formFoo;
+    }
+
+    public void setFormFoo(String[] formFoo)
+    {
+        this.formFoo = formFoo;
+    }
+
+    public String[] getStringValues()
+    {
+        return stringValues;
+    }
+
+    public void setStringValues(String[] stringValues)
+    {
+        this.stringValues = stringValues;
+    }
+
+    public ArrayList getListValues()
+    {
+        return listValues;
+    }
+
+    public void setListValues(ArrayList listValues)
+    {
+        this.listValues = listValues;
+    }
+
+    public String[] getNullString()
+    {
+        return nullString;
+    }
+
+    public void setNullString(String[] nullString)
+    {
+        this.nullString = nullString;
+    }
+
+    public ArrayList getNullList()
+    {
+        return nullList;
+    }
+
+    public void setNullList(ArrayList nullList)
+    {
+        this.nullList = nullList;
+    }
+
+    public String[] getEmptyString()
+    {
+        return emptyString;
+    }
+
+    public void setEmptyString(String[] emptyString)
+    {
+        this.emptyString = emptyString;
+    }
+
+    public ArrayList getEmptyList()
+    {
+        return emptyList;
+    }
+
+    public void setEmptyList(ArrayList emptyList)
+    {
+        this.emptyList = emptyList;
+    }
+
+    public String getNullValue()
+    {
+        return nullValue;
+    }
+
+    public void setNullValue(String nullValue)
+    {
+        this.nullValue = nullValue;
+    }
+
+    public int[] getIntValues()
+    {
+        return intValues;
+    }
+
+    public void setIntValues(int[] intValues)
+    {
+        this.intValues = intValues;
+    }
+
+    public String[] getSingleStringValue()
+    {
+        return singleStringValue;
+    }
+
+    public void setSingleStringValue(String[] singleStringValue)
+    {
+        this.singleStringValue = singleStringValue;
+    }
+
+    public ArrayList getSingleListValue()
+    {
+        return singleListValue;
+    }
+
+    public void setSingleListValue(ArrayList singleListValue)
+    {
+        this.singleListValue = singleListValue;
+    }
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        listValues = new ArrayList();
+        listValues.add("List 1");
+        listValues.add("List 2");
+        listValues.add("List 3");
+        singleListValue = new ArrayList();
+        singleListValue.add("Single List");
+        return new Forward("index");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward home()
+    {
+        return new Forward("index");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward postback(NameBean form)
+    {
+        formFoo = getRequest().getParameterValues("foo");
+        if (formFoo == null)
+            formFoo = new String[0];
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward link()
+    {
+        formFoo = getRequest().getParameterValues("foo");
+        if (formFoo == null) {
+            formFoo = new String[1]; 
+            formFoo[0] = "Foo was not found as a paramter";
+        }
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameBean extends FormData
+    {
+        private String name;
+
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public String getName()
+        {
+            return this.name;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <netui:form action="postback" focus="">
+            <netui:parameter name="name" value="Form One"/>
+            <netui:parameter name="foo" value="bar"/>
+            <netui:parameter name="foo" value="baz"/>
+            <netui:parameter name="foo" value="${pageFlow.listValues}"/>
+            <netui:parameter name="foo" value="${pageFlow.stringValues}"/>
+            <netui:parameter name="foo" value="${pageFlow.intValues}"/>
+            <netui:button>Form One</netui:button>
+        </netui:form>
+        <netui:anchor action="link">Anchor One
+            <netui:parameter name="name" value="Anchor"/>
+            <netui:parameter name="foo" value="bar"/>
+            <netui:parameter name="foo" value="baz"/>
+            <netui:parameter name="foo" value="${pageFlow.listValues}"/>
+            <netui:parameter name="foo" value="${pageFlow.stringValues}"/>
+            <netui:parameter name="foo" value="${pageFlow.intValues}"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Null List/Null Strings
+            <netui:parameter name="name" value="Null List/Null Strings"/>
+            <netui:parameter name="foo" value="${pageFlow.nullList}"/>
+            <netui:parameter name="foo" value="${pageFlow.nullString}"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Empty List/Empty Strings
+            <netui:parameter name="name" value="Empty List/Empty Strings"/>
+            <netui:parameter name="foo" value="${pageFlow.emptyList}"/>
+            <netui:parameter name="foo" value="${pageFlow.emptyString}"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Single Param
+            <netui:parameter name="name" value="Single Param"/>
+            <netui:parameter name="foo" value="value"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Null Param
+            <netui:parameter name="name" value="Null Param"/>
+            <netui:parameter name="foo" value="${pageFlow.nullValue}"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Just List
+            <netui:parameter name="name" value="Just List"/>
+            <netui:parameter name="foo" value="${pageFlow.listValues}"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Just String
+            <netui:parameter name="name" value="Just String"/>
+            <netui:parameter name="foo" value="${pageFlow.stringValues}"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Int Values
+            <netui:parameter name="name" value="Int Values"/>
+            <netui:parameter name="foo" value="${pageFlow.intValues}"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Single String Array
+            <netui:parameter name="name" value="Single String Array"/>
+            <netui:parameter name="foo" value="${pageFlow.singleStringValue}"/>
+        </netui:anchor><br />
+        <netui:anchor action="link">Single List 
+            <netui:parameter name="name" value="Single List"/>
+            <netui:parameter name="foo" value="${pageFlow.singleListValue}"/>
+        </netui:anchor><br />
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/paramMulti/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <netui:anchor action="home">Home</netui:anchor>
+    <hr />
+    <h4><netui:label value="${param.name}"/></h4>
+    <ul>
+    <netui-data:repeater dataSource="pageFlow.formFoo">
+        <li><netui:label value="${container.item}"/></li>
+    </netui-data:repeater>
+    </ul>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,175 @@
+package tags.primitiveOptionsDS;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/primitiveOptionsDS/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property name="x" value="420"/>
+ *   <property name="y" value="300"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:testAction.do#primitiveOptionsDS.Controller.TestActionForm">
+ *   <property value="80" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property name="x" value="220"/>
+ *   <property name="y" value="80"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:dumpBoxes.jsp">
+ *   <property value="100" name="x"/>
+ *   <property value="340" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property name="elbowsY" value="292,292,72,72"/>
+ *   <property name="elbowsX" value="384,320,320,256"/>
+ *   <property name="toPort" value="East_1"/>
+ *   <property name="fromPort" value="West_1"/>
+ *   <property name="label" value="index"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#dumpBoxes.jsp#@action:testAction.do#primitiveOptionsDS.Controller.TestActionForm@">
+ *   <property value="116,116,100,100" name="elbowsX"/>
+ *   <property value="83,206,206,296" name="elbowsY"/>
+ *   <property value="East_2" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:primitiveOptionsDS.Controller.TestActionForm#lName#java.lang.String"/>
+ * <pageflow-object id="formbean:primitiveOptionsDS.Controller.TestActionForm"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:testAction.do#primitiveOptionsDS.Controller.TestActionForm@">
+ *   <property value="184,150,150,116" name="elbowsX"/>
+ *   <property value="72,72,72,72" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/primitiveOptionsDS/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property name='x' value='420'/>",
+        "  <property name='y' value='300'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:testAction.do#primitiveOptionsDS.Controller.TestActionForm'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property name='x' value='220'/>",
+        "  <property name='y' value='80'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:dumpBoxes.jsp'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='340' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property name='elbowsY' value='292,292,72,72'/>",
+        "  <property name='elbowsX' value='384,320,320,256'/>",
+        "  <property name='toPort' value='East_1'/>",
+        "  <property name='fromPort' value='West_1'/>",
+        "  <property name='label' value='index'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#dumpBoxes.jsp#@action:testAction.do#primitiveOptionsDS.Controller.TestActionForm@'>",
+        "  <property value='116,116,100,100' name='elbowsX'/>",
+        "  <property value='83,206,206,296' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:primitiveOptionsDS.Controller.TestActionForm#lName#java.lang.String'/>",
+        "<pageflow-object id='formbean:primitiveOptionsDS.Controller.TestActionForm'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:testAction.do#primitiveOptionsDS.Controller.TestActionForm@'>",
+        "  <property value='184,150,150,116' name='elbowsX'/>",
+        "  <property value='72,72,72,72' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private Long[] list1 = new Long[] { new Long(56), null, new Long(27), new Long(32) };
+    private Long[] boxes = new Long[] { new Long(56), new Long(32) };
+
+    public Long[] getList1()
+    {
+        return list1;
+    }
+
+    public void setList1(Long[] list1)
+    {
+        this.list1 = list1;
+    }
+
+    public Long[] getBoxes()
+    {
+        return boxes;
+    }
+
+    public void setBoxes(Long[] boxes)
+    {
+        this.boxes = boxes;
+    }
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin() {
+        return new Forward("index");
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="dumpBoxes.jsp" 
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "dumpBoxes.jsp") 
+        })
+    protected Forward testAction(TestActionForm form)
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class TestActionForm extends FormData
+    {
+        private String lName;
+
+        public void setlName(String lName)
+        {
+            this.lName = lName;
+        }
+
+        public String getlName()
+        {
+            return this.lName;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/dumpBoxes.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/dumpBoxes.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        <netui-data:repeater dataSource="pageFlow.boxes">
+            <netui-data:repeaterHeader><table class="tablebody" border="1"></netui-data:repeaterHeader>
+            <netui-data:repeaterItem>
+                <tr>
+                    <td><netui:label value="${container.item}" defaultValue="&nbsp;"></netui:label></td>
+                </tr>
+            </netui-data:repeaterItem>
+            <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+        </netui-data:repeater>
+        </p>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/primitiveOptionsDS/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <p>
+        <netui:form action="testAction">
+            <table>
+                <tr valign="top">
+                    <td>
+                    <netui:checkBoxGroup dataSource="pageFlow.boxes" optionsDataSource="${pageFlow.list1}" />
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="testAction" type="submit"/>
+        </netui:form>
+        
+        
+        </p>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,170 @@
+package tags.repeatSelect;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="formbean:Options"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Results.jsp"/>
+ * <pageflow-object id="action:post.do"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:post.do@"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='formbean:Options'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Results.jsp'/>",
+        "<pageflow-object id='action:post.do'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do@'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private Options[] opts;
+    private String[] resultsOne;
+    private String resultsTwo;
+
+    public Options[] getOpts()
+    {
+        return opts;
+    }
+
+    public void setOpts(Options[] opts)
+    {
+        this.opts = opts;
+    }
+
+    public String[] getResultsOne()
+    {
+        return resultsOne;
+    }
+
+    public void setResultsOne(String[] resultsOne)
+    {
+        this.resultsOne = resultsOne;
+    }
+
+    public String getResultsTwo()
+    {
+        return resultsTwo;
+    }
+
+    public void setResultsTwo(String resultsTwo)
+    {
+        this.resultsTwo = resultsTwo;
+    }
+
+    protected void onCreate()
+    {        
+        // initialize the opts
+        opts = new Options[3];
+        opts[0] = new Options("Option One","opt-1", "normal");
+        opts[1] = new Options("Option Two","opt-2", "normal2");
+        opts[2] = new Options("Option Three","opt-3", "normal3");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="Results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "Results.jsp") 
+        })
+    protected Forward post()
+    {
+        return new Forward("index");
+    }
+
+    public static class Options implements java.io.Serializable {
+        private String _name;
+        private String _optionValue;
+        private String _style;
+        
+        public Options(String name, String value, String style) {
+            _name = name;
+            _optionValue = value;
+            _style = style;
+        }
+        
+        public void setName(String name) {
+            _name = name;
+        }
+        public String getName() {
+            return _name;
+        }
+
+        public void setOptionValue(String optionValue) {
+            _optionValue = optionValue;
+        }
+        public String getOptionValue() {
+            return _optionValue;
+        }
+        
+        public void setStyle(String style) {
+            _style = style;
+        }
+        public String getStyle() {
+            return _style;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/Results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/Results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@page contentType="text/html;charset=UTF-8" language="java"%>
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<html>
+    <head>
+    </head>
+    <body>
+        <h4>Results One</h4>
+        <netui:anchor action="begin">Home</netui:anchor>
+        <ul>
+        <netui-data:repeater dataSource="pageFlow.resultsOne">
+            <li><netui:label value="${container.item}"/></li>
+        </netui-data:repeater>
+        </ul>
+        <br/>
+        Results Two: <netui:label value="${pageFlow.resultsTwo}" />
+    </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelect/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,50 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+<netui:html>
+  <head>
+    <title>Basic Repeating Select Test</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Select Test</h4>
+        <netui:form action="post">
+        <table>
+        <tr><td>
+        <netui:select dataSource="pageFlow.resultsOne" optionsDataSource="${pageFlow.opts}" repeater="true" size="3"
+                multiple="true">
+            <netui:selectOption repeatingType="Option" value="${container.item.optionValue}" styleClass="normalAttr">
+                <netui:label value="${container.item.name}" />
+            </netui:selectOption>
+            <netui:selectOption repeatingType="Null" value="null-opt" styleClass="normalAttr">
+                <netui:label value="[Nothing]" />
+            </netui:selectOption>
+        </netui:select>
+        </td></tr>
+        <tr><td>
+        <netui:select dataSource="pageFlow.resultsTwo" optionsDataSource="${pageFlow.opts}" repeater="true"
+                nullable="true">
+            <c:if test="${container.metadata.repeatingStage == '1'}">
+                <netui:selectOption repeatingType="Option" value="${container.item.optionValue}" styleClass="normalAttr">
+                    <netui:label value="${container.item.name}" />
+                </netui:selectOption>
+            </c:if>
+            <c:if test="${container.metadata.repeatingStage == '4'}">
+                <netui:selectOption repeatingType="Null" value="null-opt" styleClass="normalAttr">
+                    <netui:label value="[Nothing]" />
+                </netui:selectOption>
+             </c:if>
+        </netui:select>
+        </td></tr>
+        <tr><td><netui:button value="Post" /></td></tr>
+        <table>
+        </netui:form>
+  </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelectTypeError/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelectTypeError/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,166 @@
+package tags.repeatSelectTypeError;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:Options"/>
+ * <pageflow-object id="action:post.do"/>
+ * <pageflow-object id="forward:path#index#Results.jsp#@action:post.do@"/>
+ * <pageflow-object id="page:Results.jsp"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:post.do@"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:Options'/>",
+        "<pageflow-object id='action:post.do'/>",
+        "<pageflow-object id='forward:path#index#Results.jsp#@action:post.do@'/>",
+        "<pageflow-object id='page:Results.jsp'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:post.do@'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private Options[] Opts;
+    private String[] ResultsOne;
+    private String ResultsTwo;
+
+    public Options[] getOpts()
+    {
+        return Opts;
+    }
+
+    public void setOpts(Options[] opts)
+    {
+        Opts = opts;
+    }
+
+    public String[] getResultsOne()
+    {
+        return ResultsOne;
+    }
+
+    public void setResultsOne(String[] resultsOne)
+    {
+        ResultsOne = resultsOne;
+    }
+
+    public String getResultsTwo()
+    {
+        return ResultsTwo;
+    }
+
+    public void setResultsTwo(String resultsTwo)
+    {
+        ResultsTwo = resultsTwo;
+    }
+
+    protected void onCreate()
+    {        
+        // initialize the opts
+        Opts = new Options[3];
+        Opts[0] = new Options("Option One","opt-1", "normal");
+        Opts[1] = new Options("Option Two","opt-2", "normal2");
+        Opts[2] = new Options("Option Three","opt-3", "normal3");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+    
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    protected Forward post()
+    {
+        return new Forward("index");
+    }
+
+    public static class Options implements java.io.Serializable {
+        private String _name;
+        private String _optionValue;
+        private String _style;
+        
+        public Options(String name, String value, String style) {
+            _name = name;
+            _optionValue = value;
+            _style = style;
+        }
+        
+        public void setName(String name) {
+            _name = name;
+        }
+        public String getName() {
+            return _name;
+        }
+
+        public void setOptionValue(String optionValue) {
+            _optionValue = optionValue;
+        }
+        public String getOptionValue() {
+            return _optionValue;
+        }
+        
+        public void setStyle(String style) {
+            _style = style;
+        }
+        public String getStyle() {
+            return _style;
+        }
+    }}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelectTypeError/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/repeatSelectTypeError/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+
+<netui:html>
+  <head>
+    <title>SelectOption without Repeater Type</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <netui:body>
+    <h4>SelectOption without Repeater Type</h4>
+        <netui:form action="post">
+        <table>
+        <tr><td>
+        <netui:select dataSource="pageFlow.resultsOne" optionsDataSource="${pageFlow.opts}" repeater="true" size="3" 
+                multiple="true">
+            <netui:selectOption value="${container.item.optionValue}" styleClass="normalAttr">
+                <netui:label value="${container.item.name}" />
+            </netui:selectOption>
+            <netui:selectOption repeatingType="Null" value="null-opt" styleClass="normalAttr">
+                <netui:label value="[Nothing]" />
+            </netui:selectOption>
+        </netui:select>
+        </td></tr>
+      <tr><td><netui:button value="Post" /></td></tr>
+        <table>
+        </netui:form>
+  </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteNameVar/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteNameVar/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+package tags.rewriteNameVar;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <view-properties>
+ *   <pageflow-object id="action:begin.do">
+ *     <property value="80" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:index.jsp">
+ *     <property value="240" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<view-properties>",
+        "  <pageflow-object id='action:begin.do'>",
+        "    <property value='80' name='x'/>",
+        "    <property value='100' name='y'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='page:index.jsp'>",
+        "    <property value='240' name='x'/>",
+        "    <property value='100' name='y'/>",
+        "  </pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteNameVar/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteNameVar/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+    <script type="text/javascript"> 
+    <!-- 
+    function <netui:rewriteName name="someFunction" resultId="realName"/>(anchor) 
+    { 
+        anchor.style.color = "red"; 
+    } 
+    function <%= pageContext.getAttribute("realName")%>Out(anchor) 
+    { 
+        anchor.style.color = "blue"; 
+    } 
+    --> 
+    </script> 
+    <netui:anchor onMouseOver='<%= pageContext.getAttribute("realName") + "(this);"%>'
+        action="begin" onMouseOut='<%= pageContext.getAttribute("realName") + "Out(this);"%>'>Some Link</netui:anchor> 
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteTags/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteTags/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Wed Aug 06 10:01:17 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package tags.rewriteTags;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/rewriteTags/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/rewriteTags/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteTags/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rewriteTags/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        
+        <span id="<netui:rewriteName name="foo"/>" style="color:red">
+            text inside a span
+        </span>
+        <br/>
+        <img src="<netui:rewriteURL URL="/coreWeb/resources/images/bar-background.gif"/>"/><br />
+        <img src="<netui:rewriteURL URL="../../resources/images/bar-background.gif"/>"/><br />
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rtexpTagId/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rtexpTagId/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,176 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Sep 02 09:35:40 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package tags.rtexpTagId;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/rtexpTagId/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbean:rtexpTagId.Controller.NameBean"/>
+ * <pageflow-object id="formbeanprop:rtexpTagId.Controller.NameBean#firstName#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:rtexpTagId.Controller.NameBean#lastName#java.lang.String"/>
+ * <pageflow-object id="action:postForm.do#rtexpTagId.Controller.NameBean">
+ *   <property value="380" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:postForm.do#rtexpTagId.Controller.NameBean@">
+ *   <property value="276,310,310,344" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:postForm.do#rtexpTagId.Controller.NameBean@">
+ *   <property value="416,416,276,276" name="elbowsX"/>
+ *   <property value="92,64,64,81" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/rtexpTagId/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:rtexpTagId.Controller.NameBean'/>",
+        "<pageflow-object id='formbeanprop:rtexpTagId.Controller.NameBean#firstName#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:rtexpTagId.Controller.NameBean#lastName#java.lang.String'/>",
+        "<pageflow-object id='action:postForm.do#rtexpTagId.Controller.NameBean'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postForm.do#rtexpTagId.Controller.NameBean@'>",
+        "  <property value='276,310,310,344' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:postForm.do#rtexpTagId.Controller.NameBean@'>",
+        "  <property value='416,416,276,276' name='elbowsX'/>",
+        "  <property value='92,64,64,81' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private String action;
+
+    public String getAction()
+    {
+        return action;
+    }
+
+    public void setAction(String action)
+    {
+        this.action = action;
+    }
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        action = "begin";
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward postForm(NameBean form)
+    {
+        action = "postForm";
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameBean extends FormData
+    {
+        private String lastName;
+
+        private String firstName;
+
+        public void setFirstName(String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public String getFirstName()
+        {
+            return this.firstName;
+        }
+
+        public void setLastName(String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public String getLastName()
+        {
+            return this.lastName;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rtexpTagId/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/rtexpTagId/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <% int tagid = 1;
+        %>
+        <netui:form action="postForm">
+            <table>
+                <tr valign="top">
+                    <td>FirstName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.firstName" tagId='<%= "tagid" + tagid++ %>'/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>LastName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.lastName" tagId='<%= "tagid" + tagid++ %>'/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="postForm" type="submit"/>
+        </netui:form>
+        <br>Action: <netui:label value="${pageFlow.action}" tagId='<%= "tagid" + tagid++ %>'/> 
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,118 @@
+package tags.runtimeErrors;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,140,140,164" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="220" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:next.do">
+ *   <property value="340" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#next.jsp#@action:next.do@"/>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:next.do@">
+ *   <property value="256,280,280,304" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:next.jsp">
+ *   <property value="440" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,140,140,164' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='220' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:next.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#next.jsp#@action:next.do@'/>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:next.do@'>",
+        "  <property value='256,280,280,304' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:next.jsp'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward path="next.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "next.jsp",
+                name = "success") 
+        })
+    protected Forward next()
+    {
+        return new Forward("success");
+    }
+
+      }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <netui:anchor action="next">Next</netui:anchor><br />
+        <netui:label value="${pageflow.missing}" />
+    <!-- report all runtime tag errors -->
+    </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/next.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/runtimeErrors/next.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+        <netui:label value="${pageflow.missing}" />
+    </body>
+</netui:html>
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="secureAction">secureAction</netui:anchor>
+        <br>
+        <netui:anchor href="/coreWeb/tags/secureLinks/secure/begin.do">begin in /secure</netui:anchor>
+        <br>
+        <netui:anchor href="../secure/begin.do">begin in /secure (relative)</netui:anchor>
+        <br>
+        image under /secure: <netui:image src="/coreWeb/tags/secureLinks/secure/image.gif" lowsrc="/coreWeb/tags/secureLinks/secure/image.gif"/>
+        <br>
+        image under /secure (relative): <netui:image src="../secure/image.gif" lowsrc="../secure/image.gif"/>
+        <br>
+        imageAnchor under /secure: <netui:imageAnchor action="secureAction"
+                                                      src="/coreWeb/tags/secureLinks/secure/image.gif"
+                                                      lowsrc="/coreWeb/tags/secureLinks/secure/image.gif"
+                                                      rolloverImage="/coreWeb/tags/secureLinks/secure/image.gif" />
+        <br>
+        imageAnchor under /secure (relative): <netui:imageAnchor action="secureAction"
+                                                                 src="../secure/image.gif"
+                                                                 lowsrc="../secure/image.gif"
+                                                                 rolloverImage="../secure/image.gif"/>
+        <br>
+        imageButton under /secure: <netui:imageButton src="/coreWeb/tags/secureLinks/secure/image.gif"
+                                                      rolloverImage="/coreWeb/tags/secureLinks/secure/image.gif" />
+        <br>
+        imageButton under /secure (relative): <netui:imageButton src="../secure/image.gif"
+                                                                 rolloverImage="../secure/image.gif"/>
+        
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/linkToSecureController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/linkToSecureController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,145 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Aug 12 09:35:47 GMT-07:00 2003
+//  By: rfeit
+// -----------------------------------------------------------------------------
+package tags.secureLinks.linkToSecure;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/linkToSecure/linkToSecureController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:secureAction.do">
+ *   <property value="380" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:secureAction.do@">
+ *   <property value="276,310,310,344" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:secure.jsp">
+ *   <property value="380" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:secure.jsp@#@action:begin.do@">
+ *   <property value="344,80,80,80" name="elbowsX"/>
+ *   <property value="232,232,188,144" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#secure.jsp#@action:secureAction.do@">
+ *   <property value="380,380,380,380" name="elbowsX"/>
+ *   <property value="144,170,170,196" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/linkToSecure/linkToSecureController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:secureAction.do'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:secureAction.do@'>",
+        "  <property value='276,310,310,344' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:secure.jsp'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:secure.jsp@#@action:begin.do@'>",
+        "  <property value='344,80,80,80' name='elbowsX'/>",
+        "  <property value='232,232,188,144' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#secure.jsp#@action:secureAction.do@'>",
+        "  <property value='380,380,380,380' name='elbowsX'/>",
+        "  <property value='144,170,170,196' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class linkToSecureController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="secure.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "secure.jsp") 
+        })
+    protected Forward secureAction()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/secure.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/linkToSecure/secure.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            secure page
+        </title>
+    </head>
+    <body>
+        <netui:anchor action="begin">go back</netui:anchor>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/secure/image.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/secure/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/secureLinks/secure/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            New Web Application Page
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/select/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/select/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Select Tests</title>
+</head>
+<body>
+<h4>Select</h4>
+<netui:form action="/postback">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <netui:select dataSource="pageFlow.selected"
+    optionsDataSource="${pageFlow.options}"
+    defaultValue="${pageFlow.defaultValue}"/>
+  </td></tr>
+<tr><td><b>Select 1, Fully Bound, Option = collection</b></td><td>
+  <netui:select dataSource="pageFlow.selected2"
+    optionsDataSource="${pageFlow.colOptions}"
+    defaultValue="${pageFlow.defaultValue}"/>
+  </td></tr>
+<tr><td colspan=2>
+<netui:button type="submit">Submit</netui:button>
+</td></tr>
+</table>
+</netui:form>
+<br />
+Select 1: <netui:label value="${pageFlow.selected}"/><br />
+Select 2: <netui:label value="${pageFlow.selected2}"/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/select/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/select/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.select;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    String[] _options = {"Option 1", "Option 2", "Option 3", "Option 4"};
+    String _selected = _options[3];
+    String _selected2 = _options[3];
+    String _defaultValue = _options[2];
+    ArrayList _colOptions;
+
+    public String getSelected() {
+	return _selected;
+    }
+    public void setSelected(String selected) {
+	_selected = selected;
+    }
+    public String getSelected2() {
+	return _selected2;
+    }
+    public void setSelected2(String selected) {
+	_selected2 = selected;
+    }
+
+
+    public String[] getOptions() {
+	return _options;
+    }
+
+    public ArrayList getColOptions() {
+	return _colOptions;
+    }
+    
+    public String getDefaultValue() {
+	return _defaultValue;
+    }
+
+
+    public static class Form extends FormData {
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+	_colOptions = new ArrayList();
+	_colOptions.add("Option 1");
+	_colOptions.add("Option 2");
+	_colOptions.add("Option 3");
+	_colOptions.add("Option 4");
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,233 @@
+package tags.sessionBean;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/sessionBean/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do#sessionBean.Controller.NewFormBean">
+ *   <property value="60" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:Action2.do#sessionBean.Controller.NewFormBean">
+ *   <property value="300" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:Action3.do">
+ *   <property value="160" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:jsp1.jsp@#@action:Action2.do#sessionBean.Controller.NewFormBean@">
+ *   <property value="196,230,230,264" name="elbowsX"/>
+ *   <property value="52,52,52,52" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:jsp1.jsp">
+ *   <property value="160" name="x"/>
+ *   <property value="60" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:jsp2.jsp@#@action:Action3.do@">
+ *   <property value="264,230,230,196" name="elbowsX"/>
+ *   <property value="192,192,192,192" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:jsp2.jsp">
+ *   <property value="300" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#jsp1.jsp#@action:begin.do#sessionBean.Controller.NewFormBean@">
+ *   <property value="96,110,110,124" name="elbowsX"/>
+ *   <property value="52,52,52,52" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#jsp2.jsp#@action:Action2.do#sessionBean.Controller.NewFormBean@">
+ *   <property value="300,300,300,300" name="elbowsX"/>
+ *   <property value="104,130,130,156" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#jsp1.jsp#@action:Action3.do@">
+ *   <property value="160,160,160,160" name="elbowsX"/>
+ *   <property value="156,130,130,104" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:sessionBean.Controller.NewFormBean#name#java.lang.String"/>
+ * <pageflow-object id="formbean:sessionBean.Controller.NewFormBean"/>
+ * <pageflow-object id="formbeanprop:sessionBean.Controller.NameBean#name#java.lang.String"/>
+ * <pageflow-object id="formbean:sessionBean.Controller.NameBean"/>
+ * </view-properties>
+ * ::
+
+
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/sessionBean/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do#sessionBean.Controller.NewFormBean'>",
+        "  <property value='60' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:Action2.do#sessionBean.Controller.NewFormBean'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:Action3.do'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:jsp1.jsp@#@action:Action2.do#sessionBean.Controller.NewFormBean@'>",
+        "  <property value='196,230,230,264' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:jsp1.jsp'>",
+        "  <property value='160' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:jsp2.jsp@#@action:Action3.do@'>",
+        "  <property value='264,230,230,196' name='elbowsX'/>",
+        "  <property value='192,192,192,192' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:jsp2.jsp'>",
+        "  <property value='300' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#jsp1.jsp#@action:begin.do#sessionBean.Controller.NewFormBean@'>",
+        "  <property value='96,110,110,124' name='elbowsX'/>",
+        "  <property value='52,52,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#jsp2.jsp#@action:Action2.do#sessionBean.Controller.NewFormBean@'>",
+        "  <property value='300,300,300,300' name='elbowsX'/>",
+        "  <property value='104,130,130,156' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#jsp1.jsp#@action:Action3.do@'>",
+        "  <property value='160,160,160,160' name='elbowsX'/>",
+        "  <property value='156,130,130,104' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:sessionBean.Controller.NewFormBean#name#java.lang.String'/>",
+        "<pageflow-object id='formbean:sessionBean.Controller.NewFormBean'/>",
+        "<pageflow-object id='formbeanprop:sessionBean.Controller.NameBean#name#java.lang.String'/>",
+        "<pageflow-object id='formbean:sessionBean.Controller.NameBean'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+   /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "jsp1.jsp") 
+        })
+    protected Forward begin(NewFormBean form)
+    {
+        return new Forward("success");
+       
+    }
+ 
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="jsp2.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "jsp2.jsp") 
+        })
+    protected Forward Action2(NewFormBean form)
+    {
+        NameBean bean = (NameBean) getSession().getAttribute("nameBean");
+        bean.setName(form.getName());
+        return new Forward("success","formInput",form);
+    }
+ 
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="jsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "jsp1.jsp") 
+        })
+    protected Forward Action3()
+    {
+        return new Forward("success");
+    }
+ 
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NewFormBean extends org.apache.struts.action.ActionForm
+    {
+        private String name= "xxx";
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public String getName()
+        {
+            return this.name;
+        }
+    }
+    
+    public static class NameBean extends org.apache.struts.action.ActionForm {
+         private String name = "Default Value";
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public String getName()
+        {
+            return this.name;
+        }
+    }
+       
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        Change the Session nameBean.name
+        <netui:form action="Action2" type="tags.sessionBean.Controller$NameBean" scope="session" name="nameBean">
+            Name: <netui:textBox dataSource="actionForm.name" />
+            <netui:button value="Action3"></netui:button>
+        </netui:form>
+        <hr/> 
+        Session nameBean.name = '<netui:label value="${sessionScope.nameBean.name}"/>'
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/sessionBean/jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="formInput" type="tags.sessionBean.Controller.NewFormBean"/>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        Page Input Form: <netui:label value="${pageInput.formInput.name}"/><br />
+        Session My Bean: <netui:label value="${sessionScope.nameBean.name}"/>
+        <hr />
+        <netui:anchor action="Action3">Return to Form</netui:anchor>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/style/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/style/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,106 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Style</title>
+<!-- target -->
+<netui:base />
+</head>
+<body>
+<h4>Style</h4>
+<netui:form action="/postback" style="border: solid 1pt;padding: 10pt">
+<!-- TEXTBOX -->
+<netui:textBox dataSource="actionForm.text"
+        maxlength="30" style="color: red"
+/><br />
+<!-- TEXTAREA -->
+<netui:textArea dataSource="actionForm.textArea"
+        cols="20" rows="5" style="color: green"
+/><br />
+<!-- CHECKBOXGROUP with Option-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup" style="border: solid 1pt red;color: red">
+<!-- CHECKBOXOPTION -->
+<netui:checkBoxOption value="foo" style="border:solid 1pt blue;color:blue"/>
+</netui:checkBoxGroup><br />
+
+<!-- CHECKBOXGROUP with OptionDataSource-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup2" style="border: solid 1pt red;color: red"
+        optionsDataSource="${actionForm.checkOptions}" />
+
+<!-- LABEL:-->
+<netui:label value="Checkbox 1" style="Color: blue;font: bold 14pt sans-serif "
+/>
+<!-- CHECKBOX: defaultValue, style, styleClass, tabindex
+-->
+<netui:checkBox dataSource="actionForm.checkBox1" style="border: solid 1pt blue"
+/><br /><br />
+<!-- RADIOBUTTONGROUP with Option-->
+<netui:radioButtonGroup dataSource="actionForm.radio">
+<!-- RADIOBUTTONOPTION -->
+<netui:radioButtonOption value="Choice 1" style="border: solid 1pt blue: color:blue"
+/><br />
+<netui:radioButtonOption value="Choice 2" style="border: solid 1pt red; color:red"
+/>
+</netui:radioButtonGroup><br />
+
+<netui:radioButtonGroup dataSource="actionForm.radio2" optionsDataSource="${actionForm.checkOptions}"
+        style="border: solid 1pt blue"/>
+<br />
+<!-- SELECT -->
+<netui:select 
+        dataSource="actionForm.select"
+        size="3"
+        style="margin:10;color: red;font: bold 14pt sans-serif"
+>
+<!-- SELECTOPTION, locale, style, styleClass, tabindex
+-->
+<netui:selectOption value="1"
+        value="Choice 1" style="margin:10;color: blue;font: bold 12pt serif"
+/>
+<netui:selectOption value="2">Choice 2</netui:selectOption>
+<netui:selectOption value="3" disabled="true">Choice 3</netui:selectOption>
+</netui:select><br />
+<!-- HIDDEN: style, styleClass, tabindex
+-->
+<netui:hidden dataSource="actionForm.hidden"/>
+<hr />
+<netui:button type="reset" style="color:red">Reset</netui:button>
+<!-- BUTTON -->
+<netui:button type="submit" style="color:blue;font: bold 12pt serif"
+        value="submit"
+/>
+<br />
+<!-- IMAGEBUTTON -->
+<netui:imageButton
+        src="/coreWeb/images/godzilla.gif"
+        rolloverImage="/coreWeb/images/godzillaRollover.gif"
+        style="border: solid 10pt red;padding: 10pt;margin:2pt"
+/>
+</netui:form>
+<hr />
+<!-- ANCHOR -->
+<netui:anchor action="postback"
+>Post Back</netui:anchor><br />
+<!-- IMAGE -->
+<netui:image src="/coreWeb/images/godzilla.gif"
+        align="center" 
+        hspace="10" vspace="10"
+        height="66" width="48"
+        style="border: solid 2pt blue;"
+/><br />
+<!-- IMAGEANCHOR: formSubmit, forward, href, ismap, linkName, location,
+        lowsrc, page, scope, style, styleClass, tabindex,
+        target, usemap
+
+        (Internally the roll over stuff uses mouse over and mouse out)
+-->
+<netui:imageAnchor action="postback"
+        src="/coreWeb/images/godzilla.gif"
+        rolloverImage="/coreWeb/images/godzillaRollover.gif"
+        align="center"
+        hspace="10" vspace="10"
+        height="66" width="48"
+        imageStyle="border: solid 4pt green;"
+/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/style/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/style/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.style;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    public static class Form extends FormData
+    {
+	private String _text = "";
+	private String _textArea = "";
+        private boolean _checkBox1 = false;
+        private String[] _checkBoxGroup;
+        private String[] _checkBoxGroup2;
+        private String _select = "2";
+        private String _radio = "Choice 2";
+        private String _radio2 = "Check 3";
+        private String _hidden = "hidden";
+
+	public String getText() {
+	    return _text;
+	}
+	public void setText(String text) {
+	    _text = text;
+	}
+
+	public String getTextArea() {
+	    return _textArea;
+	}
+	public void setTextArea(String textArea) {
+	    _textArea = textArea;
+	}
+
+	public boolean getCheckBox1() {
+	    return _checkBox1;
+	}
+	public void setCheckBox1(boolean checkBox1) {
+	    _checkBox1 = checkBox1;
+	}
+
+	public String[] getCheckBoxGroup() {
+	    return _checkBoxGroup;
+	}
+	public void setCheckBoxGroup(String checkBoxGroup[]) {
+	    _checkBoxGroup = checkBoxGroup;
+	}
+
+	public String[] getCheckBoxGroup2() {
+	    return _checkBoxGroup2;
+	}
+	public void setCheckBoxGroup2(String checkBoxGroup[]) {
+	    _checkBoxGroup2 = checkBoxGroup;
+	}
+
+        public String[] getCheckOptions() {
+            return new String[] {"Check 1", "Check 2", "Check 3"};
+        }
+
+	public String getSelect() {
+	    return _select;
+	}
+	public void setSelect(String select) {
+	    _select = select;
+	}
+
+	public String getRadio() {
+	    return _radio;
+	}
+	public void setRadio(String radio) {
+	    _radio = radio;
+	}
+
+	public String getRadio2() {
+	    return _radio2;
+	}
+	public void setRadio2(String radio) {
+	    _radio2 = radio;
+	}
+
+        
+	public String getHidden() {
+	    return _hidden;
+	}
+	public void setHidden(String hidden) {
+	    _hidden = hidden;
+	}
+
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleClass/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleClass/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,150 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Style</title>
+<!-- target -->
+<netui:base />
+<style>
+.red {
+        color: red
+}
+.green {
+        color: green
+}
+.redBorder {
+        border: solid 1pt red;
+        color: red
+}
+.blueBorder {
+        border:solid 1pt blue;
+        color:blue
+}
+.bigBlue {
+        Color: blue;
+        font: bold 14pt sans-serif
+}
+.select {
+        margin:10;
+        color: red;
+        font: bold 14pt sans-serif
+}
+.selectOpt {
+        margin:10;
+        color: blue;
+        font: bold 12pt serif
+}
+.blueButton {
+        color:blue;
+        font: bold 12pt serif
+}
+.redImage {
+        border: solid 10pt red;
+        padding: 10pt;
+        margin:2pt
+}
+.blueImage {
+        border: solid 2pt blue;
+}
+.greenImage {
+        border: solid 4pt green;
+}
+.form {
+        border: solid 1pt;
+        padding: 10pt;
+}
+</style>
+</head>
+<body>
+<h4>Style</h4>
+<netui:form action="postback" styleClass="form">
+<!-- TEXTBOX -->
+<netui:textBox dataSource="actionForm.text"
+        maxlength="30" styleClass="red"
+/><br />
+<!-- TEXTAREA -->
+<netui:textArea dataSource="actionForm.textArea"
+        cols="20" rows="5" styleClass="green"
+/><br />
+<!-- CHECKBOXGROUP with Option-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup" styleClass="redBorder">
+<!-- CHECKBOXOPTION -->
+<netui:checkBoxOption value="foo" styleClass="blueBorder"/>
+</netui:checkBoxGroup><br />
+
+<!-- CHECKBOXGROUP with OptionDataSource-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup2" styleClass="redBorder"
+        optionsDataSource="${actionForm.checkOptions}" />
+
+<!-- LABEL:-->
+<netui:label value="Checkbox 1" styleClass="bigBlue"
+/>
+<!-- CHECKBOX: defaultValue, style, styleClass, tabindex
+-->
+<netui:checkBox dataSource="actionForm.checkBox1" styleClass="blueBorder"
+/><br /><br />
+<!-- RADIOBUTTONGROUP with Option-->
+<netui:radioButtonGroup dataSource="actionForm.radio">
+<!-- RADIOBUTTONOPTION -->
+<netui:radioButtonOption value="Choice 1" styleClass="blueBorder"
+/><br />
+<netui:radioButtonOption value="Choice 2" styleClass="redBorder"
+/>
+</netui:radioButtonGroup><br />
+
+<netui:radioButtonGroup dataSource="actionForm.radio2" optionsDataSource="${actionForm.checkOptions}"
+        styleClass="blueBorder"/>
+<br />
+<!-- SELECT -->
+<netui:select 
+        dataSource="actionForm.select"
+        size="3"
+        styleClass="select"
+>
+<!-- SELECTOPTION, locale, style, styleClass, tabindex
+-->
+<netui:selectOption value="1"
+        styleClass="selectOpt"
+/>
+<netui:selectOption value="2">Choice 2</netui:selectOption>
+<netui:selectOption value="3" disabled="true">Choice 3</netui:selectOption>
+</netui:select><br />
+<!-- HIDDEN -->
+<netui:hidden dataSource="actionForm.hidden"
+/>
+<hr />
+<netui:button type="reset" styleClass="red">Reset</netui:button>
+<!-- BUTTON -->
+<netui:button type="submit" styleClass="blueButton"
+        value="submit"
+/>
+<br />
+<!-- IMAGEBUTTON -->
+<netui:imageButton
+        src="/coreWeb/images/godzilla.gif"
+        rolloverImage="/coreWeb/images/godzillaRollover.gif"
+        styleClass="redImage"
+/>
+</netui:form>
+<hr />
+<!-- ANCHOR -->
+<netui:anchor action="postback"
+>Post Back</netui:anchor><br />
+<!-- IMAGE -->
+<netui:image src="/coreWeb/images/godzilla.gif"
+        align="center" 
+        hspace="10" vspace="10"
+        height="66" width="48"
+        styleClass="blueImage"
+/><br />
+<!-- IMAGEANCHOR -->
+<netui:imageAnchor action="postback"
+        src="/coreWeb/images/godzilla.gif"
+        rolloverImage="/coreWeb/images/godzillaRollover.gif"
+        align="center"
+        hspace="10" vspace="10"
+        height="66" width="48"
+        imageStyleClass="greenImage"
+/>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleClass/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleClass/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.styleClass;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    public static class Form extends FormData
+    {
+	private String _text = "";
+	private String _textArea = "";
+        private boolean _checkBox1 = false;
+        private String[] _checkBoxGroup;
+        private String[] _checkBoxGroup2;
+        private String _select = "2";
+        private String _radio = "Choice 2";
+        private String _radio2 = "Check 3";
+        private String _hidden = "hidden";
+
+	public String getText() {
+	    return _text;
+	}
+	public void setText(String text) {
+	    _text = text;
+	}
+
+	public String getTextArea() {
+	    return _textArea;
+	}
+	public void setTextArea(String textArea) {
+	    _textArea = textArea;
+	}
+
+	public boolean getCheckBox1() {
+	    return _checkBox1;
+	}
+	public void setCheckBox1(boolean checkBox1) {
+	    _checkBox1 = checkBox1;
+	}
+
+	public String[] getCheckBoxGroup() {
+	    return _checkBoxGroup;
+	}
+	public void setCheckBoxGroup(String checkBoxGroup[]) {
+	    _checkBoxGroup = checkBoxGroup;
+	}
+
+	public String[] getCheckBoxGroup2() {
+	    return _checkBoxGroup2;
+	}
+	public void setCheckBoxGroup2(String checkBoxGroup[]) {
+	    _checkBoxGroup2 = checkBoxGroup;
+	}
+
+        public String[] getCheckOptions() {
+            return new String[] {"Check 1", "Check 2", "Check 3"};
+        }
+
+	public String getSelect() {
+	    return _select;
+	}
+	public void setSelect(String select) {
+	    _select = select;
+	}
+
+	public String getRadio() {
+	    return _radio;
+	}
+	public void setRadio(String radio) {
+	    _radio = radio;
+	}
+
+	public String getRadio2() {
+	    return _radio2;
+	}
+	public void setRadio2(String radio) {
+	    _radio2 = radio;
+	}
+
+        
+	public String getHidden() {
+	    return _hidden;
+	}
+	public void setHidden(String hidden) {
+	    _hidden = hidden;
+	}
+
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleOptions/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleOptions/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="db"%>
+<html>
+<head>
+<title>Styles on Options</title>
+<!-- target -->
+<netui:base />
+<style>
+.redCheck {
+        Color: red;
+        font: bold 14pt sans-serif
+}
+.redRadio {
+        Color: red;
+        font: bold 10pt sans-serif
+}
+.blueCheck {
+        Color: blue;
+        font: bold 8pt sans-serif
+}
+.blueRadio {
+        Color: blue;
+        font: bold 16pt sans-serif
+}
+</style>
+</head>
+<body>
+<h4>Style</h4>
+<netui:form action="/postback" style="border: solid 1pt;padding: 10pt">
+
+<!-- CHECKBOXGROUP with Option-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup" labelStyle="font: bold 14pt sans-serif">
+<netui:checkBoxOption value="foo"/><br />
+<netui:checkBoxOption value="bar" labelStyle="font: 8pt sans-serif"/>
+</netui:checkBoxGroup>
+<hr />
+
+<!-- CHECKBOXGROUP with Option-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup1" labelStyleClass="redCheck">
+<netui:checkBoxOption value="foo"/><br />
+<netui:checkBoxOption value="bar"/>
+</netui:checkBoxGroup><br />
+<hr />
+
+<!-- CHECKBOXGROUP with OptionDataSource-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup2"
+        labelStyle="color: red;font: bold 14pt sans-serif"
+        optionsDataSource="${checkOptions}" />
+<hr />
+<!-- CHECKBOXGROUP with OptionDataSource-->
+<netui:checkBoxGroup dataSource="actionForm.checkBoxGroup3"
+        labelStyleClass="blueCheck"
+        optionsDataSource="${checkOptions}" />
+<hr />
+
+<!-- RADIOBUTTONGROUP with Option-->
+<netui:radioButtonGroup dataSource="actionForm.radio" labelStyle="font: bold 14pt sans-serif">
+<netui:radioButtonOption value="Radio 1" /><br />
+<netui:radioButtonOption value="Radio 2" labelStyle="font: 10pt sans-serif"/>
+</netui:radioButtonGroup><br />
+<hr />
+<!-- RADIOBUTTONGROUP with Option-->
+<netui:radioButtonGroup dataSource="actionForm.radio1" labelStyleClass="redRadio">
+<netui:radioButtonOption value="Radio 1" /><br />
+<netui:radioButtonOption value="Radio 2" labelStyle="font: 10pt sans-serif"/>
+</netui:radioButtonGroup><br />
+<hr />
+
+<!-- RADIOBUTTONGROUP with OptionDataSource-->
+<netui:radioButtonGroup dataSource="actionForm.radio2" optionsDataSource="${radioOptions}"
+        labelStyle="color: red;font: bold 6pt sans-serif"/>
+<hr />
+
+<!-- RADIOBUTTONGROUP with OptionDataSource-->
+<netui:radioButtonGroup dataSource="actionForm.radio3" optionsDataSource="${radioOptions}"
+        labelStyleClass="blueRadio"/>
+<hr />
+
+<!-- BUTTON -->
+<netui:button type="submit" style="color:blue;font: bold 12pt serif"
+        value="submit"
+/>
+</netui:form>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleOptions/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/styleOptions/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,135 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.styleOptions;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.util.ArrayList;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback(Form form)
+    {
+        return new Forward("begin");
+    }
+
+    public static class Form extends FormData
+    {
+        private String[] _checkBoxGroup;
+        private String[] _checkBoxGroup1;
+        private String[] _checkBoxGroup2;
+        private String[] _checkBoxGroup3;
+
+        private String _radio = "Radio 2";
+        private String _radio1 = "Radio 1";
+        private String _radio2 = "Radio 3";
+        private String _radio3 = "Radio 1";
+
+	public String[] getCheckBoxGroup() {
+	    return _checkBoxGroup;
+	}
+	public void setCheckBoxGroup(String checkBoxGroup[]) {
+	    _checkBoxGroup = checkBoxGroup;
+	}
+
+	public String[] getCheckBoxGroup1() {
+	    return _checkBoxGroup1;
+	}
+	public void setCheckBoxGroup1(String checkBoxGroup[]) {
+	    _checkBoxGroup1 = checkBoxGroup;
+	}
+
+	public String[] getCheckBoxGroup2() {
+	    return _checkBoxGroup2;
+	}
+	public void setCheckBoxGroup2(String checkBoxGroup[]) {
+	    _checkBoxGroup2 = checkBoxGroup;
+	}
+
+	public String[] getCheckBoxGroup3() {
+	    return _checkBoxGroup3;
+	}
+	public void setCheckBoxGroup3(String checkBoxGroup[]) {
+	    _checkBoxGroup3 = checkBoxGroup;
+	}
+
+        public String[] getCheckOptions() {
+            return new String[] {"Check 1", "Check 2", "Check 3"};
+        }
+
+        public String[] getRadioOptions() {
+            return new String[] {"Radio 1", "Radio 2", "Radio 3"};
+        }
+
+	public String getRadio() {
+	    return _radio;
+	}
+	public void setRadio(String radio) {
+	    _radio = radio;
+	}
+
+	public String getRadio1() {
+	    return _radio1;
+	}
+	public void setRadio1(String radio) {
+	    _radio1 = radio;
+	}
+
+	public String getRadio2() {
+	    return _radio2;
+	}
+	public void setRadio2(String radio) {
+	    _radio2 = radio;
+	}
+
+	public String getRadio3() {
+	    return _radio3;
+	}
+	public void setRadio3(String radio) {
+	    _radio3 = radio;
+	}
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,220 @@
+// ------------------------------------------------------------------------------
+//  Generated by WebLogic Workshop
+// 
+//  Created on: Tue Aug 05 09:05:49 MDT 2003
+//  By: dolander
+// -----------------------------------------------------------------------------
+package tags.tagIds;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/tagIds/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:postForm.do#tagIds.Controller.NameBean">
+ *   <property value="380" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:postForm.do#tagIds.Controller.NameBean@">
+ *   <property value="276,310,310,344" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:begin.do@">
+ *   <property value="204,160,160,116" name="elbowsX"/>
+ *   <property value="92,92,81,81" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:results.jsp">
+ *   <property value="520" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#results.jsp#@action:postForm.do#tagIds.Controller.NameBean@">
+ *   <property value="416,450,450,484" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:tagIds.Controller.NameBean#lastName#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:tagIds.Controller.NameBean#firstName#java.lang.String"/>
+ * <pageflow-object id="formbean:tagIds.Controller.NameBean"/>
+ * <pageflow-object id="formbeanprop:tagIds.Controller.NameBean#type#java.lang.String"/>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/tagIds/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postForm.do#tagIds.Controller.NameBean'>",
+        "  <property value='380' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:postForm.do#tagIds.Controller.NameBean@'>",
+        "  <property value='276,310,310,344' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='204,160,160,116' name='elbowsX'/>",
+        "  <property value='92,92,81,81' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:results.jsp'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#results.jsp#@action:postForm.do#tagIds.Controller.NameBean@'>",
+        "  <property value='416,450,450,484' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:tagIds.Controller.NameBean#lastName#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:tagIds.Controller.NameBean#firstName#java.lang.String'/>",
+        "<pageflow-object id='formbean:tagIds.Controller.NameBean'/>",
+        "<pageflow-object id='formbeanprop:tagIds.Controller.NameBean#type#java.lang.String'/>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+    private String action;
+
+    public String getAction()
+    {
+        return action;
+    }
+
+    public void setAction(String action)
+    {
+        this.action = action;
+    }
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        action = "begin";
+        return new Forward( "success" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="results.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "results.jsp") 
+        })
+    protected Forward postForm(NameBean form)
+    {
+        action = "postForm";
+        return new Forward("success");
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class NameBean extends FormData
+    {
+        private String type;
+
+        private String firstName;
+
+        private String lastName;
+
+
+        public void setLastName(String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public String getLastName()
+        {
+            return this.lastName;
+        }
+
+        public void setFirstName(String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public String getFirstName()
+        {
+            return this.firstName;
+        }
+
+        public void setType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType()
+        {
+            return this.type;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+        <netui:form action="postForm" tagId="form">
+            <table class="tablebody">
+                <tr class="tablehead">
+                    <td>LastName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.lastName" tagId="lastName"></netui:textBox>
+                    </td>
+                </tr>
+                <tr class="tablehead">
+                    <td>FirstName:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.firstName" tagId="firstName"></netui:textBox>
+                    </td>
+                </tr>
+                <tr>
+                    <td>Type:</td>
+                    <td>
+                    &nbsp;
+                    <netui:select dataSource="actionForm.type" tagId="select">
+                        <netui:selectOption value="Select Option One" tagId="opt1"/>
+                        <netui:selectOption value="Select Option Two" tagId="opt2"/>
+                        <netui:selectOption value="Select Option Three" tagId="opt3"/>
+                    </netui:select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="postForm" type="submit" tagId="submit"></netui:button>&nbsp;
+            <netui:imageButton src="./../../resources/images/folder_16_pad.gif" tagId="imageButton"></netui:imageButton>
+        </netui:form>
+        <hr />
+        <netui:label value="${pageFlow.action}" tagId="label"/> <br>
+        <netui:anchor action="begin" tagId="anchor">Home</netui:anchor><br>
+        <netui:imageAnchor action="begin" src="./../../resources/images/folder_16_pad.gif" tagId="imageAnchor"></netui:imageAnchor><br>
+        <netui:image src="./../../resources/images/bar-background.gif" tagId="image"></netui:image>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/results.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIds/results.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            New Web Application Page
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIteration/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIteration/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<html>
+<head>
+<title>Single Item Iteration</title>
+</head>
+<body>
+<netui:form action="/postback">
+   <netui:select dataSource="pageFlow.select" defaultValue="${pageFlow.defaultSelect}"
+	optionsDataSource="${pageFlow.options}"/><br />
+   <netui:radioButtonGroup dataSource="pageFlow.radioGroup" defaultValue="${pageFlow.defaultRadioGroup}"
+	optionsDataSource="${pageFlow.options}"/><br />
+   <netui:checkBoxGroup dataSource="pageFlow.checkGroup" defaultValue="${pageFlow.defaultCheckGroup}"
+	optionsDataSource="${pageFlow.options}"/><br />
+   <netui:button type="submit">Submit</netui:button>
+</netui:form>
+<hr />
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIteration/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagIteration/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,103 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package tags.tagIteration;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    // Checkbox Group
+    private String[] _checkGroup;
+    public void setCheckGroup(String[] checkGroup) {
+	_checkGroup = checkGroup;
+    }
+    public String[] getCheckGroup() {
+	return _checkGroup;
+    }
+
+    private String[] _defaultCheckGroup = {"Default Check 1", "Default Check 2"};
+    public String[] getDefaultCheckGroup() {
+	return _defaultCheckGroup;
+    }
+
+    // Select
+    private String _defaultSelect = "Default Option";
+    public String getDefaultSelect() {
+	return _defaultSelect;
+    }
+
+    private String _select;
+    public void setSelect(String select) {
+	_select = select;
+    }
+    public String getSelect() {
+	return _select;
+    }
+
+    // Radio Group
+    private String _defaultRadioGroup = "Default Radio";
+    public String getDefaultRadioGroup() {
+	return _defaultRadioGroup;
+    }
+
+    private String _radioGroup;
+    public void setRadioGroup(String radioGroup) {
+	_radioGroup = radioGroup;
+    }
+    public String getRadioGroup() {
+	return _radioGroup;
+    }
+
+    private String _options = "Option 1";
+    public String getOptions() {
+	return _options;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+	return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,343 @@
+package tags.tagSizeBinding;
+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;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/tags/tagSizeBinding/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='100' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goImageErrors.do'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='320' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goForm.do'>",
+        "  <property value='340' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submitForm.do#tags.tagSizeBinding.Controller.Form'>",
+        "  <property value='560' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submitForm2.do#tags.tagSizeBinding.Controller.Form'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='120' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:form.jsp@#@action:submitForm.do#tags.tagSizeBinding.Controller.Form@'>",
+        "  <property value='476,500,500,524' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:form.jsp'>",
+        "  <property value='440' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:imageErrors.jsp@#@action:begin.do@'>",
+        "  <property value='164,150,150,136' name='elbowsX'/>",
+        "  <property value='212,212,123,123' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:imageErrors.jsp@#@action:goForm.do@'>",
+        "  <property value='236,270,270,304' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:imageErrors.jsp'>",
+        "  <property value='200' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goImageErrors.do@'>",
+        "  <property value='260,260,260,260' name='elbowsX'/>",
+        "  <property value='204,240,240,276' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:begin.do@'>",
+        "  <property value='224,180,180,136' name='elbowsX'/>",
+        "  <property value='152,152,112,112' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='260' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='136,180,180,224' name='elbowsX'/>",
+        "  <property value='112,112,152,152' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#imageErrors.jsp#@action:goImageErrors.do@'>",
+        "  <property value='224,200,200,200' name='elbowsX'/>",
+        "  <property value='312,312,288,264' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#form.jsp#@action:goForm.do@'>",
+        "  <property value='376,390,390,404' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:formErrors.jsp'>",
+        "  <property value='660' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#formErrors.jsp#@action:submitForm.do#tags.tagSizeBinding.Controller.Form@'>",
+        "  <property value='596,610,610,624' name='elbowsX'/>",
+        "  <property value='212,212,212,212' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#begin.do#@action:submitForm2.do#tags.tagSizeBinding.Controller.Form@'>",
+        "  <property value='604,370,370,136' name='elbowsX'/>",
+        "  <property value='112,112,112,112' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbean:tags.tagSizeBinding.Controller.Form'/>",
+        "<pageflow-object id='action-call:@page:formErrors.jsp@#@action:submitForm2.do#tags.tagSizeBinding.Controller.Form@'>",
+        "  <property value='660,660,640,640' name='elbowsX'/>",
+        "  <property value='176,170,170,164' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private int imageHeight = 100;
+    private int imageWidth = 80;
+    private int imageVSpace = 10;
+    private int imageHSpace = 5;
+    private int imageBorder = 5;
+    private String imageAlt = "Alt Text From the Page Flow";
+    private int tbMaxLength = 30;
+    private int tbSize = 30;
+    private int taCols = 30;
+    private int taRows = 5;
+    private int selectSize = 3;
+
+    public Object getNullBinding() {
+        return null;
+    }
+
+    public int getImageHeight()
+    {
+        return imageHeight;
+    }
+
+    public void setImageHeight(int imageHeight)
+    {
+        this.imageHeight = imageHeight;
+    }
+
+    public int getImageWidth()
+    {
+        return imageWidth;
+    }
+
+    public void setImageWidth(int imageWidth)
+    {
+        this.imageWidth = imageWidth;
+    }
+
+    public int getImageVSpace()
+    {
+        return imageVSpace;
+    }
+
+    public void setImageVSpace(int imageVSpace)
+    {
+        this.imageVSpace = imageVSpace;
+    }
+
+    public int getImageHSpace()
+    {
+        return imageHSpace;
+    }
+
+    public void setImageHSpace(int imageHSpace)
+    {
+        this.imageHSpace = imageHSpace;
+    }
+
+    public int getImageBorder()
+    {
+        return imageBorder;
+    }
+
+    public void setImageBorder(int imageBorder)
+    {
+        this.imageBorder = imageBorder;
+    }
+
+    public String getImageAlt()
+    {
+        return imageAlt;
+    }
+
+    public void setImageAlt(String imageAlt)
+    {
+        this.imageAlt = imageAlt;
+    }
+
+    public int getTbMaxLength()
+    {
+        return tbMaxLength;
+    }
+
+    public void setTbMaxLength(int tbMaxLength)
+    {
+        this.tbMaxLength = tbMaxLength;
+    }
+
+    public int getTbSize()
+    {
+        return tbSize;
+    }
+
+    public void setTbSize(int tbSize)
+    {
+        this.tbSize = tbSize;
+    }
+
+    public int getTaCols()
+    {
+        return taCols;
+    }
+
+    public void setTaCols(int taCols)
+    {
+        this.taCols = taCols;
+    }
+
+    public int getTaRows()
+    {
+        return taRows;
+    }
+
+    public void setTaRows(int taRows)
+    {
+        this.taRows = taRows;
+    }
+
+    public int getSelectSize()
+    {
+        return selectSize;
+    }
+
+    public void setSelectSize(int selectSize)
+    {
+        this.selectSize = selectSize;
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward( "success" );
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "imageErrors.jsp") 
+        })
+    protected Forward goImageErrors()
+    {
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "form.jsp") 
+        })
+    protected Forward goForm()
+    {
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "formErrors.jsp") 
+        })
+    protected Forward submitForm(Form form)
+    {
+        return new Forward("success");
+    }
+
+   @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "begin.do") 
+        })
+    protected Forward submitForm2(Form form)
+    {
+        return new Forward("success");
+    }
+
+    public static class Form extends FormData
+    {
+        private String textBox;
+        private String textArea;
+        private String select = "Option Two";
+
+        public String getTextBox()
+        {
+            return textBox;
+        }
+
+        public void setTextBox(String textBox)
+        {
+            this.textBox = textBox;
+        }
+
+        public String getTextArea()
+        {
+            return textArea;
+        }
+
+        public void setTextArea(String textArea)
+        {
+            this.textArea = textArea;
+        }
+
+        public String getSelect()
+        {
+            return select;
+        }
+
+        public void setSelect(String select)
+        {
+            this.select = select;
+        }
+     }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/form.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/form.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <body>
+        <br/>
+        <netui:form action="submitForm">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.textBox" maxlength="${pageFlow.tbMaxLength}" size="${pageFlow.tbSize}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <netui:textArea dataSource="actionForm.textArea" cols="${pageFlow.taCols}" rows="${pageFlow.taRows}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select:</td>
+                    <td>
+                        <netui:select dataSource="actionForm.select" size="${pageFlow.selectSize}">
+                        <netui:selectOption tagId="Option-1" value="Option One"/>
+                        <netui:selectOption tagId="Option-2" value="Option Two"/>
+                        <netui:selectOption tagId="Option-3" value="Option Three"/>
+                        <netui:selectOption tagId="Option-4" value="Option Four"/>
+                        <netui:selectOption tagId="Option-5" value="Option Five"/> 
+                        </netui:select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+    </body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/formErrors.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/formErrors.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <netui:body>
+        <br/>
+        <netui:form action="submitForm2">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <netui:textBox dataSource="actionForm.textBox" maxlength="${pageFlow.nullBinding}" size="${pageFlow.nullBinding}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <netui:textArea dataSource="actionForm.textArea" cols="${pageFlow.nullBinding}" rows="${pageFlow.nullBinding}"/>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select:</td>
+                    <td>
+                        <netui:select dataSource="actionForm.select" size="${pageFlow.nullBinding}">
+                        <netui:selectOption value="Option One"/>
+                        <netui:selectOption value="Option Two"/>
+                        <netui:selectOption value="Option Three"/>
+                        <netui:selectOption value="Option Four"/>
+                        <netui:selectOption value="Option Five"/>
+                        </netui:select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <netui:button value="Submit" type="submit"/>
+        </netui:form>
+    </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/imageErrors.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/imageErrors.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <netui:body>
+    <netui:anchor action="goForm">Form Stuff</netui:anchor>
+    <hr />
+    <netui:image width="${pageFlow.nullBinding}"
+        src="/coreWeb/images/godzilla.gif"
+        alt="${pageFlow.nullBinding}"
+        height="${pageFlow.nullBinding}"
+        hspace="${pageFlow.nullBinding}"
+        vspace="${pageFlow.nullBinding}" />
+    <br />
+    <netui:imageAnchor
+        action="begin"
+        border="${pageFlow.nullBinding}"
+        width="${pageFlow.nullBinding}"
+        src="/coreWeb/images/godzilla.gif"
+        alt="${pageFlow.nullBinding}"
+        height="${pageFlow.nullBinding}"
+        hspace="${pageFlow.nullBinding}"
+        vspace="${pageFlow.nullBinding}" />
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tags/tagSizeBinding/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <netui:anchor action="goImageErrors">Image Errors</netui:anchor>
+    <hr />
+    <h4>Images</h4>
+    <netui:image width="${pageFlow.imageWidth}"
+        src="/coreWeb/images/godzilla.gif"
+        alt="${pageFlow.imageAlt}"
+        height="${pageFlow.imageHeight}"
+        hspace="${pageFlow.imageHSpace}"
+        vspace="${pageFlow.imageVSpace}" />
+    <br />
+    <netui:imageAnchor
+        action="begin"
+        border="${pageFlow.imageBorder}"
+        width="${pageFlow.imageWidth}"
+        src="/coreWeb/images/godzilla.gif"
+        alt="${pageFlow.imageAlt}"
+        height="${pageFlow.imageHeight}"
+        hspace="${pageFlow.imageHSpace}"
+        vspace="${pageFlow.imageVSpace}" />
+    <netui:imageButton
+        src="/coreWeb/images/godzilla.gif"
+        alt="${pageFlow.imageAlt}"
+        value="This is the value"
+        />
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/folder_16_pad.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/handledownlast.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/handledownmiddle.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/handlerightlast.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/handlerightmiddle.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/launch.jpg
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/linelastnode.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/linemiddlenode.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tags/treeImages/linevertical.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanel/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanel/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+package template.divPanel;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <view-properties>
+ *   <pageflow-object id="action:begin.do">
+ *     <property value="80" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ *   <pageflow-object id="page:index.jsp">
+ *     <property value="240" name="x"/>
+ *     <property value="100" name="y"/>
+ *   </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<view-properties>",
+        "  <pageflow-object id='action:begin.do'>",
+        "    <property value='80' name='x'/>",
+        "    <property value='100' name='y'/>",
+        "  </pageflow-object>",
+        "  <pageflow-object id='page:index.jsp'>",
+        "    <property value='240' name='x'/>",
+        "    <property value='100' name='y'/>",
+        "  </pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanel/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanel/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html runAtClient="true">
+    <head>
+        <title>
+            Basic DivPanel 
+        </title>
+        <netui:scriptHeader />
+        <script src="/coreWeb/resources/javascript/netui-tree.js"></script>    
+    </head>
+    <netui:body>
+    <h4>Basic DivPanel</h4>
+        <netui-template:divPanel tagId="divPanel">
+            <netui-template:section name="page1">
+            <table><tr>
+                <td colspan="2" align="center">Page 1</td>
+            </tr><tr>
+                <td width="100pt">&nbsp</td>
+                <td width="100pt"><netui:anchor clientAction='divPanel.showPage("page2");'>Next</netui:anchor></td>
+            </tr></table>
+            </netui-template:section>
+            <netui-template:section name="page2">
+            <table><tr>
+                <td colspan="2" align="center">Page 2</td>
+            </tr><tr>
+                <td width="100pt"><netui:anchor clientAction='divPanel.showPage("page1");'>Previous</netui:anchor></td>
+                <td width="100pt"><netui:anchor clientAction='divPanel.showPage("page3");'>Next</netui:anchor></td>
+            </tr></table>
+            </netui-template:section>
+             <netui-template:section name="page3">
+            <table><tr>
+                <td colspan="2" align="center">Page 3</td>
+            </tr><tr>
+                <td width="100pt"><netui:anchor clientAction='divPanel.showPage("page2");'>Previous</netui:anchor></td>
+                <td width="100pt">&nbsp;</td>
+            </tr></table>
+            </netui-template:section>
+        </netui-template:divPanel>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanelTree/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanelTree/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,138 @@
+package template.divPanelTree;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tags.tree.TreeElement;
+
+/**
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/divPanelTree/Controller.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="240" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
+ *   <property value="116,160,160,204" name="elbowsX"/>
+ *   <property value="92,92,103,103" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_2" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:treePost.do">
+ *   <property value="360" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:treePost.do@">
+ *   <property value="276,300,300,324" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#index.jsp#@action:treePost.do@">
+ *   <property value="324,300,300,276" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/divPanelTree/Controller.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='240' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:begin.do@'>",
+        "  <property value='116,160,160,204' name='elbowsX'/>",
+        "  <property value='92,92,103,103' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:treePost.do'>",
+        "  <property value='360' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:treePost.do@'>",
+        "  <property value='276,300,300,324' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#index.jsp#@action:treePost.do@'>",
+        "  <property value='324,300,300,276' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+
+    private TreeElement tree;
+    public TreeElement getTree() {
+        return tree;
+    }
+    public void setTree(TreeElement t) {
+        tree = t;
+    }
+    
+    // Uncomment this declaration to access Global.app.
+    // 
+    //     protected global.Global globalApp;
+    // 
+
+    // For an example of page flow exception handling see the example "catch" and "exception-handler"
+    // annotations in {project}/WEB-INF/src/global/Global.app
+
+    /**
+     * This method represents the point of entry into the pageflow
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+        })
+    protected Forward treePost()
+    {
+        return new Forward("success");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanelTree/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/divPanelTree/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html runAtClient="true">
+    <head>
+        <title>
+            Web Application Page
+        </title>
+        <style type="text/css">
+            .selected {color: #0000cc;}
+            .unselected {color: #cccccc;}
+        </style>
+        
+        <!-- This needs to be put here by the script container -->
+        <netui:scriptHeader />
+        <script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+    </head>
+    <netui:body>
+        <table width="100%" cellspacing="5"><tr><td width="20%" valign="top">
+        <netui:richTree selectionAction="treePost"  
+                dataSource="pageFlow.tree" selectionClass="selected"  unselectClass="unselected" 
+                tagId="Tree1" runAtClient="true" >
+            <netui:treeItem clientAction='divPanel.showPage("RootPage");' expanded="true">
+                <netui:treeLabel>Tree</netui:treeLabel>
+                <netui:treeItem clientAction='divPanel.showPage("Page1");' expanded="true">
+                    <netui:treeLabel>1</netui:treeLabel>
+                    <netui:treeItem clientAction='divPanel.showPage("Page11");' >1.1</netui:treeItem>
+                    <netui:treeItem clientAction='divPanel.showPage("Page12");' >1.2</netui:treeItem>
+                    <netui:treeItem clientAction='divPanel.showPage("Page13");'  expanded="true">
+                        <netui:treeLabel>1.3</netui:treeLabel>
+                        <netui:treeItem clientAction='divPanel.showPage("Page131");' >1.3.1</netui:treeItem>
+                        <netui:treeItem clientAction='divPanel.showPage("Page132");' >1.3.2</netui:treeItem>
+                    </netui:treeItem>
+                    <netui:treeItem clientAction='divPanel.showPage("Page14");' >1.4</netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem clientAction='divPanel.showPage("Page2");' >2</netui:treeItem>
+                <netui:treeItem clientAction='divPanel.showPage("Page3");' >3</netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </td><td valign="top" width="50%">
+                <netui-template:divPanel tagId="divPanel" >
+                    <netui-template:section name="RootPage" ><h4>Root of the Tree<h4></netui-template:section>
+                    <netui-template:section name="Page1" ><h4>Page 1</h4></netui-template:section>
+                    <netui-template:section name="Page11" ><h4>Page 1.1</h4></netui-template:section>
+                    <netui-template:section name="Page12" ><h4>Page 1.12</h4></netui-template:section>
+                    <netui-template:section name="Page13" ><h4>Page 1.3</h4></netui-template:section>
+                    <netui-template:section name="Page131" ><h4>Page 1.3.1</h4></netui-template:section>
+                    <netui-template:section name="Page132" ><h4>Page 1.3.2</h4></netui-template:section>
+                    <netui-template:section name="Page14" ><h4>Page 1.4</h4></netui-template:section>
+                    <netui-template:section name="Page2" ><h4>Page 2</h4></netui-template:section>
+                    <netui-template:section name="Page3" ><h4>Page 3</h4></netui-template:section>
+                </netui-template:divPanel>
+        </td></tr></table>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempException/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempException/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title><temp:attribute name="title"/></title>
+<netui:base />
+</head>
+<body>
+<h1><temp:attribute name="title"/></h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="left"/>
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="right"/>
+<hr />
+</td>
+</tr>
+</table>
+</body>
+</html>
+    <%
+    if (true) {
+        ServletException se = new ServletException("foo");
+        throw new ServletException("foo",se);
+    }
+    
+    %>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempException/Test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempException/Test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@page import="javax.servlet.ServletException"%>
+<temp:template templatePage="Template.jsp">
+  <temp:setAttribute name="title" value="Simple Test"/>
+  <temp:section name="left">
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  </temp:section>
+  <temp:section name="right">
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNegate/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNegate/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<netui:html>
+<body>
+<h4><netui:label value="${pageFlow.title}"/></h4>
+<temp:visible visible="${pageFlow.visible}">
+        <p>Text from the Visible Tag - Should See</p>
+</temp:visible>
+<temp:visible visible="${pageFlow.visible}" negate="true">
+        <p>Negated Visible Tag - Should Not See</p>
+</temp:visible>
+<temp:visible visible="${pageFlow.notVisible}">
+        <p>Not Visible Tag - Should Not See</p>
+</temp:visible>
+<temp:visible visible="${pageFlow.notVisible}" negate="true">
+        <p>Negate Not Visible Tag - Should See</p>
+</temp:visible>
+</body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNegate/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNegate/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package template.tempNegate;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    boolean _visible = true;
+    boolean _notVisible = false;
+    String _title = "Template Visibility and Databinding";
+
+    public boolean getVisible() {
+	return _visible;
+    }
+
+    public boolean getNotVisible() {
+        return _notVisible;
+    }
+
+    public String getTitle() {
+	return _title;
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title><temp:attribute name="title"/></title>
+<netui:base />
+</head>
+<body>
+<table cellspacing='0' border='1'>
+<tr><th>Left</th><th>Content</th><th>Right</th></tr>
+<tr>
+<td><temp:includeSection name="left" defaultPage="leftDef.jsp"/></td>
+<td><temp:includeSection name="content"/></td>
+<td><temp:includeSection name="right" defaultPage="rightDef.jsp"/></td>
+</tr>
+</table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/Test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/Test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="Template.jsp">
+  <temp:setAttribute name="title" value="Simple Test"/>
+  <temp:section name="content">
+     Page Content</br>
+     Content</br>
+     Page Content</br>
+     Content</br>
+     Page Content
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/contentTemplate.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/contentTemplate.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,9 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<table>
+<tr><th><temp:includeSection name="title"/></th></tr>
+<tr><td><span style='color:<temp:attribute name='color'/>'>
+<temp:includeSection name="content"/>
+</span>
+</td></tr>
+</table>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/leftDef.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/leftDef.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="contentTemplate.jsp">
+<temp:setAttribute name="color" value="blue"/>
+<temp:section name="title">
+Left Content
+</temp:section>
+<temp:section name="content">
+Default Left Content
+</temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/rightDef.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempNest/rightDef.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="contentTemplate.jsp">
+<temp:setAttribute name="color" value="red"/>
+<temp:section name="title">
+Right Content
+</temp:section>
+<temp:section name="content">
+Default Right Content
+</temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<temp:template templatePage="Template.jsp">
+  <temp:setAttribute name="title" value="Template Test"/>
+  <temp:section name="content">
+    <h4>Template Test</h4>
+    Test of the templates includes a side bar with actions from the Page Flow.
+    In addition, all Page Flows contain a "home" action that is called from
+    the template itself.
+  </temp:section>
+  <temp:section name="actions">
+  <netui:anchor action="main">Main</netui:anchor><br />
+  <netui:anchor action="sub">Nested Page Flow</netui:anchor>
+  </temp:section>  
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package template.tempRelative;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nav" path="Test.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nav",
+                path = "Test.jsp") 
+        })
+    public Forward main()
+    {
+        return new Forward("nav");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="nav" path="sub/Controller.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "nav",
+                path = "sub/Controller.jpf") 
+        })
+    public Forward sub()
+    {
+        return new Forward("nav");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward returnFromSub()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward home()
+    {
+	return new Forward("begin");
+    }
+
+}
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title><temp:attribute name="title"/></title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<netui:base />
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <netui:image src="/coreWeb/template/tempRelative/image/godzilla.gif"
+        height="66" width="48" />
+  </td><td valign="top">
+      <h1 class="title"><temp:attribute name="title"/></h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <netui:anchor action="home">Home</netui:anchor><br />
+    <hr />
+    <temp:includeSection name="actions"
+        defaultPage="/template/tempRelative/noActions.jsp"/>
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    <temp:includeSection name="content"/>
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/Test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<temp:template templatePage="Template.jsp">
+  <temp:setAttribute name="title" value="Main Page Flow"/>
+  <temp:section name="content">
+    <span style="color:red;">
+    <h4>Main Page Flow</h4>
+    <netui:image src="image/godzilla.gif" height="66" width="48"/><br />
+    This is text in the main page flow.
+    </span>
+  </temp:section>
+  <temp:section name="actions">
+  <netui:anchor action="sub">Nest Sub Flow</netui:anchor>
+  </temp:section>  
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/noActions.jsp
==============================================================================

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/sub/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/sub/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,78 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package template.tempRelative.sub;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:controller nested="true"
+ */
+@Jpf.Controller(
+    nested = true)
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="returnFromSub"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnFromSub") 
+        })
+    public Forward returnNow()
+    {
+	return new Forward("return");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="return" return-action="returnFromSub"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "return",
+                returnAction = "returnFromSub") 
+        })
+    public Forward home()
+    {
+	return new Forward("return");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="begin" path="Test.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "begin",
+                path = "Test.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/sub/Test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempRelative/sub/Test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<temp:template templatePage="../Template.jsp">
+  <temp:setAttribute name="title" value="Nested Page Flow"/>
+  <temp:section name="content">
+    <span style="color:blue;">
+    <h4>Nested Page Flow</h4>
+    <netui:image src="../image/godzilla.gif" height="66" width="48"/><br />
+    This is text in the nested page flow.<br/>
+    <netui:anchor action="returnNow">Return</netui:anchor>
+    </span>
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest1/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest1/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title><temp:attribute name="title"/></title>
+<netui:base />
+</head>
+<body>
+<h1><temp:attribute name="title"/></h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="left"/>
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="right"/>
+<hr />
+</td>
+</tr>
+</table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest1/Test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest1/Test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="Template.jsp">
+  <temp:setAttribute name="title" value="Simple Test"/>
+  <temp:section name="left">
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  </temp:section>
+  <temp:section name="right">
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest2/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest2/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title><temp:attribute name="title"/></title>
+<netui:base />
+</head>
+<body>
+<h1><temp:attribute name="title"/></h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="left"/>
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="right"/>
+<hr />
+</td>
+</tr>
+</table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest2/Test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest2/Test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="Template.jsp">
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest3/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest3/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+<html>
+<head>
+<title><temp:attribute name="title"/></title>
+<netui:base />
+</head>
+<body>
+<h1><temp:attribute name="title"/></h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="left"/>
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="right"/>
+<hr />
+</td>
+</tr>
+</table>
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest3/Test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempTest3/Test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,9 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="Template.jsp">
+<temp:section name="left">
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+</temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="Template.jsp">
+  <temp:setAttribute name="title" value="${pageFlow.title}"/>
+  <temp:section name="left" visible="${pageFlow.leftVisible}">
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  </temp:section>
+  <temp:section name="right" visible="${pageFlow.rightVisible}">
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package template.tempVisibility;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    boolean _leftVisible = false;
+    boolean _rightVisible = true;
+    String _title = "Template Visibility and Databinding";
+
+    public boolean getLeftVisible() {
+	return _leftVisible;
+    }
+    public void setLeftVisible(boolean visible) {
+	_leftVisible = visible;
+    }
+
+
+    public boolean getRightVisible() {
+	return _rightVisible;
+    }
+    public void setRightVisible(boolean visible) {
+	_rightVisible = visible;
+    }
+
+    public String getTitle() {
+	return _title;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/tempVisibility/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<netui:html>
+<head>
+<title><temp:attribute name="title"/></title>
+<netui:base />
+</head>
+<body>
+<h1><temp:attribute name="title"/></h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="left"/>
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="right"/>
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<netui:form action="postback">
+Left Section <netui:checkBox dataSource="pageFlow.leftVisible"/><br />
+Right Section <netui:checkBox dataSource="pageFlow.rightVisible"/><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="Template.jsp">
+  <temp:setAttribute name="title" value="${pageFlow.title}"/>
+  <temp:section name="left">
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  </temp:section>
+  <temp:section name="right">
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,72 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package template.visible;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * @jpf:forward name="begin" path="Begin.jsp"
+ */
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    boolean _visible = false;
+    String _title = "Template Visibility and Databinding";
+
+    public boolean getVisible() {
+	return _visible;
+    }
+    public void setVisible(boolean visible) {
+	_visible = visible;
+    }
+
+    public String getTitle() {
+	return _title;
+    }
+
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    /**
+     * @jpf:action
+     */
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/visible/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<netui:html>
+<head>
+<title><temp:attribute name="title"/></title>
+<netui:base />
+</head>
+<body>
+<h1><temp:attribute name="title"/></h1>
+<table width="100%"><tr>
+<temp:visible visible="${pageFlow.visible}">
+<td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="left"/>
+<hr />
+</td>
+</temp:visible>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="right"/>
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<netui:form action="postback">
+Left Section <netui:checkBox dataSource="pageFlow.visible"/><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Begin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Begin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,15 @@
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<temp:template templatePage="Template.jsp">
+  <temp:setAttribute name="title" value="${pageFlow.title}"/>
+  <temp:section name="left">
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  </temp:section>
+  <temp:section name="right">
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  </temp:section>
+</temp:template>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,63 @@
+/*
+ * B E A   S Y S T E M S
+ *
+ * N E T U I
+ *
+ * Copyright (c) 2001-2002  BEA Systems, Inc.
+ *
+ * All Rights Reserved. Unpublished rights reserved under the copyright laws
+ * of the United States. The software contained on this media is proprietary
+ * to and embodies the confidential technology of BEA Systems, Inc. The
+ * possession or receipt of this information does not convey any right to
+ * disclose its contents, reproduce it, or use,  or license the use,
+ * for manufacture or sale, the information or anything described
+ * therein. Any use, disclosure, or reproduction without BEA System's
+ * prior written permission is strictly prohibited.
+ *
+ * $Header:$
+ */
+package template.visibleError;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller(
+    forwards = {
+        @Jpf.Forward(
+            name = "begin",
+            path = "Begin.jsp") 
+    })
+public class Controller extends PageFlowController
+{
+    boolean _visible = false;
+    String _title = "Template Visibility and Databinding";
+
+    public boolean getVisible() {
+	return _visible;
+    }
+    public void setVisible(boolean visible) {
+	_visible = visible;
+    }
+
+    public String getTitle() {
+	return _title;
+    }
+
+
+    @Jpf.Action(
+        )
+    public Forward begin()
+    {
+        return new Forward("begin");
+    }
+
+    @Jpf.Action(
+        )
+    public Forward postback()
+    {
+        return new Forward("begin");
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Template.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/template/visibleError/Template.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page language="java"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="temp" %>
+<netui:html>
+<head>
+<title><temp:attribute name="title"/></title>
+<netui:base />
+</head>
+<netui:body>
+<h1><temp:attribute name="title"/></h1>
+<table width="100%"><tr>
+<temp:visible visible="${pageFlow.foo}">
+<td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="left"/>
+<hr />
+</td>
+</temp:visible>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<temp:includeSection name="right"/>
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<netui:form action="postback">
+Left Section <netui:checkBox dataSource="pageFlow.visible"/><br />
+<netui:button type="submit">Submit</netui:button>
+</netui:form>
+</netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/admin.inc
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/admin.inc	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+
+<%
+   String prefix = ((HttpServletRequest)request).getContextPath();
+%>
+
+<a href="<%= prefix %>">Back to Titan Home Page</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder/startRecord.jsp?testRecorder.filter.skip=true">Record Start Page</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder?mode=record&cmd=stop&testRecorder.filter.skip=true">
+<strong style="color: red">STOP</strong> recording</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder?mode=admin&cmd=clean&testRecorder.filter.skip=true">
+<strong style="color: red">Clean</strong> up Test Recorder sessions</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder?mode=admin&cmd=setTestModeTrue&testRecorder.filter.skip=true">
+Set test mode to <strong style="color: red">True</strong></a>
+<br>
+
+<a href="<%= prefix %>/testRecorder?mode=admin&cmd=setTestModeFalse&testRecorder.filter.skip=true">
+Set test mode to <strong style="color: red">False</strong></a>
+<br>
+
+<a href="<%= prefix %>/testRecorder/status.jsp?testRecorder.filter.skip=true">Status</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder/sessionInfo.jsp?testRecorder.filter.skip=true">Categories, Tests and JUnit Results</a>
+<br>
+
+<a href="<%= prefix %>/testRecorder/test.jsp?testRecorder.filter.skip=true">Test Page</a>
+<br>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/admin.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/admin.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+
+<html>
+
+<head>
+<title>Test Recorder Admin</title>
+</head>
+
+<body>
+
+<h2>Test Recorder Admin</h2>
+
+<%@ include file="admin.inc" %>
+
+<hr>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,35 @@
+
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants" %>
+
+<html>
+
+<head>
+<title>Test Recorder Error</title>
+</head>
+
+<body>
+
+<h2>Test Recorder Error</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%
+    String msg = null;
+    msg = (String) request.getAttribute( Constants.MSG_ATTRIBUTE );
+%>
+<%= ( msg == null ) ? "no message provided." : msg %>
+
+<br>
+<br>
+
+<hr>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/forward.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/forward.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+
+<jsp:forward page="testRecord.jsp" />

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/forward2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/forward2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+
+<jsp:forward page="forward.jsp" />

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+
+<%
+    response.sendRedirect( "status.jsp?testRecorder.filter.skip=true" );
+%>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/playback.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/playback.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.*,
+                 org.apache.beehive.netui.tools.testrecorder.server.state.PlaybackSession,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants" %>
+
+<html>
+
+<head>
+<title>Test Recorder</title>
+</head>
+
+<body>
+
+<h2>Test Recorder</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%
+    String msg = null;
+    msg = (String) request.getAttribute( Constants.MSG_ATTRIBUTE );
+    PlaybackSession playSession = (PlaybackSession) request.getAttribute(
+        Constants.PLAYBACK_SESSION_ATTRIBUTE );
+%>
+
+<%= ( msg == null ) ? "error, no message provided." : msg %>
+<br>
+<br>
+
+<%= ( playSession == null ) ? "" : playSession.toString() %>
+
+<hr>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/record.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/record.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants" %>
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession" %>
+
+<html>
+
+<head>
+<title>Test Recorder</title>
+</head>
+
+<body>
+
+<h2>Test Recorder</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%
+    String msg = null;
+    msg = (String) request.getAttribute( Constants.MSG_ATTRIBUTE );
+    RecordSession recSession = (RecordSession) request.getAttribute(
+        Constants.RECORD_SESSION_ATTRIBUTE );
+%>
+
+<%= ( msg == null ) ? "error, no message provided." : msg %>
+<br>
+<br>
+
+<%= ( recSession == null ) ? "" : recSession.toString() %>
+
+<hr>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/redirect.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/redirect.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4 @@
+
+<%
+    response.sendRedirect( "testRecord.jsp" );
+%>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/sessionInfo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/sessionInfo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,68 @@
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions,
+                 org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.Category,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.Categories,
+                 java.util.List,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants,
+                 java.io.File,
+                 java.text.SimpleDateFormat,
+                 org.apache.beehive.netui.tools.testrecorder.server.state.Session,
+                 java.util.Calendar,
+                 java.util.Date"%>
+<%!
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat( "dd MMM, hh:mm:ss aa" );
+%>
+<%
+    Calendar calendar = Calendar.getInstance();
+    Date date = null;
+    TestDefinitions tests = TestRecorderFilter.instance().getTestDefinitions();
+    WebappConfig webapp = TestRecorderFilter.instance().getWebapp();
+    Category[] categories = tests.getCategories().getCategories();
+    Category category = null;
+    String catHref = null;
+    String resultsHref = null;
+    File reportFile = null;
+%>
+
+<html>
+<title>Test Session Information</title>
+<table border="2" cols="2">
+<tr><td><b>Tests for Category</b></td><td><b>Results</b></td></tr>
+
+<%
+    for ( int i = 0; i < categories.length; i++ ) {
+        category = categories[i];
+        catHref = new String( "testInfo.jsp?category=" + category.getName() );
+        reportFile = new File( category.getReportDirPath(), "/html/junit-noframes.html" );
+        if ( reportFile.exists() ) {
+            calendar.setTimeInMillis(  reportFile.lastModified());
+            date = calendar.getTime();
+            resultsHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.ADMIN +
+                "&" + Constants.CMD + "=" + Constants.DISPLAY_REPORT + "&category=" + category.getName() + ">results (" +
+                dateFormat.format( date ) + ")</a>");
+        }
+        else {
+            resultsHref = null;
+        }
+%>
+<tr><td><a href="<%=catHref%>"><%=category.getName()%></a></td><td>
+<%
+        if ( resultsHref == null ) {
+%>
+            &nbsp;
+<%
+        }
+        else {
+%>
+        <%=resultsHref%>
+<%
+        }
+%>
+        </td></tr>
+<%
+    }
+%>
+
+</table>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/startRecord.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/startRecord.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+
+<%
+   String contextPath = ((HttpServletRequest)request).getContextPath();
+%>
+
+<%@ page import="java.io.File" %>
+
+<%
+  
+%>
+
+
+<html>
+
+<head>
+<title>Recording Session Start</title>
+</head>
+
+<body>
+
+<h2>Recording Session Start</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<form method="POST" action="<%= contextPath %>/testRecorder?mode=record&cmd=start" >
+
+  <table>
+
+  <tr>
+    <td align="right"><strong>Test Name: </strong></td>
+    <td align="left"><input name="testName" type="text" size="30" />
+    <i style="color: blue" >or choose from the list of existing tests below.</i></td>
+  </tr>
+
+  <tr>
+    <td align="right"><strong>Test User: </strong></td>
+    <td align="left"><input name="testUser" type="text" size="30" /></td>
+  </tr>
+
+  <tr>
+    <td align="right"><strong>Description: </strong></td>
+    <td align="left"><textarea name="description" rows="5" cols="40"></textarea></td>
+  </tr>
+
+  <tr>
+    <td align="right"><strong>Overwrite existing test: </strong></td>
+    <td align="left"><input type="checkbox" name="overwrite" value="true" /></td>
+  </tr>
+
+  </table>
+
+  <br>
+
+  <input type="submit" />
+</form>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/status.inc
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/status.inc	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,113 @@
+
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.state.Session" %>
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter" %>
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession" %>
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.server.state.RecordSession" %>
+<%@ page import="java.text.SimpleDateFormat" %>
+<%@ page import="java.text.MessageFormat" %>
+<%@ page import="java.util.*" %>
+
+<%!
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat( Session.DATE_FORMAT_STRING );
+
+    private static final String property =
+        "<strong style=\"color: blue\">{0}</strong>";
+    private static final String value =
+        "<b style=\"color: {1}\">{2}</b><br>";
+    private static final String RED = "red";
+    private static final String GREEN = "green";
+    private static final String ON = "On";
+    private static final String OFF = "Off";
+
+    private static final MessageFormat status = new MessageFormat( property + value );
+
+    private Object[] testModeObjects = { "Test Mode: ", null, null };
+    private Object[] recordingObjects = { "Recording: ", null, null };
+    private Object[] playbackObjects = { "Playback: ", null, null };
+
+    private static String getPlaybackSessionString( Map playbackMap ) {
+        StringBuffer sb = new StringBuffer( 64 * playbackMap.size() );
+        Set entrySet = playbackMap.entrySet();
+        List list = new ArrayList( entrySet.size() );
+        list.addAll( entrySet );
+
+        // TODO sort by session name and start time
+        for ( int i = 0; i < list.size(); i++ ) {
+            sb.append( "Playback Session [" + i + "]( " + list.get(i) + " )" + "<br><br>" );
+        }
+        return sb.toString();
+    }
+%>                                            
+
+<%
+    TestRecorderFilter filter = TestRecorderFilter.instance();
+    String dateString = dateFormat.format( new Date() );
+    boolean testMode = false;
+    RecordSession recordingSession = null;
+    String recSessionInfo = null;
+    String playSessionInfo = null;
+    Map playbackMap = null;
+    
+    if ( filter != null ) {
+       testMode = filter.getState().isTestMode();
+       recordingSession = filter.getState().getRecordingSession();
+       playbackMap = filter.getState().getPlaybackMap();
+
+       if ( testMode ) {
+           testModeObjects[1] = GREEN;
+           testModeObjects[2] = ON;
+       }
+       else {
+           testModeObjects[1] = RED;
+           testModeObjects[2] = OFF;
+       }
+   
+       if ( recordingSession == null ) {
+           recordingObjects[1] = RED;
+           recordingObjects[2] = OFF;
+           recSessionInfo = null;
+       }
+       else {
+           recordingObjects[1] = GREEN;
+           recordingObjects[2] = ON;
+           recSessionInfo = recordingSession.toString();
+       }
+   
+       if ( playbackMap == null ) {
+           playbackObjects[1] = RED;
+           playbackObjects[2] = OFF;
+       }
+       else {
+           playbackObjects[1] = GREEN;
+           playbackObjects[2] = ON;
+           playSessionInfo = getPlaybackSessionString( playbackMap );
+       }
+    }
+%>
+
+<h3><strong style="color: orange">Current Status ( </strong>
+<%= dateString %><strong style="color: orange"> )</strong></h3>
+
+<%
+   if ( filter != null ) {
+      // all is well
+%>
+
+&nbsp;&nbsp;&nbsp;&nbsp;<%=status.format( testModeObjects ) %>
+&nbsp;&nbsp;&nbsp;&nbsp;<%=status.format( recordingObjects ) %>
+<br>
+<%= ( recSessionInfo == null ) ? "" : "&nbsp;&nbsp;&nbsp;&nbsp;" + recSessionInfo + "<br><br>" %>
+&nbsp;&nbsp;&nbsp;&nbsp;<%=status.format( playbackObjects ) %>
+<br>
+<%= ( playSessionInfo == null ) ? "" : "&nbsp;&nbsp;&nbsp;&nbsp;" + playSessionInfo + "<br>" %>
+
+<%
+   }
+   else {
+%>
+
+<strong style="color: red">TestRecorderFilter is not properly deployed!!</strong>
+
+<%
+   }
+%>   

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/status.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/status.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+
+<html>
+
+<head>
+<title>Status Test Recorder</title>
+</head>
+
+<body>
+
+<h2>Status of the Test Recorder</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%@ include file="status.inc" %>
+
+</body>
+
+</html>
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/test.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/test.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,130 @@
+
+<%
+   String contextPath = ((HttpServletRequest)request).getContextPath();
+%>
+
+<html>
+
+<head>
+<title>Test Recorder Admin</title>
+</head>
+
+<body>
+
+<h2>Test Recorder Admin</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%@ include file="status.inc" %>
+
+<hr>
+
+<br>
+<a href="testRecord.jsp">a simple page to record data for tests</a>
+<br>
+<br>
+
+<br>
+<a href="<%= contextPath %>/testRecorder">no params</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record">mode=record</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=unknown">mode=unknown</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start">mode=record, cmd=start</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=unknown">mode=record, cmd=unknown</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testUser=ozzy">
+mode=record, cmd=start, testUser=ozzy</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testName=test1">
+mode=record, cmd=start, testName=test1</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&description=someDescription">
+mode=record, cmd=start, description=someDescription</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&overwrite=false">
+mode=record, cmd=start, overwrite=false</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&overwrite=true">
+mode=record, cmd=start, overwrite=true</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testRecorder.filter.skip=false">
+mode=record, cmd=start, testRecorder.filter.skip=false</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testRecorder.filter.skip=true">
+mode=record, cmd=start, testRecorder.filter.skip=true</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testName=test1&testUser=ozzy&description=someDescription&overwrite=false&testRecorder.filter.skip=true">
+START record for 'test1', do not overwrite</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testName=test1&testUser=ozzy&description=someDescription&overwrite=true&testRecorder.filter.skip=true">
+START record for 'test1', overwrite if necessary</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=start&testName=test2&testUser=ozzy&description=someDescription&overwrite=true&testRecorder.filter.skip=true">
+START record for 'test2', overwrite if necessary</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=record&cmd=stop&testRecorder.filter.skip=true">record STOP</a>
+<br>
+
+<hr>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback">mode=playback</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start">mode=playback, cmd=start</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=unknown">mode=playback, cmd=unknown</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testUser=ozzy">
+mode=playback, cmd=start, testUser=ozzy</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testName=test1">
+mode=playback, cmd=start, testName=test1</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&description=someDescription">
+mode=playback, cmd=start, description=someDescription</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testRecorder.filter.skip=false">
+mode=playback, cmd=start, testRecorder.filter.skip=false</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testRecorder.filter.skip=true">
+mode=playback, cmd=start, testRecorder.filter.skip=true</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testName=test1&testUser=ozzy&description=someDescription&overwrite=false&testRecorder.filter.skip=true">
+START playback for 'test1'</a>
+<br>
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=start&testName=test2&testUser=ozzy&description=someDescription&overwrite=false&testRecorder.filter.skip=true">
+START playback for 'test2'</a>
+<br>
+
+<a href="<%= contextPath %>/testRecorder?mode=playback&cmd=stop&testRecorder.filter.skip=true">playback STOP, no testId</a>
+</body>
+
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/testInfo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/testInfo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,109 @@
+<%@ page import="org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions,
+                 org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.Category,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.Categories,
+                 java.util.List,
+                 org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition,
+                 org.apache.beehive.netui.tools.testrecorder.shared.Constants,
+                 java.io.File,
+                 java.text.SimpleDateFormat,
+                 java.util.Calendar,
+                 java.util.Date"%>
+<%!
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat( "dd MMM, hh:mm:ss aa" );
+%>
+<%
+    Calendar calendar = Calendar.getInstance();
+    Date date = null;
+    TestDefinitions tests = TestRecorderFilter.instance().getTestDefinitions();
+    WebappConfig webapp = TestRecorderFilter.instance().getWebapp();
+    String categoryString = request.getParameter( "category");
+    Category category = tests.getCategories().getCategory( categoryString );
+    List testList = tests.getCategories().getTests( category );
+    TestDefinition test = null;
+    String detailHref = null;
+    String recordHref = null;
+    String playbackHref = null;
+    String diffHref = null;
+    File file = null;
+%>
+
+
+<html>
+<title>Category Test Information</title>
+
+<%
+    if ( category == null ) {
+%>
+        <b>Unable to find category( <%=categoryString%> )</b>
+        </html>
+<%
+        return;
+    }
+%>
+
+<table border="2" cols="2">
+<tr>
+    <td><b>Test</b></td>
+    <td><b>Details</b></td></td>
+    <td><b>Diff</b></td>
+    <td><b>Record File</b></td></td>
+    <td><b>Playback File</b></td>
+</tr>
+
+<%
+    for ( int i = 0; i < testList.size(); i++ ) {
+        test = (TestDefinition) testList.get( i );
+        file = new File( test.getTestFilePath() );
+        if ( file.exists() ) {
+            calendar.setTimeInMillis(  file.lastModified());
+            date = calendar.getTime();
+            recordHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.ADMIN +
+                "&" + Constants.CMD + "=" + Constants.DISPLAY_RECORD + "&test=" + test.getName() + ">" + test.getName() +
+                " Record File</a>" );
+            detailHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.DPY_DETAILS + "&" +
+                Constants.FILE + "=" + test.getName() + ">" + test.getName() + " Details</a>" );
+        }
+        else {
+            recordHref = "&nbsp;";
+            detailHref = "file not found( " + file.getAbsolutePath() + " )";
+        }
+        file = new File( test.getResultFilePath() );
+        if ( file.exists() ) {
+            calendar.setTimeInMillis(  file.lastModified());
+            date = calendar.getTime();
+            playbackHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.ADMIN +
+                "&" + Constants.CMD + "=" + Constants.DISPLAY_PLAYBACK + "&test=" + test.getName() + ">" + test.getName() +
+                " Playback File (" + dateFormat.format( date ) + ")</a>");
+        }
+        else {
+            playbackHref =  "&nbsp;";
+
+        }
+        file = new File( test.getResultDiffFilePath() );
+        if ( file.exists() ) {
+            diffHref = new String( "<a href=" + webapp.getServletURI() + "?" + Constants.MODE + "=" + Constants.DPY_DIFF + "&" +
+                Constants.FILE + "=" + test.getName() + ">" + test.getName() + "</a>");
+        }
+        else {
+            diffHref =  "&nbsp;";
+        }
+%>
+        <tr>
+            <td><%=test.getName()%></td>
+
+            <td><%=detailHref%></td>
+
+            <td><%=diffHref%></td>
+
+            <td><%=recordHref%></td>
+
+            <td><%=playbackHref%></td>
+        </tr>
+<%
+    }
+%>
+
+</table>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/testRecord.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/testRecorder/testRecord.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+
+<html>
+
+<head>
+<title>Record Test Page</title>
+</head>
+
+<body>
+
+<h2>Record Test Page</h2>
+
+<%@ include file="admin.inc" %>
+<hr>
+
+<br>
+
+<%
+    // response.setStatus( 201 );
+%>
+
+<hr>
+
+<br>
+<a href="testRecord.jsp">reload this page</a>
+<br>
+<br>
+
+<a href="forward.jsp">forward back to this page</a>
+<br>
+<a href="forward2.jsp">two forwards back to this page</a>
+<br>
+<a href="redirect.jsp">redirect back to this page</a>
+
+</body>
+
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,304 @@
+package tree.treeAttribute;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tags.tree.TreeElement;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller (
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="postback", navigateTo=Jpf.NavigateTo.currentPage),
+        @Jpf.SimpleAction(name="goAttribute1", path="attribute1.jsp"),
+        @Jpf.SimpleAction(name="goAttribute2", path="attribute2.jsp"),
+        @Jpf.SimpleAction(name="goAttribute3", path="attribute3.jsp"),
+        @Jpf.SimpleAction(name="goAttribute4", path="attribute4.jsp"),
+        @Jpf.SimpleAction(name="goAttribute5", path="attribute5.jsp"),
+        @Jpf.SimpleAction(name="goAttribute6", path="attribute6.jsp"),
+        @Jpf.SimpleAction(name="goAttribute7", path="attribute7.jsp"),
+        @Jpf.SimpleAction(name="goAttribute8", path="attribute8.jsp")
+    }
+
+)
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/treeAttribute/Controller.jpf'/>", 
+        "<pageflow-object id='action:resetTrees.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='80' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='200' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:resetTrees.do@'>", 
+        "  <property value='264,190,190,116' name='elbowsX'/>", 
+        "  <property value='72,72,192,192' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute1.jsp'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='140' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute2.jsp'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='200' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute3.jsp'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='260' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute4.jsp'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='320' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute5.jsp'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='380' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute6.jsp'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='440' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute7.jsp'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='500' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:resetTrees.do@'>", 
+        "  <property value='116,190,190,264' name='elbowsX'/>", 
+        "  <property value='181,181,83,83' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute1.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='140' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute2.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='200' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute3.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='260' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute4.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='320' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute5.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='380' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute6.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='440' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute7.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='500' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute2.do@'>", 
+        "  <property value='96,170,170,244' name='elbowsX'/>", 
+        "  <property value='171,171,182,182' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute6.do@'>", 
+        "  <property value='106,180,180,254' name='elbowsX'/>", 
+        "  <property value='204,204,433,433' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute4.do@'>", 
+        "  <property value='96,170,170,244' name='elbowsX'/>", 
+        "  <property value='205,205,314,314' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute1.do@'>", 
+        "  <property value='170,170,244' name='elbowsX'/>", 
+        "  <property value='192,132,132' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute5.do@'>", 
+        "  <property value='96,170,170,244' name='elbowsX'/>", 
+        "  <property value='191,191,360,360' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute3.do@'>", 
+        "  <property value='96,170,170,244' name='elbowsX'/>", 
+        "  <property value='191,191,240,240' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute7.do@'>", 
+        "  <property value='116,190,190,264' name='elbowsX'/>", 
+        "  <property value='203,203,492,492' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute1.jsp@#@action:begin.do@'>", 
+        "  <property value='326,212,212,98' name='elbowsX'/>", 
+        "  <property value='115,115,75,75' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute2.jsp@#@action:begin.do@'>", 
+        "  <property value='326,212,212,98' name='elbowsX'/>", 
+        "  <property value='185,185,96,96' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute3.jsp@#@action:begin.do@'>", 
+        "  <property value='326,212,212,98' name='elbowsX'/>", 
+        "  <property value='257,257,108,108' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute4.jsp@#@action:begin.do@'>", 
+        "  <property value='326,212,212,98' name='elbowsX'/>", 
+        "  <property value='305,305,96,96' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute5.jsp@#@action:begin.do@'>", 
+        "  <property value='326,212,212,98' name='elbowsX'/>", 
+        "  <property value='377,377,108,108' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute6.jsp@#@action:begin.do@'>", 
+        "  <property value='334,220,220,106' name='elbowsX'/>", 
+        "  <property value='427,427,98,98' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute7.jsp@#@action:begin.do@'>", 
+        "  <property value='344,230,230,116' name='elbowsX'/>", 
+        "  <property value='492,492,103,103' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute8.jsp'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='60' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute8.jsp@#@action:begin.do@'>", 
+        "  <property value='80,80,80,80' name='elbowsX'/>", 
+        "  <property value='104,104,56,56' name='elbowsY'/>", 
+        "  <property value='South_1' name='fromPort'/>", 
+        "  <property value='North_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    
+    TreeElement _tree1;
+    TreeElement _tree2;
+    TreeElement _tree3;
+    TreeElement _tree4;
+    TreeElement _tree5;
+    TreeElement _tree6;
+    TreeElement _tree7;
+    TreeElement _tree8;
+    
+    //********************************* TREE PROPERTIES ********************************
+    
+    public TreeElement getTree1() {
+        return _tree1;
+    }
+    
+    public void setTree1(TreeElement tree) {
+        _tree1 = tree;
+    }
+    
+    public TreeElement getTree2() {
+        return _tree2;
+    }
+    
+    public void setTree2(TreeElement tree) {
+        _tree2 = tree;
+    }
+    
+    public TreeElement getTree3() {
+        return _tree3;
+    }
+    
+    public void setTree3(TreeElement tree) {
+        _tree3 = tree;
+    }
+    
+    public TreeElement getTree4() {
+        return _tree4;
+    }
+    
+    public void setTree4(TreeElement tree) {
+        _tree4 = tree;
+    }
+
+    public TreeElement getTree5() {
+        return _tree5;
+    }
+    
+    public void setTree5(TreeElement tree) {
+        _tree5 = tree;
+    }
+
+    public TreeElement getTree6() {
+        return _tree6;
+    }
+    
+    public void setTree6(TreeElement tree) {
+        _tree6 = tree;
+    }
+
+    public TreeElement getTree7() {
+        return _tree7;
+    }
+    
+    public void setTree7(TreeElement tree) {
+        _tree7 = tree;
+    }
+
+    public TreeElement getTree8() {
+        return _tree8;
+    }
+    
+    public void setTree8(TreeElement tree) {
+        _tree8 = tree;
+    }
+    
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "index.jsp")
+})
+    protected Forward resetTrees()        {
+        Forward forward = new Forward("success");
+            _tree1 = null;
+            _tree2 = null;
+            _tree3 = null;
+            _tree4 = null;        
+            _tree5 = null;        
+            _tree6 = null;        
+            _tree7 = null;        
+            _tree8 = null;        
+            return forward;
+    }
+                               
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute1.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute1.jsp [goAttribute1.do/tree1] </h4>
+        <p>
+        This test will apply a couple of attributes to individual nodes.  These are only applied to the nodes themselves
+        and not to the descedents.  All nodes are marked. To verify this test you simply run the JSP and then look at
+        the attributes applied to the Label Anchor. There should be an 'a', 'b', or 'c' attribute next to each of the
+        node that indicate they should have the attribute set <b>x.x.x [attributes]</b>.
+        To verify this test you must look at the source and see that the attributes match the
+        expected attributes defined in the label.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree1" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0 [A]</netui:treeLabel>
+                <netui:treeHtmlAttribute attribute="a" value="**A**" onLabelLink="true"/>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [A,B]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute="a" value="**A**" onLabelLink="true"/>
+                    <netui:treeHtmlAttribute attribute="b" value="**B**" onLabelLink="true" />
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0</netui:treeLabel>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0 [C]</netui:treeLabel>
+                            <netui:treeHtmlAttribute attribute="c" value="**C**" onLabelLink="true" />
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.2 [C]</netui:treeLabel>
+                            <netui:treeHtmlAttribute attribute="c" value="**C**" onLabelLink="true" />
+                        </netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute1.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute2.jsp [goAttribute1.do/tree2] </h4>
+        <p>
+        This is a basic test of applying an attribute that affects the descendents.  The attributes
+        are applied to the Label anchor and are indicated in the label.  To verify that the attributes
+        are correct you must view the source.  The attributes defined on the Label Anchor should
+        match the label name.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree2" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [A]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute="ax" value="**A**" onLabelLink="true" applyToDescendents="true" />
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [A,C]</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute="cx" value="**C**" onLabelLink="true" applyToDescendents="true" />
+                        <netui:treeItem><netui:treeLabel>0.0.0.0 [A,C]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1 [A,C] </netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.2 [A,C]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [A]</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                        <netui:treeHtmlAttribute attribute="bx" value="**B**" onLabelLink="true" applyToDescendents="true" />
+                            <netui:treeLabel>0.0.1.1 [A,B]</netui:treeLabel>
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [A]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute3.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute1.jsp [goAttribute3.do/tree3] </h4>
+        <p>
+        This test verifies that an attribute applied to a descendent can be overridden 
+        by another attribute applied to one of it's descendents.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree3" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [A]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute="ax" value="**A**" onLabelLink="true" applyToDescendents="true" />
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [-A-]</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute="ax" value="--A--" onLabelLink="true" applyToDescendents="true" />
+                        <netui:treeItem><netui:treeLabel>0.0.0.0 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.2 [-A-]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [A]</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [A]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute4.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,51 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute4.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute4.jsp [goAttribute4.do/tree4] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has an attribute that applied to the tree and overridden by an element only
+        attribute on a single tag.  The attributes are applied to the Label Anchor and match the
+        value on the label.  You must look at the source to verify.
+        </p>
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree4" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [A]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute="a" value="**A**" onLabelLink="true" applyToDescendents="true" />
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [-A-]</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute="a" value="--A--" onLabelLink="true"/>
+                        <netui:treeItem><netui:treeLabel>0.0.0.0 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.2 [A]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [A]</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [A]</netui:treeLabel></netui:treeItem>                        <netui:treeItem><netui:treeLabel>0.0.1.1 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [A]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute5.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute5.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute5.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute5.jsp [goAttribute5.do/tree5] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has an attribute that cascades down the whole tree.  Then it is overridden at two
+        different levels within the same descendent change.  The attribute is applied to the Label
+        Anchor and should match the label.  You must view source to verify this results.
+        </p>
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree5" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0 [A]</netui:treeLabel>
+                <netui:treeHtmlAttribute attribute="a" value="**A**" onLabelLink="true" applyToDescendents="true" />
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [-A-]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute="a" value="--A--" onLabelLink="true"/>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [A]</netui:treeLabel>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0 [-A-]</netui:treeLabel>
+                            <netui:treeHtmlAttribute attribute="a" value="--A--" onLabelLink="true"/>
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.2 [A]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [A]</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [A]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1 [A]</netui:treeLabel>
+                    <netui:treeItem>0.1.0 [A]</netui:treeItem>
+                    <netui:treeItem>0.1.1 [A]</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute6.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute6.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute6.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute6.jsp [goAttribute6.do/tree6] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has multiple attributes that are applied to there descendents and are overridden
+        below their definitions.  In this case A is on the root, -A- is on the next level down and
+        *A* is the next level down.  The attribute is applied to the Label Anchor and should match
+        the label value.  You must view source to confirm the attributes.
+        </p>
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree6" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0 [A]</netui:treeLabel>
+                <netui:treeHtmlAttribute attribute="a" value="A" onLabelLink="true" applyToDescendents="true" />
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [-A-]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute="a" value="-A-" onLabelLink="true" applyToDescendents="true"/>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [*A*]</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute="a" value="*A*" onLabelLink="true" applyToDescendents="true"/>
+                        <netui:treeItem><netui:treeLabel>0.0.0.0 [*A*]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1 [*A*]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.2 [*A*]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [-A-]</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [-A-]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1 [A]</netui:treeLabel>
+                    <netui:treeItem>0.1.0 [A]</netui:treeItem>
+                    <netui:treeItem>0.1.1 [A]</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute7.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute7.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute7.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute7.jsp [goAttribute7.do/tree7] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has multiple cascades within the same hiearchy and also element scoped attributes.  The
+        attributes are applied to the Label Anchor and should reflect the label value.  You must view source to 
+        verify the attributes and labels are the same.
+        </p>
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree7" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0 [A]</netui:treeLabel>
+                <netui:treeHtmlAttribute attribute="a" value="A" onLabelLink="true" applyToDescendents="true" />
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [-A-]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute="a" value="-A-" onLabelLink="true" applyToDescendents="true"/>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [*A*]</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute="a" value="*A*" onLabelLink="true" applyToDescendents="true"/>
+                        <netui:treeItem><netui:treeLabel>0.0.0.0 [*A*]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.1 [+A+]</netui:treeLabel>
+                            <netui:treeHtmlAttribute attribute="a" value="+A+" onLabelLink="true"/>
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.2 [*A*]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [+A+]</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute="a" value="+A+" onLabelLink="true"/>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [-A-]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1 [A]</netui:treeLabel>
+                    <netui:treeItem>0.1.0 [A]</netui:treeItem>
+                    <netui:treeItem>0.1.1 [A]</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute8.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/attribute8.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,57 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute8.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute8.jsp [goAttribute8.do/tree8] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has a single attribute descending from the root and then multiple element scoped
+        attributes in a row, followed by elements that are descendents.  The attributes are applied
+        to the Label Anchor and should match the label value.  You need to view source to 
+        compare the attributes and the label.
+        </p>
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree8" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0 [A]</netui:treeLabel>
+                <netui:treeHtmlAttribute attribute="a" value="A" onLabelLink="true" applyToDescendents="true" />
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [-A-]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute="a" value="-A-" onLabelLink="true" />
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [+A+]</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute="a" value="+A+" onLabelLink="true" />
+                        <netui:treeItem><netui:treeLabel>0.0.0.0 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.1 [.A.]</netui:treeLabel>
+                            <netui:treeHtmlAttribute attribute="a" value=".A." onLabelLink="true" />
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.2 [A]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [A]</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1 [A]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [A]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1 [A]</netui:treeLabel>
+                    <netui:treeItem>0.1.0 [A]</netui:treeItem>
+                    <netui:treeItem>0.1.1 [A]</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+    <p>
+        <netui:anchor action="resetTrees">Reset Trees</netui:anchor>
+    </p>
+    <ul>
+    <li><netui:anchor action="goAttribute1">Attribute 1</netui:anchor> -- Apply attributes to nodes</li>
+    <li><netui:anchor action="goAttribute2">Attribute 2</netui:anchor> -- Apply attributes to descendents</li>
+    <li><netui:anchor action="goAttribute3">Attribute 3</netui:anchor> -- Apply attributes to descendents with overrides</li>
+    <li><netui:anchor action="goAttribute4">Attribute 4</netui:anchor> -- Apply attributes to descendents with element attributes</li>
+    <li><netui:anchor action="goAttribute5">Attribute 5</netui:anchor> -- Apply attributes to descendents with 
+        overrides and element attributes</li>
+    <li><netui:anchor action="goAttribute6">Attribute 6</netui:anchor> -- Apply attributes to descendents with 
+        overrides at multiple levels</li>
+    <li><netui:anchor action="goAttribute7">Attribute 7</netui:anchor> -- Apply attributes to descendents with 
+        overrides at multiple levels and local scoped</li>
+    <li><netui:anchor action="goAttribute8">Attribute 8</netui:anchor> -- Apply to descendents with multiple local scopes in between</li>
+    </ul>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/style.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttribute/style.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+body {
+    margin: 10pt 2%;
+    background-color:#e6e6f0;
+}
+
+.content {
+    background-color:#ffffff;
+    height: 350px;
+    padding: 4pt;
+}
+
+.homeAnchor {
+    text-decoration: none;
+    float:right;
+}
+
+.treeSelected {
+    color: #ff6600;
+    font-family: "new century schoolbook", serif ; 
+    font-weight: bold;
+    text-decoration: none;
+}
+
+.treeUnselected {
+    color: #993300;
+    font-family: "new century schoolbook", serif ; 
+    text-decoration: none;
+}
+
+.treeStyle {
+    border: solid 1pt #ff6600;
+    font-family: "new century schoolbook", serif ; 
+    font-size: 10pt;
+    color: #ff6600;
+    height: 175pt;
+    width: 200pt;
+}
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttributeBits/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttributeBits/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,139 @@
+package tree.treeAttributeBits;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tags.tree.TreeHtmlAttributeInfo;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/treeJsInfo/Controller.jpf'/>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='80' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:flip.do'>", 
+        "  <property value='360' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>", 
+        "  <property value='116,140,140,164' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='index' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:flip.do@'>", 
+        "  <property value='324,290,290,256' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:flip.do@'>", 
+        "  <property value='256,290,290,324' name='elbowsX'/>", 
+        "  <property value='92,92,92,92' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:alternate.do'>", 
+        "  <property value='220' name='x'/>", 
+        "  <property value='240' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:alternate.do@'>", 
+        "  <property value='220,220,220,220' name='elbowsX'/>", 
+        "  <property value='186,160,160,134' name='elbowsY'/>", 
+        "  <property value='North_1' name='fromPort'/>", 
+        "  <property value='South_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:alternate.do@'>", 
+        "  <property value='209,209,209,209' name='elbowsX'/>", 
+        "  <property value='144,170,170,196' name='elbowsY'/>", 
+        "  <property value='South_0' name='fromPort'/>", 
+        "  <property value='North_0' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    private TreeHtmlAttributeInfo _attr1;
+    private TreeHtmlAttributeInfo _attr2;
+    
+    public TreeHtmlAttributeInfo getAttributeInfo1() {
+        return _attr1;
+    }
+     public TreeHtmlAttributeInfo getAttributeInfo2() {
+        return _attr2;
+    }
+    
+    protected void onCreate()
+    {
+        _attr1 = new TreeHtmlAttributeInfo();
+        _attr2 = new TreeHtmlAttributeInfo();
+        
+        _attr1.setOnIcon(true);
+        _attr1.setOnIconLink(true);
+        _attr1.setOnLabelLink(true);
+        
+        _attr2.setOnIcon(false);
+        _attr2.setOnIconLink(false);
+        _attr2.setOnLabelLink(false);
+        
+    }
+    
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+
+
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "index.jsp")
+})
+    protected Forward flip()        {
+        Forward forward = new Forward("success");
+        _attr1.setOnIcon(!_attr1.isOnIcon());
+        _attr1.setOnIconLink(!_attr1.isOnIconLink());
+        _attr1.setOnLabelLink(!_attr1.isOnLabelLink());
+        
+        _attr2.setOnIcon(!_attr2.isOnIcon());
+        _attr2.setOnIconLink(!_attr2.isOnIconLink());
+        _attr2.setOnLabelLink(!_attr2.isOnLabelLink());
+         
+        return forward;
+    }
+                
+              
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "index.jsp")
+})
+        protected Forward alternate()        {
+        Forward forward = new Forward("success");
+        _attr1.setOnIcon(!_attr1.isOnIcon());
+        _attr1.setOnLabelLink(!_attr1.isOnLabelLink());
+        
+        _attr2.setOnIconLink(!_attr2.isOnIconLink());
+         
+        return forward;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttributeBits/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeAttributeBits/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+    <h4>TreeHtmlAttributeInfo 1 - All True</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 1:</td>
+                <td>
+                <netui:label value="${pageFlow.attributeInfo1.onIcon}" defaultValue="&nbsp;"/><br>
+                <netui:label value="${pageFlow.attributeInfo1.onIconLink}" defaultValue="&nbsp;"/><br>
+                <netui:label value="${pageFlow.attributeInfo1.onLabelLink}" defaultValue="&nbsp;"/><br>
+                </td>
+            </tr>
+        </table>
+    <h4>TreeHtmlAttributeInfo 2 - All False</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 2:</td>
+                <td>
+                <netui:label value="${pageFlow.attributeInfo2.onIcon}" defaultValue="&nbsp;"/><br>
+                <netui:label value="${pageFlow.attributeInfo2.onIconLink}" defaultValue="&nbsp;"/><br>
+                <netui:label value="${pageFlow.attributeInfo2.onLabelLink}" defaultValue="&nbsp;"/><br>
+                </td>
+            </tr>
+        </table>
+    <hr>
+        This is a basic test of the TreeHtmlAttributeInfo.  The test will flip the state of 
+        the boolean values and then report the state in the page.  The two anchors below
+        flip the state in different ways.
+        <br>
+        Flip the current state of each to the opposite: <netui:anchor action="flip">Flip Bits</netui:anchor><br>
+        Flip every other bit to the opposite (1,3,5): <netui:anchor action="alternate">Alternate</netui:anchor>    
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,211 @@
+package tree.treeMultiAttr;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tags.tree.TreeElement;
+
+/**
+ * This is the default controller for a blank web application.
+ */
+@Jpf.Controller (
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="postback", navigateTo=Jpf.NavigateTo.currentPage),
+        @Jpf.SimpleAction(name="goAttribute1", path="attribute1.jsp"),
+        @Jpf.SimpleAction(name="goAttribute2", path="attribute2.jsp"),
+        @Jpf.SimpleAction(name="goAttribute3", path="attribute3.jsp"),
+        @Jpf.SimpleAction(name="goAttribute4", path="attribute4.jsp"),
+        @Jpf.SimpleAction(name="goAttribute5", path="attribute5.jsp")
+    }
+)
+@Jpf.ViewProperties(
+    value = { 
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->", 
+        "<view-properties>", 
+        "<pageflow-object id='pageflow:/treeMultiAttr/Controller.jpf'/>", 
+        "<pageflow-object id='action:resetTrees.do'>", 
+        "  <property value='60' name='x'/>", 
+        "  <property value='180' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:index.jsp'>", 
+        "  <property value='200' name='x'/>", 
+        "  <property value='180' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='forward:path#success#index.jsp#@action:resetTrees.do@'>", 
+        "  <property value='96,130,130,164' name='elbowsX'/>", 
+        "  <property value='161,161,172,172' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "  <property value='success' name='label'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute1.jsp'>", 
+        "  <property value='480' name='x'/>", 
+        "  <property value='40' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute2.jsp'>", 
+        "  <property value='480' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute3.jsp'>", 
+        "  <property value='480' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute4.jsp'>", 
+        "  <property value='480' name='x'/>", 
+        "  <property value='240' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:resetTrees.do@'>", 
+        "  <property value='164,130,130,96' name='elbowsX'/>", 
+        "  <property value='183,183,172,172' name='elbowsY'/>", 
+        "  <property value='West_2' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:begin.do'>", 
+        "  <property value='380' name='x'/>", 
+        "  <property value='180' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute4.jsp@#@action:begin.do@'>", 
+        "  <property value='444,430,430,416' name='elbowsX'/>", 
+        "  <property value='232,232,183,183' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute1.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='40' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute2.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='100' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute3.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='160' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute4.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='240' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute4.do@'>", 
+        "  <property value='236,250,250,264' name='elbowsX'/>", 
+        "  <property value='183,183,232,232' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute3.do@'>", 
+        "  <property value='236,250,250,264' name='elbowsX'/>", 
+        "  <property value='183,183,152,152' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute2.do@'>", 
+        "  <property value='236,250,250,264' name='elbowsX'/>", 
+        "  <property value='161,161,92,92' name='elbowsY'/>", 
+        "  <property value='East_0' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute1.do@'>", 
+        "  <property value='236,250,250,264' name='elbowsX'/>", 
+        "  <property value='172,172,32,32' name='elbowsY'/>", 
+        "  <property value='East_1' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute1.jsp@#@action:begin.do@'>", 
+        "  <property value='444,430,430,416' name='elbowsX'/>", 
+        "  <property value='32,32,172,172' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute2.jsp@#@action:begin.do@'>", 
+        "  <property value='444,430,430,416' name='elbowsX'/>", 
+        "  <property value='92,92,183,183' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute3.jsp@#@action:begin.do@'>", 
+        "  <property value='444,430,430,416' name='elbowsX'/>", 
+        "  <property value='152,152,183,183' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='page:attribute5.jsp'>", 
+        "  <property value='480' name='x'/>", 
+        "  <property value='300' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:attribute5.jsp@#@action:begin.do@'>", 
+        "  <property value='444,430,430,416' name='elbowsX'/>", 
+        "  <property value='292,292,183,183' name='elbowsY'/>", 
+        "  <property value='West_1' name='fromPort'/>", 
+        "  <property value='East_2' name='toPort'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action:goAttribute5.do'>", 
+        "  <property value='300' name='x'/>", 
+        "  <property value='300' name='y'/>", 
+        "</pageflow-object>", 
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAttribute5.do@'>", 
+        "  <property value='236,250,250,264' name='elbowsX'/>", 
+        "  <property value='183,183,292,292' name='elbowsY'/>", 
+        "  <property value='East_2' name='fromPort'/>", 
+        "  <property value='West_1' name='toPort'/>", 
+        "</pageflow-object>", 
+        "</view-properties>"
+    }
+)
+public class Controller extends PageFlowController
+{
+    TreeElement _tree1;
+    TreeElement _tree2;
+    TreeElement _tree3;
+    TreeElement _tree4;
+    TreeElement _tree5;
+    
+    public TreeElement getTree1() {
+        return _tree1;
+    }
+    public void setTree1(TreeElement tree) {
+        _tree1 = tree;
+    }
+
+    public TreeElement getTree2() {
+        return _tree2;
+    }
+    public void setTree2(TreeElement tree) {
+        _tree2 = tree;
+    }
+
+    public TreeElement getTree3() {
+        return _tree3;
+    }
+    public void setTree3(TreeElement tree) {
+        _tree3 = tree;
+    }
+
+    public TreeElement getTree4() {
+        return _tree4;
+    }
+    public void setTree4(TreeElement tree) {
+        _tree4 = tree;
+    }
+
+    public TreeElement getTree5() {
+        return _tree5;
+    }
+    public void setTree5(TreeElement tree) {
+        _tree5 = tree;
+    }
+    
+    @Jpf.Action(forwards = { 
+    @Jpf.Forward(name = "success", path = "index.jsp")
+})
+    protected Forward resetTrees()        {
+        Forward forward = new Forward("success");
+        _tree1 = null;
+        _tree2 = null;
+        _tree3 = null;
+        _tree4 = null;
+        _tree5 = null;
+        
+        return forward;
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute1.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute1.jsp [goAttribute1.do/tree1] </h4>
+        <p>
+        This test verifies that a treeHmtlAttribute tag can apply attributes to the four parts of a treeItem.  The four places are
+        the &lt;div> that incloses the item, the &lt;a> that incloses the Icon, the &lt;img> that is the icon and the &lt;a>
+        that incloses the label.  You need to verify that the source matches the label.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree1" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [d='a', i='a', il='a', ll='a']</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute='a' value='A' onIcon="true" onIconLink="true" onLabelLink="true" onDiv="true" />
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0</netui:treeLabel>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0</netui:treeLabel>
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.2</netui:treeLabel>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute2.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute2.jsp [goAttribute2.do/tree2] </h4>
+        <p>
+        This test verifies that an treeHtmlAttribute setting an attribute on a single attribute  and applied to descendents can be overriden by a
+        treeHtmlAttribute with multiple attributes.  You must verify the label names against the generated HTML.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree2" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [-A-]</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute='a' value='-A-' onLabelLink="true" applyToDescendents="true"/>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [d='a', i='a', il='a', ll='a']</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute='a' value='A' onIcon="true" onIconLink="true" onLabelLink="true" onDiv="true" />
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0 [-A-]</netui:treeLabel>
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.2 [-A-]</netui:treeLabel>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [-A-]</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1 [-A-]</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [-A-]</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,54 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute3.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute3.jsp [goAttribute3.do/tree3] </h4>
+        <p>
+        This test verifies that a multiple attributes can be applied to descendents. You must view source and verify that the label
+        names and attributes match.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree3" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0</netui:treeLabel>
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [d='a', i='a', il='a', ll='a']</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute='a' value='A' onIcon="true" onIconLink="true" onLabelLink="true" onDiv="true" applyToDescendents="true" />
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0 [d='a', i='a', il='a', ll='a']</netui:treeLabel>
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1 [d='a', i='a', il='a', ll='a']</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.2 [d='a', i='a', il='a', ll='a']</netui:treeLabel>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute4.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute1.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute4.jsp [goAttribute4.do/tree4] </h4>
+        <p>
+        This test verifies that an treeHtmlAttribute applied to descendents can be overridden by another
+        treeHtmlAttribute also applied to descendents.  The second treeHtmlAttribute is a descendent of the 
+        first treeHtmlAttribute.  You must verify that the label and the source match.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree4" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [d='a', i='a', il='a', ll='a']</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute='a' value='A' onIcon="true" onIconLink="true" onLabelLink="true" onDiv="true" applyToDescendents="true" />
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0 [d='-A-', i='-A-', il='-A-', ll='-A-']</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute='a' value='-A-' onIcon="true" onIconLink="true" onLabelLink="true" onDiv="true" applyToDescendents="true" />
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0 [d='-A-', i='-A-', il='-A-', ll='-A-']</netui:treeLabel>
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1 [d='-A-', i='-A-', il='-A-', ll='-A-']</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.2 [d='-A-', i='-A-', il='-A-', ll='-A-']</netui:treeLabel>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [d='a', i='a', il='a', ll='a']</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [d='a', i='a', il='a', ll='a']</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1 [d='a', i='a', il='a', ll='a']</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [d='a', i='a', il='a', ll='a']</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute5.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/attribute5.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>attribute5.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h4 class="title"><netui:anchor action="begin" styleClass="homeAnchor">Home</netui:anchor>attribute5.jsp [goAttribute5.do/tree5] </h4>
+        <p>
+        This test verifies multiple treeHtmlAttributes with some overlapping attributes and applied to descendents interact 
+        correctly.  You must verify the label names with the attributes set in the generated HTML Source.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <netui:richTree dataSource="pageFlow.tree5" selectionAction="postback" tagId="tree">
+            <netui:treeItem expanded="true">
+                <netui:treeLabel>0</netui:treeLabel>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.0 [d='a', ll='a']</netui:treeLabel>
+                    <netui:treeHtmlAttribute attribute='a' value='A' onLabelLink="true" onDiv="true" applyToDescendents="true" />
+                    <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.0  [d='-a-',  i='-a-', ll='a']</netui:treeLabel>
+                        <netui:treeHtmlAttribute attribute='a' value='-A-' onDiv="true" applyToDescendents="true" onIcon="true" />
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.0  [d='-a-',  i='-a-', ll='a']</netui:treeLabel>
+                        </netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.0.1  [d='-a-',  i='-a-', ll='a']</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem>
+                            <netui:treeLabel>0.0.0.2  [d='-a-',  i='-a-', ll='a']</netui:treeLabel>
+                        </netui:treeItem>
+                    </netui:treeItem>
+                   <netui:treeItem expanded="true">
+                        <netui:treeLabel>0.0.1 [d='a', ll='a']</netui:treeLabel>
+                        <netui:treeItem><netui:treeLabel>0.0.1.0 [d='a', ll='a']</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.1 [d='a', ll='a']</netui:treeLabel></netui:treeItem>
+                        <netui:treeItem><netui:treeLabel>0.0.1.2 [d='a', ll='a']</netui:treeLabel></netui:treeItem>
+                    </netui:treeItem>
+                </netui:treeItem>
+                <netui:treeItem expanded="true">
+                    <netui:treeLabel>0.1</netui:treeLabel>
+                    <netui:treeItem>0.1.0</netui:treeItem>
+                    <netui:treeItem>0.1.1</netui:treeItem>
+                </netui:treeItem>
+            </netui:treeItem>
+        </netui:richTree>
+        </div>
+    </netui:body>
+</netui:html>
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <body>
+        <netui:anchor action="resetTrees">Reset Trees</netui:anchor>
+        <ul>
+        <li><netui:anchor action="goAttribute1">Attribute1</netui:anchor> -- Basic test of setting multiple attributes</li>
+        <li><netui:anchor action="goAttribute2">Attribute2</netui:anchor> -- Single descendent, overridden by multi</li>
+        <li><netui:anchor action="goAttribute3">Attribute3</netui:anchor> -- Multi descendent</li>
+        <li><netui:anchor action="goAttribute4">Attribute4</netui:anchor> -- Multi descendent, overridden by multi</li>
+        <li><netui:anchor action="goAttribute5">Attribute5</netui:anchor> -- Multi descendent, with overlapping attributes being set</li>
+        </ul>
+    </body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/style.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/tree/treeMultiAttr/style.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+body {
+    margin: 10pt 2%;
+    background-color:#e6e6f0;
+}
+
+.content {
+    background-color:#ffffff;
+    height: 350px;
+    padding: 4pt;
+}
+
+.homeAnchor {
+    text-decoration: none;
+    float:right;
+}
+
+.treeSelected {
+    color: #ff6600;
+    font-family: "new century schoolbook", serif ; 
+    font-weight: bold;
+    text-decoration: none;
+}
+
+.treeUnselected {
+    color: #993300;
+    font-family: "new century schoolbook", serif ; 
+    text-decoration: none;
+}
+
+.treeStyle {
+    border: solid 1pt #ff6600;
+    font-family: "new century schoolbook", serif ; 
+    font-size: 10pt;
+    color: #ff6600;
+    height: 175pt;
+    width: 200pt;
+}
+

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,138 @@
+package valFwdErr.test54;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources           resources="valFwdErr.test54.messages"
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "valFwdErr.test54.messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   public FormB _form1    = new FormB();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addOutputForm(_form1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    * @jpf:validation-error-forward name="failure" return-to="currentPage"
+    */
+    @Jpf.Action(
+        validationErrorForward=@Jpf.Forward(name="failure", navigateTo=Jpf.NavigateTo.currentPage),
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp"),
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action1(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      if (inForm.getString1().equalsIgnoreCase("exit") == true)
+         {
+         return new Forward("gotoPg3");
+         }
+      Forward fwd = new Forward("gotoPg2");
+      fwd.addOutputForm(new FormB());
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    * @jpf:validation-error-forward name="failure" return-to="previousPage"
+    */
+    @Jpf.Action(
+        validationErrorForward=@Jpf.Forward(name="failure", navigateTo=Jpf.NavigateTo.previousPage),
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action2(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean FormB
+    ***************************************************************************/
+   public static class FormB extends FormA
+      {
+      // validate method
+      //------------------------------------------------------------------------
+      public ActionErrors validate(ActionMapping mapping
+                                   ,HttpServletRequest request)
+         {
+         // Force validation errors.
+         //---------------------------------------------------------------------
+         System.out.println(">>> FormB:validate");
+         ActionErrors errors = new ActionErrors();
+         if ((getString1().equals(FormB.STR_VAL1) == true)
+             ||
+             (getString2().equals(FormB.STR_VAL2) == true))
+            {
+            errors.add("changeError", new ActionError("error.mustChange"));
+            }
+         return errors;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,52 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <netui:form action="action1">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               1) Please don't change any values and press Continue.
+                 <br/>
+                 You will get an error message that says you must change the
+                 values.
+               <br/><br/>
+               2) Change both values and press Continue.
+                <br/>
+                You will be taken to page Jsp2.jsp.
+               <br/><br/>
+               3) After page Jsp2.jsp you will come back to this page for a
+               third time.  When you do, enter "exit" in String 1 and just change
+               the value in String 2 ot any value then press Continue.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,42 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <netui:form action="action2">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Please don't change any values and press Continue.  You will be
+               taken back to page Jsp1.jsp.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test54/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,146 @@
+package valFwdErr.test56;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources           resources="valFwdErr.test56.messages"
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "valFwdErr.test56.messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   public FormB _form1    = new FormB();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addOutputForm(_form1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:validation-error-forward name="failure" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        )
+   protected Forward action1(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoError");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:validation-error-forward name="failure" path="action3.do"
+    */
+    @Jpf.Action(
+        )
+   protected Forward action2(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoError");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:validation-error-forward name="failure" path="action4.do"
+    */
+    @Jpf.Action(
+        )
+   protected Forward action3(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action3");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoError");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action4(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action4");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean FormB
+    ***************************************************************************/
+   public static class FormB extends FormA
+      {
+      // validate method
+      //------------------------------------------------------------------------
+      public ActionErrors validate(ActionMapping mapping
+                                   ,HttpServletRequest request)
+         {
+         // Force validation errors.
+         //---------------------------------------------------------------------
+         System.out.println(">>> FormB:validate");
+         ActionErrors errors = new ActionErrors();
+         if ((getString1().equals(FormB.STR_VAL1) == true)
+             ||
+             (getString2().equals(FormB.STR_VAL2) == true))
+            {
+            errors.add("changeError", new ActionError("error.mustChange"));
+            }
+         return errors;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test56</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test56 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <netui:form action="action1">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Don't change any values, just press Continue.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test56</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test56 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <netui:form action="action2">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Don't change any values, just press Continue.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+         <font color="red">
+            You should see errors below from page 1 validation.  If you don't
+            the test has failed.
+         </font>
+         <br/><br/>
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test56</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test56 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test56/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ValFwdErr Test56</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test56 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,121 @@
+package valFwdErr.test57;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources           resources="valFwdErr.test56.messages"
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "valFwdErr.test56.messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   public FormB _form1    = new FormB();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoSubJpf1" path="sub1/SubJpf1.jpf"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoSubJpf1",
+                path = "sub1/SubJpf1.jpf") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      return new Forward("gotoSubJpf1");
+      }
+
+   /**
+    * @jpf:action form="_form1"
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+   protected Forward action1(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addOutputForm(_form1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:validation-error-forward name="failure" path="action3.do"
+    */
+   protected Forward action2(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoDone");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:validation-error-forward name="failure" path="/resources/jsp/done.jsp"
+    */
+   protected Forward action3(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action3");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      return new Forward("gotoError");
+      }
+
+   /**
+    * @jpf:action
+    */
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean FormB
+    ***************************************************************************/
+   public static class FormB extends FormA
+      {
+      // validate method
+      //------------------------------------------------------------------------
+      public ActionErrors validate(ActionMapping mapping
+                                   ,HttpServletRequest request)
+         {
+         // Force validation errors.
+         //---------------------------------------------------------------------
+         System.out.println(">>> FormB:validate");
+         ActionErrors errors = new ActionErrors();
+         if ((getString1().equals(FormB.STR_VAL1) == true)
+             ||
+             (getString2().equals(FormB.STR_VAL2) == true))
+            {
+            errors.add("changeError", new ActionError("error.mustChange"));
+            }
+         return errors;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test57</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test57 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <netui:form action="action2">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Don't change any values, just press Finish.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Finish...</netui:button>
+         </netui:form>
+         <br/><br/>
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ValFwdErr Test57</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test57 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/sub1/SubJpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/sub1/SubJpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,67 @@
+package valFwdErr.test57.sub1;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import valFwdErr.test57.Jpf1;
+import valFwdErr.test57.Jpf1.FormB;
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:message-resources           resources="valFwdErr.test57.messages"
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    nested = true,
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "valFwdErr.test57.messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class SubJpf1 extends PageFlowController
+   {
+   public FormB _form1    = new FormB();
+
+   /**
+     * @jpf:action
+     * @jpf:forward name="gotoPg1" path="SubJsp1.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "SubJsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> SubJpf1.begin");
+      Forward fwd = new Forward("gotoPg1");
+      fwd.addOutputForm(_form1);
+      return fwd;
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="continue" return-action="action2"
+    * @jpf:validation-error-forward name="failure" return-action="action1"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "continue",
+                returnAction = "action2") 
+        })
+   protected Forward action1(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      return new Forward("gotoError");
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/sub1/SubJsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test57/sub1/SubJsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,41 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test56</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test57 - SubJsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <netui:form action="action1">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               Don't change any values, just press Continue.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jpf1.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jpf1.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,126 @@
+package valFwdErr.test58;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import shared.FormA;
+
+/**
+ * @jpf:controller
+ * @jpf:message-resources           resources="valFwdErr.test58.messages"
+ * @jpf:forward name="gotoError"    path="/resources/jsp/error.jsp"
+ * @jpf:forward name="gotoDone"     path="/resources/jsp/done.jsp"
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "valFwdErr.test58.messages") 
+    },
+    forwards = {
+        @Jpf.Forward(
+            name = "gotoError",
+            path = "/resources/jsp/error.jsp"),
+        @Jpf.Forward(
+            name = "gotoDone",
+            path = "/resources/jsp/done.jsp") 
+    })
+public class Jpf1 extends PageFlowController
+   {
+   public FormB _form1    = new FormB();
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg1" path="Jsp1.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg1",
+                path = "Jsp1.jsp") 
+        })
+   protected Forward begin()
+      {
+      System.out.println(">>> Jpf1.begin");
+      System.out.println("\t>>> _form1: " + _form1.toString());
+      return new Forward("gotoPg1");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg2" path="Jsp2.jsp"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg2",
+                path = "Jsp2.jsp") 
+        })
+   protected Forward action1(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action1");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      PageFlowUtils.addValidationError("addError", "error.addError", getRequest());
+      return new Forward("gotoPg2");
+      }
+
+   /**
+    * @jpf:action
+    * @jpf:forward name="gotoPg3" path="Jsp3.jsp"
+    * @jpf:validation-error-forward name="failure" return-to="currentPage"
+    */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "gotoPg3",
+                path = "Jsp3.jsp") 
+        })
+   protected Forward action2(FormB inForm)
+      {
+      System.out.println(">>> Jpf1.action2");
+      System.out.println("\t>>> inForm: " + inForm.toString());
+      PageFlowUtils.addValidationError("addError", "error.addError", getRequest());
+      return new Forward("gotoPg3");
+      }
+
+   /**
+    * @jpf:action
+    */
+    @Jpf.Action(
+        )
+   protected Forward finish()
+      {
+      System.out.println(">>> Jpf1.done");
+      return new Forward("gotoDone");
+      }
+
+   /****************************************************************************
+    * FormBean FormB
+    ***************************************************************************/
+   public static class FormB extends FormA
+      {
+      // validate method
+      //------------------------------------------------------------------------
+      public ActionErrors validate(ActionMapping mapping
+                                   ,HttpServletRequest request)
+         {
+         // Force validation errors.
+         //---------------------------------------------------------------------
+         System.out.println(">>> FormB:validate");
+         ActionErrors errors = new ActionErrors();
+         if ((getString1().equals(FormB.STR_VAL1) == true)
+             ||
+             (getString2().equals(FormB.STR_VAL2) == true))
+            {
+            errors.add("changeError", new ActionError("error.mustChange"));
+            }
+         return errors;
+         }
+      }
+   }

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp1.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test58</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test58 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <br/>
+            <netui:anchor action="action1">Continue...</netui:anchor>
+        </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp2.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,49 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test58</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test58 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing addValidationError Method
+         </font></h3>
+         <br/>
+         <netui:form action="action2">
+            String 1:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string1"/>
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <netui:textBox dataSource="actionForm.string2"/>
+            </font>
+            <br/><br/>
+            <font color="green">
+               The first time you visit this page you should see an error
+               message below repeated twice. Don't change any of the values just
+               press Continue.  You will come back to this page with a different
+               error message. If this does not happen the test has failed. To
+               end the test just change both of the values above and press
+               Continue and you will go to the finish page.
+            </font>
+            <br/><br/>
+            <netui:button type="submit">Continue...</netui:button>
+         </netui:form>
+         <br/><br/>
+         <netui:error value="changeError"/>
+         <netui:error value="addError"/>
+         <br/><br/>
+         <netui:errors/>
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/Jsp3.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld"        prefix="netui" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data" %>
+
+<html>
+   <head>
+      <title>ValFwdErr Test58</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test58 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <br/>
+            <netui:anchor action="finish">Finish...</netui:anchor>
+        </center>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/StartTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/valFwdErr/test58/StartTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<html>
+   <head>
+      <title>ValFwdErr Test58</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test58 - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/basicValidationController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/basicValidationController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,263 @@
+package validation.basicValidation;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.*;
+import javax.servlet.http.*;
+
+
+/**
+ * @jpf:controller nested="true"
+ * @jpf:message-resources resources="validation.basic.Messages"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/validation/basicValidation/basicValidationController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:submitForm.do#validation.basicValidation.basicValidationController.Form">
+ *   <property value="280" name="x"/>
+ *   <property value="400" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:exit.do">
+ *   <property value="280" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:formPage.jsp@#@action:exit.do@">
+ *   <property value="280,280,280,280" name="elbowsX"/>
+ *   <property value="196,160,160,124" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:formPage.jsp@#@action:submitForm.do#validation.basicValidation.basicValidationController.Form@">
+ *   <property value="280,280,280,280" name="elbowsX"/>
+ *   <property value="284,320,320,356" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:formPage.jsp">
+ *   <property value="280" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#formPage#formPage.jsp#@action:begin.do@">
+ *   <property value="116,180,180,244" name="elbowsX"/>
+ *   <property value="232,232,232,232" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="formPage" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#success.jsp#@action:submitForm.do#validation.basicValidation.basicValidationController.Form@">
+ *   <property value="244,180,180,116" name="elbowsX"/>
+ *   <property value="392,392,392,392" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:begin">
+ *   <property value="480" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#previousPageFlowBegin#begin#@action:exit.do@">
+ *   <property value="316,380,380,444" name="elbowsX"/>
+ *   <property value="72,72,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="previousPageFlowBegin" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:validation.basicValidation.basicValidationController.Form#email#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:validation.basicValidation.basicValidationController.Form#zipCode#java.lang.String"/>
+ * <pageflow-object id="formbean:validation.basicValidation.basicValidationController.Form"/>
+ * <pageflow-object id="page:success.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="400" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:success.jsp@#@action:begin.do@">
+ *   <property value="80,80,80,80" name="elbowsX"/>
+ *   <property value="356,320,320,284" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ * 
+ */
+@Jpf.Controller(
+    nested = true,
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "validation.basic.Messages") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/validation/basicValidation/basicValidationController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submitForm.do#validation.basicValidation.basicValidationController.Form'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:exit.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:formPage.jsp@#@action:exit.do@'>",
+        "  <property value='280,280,280,280' name='elbowsX'/>",
+        "  <property value='196,160,160,124' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:formPage.jsp@#@action:submitForm.do#validation.basicValidation.basicValidationController.Form@'>",
+        "  <property value='280,280,280,280' name='elbowsX'/>",
+        "  <property value='284,320,320,356' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:formPage.jsp'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#formPage#formPage.jsp#@action:begin.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='232,232,232,232' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='formPage' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#success.jsp#@action:submitForm.do#validation.basicValidation.basicValidationController.Form@'>",
+        "  <property value='244,180,180,116' name='elbowsX'/>",
+        "  <property value='392,392,392,392' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:begin'>",
+        "  <property value='480' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#previousPageFlowBegin#begin#@action:exit.do@'>",
+        "  <property value='316,380,380,444' name='elbowsX'/>",
+        "  <property value='72,72,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='previousPageFlowBegin' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:validation.basicValidation.basicValidationController.Form#email#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:validation.basicValidation.basicValidationController.Form#zipCode#java.lang.String'/>",
+        "<pageflow-object id='formbean:validation.basicValidation.basicValidationController.Form'/>",
+        "<pageflow-object id='page:success.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:success.jsp@#@action:begin.do@'>",
+        "  <property value='80,80,80,80' name='elbowsX'/>",
+        "  <property value='356,320,320,284' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class basicValidationController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="formPage" path="formPage.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "formPage",
+                path = "formPage.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "formPage" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="success.jsp"
+     * @jpf:validation-error-forward name="failure" return-to="currentPage"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "success.jsp") 
+        },
+        validationErrorForward=@Jpf.Forward(name="failure", navigateTo=Jpf.NavigateTo.currentPage))
+    public Forward submitForm( Form form )
+    {
+        return new Forward( "success" );
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="previousPageFlowBegin" return-action="begin"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "previousPageFlowBegin",
+                returnAction = "begin") 
+        })
+    public Forward exit()
+    {
+        return new Forward( "previousPageFlowBegin" );
+    }
+
+    /**
+     * This form bean does validation manually.
+     */
+    public static class Form extends FormData
+    {
+        private String _email;
+        private String _zipCode;
+
+        public String getEmail()
+        {
+            return _email;
+        }
+
+        public void setEmail( String email )
+        {
+            _email = email;
+        }
+
+        public String getZipCode()
+        {
+            return _zipCode;
+        }
+
+        public void setZipCode( String zipCode )
+        {
+            _zipCode = zipCode;
+        }
+
+        public ActionErrors validate( ActionMapping mapping, HttpServletRequest request )
+        {
+            ActionErrors errs = new ActionErrors();
+
+            int at = _email.indexOf( '@' );
+            int dot = _email.lastIndexOf( '.' );
+
+            if ( at == -1 || at == 0 || dot == -1 || at > dot )
+            {
+                errs.add( "email", new ActionError( "badEmail" ) );
+            }
+
+            if ( _zipCode.length() != 5 )
+            {
+                errs.add( "zipCode", new ActionError( "badZip", new Integer( 5 ) ) );
+            }
+
+            return errs;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/formPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/formPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<netui:form action="submitForm">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <netui:textBox dataSource="actionForm.email"/>
+            </td>
+            <td>
+            <netui:error value="email"/>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                zipcode:
+            </td>
+            <td>
+            <netui:textBox dataSource="actionForm.zipCode"/>
+            </td>
+            <td>
+            <netui:error value="zipCode"/>
+            </td>
+        </tr>
+    </table>
+
+    <netui:button>submit</netui:button>
+    <netui:button action="exit">exit</netui:button>
+</netui:form>
+
+<netui:errors/>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/success.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/validation/basicValidation/success.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+    <head>
+        <title>
+            Success
+        </title>
+    </head>
+    <body>
+        <p>
+            Success!  Validation passed.
+            <br>
+            <netui:anchor action="begin">go back</netui:anchor>
+        </p>
+    </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/validation/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/validation/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<html>
+<head>
+<title>NetUI Validation Tests</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Tests</h3>
+
+<netui:anchor action="doBasic">basic form validation</netui:anchor>
+<br>
+<netui:anchor action="doValidator">form validation using Struts ValidatorPlugIn</netui:anchor>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/formPage.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/formPage.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,48 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<netui:form action="submitForm">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <netui:textBox dataSource="actionForm.email"/>
+            </td>
+            <td>
+            <netui:error value="email"/>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                age:
+            </td>
+            <td>
+            <netui:textBox dataSource="actionForm.age"/>
+            </td>
+            <td>
+            <netui:error value="age"/>
+            </td>
+        </tr>
+    </table>
+
+    <netui:button>submit</netui:button>
+    <netui:button action="exit">exit</netui:button>
+</netui:form>
+
+<netui:errors/>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/strutsValidatorController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/strutsValidatorController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,245 @@
+package validation.strutsValidator;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.*;
+import javax.servlet.http.*;
+
+
+/**
+ * @jpf:controller nested="true" struts-merge="/WEB-INF/strutsValidator-merge-config.xml"
+ * @jpf:message-resources resources="validation.validator.Messages"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/validation/strutsValidator/strutsValidatorController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:submitForm.do#validation.strutsValidator.strutsValidatorController.MyForm">
+ *   <property value="280" name="x"/>
+ *   <property value="400" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:exit.do">
+ *   <property value="280" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:formPage.jsp@#@action:submitForm.do#validation.strutsValidator.strutsValidatorController.MyForm@">
+ *   <property value="280,280,280,280" name="elbowsX"/>
+ *   <property value="284,320,320,356" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:formPage.jsp@#@action:exit.do@">
+ *   <property value="280,280,280,280" name="elbowsX"/>
+ *   <property value="196,160,160,124" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:formPage.jsp">
+ *   <property value="280" name="x"/>
+ *   <property value="240" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:success.jsp@#@action:begin.do@">
+ *   <property value="80,80,80,80" name="elbowsX"/>
+ *   <property value="356,320,320,284" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:success.jsp">
+ *   <property value="80" name="x"/>
+ *   <property value="400" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#formPage#formPage.jsp#@action:begin.do@">
+ *   <property value="116,180,180,244" name="elbowsX"/>
+ *   <property value="232,232,232,232" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="formPage" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#success.jsp#@action:submitForm.do#validation.strutsValidator.strutsValidatorController.MyForm@">
+ *   <property value="244,180,180,116" name="elbowsX"/>
+ *   <property value="392,392,392,392" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="exit:begin">
+ *   <property value="480" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:return-action#previousPageFlowBegin#begin#@action:exit.do@">
+ *   <property value="316,380,380,444" name="elbowsX"/>
+ *   <property value="72,72,72,72" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="previousPageFlowBegin" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="formbeanprop:validation.strutsValidator.strutsValidatorController.MyForm#email#java.lang.String"/>
+ * <pageflow-object id="formbeanprop:validation.strutsValidator.strutsValidatorController.MyForm#age#java.lang.String"/>
+ * <pageflow-object id="formbean:validation.strutsValidator.strutsValidatorController.MyForm"/>
+ * </view-properties>
+ * ::
+ * 
+ */
+@Jpf.Controller(
+    nested = true,
+    strutsMerge = "/WEB-INF/strutsValidator-merge-config.xml",
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "validation.validator.Messages") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/validation/strutsValidator/strutsValidatorController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:submitForm.do#validation.strutsValidator.strutsValidatorController.MyForm'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:exit.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:formPage.jsp@#@action:submitForm.do#validation.strutsValidator.strutsValidatorController.MyForm@'>",
+        "  <property value='280,280,280,280' name='elbowsX'/>",
+        "  <property value='284,320,320,356' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:formPage.jsp@#@action:exit.do@'>",
+        "  <property value='280,280,280,280' name='elbowsX'/>",
+        "  <property value='196,160,160,124' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:formPage.jsp'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='240' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:success.jsp@#@action:begin.do@'>",
+        "  <property value='80,80,80,80' name='elbowsX'/>",
+        "  <property value='356,320,320,284' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:success.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#formPage#formPage.jsp#@action:begin.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='232,232,232,232' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='formPage' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#success.jsp#@action:submitForm.do#validation.strutsValidator.strutsValidatorController.MyForm@'>",
+        "  <property value='244,180,180,116' name='elbowsX'/>",
+        "  <property value='392,392,392,392' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='exit:begin'>",
+        "  <property value='480' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:return-action#previousPageFlowBegin#begin#@action:exit.do@'>",
+        "  <property value='316,380,380,444' name='elbowsX'/>",
+        "  <property value='72,72,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='previousPageFlowBegin' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='formbeanprop:validation.strutsValidator.strutsValidatorController.MyForm#email#java.lang.String'/>",
+        "<pageflow-object id='formbeanprop:validation.strutsValidator.strutsValidatorController.MyForm#age#java.lang.String'/>",
+        "<pageflow-object id='formbean:validation.strutsValidator.strutsValidatorController.MyForm'/>",
+        "</view-properties>"
+    })
+public class strutsValidatorController extends PageFlowController
+{ 
+    /** 
+     * @jpf:action
+     * @jpf:forward name="formPage" path="formPage.jsp" 
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "formPage",
+                path = "formPage.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "formPage" );
+    }
+
+    /**
+     * @jpf:action validation-error-page="formPage.jsp"
+     * @jpf:forward name="success" path="success.jsp"
+     */
+    @Jpf.Action(
+        validationErrorForward = @Jpf.Forward(
+            name="validationFailure",
+            path="formPage.jsp"),
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "success.jsp") 
+        })
+    public Forward submitForm( MyForm form ) 
+    {
+        return new Forward( "success" );
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="previousPageFlowBegin" return-action="begin"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "previousPageFlowBegin",
+                returnAction = "begin") 
+        })
+    public Forward exit()
+    {
+        return new Forward( "previousPageFlowBegin" );
+    }
+
+    /**
+     * This form bean uses the ValidatorPlugIn (rules are in /WEB-INF/strutsValidator-validation.xml).
+     */
+    public static class MyForm extends org.apache.struts.validator.ValidatorForm
+    {
+        private String _email;
+        private String _age;
+
+        public String getEmail()
+        {
+            return _email;
+        }
+
+        public void setEmail( String email )
+        {
+            _email = email;
+        }
+
+        public String getAge()
+        {
+            return _age;
+        }
+
+        public void setAge( String age )
+        {
+            _age = age;
+        }
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/success.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/validation/strutsValidator/success.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui" %>
+
+
+<html>
+<head>
+<title>Success</title>
+</head>
+<body bgcolor="white">
+
+<h3>Success</h3>
+
+All fields passed form validation.
+<br>
+<br>
+
+<netui:anchor action="begin">back</netui:anchor>
+
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/validation/validationController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/validation/validationController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,235 @@
+package validation;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.struts.action.*;
+import javax.servlet.http.*;
+
+
+/**
+ * @jpf:message-resources resources="validation.ValidationMessages"
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="pageflow:/validation/validationController.jpf"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:doBasic.do">
+ *   <property value="420" name="x"/>
+ *   <property value="400" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:doValidator.do">
+ *   <property value="420" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:doBasic.do@">
+ *   <property value="420,420,420,420" name="elbowsX"/>
+ *   <property value="344,350,350,356" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:doValidator.do@">
+ *   <property value="420,420,420,420" name="elbowsX"/>
+ *   <property value="256,250,250,244" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.jsp">
+ *   <property value="420" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:basicValidation/basicValidationController.jpf@#@action:begin.do@">
+ *   <property value="384,250,250,116" name="elbowsX"/>
+ *   <property value="512,512,303,303" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_2" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:basicValidation/basicValidationController.jpf">
+ *   <property value="420" name="x"/>
+ *   <property value="520" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@external-jpf:strutsValidator/strutsValidatorController.jpf@#@action:begin.do@">
+ *   <property value="384,250,250,116" name="elbowsX"/>
+ *   <property value="72,72,281,281" name="elbowsY"/>
+ *   <property value="West_1" name="fromPort"/>
+ *   <property value="East_0" name="toPort"/>
+ * </pageflow-object>
+ * <pageflow-object id="external-jpf:strutsValidator/strutsValidatorController.jpf">
+ *   <property value="420" name="x"/>
+ *   <property value="80" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *   <property value="116,250,250,384" name="elbowsX"/>
+ *   <property value="292,292,292,292" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#basicValidationPageFlow#basicValidation/basicValidationController.jpf#@action:doBasic.do@">
+ *   <property value="420,420,420,420" name="elbowsX"/>
+ *   <property value="444,460,460,476" name="elbowsY"/>
+ *   <property value="South_1" name="fromPort"/>
+ *   <property value="North_1" name="toPort"/>
+ *   <property value="basicValidationPageFlow" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#validatorPageFlow#strutsValidator/strutsValidatorController.jpf#@action:doValidator.do@">
+ *   <property value="420,420,420,420" name="elbowsX"/>
+ *   <property value="156,140,140,124" name="elbowsY"/>
+ *   <property value="North_1" name="fromPort"/>
+ *   <property value="South_1" name="toPort"/>
+ *   <property value="validatorPageFlow" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goMain.do">
+ *   <property value="620" name="x"/>
+ *   <property value="300" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="action-call:@page:index.jsp@#@action:goMain.do@">
+ *   <property value="456,520,520,585" name="elbowsX"/>
+ *   <property value="292,292,292,292" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ * 
+ */
+@Jpf.Controller(
+    messageResources = {
+        @Jpf.MessageResource(
+            name = "validation.ValidationMessages") 
+    })
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='pageflow:/validation/validationController.jpf'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:doBasic.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:doValidator.do'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:doBasic.do@'>",
+        "  <property value='420,420,420,420' name='elbowsX'/>",
+        "  <property value='344,350,350,356' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:doValidator.do@'>",
+        "  <property value='420,420,420,420' name='elbowsX'/>",
+        "  <property value='256,250,250,244' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:basicValidation/basicValidationController.jpf@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='512,512,303,303' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:basicValidation/basicValidationController.jpf'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='520' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@external-jpf:strutsValidator/strutsValidatorController.jpf@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='72,72,281,281' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='external-jpf:strutsValidator/strutsValidatorController.jpf'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='116,250,250,384' name='elbowsX'/>",
+        "  <property value='292,292,292,292' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#basicValidationPageFlow#basicValidation/basicValidationController.jpf#@action:doBasic.do@'>",
+        "  <property value='420,420,420,420' name='elbowsX'/>",
+        "  <property value='444,460,460,476' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='basicValidationPageFlow' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#validatorPageFlow#strutsValidator/strutsValidatorController.jpf#@action:doValidator.do@'>",
+        "  <property value='420,420,420,420' name='elbowsX'/>",
+        "  <property value='156,140,140,124' name='elbowsY'/>",
+        "  <property value='North_1' name='fromPort'/>",
+        "  <property value='South_1' name='toPort'/>",
+        "  <property value='validatorPageFlow' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goMain.do'>",
+        "  <property value='620' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goMain.do@'>",
+        "  <property value='456,520,520,585' name='elbowsX'/>",
+        "  <property value='292,292,292,292' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class validationController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    public Forward begin()
+    {
+        return new Forward( "index" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="basicValidationPageFlow" path="basicValidation/basicValidationController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "basicValidationPageFlow",
+                path = "basicValidation/basicValidationController.jpf") 
+        })
+    public Forward doBasic() 
+    {
+        return new Forward( "basicValidationPageFlow" );
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="validatorPageFlow" path="strutsValidator/strutsValidatorController.jpf"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "validatorPageFlow",
+                path = "strutsValidator/strutsValidatorController.jpf") 
+        })
+    public Forward doValidator() 
+    {
+        return new Forward( "validatorPageFlow" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,986 @@
+package xhtml;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+import java.util.HashMap;
+
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='formbean:Options'/>",
+        "<pageflow-object id='formbean:CheckboxTests'/>",
+        "<pageflow-object id='formbean:RadioTests'/>",
+        "<pageflow-object id='formbean:SelectTests'/>",
+        "<pageflow-object id='formbean:FormLabelTests'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+        "  <property value='80,80,80,80' name='elbowsX'/>",
+        "  <property value='104,104,96,96' name='elbowsY'/>",
+        "  <property value='South_1' name='fromPort'/>",
+        "  <property value='North_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goAnchorTarget.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#anchorTargets.jsp#@action:goAnchorTarget.do@'>",
+        "  <property value='576,590,590,604' name='elbowsX'/>",
+        "  <property value='52,52,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goAnchorTest.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='60' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#anchorTest.jsp#@action:goAnchorTest.do@'>",
+        "  <property value='316,350,350,384' name='elbowsX'/>",
+        "  <property value='52,52,72,72' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goCheckboxTest.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#checkboxTest.jsp#@action:goCheckboxTest.do@'>",
+        "  <property value='316,350,350,384' name='elbowsX'/>",
+        "  <property value='132,132,152,152' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postCheckForm.do#xhtml.Controller.CheckboxTests'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#checkboxResults.jsp#@action:postCheckForm.do#xhtml.Controller.CheckboxTests@'>",
+        "  <property value='576,590,590,604' name='elbowsX'/>",
+        "  <property value='132,132,152,152' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postCheckFormTwo.do#xhtml.Controller.CheckboxTests'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#checkboxResults.jsp#@action:postCheckFormTwo.do#xhtml.Controller.CheckboxTests@'>",
+        "  <property value='576,590,590,604' name='elbowsX'/>",
+        "  <property value='192,192,163,163' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_2' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postFormLabelResults.do#xhtml.Controller.FormLabelTests'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#formLabelResults.jsp#@action:postFormLabelResults.do#xhtml.Controller.FormLabelTests@'>",
+        "  <property value='576,610,610,644' name='elbowsX'/>",
+        "  <property value='563,563,541,541' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_0' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goRadioTest.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='220' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#radioTest.jsp#@action:goRadioTest.do@'>",
+        "  <property value='316,350,350,384' name='elbowsX'/>",
+        "  <property value='212,212,252,252' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postRadioForm.do#xhtml.Controller.RadioTests'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#radioResults.jsp#@action:postRadioForm.do#xhtml.Controller.RadioTests@'>",
+        "  <property value='576,590,590,604' name='elbowsX'/>",
+        "  <property value='272,272,292,292' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goSelectTest.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='320' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#selectTest.jsp#@action:goSelectTest.do@'>",
+        "  <property value='316,350,350,384' name='elbowsX'/>",
+        "  <property value='312,312,352,352' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postSelectForm.do#xhtml.Controller.SelectTests'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#selectResults.jsp#@action:postSelectForm.do#xhtml.Controller.SelectTests@'>",
+        "  <property value='576,590,590,604' name='elbowsX'/>",
+        "  <property value='352,352,372,372' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goImageTest.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='400' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#imageTest.jsp#@action:goImageTest.do@'>",
+        "  <property value='316,350,350,384' name='elbowsX'/>",
+        "  <property value='392,392,432,432' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:postImageForm.do'>",
+        "  <property value='540' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#imageResults.jsp#@action:postImageForm.do@'>",
+        "  <property value='576,590,590,604' name='elbowsX'/>",
+        "  <property value='432,432,432,432' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goLabelTest.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='500' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#labelTest.jsp#@action:goLabelTest.do@'>",
+        "  <property value='316,350,350,384' name='elbowsX'/>",
+        "  <property value='492,492,492,492' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goFormLabelTest.do'>",
+        "  <property value='280' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#formLabelTest.jsp#@action:goFormLabelTest.do@'>",
+        "  <property value='316,350,350,384' name='elbowsX'/>",
+        "  <property value='552,552,552,552' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.jsp'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='140' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:anchorTargets.jsp'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:anchorTest.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='80' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:checkboxTest.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:checkboxResults.jsp'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='160' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:formLabelResults.jsp'>",
+        "  <property value='680' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:radioTest.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='260' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:radioResults.jsp'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='300' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:selectTest.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:selectResults.jsp'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='380' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:imageTest.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:imageResults.jsp'>",
+        "  <property value='640' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:labelTest.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='500' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:formLabelTest.jsp'>",
+        "  <property value='420' name='x'/>",
+        "  <property value='560' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:anchorTest.jsp@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='72,72,41,41' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goRadioTest.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='143,143,212,212' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goSelectTest.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='121,121,312,312' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:selectResults.jsp@#@action:goSelectTest.do@'>",
+        "  <property value='604,460,460,316' name='elbowsX'/>",
+        "  <property value='372,372,301,301' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:radioResults.jsp@#@action:goRadioTest.do@'>",
+        "  <property value='604,460,460,316' name='elbowsX'/>",
+        "  <property value='292,292,223,223' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:selectTest.jsp@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='341,341,63,63' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goLabelTest.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='143,143,492,492' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:imageTest.jsp@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='421,421,63,63' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:formLabelResults.jsp@#@action:goFormLabelTest.do@'>",
+        "  <property value='644,480,480,316' name='elbowsX'/>",
+        "  <property value='552,552,552,552' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:anchorTargets.jsp@#@action:goAnchorTest.do@'>",
+        "  <property value='604,460,460,316' name='elbowsX'/>",
+        "  <property value='72,72,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:radioTest.jsp@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='252,252,52,52' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:imageResults.jsp@#@action:goImageTest.do@'>",
+        "  <property value='599,457,457,316' name='elbowsX'/>",
+        "  <property value='428,428,392,392' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goAnchorTest.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='132,132,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:formLabelTest.jsp@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='552,552,63,63' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:anchorTest.jsp@#@action:goAnchorTarget.do@'>",
+        "  <property value='456,480,480,504' name='elbowsX'/>",
+        "  <property value='72,72,52,52' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:checkboxResults.jsp@#@action:goCheckboxTest.do@'>",
+        "  <property value='604,460,460,316' name='elbowsX'/>",
+        "  <property value='152,152,121,121' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goImageTest.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='143,143,392,392' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goCheckboxTest.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='143,143,132,132' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:index.jsp@#@action:goFormLabelTest.do@'>",
+        "  <property value='116,180,180,244' name='elbowsX'/>",
+        "  <property value='143,143,552,552' name='elbowsY'/>",
+        "  <property value='East_2' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:checkboxTest.jsp@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='141,141,41,41' name='elbowsY'/>",
+        "  <property value='West_0' name='fromPort'/>",
+        "  <property value='East_0' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:imageTest.jsp@#@action:postImageForm.do@'>",
+        "  <property value='456,480,480,504' name='elbowsX'/>",
+        "  <property value='432,432,432,432' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:labelTest.jsp@#@action:begin.do@'>",
+        "  <property value='384,250,250,116' name='elbowsX'/>",
+        "  <property value='492,492,63,63' name='elbowsY'/>",
+        "  <property value='West_1' name='fromPort'/>",
+        "  <property value='East_2' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:formLabelTest.jsp@#@action:postFormLabelResults.do#xhtml.Controller.FormLabelTests@'>",
+        "  <property value='456,480,480,504' name='elbowsX'/>",
+        "  <property value='552,552,552,552' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:checkboxTest.jsp@#@action:postCheckFormTwo.do#xhtml.Controller.CheckboxTests@'>",
+        "  <property value='456,480,480,504' name='elbowsX'/>",
+        "  <property value='152,152,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:checkboxTest.jsp@#@action:postCheckForm.do#xhtml.Controller.CheckboxTests@'>",
+        "  <property value='456,480,480,504' name='elbowsX'/>",
+        "  <property value='141,141,132,132' name='elbowsY'/>",
+        "  <property value='East_0' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:radioTest.jsp@#@action:postRadioForm.do#xhtml.Controller.RadioTests@'>",
+        "  <property value='456,480,480,504' name='elbowsX'/>",
+        "  <property value='252,252,272,272' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action-call:@page:selectTest.jsp@#@action:postSelectForm.do#xhtml.Controller.SelectTests@'>",
+        "  <property value='456,480,480,504' name='elbowsX'/>",
+        "  <property value='352,352,352,352' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    // checkbox tests
+    private String[] checkBoxOptions = {"CBG Option 1", "CBG Option 2", "CBG Option 3"};    
+    private String[] checkBoxMapOptions = {"Map Option 1", "Map Option 2"};
+    
+    // radiobutton tests
+    private String[] radioButtonOptions = {"RB Option 1","RB Option 2", "RB Option 3"};
+    private String[] radioButtonMapOptions = {"RB Map 1", "RB Map 2"};
+    
+    // select tests
+    private String[] selectOptions = {"Select Option 1", "Select Option 2", "Select Option 3"};
+    private String[] selectMapOptions = {"Sel Opt 1", "Sel Opt 2"};
+    private String[] nullSelectOptions = {"Null Opt 1", "Null Opt 2", "Null Opt 3"};
+    private String selectDefault = "Default Opt";
+        
+    private Options[] opts;
+    private String labelOne = "Label One";
+
+    public String[] getCheckBoxOptions() {return checkBoxOptions;}
+    public String[] getCheckBoxMapOptions() {return checkBoxMapOptions;}
+    public String[] getRadioButtonOptions() {return radioButtonOptions;}
+    public String[] getRadioButtonMapOptions() {return radioButtonMapOptions;}
+    public String[] getSelectOptions() {return selectOptions;}
+    public String[] getSelectMapOptions() {return selectMapOptions;}
+    public String[] getNullSelectOptions() {return nullSelectOptions;}
+    public String getSelectDefault() {return selectDefault;}
+    public Options[] getOpts() {return opts;}
+    public String getLabelOne() {return labelOne;}
+    
+    protected void onCreate()
+    {
+        // version that is used by all the options
+        
+        // initialize the opts
+        opts = new Options[3];
+        opts[0] = new Options("Option One","opt-1", "normal");
+        opts[1] = new Options("Option Two","opt-2", "normal2");
+        opts[2] = new Options("Option Three","opt-3", "normal3");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.jsp") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+
+      
+      
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="anchorTargets.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "anchorTargets.jsp") 
+        })
+    protected Forward goAnchorTarget()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="anchorTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "anchorTest.jsp") 
+        })
+    protected Forward goAnchorTest()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="checkboxTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "checkboxTest.jsp") 
+        })
+    protected Forward goCheckboxTest()
+    {
+        return new Forward("success");
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="checkboxResults.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "checkboxResults.jsp") 
+        })
+    protected Forward postCheckForm(CheckboxTests form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("formData",form);
+        f.addPageInput("action","postFormOne");
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="checkboxResults.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "checkboxResults.jsp") 
+        })
+    protected Forward postCheckFormTwo(CheckboxTests form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("formData",form);
+        f.addPageInput("action","postFormTwo");
+        return f;
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward path="formLabelResults.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "formLabelResults.jsp",
+                name = "success") 
+        })
+    protected Forward postFormLabelResults(FormLabelTests form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("formData",form);        
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="radioTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "radioTest.jsp") 
+        })
+    protected Forward goRadioTest()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="radioResults.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "radioResults.jsp") 
+        })
+    protected Forward postRadioForm(xhtml.Controller.RadioTests form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("formData",form);
+        f.addPageInput("action","postFormOne");
+        return f;
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="selectTest.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "selectTest.jsp") 
+        })
+    protected Forward goSelectTest()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="selectResults.jsp"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "selectResults.jsp") 
+        })
+    protected Forward postSelectForm(xhtml.Controller.SelectTests form)
+    {
+        Forward f = new Forward("success");
+        f.addPageInput("formData",form);
+        f.addPageInput("action","postFormOne");
+        return f;
+    }
+    
+    public static class Options implements java.io.Serializable {
+        private String _name;
+        private String _optionValue;
+        private String _style;
+        
+        public Options(String name, String value, String style) {
+            _name = name;
+            _optionValue = value;
+            _style = style;
+        }
+        
+        public void setName(String name) {
+            _name = name;
+        }
+        public String getName() {
+            return _name;
+        }
+
+        public void setOptionValue(String optionValue) {
+            _optionValue = optionValue;
+        }
+        public String getOptionValue() {
+            return _optionValue;
+        }
+        
+        public void setStyle(String style) {
+            _style = style;
+        }
+        public String getStyle() {
+            return _style;
+        }
+    }
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class CheckboxTests extends FormData
+    {
+        private String[] optCbgMap = {"opt-1"};
+
+        private String[] optCbg = {"CBG Option 2"};
+
+        private String[] cbg = {"CheckBox Option 2"};
+
+        private boolean check2 = true;      // force a checked
+
+        private boolean check1;
+
+        public void setCheck1(boolean check1)
+        {
+            this.check1 = check1;
+        }
+
+        public boolean isCheck1()
+        {
+            return this.check1;
+        }
+
+        public void setCheck2(boolean check2)
+        {
+            this.check2 = check2;
+        }
+
+        public boolean isCheck2()
+        {
+            return this.check2;
+        }
+
+        public void setCbg(java.lang.String[] cbg)
+        {
+            this.cbg = cbg;
+        }
+
+        public String[] getCbg()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.cbg == null || this.cbg.length == 0)
+            {
+                this.cbg = new String[1];
+            }
+
+            return this.cbg;
+        }
+
+        public void setOptCbg(java.lang.String[] optCbg)
+        {
+            this.optCbg = optCbg;
+        }
+
+        public String[] getOptCbg()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.optCbg == null || this.optCbg.length == 0)
+            {
+                this.optCbg = new String[1];
+            }
+
+            return this.optCbg;
+        }
+
+        public void setOptCbgMap(java.lang.String[] optCbgMap)
+        {
+            this.optCbgMap = optCbgMap;
+        }
+
+        public String[] getOptCbgMap()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.optCbgMap == null || this.optCbgMap.length == 0)
+            {
+                this.optCbgMap = new String[1];
+            }
+
+            return this.optCbgMap;
+        }
+    }
+
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class RadioTests extends FormData
+    {
+        private String rbgOptsMap = "RB Map 2";
+
+        private String rbgOpts = "RB Option 3";
+
+        private String rbg = "Radio Opt 1";
+        
+        private String rbgComplex = "opt-13";
+
+        public void setRbg(String rbg)
+        {
+            this.rbg = rbg;
+        }
+
+        public String getRbg()
+        {
+            return rbg;
+        }
+
+        public void setRbgOpts(String rbgOpts)
+        {
+            this.rbgOpts = rbgOpts;
+        }
+
+        public String getRbgOpts()
+        {
+            return rbgOpts;
+        }
+
+        public void setRbgOptsMap(java.lang.String rbgOptsMap)
+        {
+            this.rbgOptsMap = rbgOptsMap;
+        }
+
+        public String getRbgOptsMap()
+        {
+            return this.rbgOptsMap;
+        }
+        
+        public void setRbgComplex(java.lang.String rbgComplex)
+        {
+            this.rbgComplex = rbgComplex;
+        }
+
+        public String getRbgComplex()
+        {
+            return this.rbgComplex;
+        }
+    }
+
+      
+
+    /**
+     * FormData get and set methods may be overwritten by the Form Bean editor.
+     */
+    public static class SelectTests extends FormData
+    {
+        private String[] nullable = {"Form Opt 1", "Form Opt 2"};
+
+        private String selOpts;
+
+        private String[] multiSel;
+
+        private String sel;
+
+        public void setSel(java.lang.String sel)
+        {
+            this.sel = sel;
+        }
+
+        public String getSel()
+        {
+            return this.sel;
+        }
+
+        public void setMultiSel(java.lang.String[] multiSel)
+        {
+            this.multiSel = multiSel;
+        }
+
+        public String[] getMultiSel()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.multiSel == null || this.multiSel.length == 0)
+            {
+                this.multiSel = new String[1];
+            }
+
+            return this.multiSel;
+        }
+
+        public void setSelOpts(java.lang.String selOpts)
+        {
+            this.selOpts = selOpts;
+        }
+
+        public String getSelOpts()
+        {
+            return this.selOpts;
+        }
+
+        public void setNullable(java.lang.String[] nullable)
+        {
+            this.nullable = nullable;
+        }
+
+        public String[] getNullable()
+        {
+            // For data binding to be able to post data back, complex types and
+            // arrays must be initialized to be non-null.
+            if(this.nullable == null || this.nullable.length == 0)
+            {
+                this.nullable = new String[1];
+            }
+
+            return this.nullable;
+        }
+    }
+      
+      
+    /**
+     * @jpf:action
+     * @jpf:forward path="imageTest.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "imageTest.jsp",
+                name = "success") 
+        })
+    protected Forward goImageTest()
+    {
+        return new Forward("success");
+    }
+
+      
+    /**
+     * @jpf:action
+     * @jpf:forward path="imageResults.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "imageResults.jsp",
+                name = "success") 
+        })
+    protected Forward postImageForm()
+    {
+        return new Forward("success");
+    }
+
+      
+    /**
+     * @jpf:action
+     * @jpf:forward path="labelTest.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "labelTest.jsp",
+                name = "success") 
+        })
+    protected Forward goLabelTest()
+    {
+        return new Forward("success");
+    }
+
+      
+    /**
+     * @jpf:action
+     * @jpf:forward path="formLabelTest.jsp" name="success"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                path = "formLabelTest.jsp",
+                name = "success") 
+        })
+    protected Forward goFormLabelTest()
+    {
+        return new Forward("success");
+    }
+
+      
+
+    public static class FormLabelTests extends org.apache.beehive.netui.pageflow.FormData
+    {
+        private String valueThree;
+
+        private String valueTwo;
+
+        private String valueOne;
+
+        public String getValueOne()
+                {
+            return this.valueOne;
+            }
+
+
+        public void setValueOne(String valueOne)
+                {
+            this.valueOne = valueOne;
+            }
+
+
+        public String getValueTwo()
+                {
+            return this.valueTwo;
+            }
+
+
+        public void setValueTwo(String valueTwo)
+                {
+            this.valueTwo = valueTwo;
+            }
+
+
+        public String getValueThree()
+                {
+            return this.valueThree;
+            }
+
+
+        public void setValueThree(String valueThree)
+                {
+            this.valueThree = valueThree;
+            }
+
+    }
+      
+}

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/anchorTargets.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/anchorTargets.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Anchor Target Page</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:10pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <netui:body>
+    <netui:anchor tagId="top"/>
+    <table width="400pt"><tr><td valign="middle" align="left"><p class="normalHead">Anchor Target Page</p></td>
+    <td valign="middle" align="right"><netui:anchor styleClass="normal" action="goAnchorTest">Anchor Tests</netui:anchor></td>
+    </tr></table>
+    <p class="normal">Targets for the anchor tests</p>
+    <p class="normal">Color: <netui:label value="${param.color}" /></p>
+    <p><netui:anchor styleClass="normal" linkName="bottomP">Go to Bottom</netui:anchor></p>
+    <div style="height:300pt;width:200pt;border:thin solid;">
+    </div>
+    <netui:anchor tagId="bottom" />
+    <p id="bottomP" class="normal"><netui:anchor linkName="top" >Bottom of the page...</netui:anchor></p>
+  </netui:body>
+</netui:html>
+
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/anchorTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/anchorTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,40 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Anchor Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+        <netui:base />
+    </head>        
+  <netui:body>
+    <h1 class="normalHead">Anchor Tests</h1>
+    <netui:anchor action="begin" rel="contents" rev="chapter" title="Link to the Contents" styleClass="normal" charSet="iso-8859-1" hrefLang="en" type="text/html">Test Main</netui:anchor>
+    <ul>
+    <li><netui:anchor action="goAnchorTarget" location="bottom" styleClass="normal" >Goto Target Page # bottom</netui:anchor></li>
+    <li><netui:anchor action="goAnchorTarget" location="top" styleClass="normal" >Goto Target Page # top</netui:anchor></li>
+    <li>Image Map with Anchors (only works in Netscape)<br/>
+    <img src="redblue.gif" alt="pick a color" usemap="#map1" width="200" height="100" />
+        <map id="map1" name="map1">
+            <table width="200"><tr><td width="50%" align="center"> 
+                <netui:anchor action="goAnchorTarget" shape="rect" coords="10, 10, 90, 90" style="color:#ff0033;" styleClass="normal">Red
+                    <netui:parameter name="color" value="red"/>
+                </netui:anchor>
+            </td><td width="50%" align="center">
+                <netui:anchor action="goAnchorTarget" shape="rect" coords="110, 10, 190, 90" style="color:#0000cc;" styleClass="normal">Blue
+                    <netui:parameter name="color" value="blue"/>
+                </netui:anchor>
+            </td></tr></table>
+        </map>
+    </li>
+    </ul>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/checkboxResults.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/checkboxResults.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,77 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="formData" type="xhtml.Controller.CheckboxTests"/>
+<netui-data:declarePageInput name="action" type="java.lang.String"/>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Checkbox Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <netui:body>
+    <netui:anchor tagId="top"/>
+    <table width="400pt"><tr><td align="left"><h1 class="normalHead">Checkbox Results</h1></td>
+        <td align="right"><netui:anchor styleClass="normal" action="goCheckboxTest">Input Tests</netui:anchor></td>
+    </tr></table>
+    <p>
+        Action: <netui:label value="${pageInput.action}"></netui:label> 
+    </p>
+        <table border="1" cellspacing="0">
+        <tr class="tablehead" valign="top">
+            <th class="normal">CheckBox Group</th>
+            <th class="normal">Repeating CheckBox Group</th>
+            <th class="normal">Check One</th>
+            <th class="normal">Check Two</th>
+            <th class="normal">Complex Repeater</th>
+        </tr>
+        <tr valign="top">
+            <td>
+            <netui-data:repeater dataSource="pageInput.formData.cbg">
+                <netui-data:repeaterHeader><table class="tablebody" border="0"></netui-data:repeaterHeader>
+                <netui-data:repeaterItem>
+                    <tr valign="top">
+                        <td><netui:label value="${container.item}" defaultValue="&nbsp;" styleClass="normal"></netui:label></td>
+                    </tr>
+                </netui-data:repeaterItem>
+                <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+            </netui-data:repeater>
+            </td>
+             <td>
+            <netui-data:repeater dataSource="pageInput.formData.optCbg">
+                <netui-data:repeaterHeader><table class="tablebody" border="0"></netui-data:repeaterHeader>
+                <netui-data:repeaterItem>
+                    <tr valign="top">
+                        <td><netui:label value="${container.item}" defaultValue="&nbsp;" styleClass="normal"></netui:label></td>
+                    </tr>
+                </netui-data:repeaterItem>
+                <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+            </netui-data:repeater>
+            </td>
+            <td><netui:label value="${pageInput.formData.check1}" defaultValue="&nbsp;" styleClass="normal"></netui:label></td>
+            <td><netui:label value="${pageInput.formData.check2}" defaultValue="&nbsp;" styleClass="normal"></netui:label></td>
+            <td>
+            <netui-data:repeater dataSource="pageInput.formData.optCbgMap">
+                <netui-data:repeaterHeader><table class="tablebody" border="0"></netui-data:repeaterHeader>
+                <netui-data:repeaterItem>
+                    <tr valign="top">
+                        <td><netui:label value="${container.item}" defaultValue="&nbsp;" styleClass="normal"></netui:label></td>
+                    </tr>
+                </netui-data:repeaterItem>
+                <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+            </netui-data:repeater>
+            </td>
+        </tr>
+        </table>
+  </netui:body>
+</netui:html>
+
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/checkboxTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/checkboxTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,85 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Input Test Page</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <netui:body>
+    <h1 class="normalHead">CheckBox and CheckBox Group tests</h1>
+    <netui:anchor action="begin" rel="contents" styleClass="normal" rev="chapter">Home</netui:anchor>
+    <div class="resultDiv">
+        <p class="normal">CheckBox and CheckBox Group tests</p>
+        <netui:form action="postCheckForm">
+            <table>
+                <tr valign="top">
+                    <td class="normalBold" align="right">CheckBox Group</td>
+                    <td>
+                    <netui:checkBoxGroup dataSource="actionForm.cbg" orientation="horizontal">
+                            <netui:checkBoxOption value="CheckBox Option 1" labelStyleClass="normal" title="Title Text" dir="ltr" lang="en" alt="Alt Text" disabled="true">Text CB Option One</netui:checkBoxOption>
+                            <netui:checkBoxOption value="CheckBox Option 2" labelStyleClass="normal">Text CB Option Two</netui:checkBoxOption>
+                    </netui:checkBoxGroup>
+                    </td>
+                </tr>
+                <tr valign="top" >
+                    <td class="normalBold" align="right">Repeating CheckBox Group</td>
+                    <td>
+                    <table>
+                    <netui:checkBoxGroup dataSource="actionForm.optCbg" 
+                            optionsDataSource="${pageFlow.checkBoxOptions}" repeater="true">
+                            <tr><td align="right" class="normal2">
+                            <netui:label value="${container.item}" />
+                            </td><td>
+                            <netui:checkBoxOption value="${container.item}" />
+                            </td></tr>
+                    </netui:checkBoxGroup>
+                    </table>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td class="normalBold" align="right">CheckBox 1</td>
+                    <td>
+                    <netui:checkBox dataSource="actionForm.check1" dir="ltr" lang="en"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td class="normalBold" align="right">CheckBox 2</td>
+                    <td>
+                    <netui:checkBox dataSource="actionForm.check2"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td colspan="2" align="center">
+                        <table cellspacing="0" border="1">
+                        <tr><th class="normalBold" valign="top" align="center">Complex Repeater</th><td>
+                        <netui:checkBoxGroup dataSource="actionForm.optCbgMap" optionsDataSource="${pageFlow.opts}" 
+                            repeater="true">
+                            <netui:checkBoxOption value="${container.item.optionValue}" />
+                                <netui:label styleClass="${container.item.style}" value="${container.item.name}" /><br/>
+                        
+                        </netui:checkBoxGroup>
+                        </td></tr></table>
+                    </td>
+                </tr>                        
+            </table>
+            <br />
+            <netui:button type="submit" value="Post To Results One" styleClass="normal" dir="ltr" lang="en" title="Post to Results One" alt="Post to Results One"/>
+            <netui:button type="submit" value="Post To Results Two" styleClass="normal" action="postCheckFormTwo"/>
+        </netui:form>
+    </div>
+    </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/formLabelResults.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/formLabelResults.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,45 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="formData" type="xhtml.Controller.FormLabelTests"/>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>FormLabel Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <netui:body>
+    <netui:anchor tagId="top"/>
+    <table><tr><td align="left"><h1 class="normalHead">Select Post Results</h1></td>
+        <td align="right"><netui:anchor styleClass="normal" action="goFormLabelTest">Form Label Tests</netui:anchor></td>
+    </tr></table>
+    <table border="1" cellspacing="0">
+        <tr valign="top">
+            <td class="normal">Value One:</td>
+            <td>
+            <netui:label value="${pageInput.formData.valueOne}" defaultValue="&nbsp;" styleClass="normal"/>
+            </td>
+        </tr>
+        <tr valign="top">
+            <td class="normal">Value Two:</td>
+            <td>
+            <netui:label value="${pageInput.formData.valueTwo}" defaultValue="&nbsp;" styleClass="normal"/>
+            </td>
+        </tr>
+        <tr valign="top">
+            <td class="normal">Value Three:</td>
+            <td>
+            <netui:label value="${pageInput.formData.valueThree}" defaultValue="&nbsp;" styleClass="normal"/>
+            </td>
+        </tr>
+    </table>    
+  </netui:body>
+</netui:html>
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/formLabelTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/formLabelTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,53 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Form Label Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <netui:body>
+    <h1 class="normalHead">Form Label Tests</h1>
+    <netui:anchor action="begin" rel="contents" styleClass="normal" rev="chapter">Home</netui:anchor>
+    <div class="resultDiv">
+            <netui:form action="postFormLabelResults">
+                <table>
+                    <tr valign="top">
+                        <td><netui:formLabel value="Value Three:" for="labelOne" styleClass="normal" /></td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.valueOne" tagId="labelOne"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td><netui:formLabel value="Value Two:" for="labelTwo" styleClass="normal" /></td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.valueTwo" tagId="labelTwo"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td><netui:formLabel value="Value Three:" for="labelThree" styleClass="normal" /></td>
+                        <td>
+                        <netui:textBox dataSource="actionForm.valueThree" tagId="labelThree"/>
+                        </td>
+                    </tr>
+                </table>
+                <br />
+                <netui:button type="submit" value="Post Form"/>
+            </netui:form>
+     </div>
+    </netui:body>
+</netui:html>
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/Anieyes.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/activepython.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/activepythonroll.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/back.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/image/backRoll.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/imageResults.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/imageResults.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="formData" type="xhtml.Controller.SelectTests"/>
+<netui-data:declarePageInput name="action" type="java.lang.String"/>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Image Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <netui:body>
+    <netui:anchor tagId="top"/>
+    <table><tr><td align="left"><h1 class="normalHead">Image Post Results</h1></td>
+        <td align="right"><netui:anchor styleClass="normal" action="goImageTest">Image Tests</netui:anchor></td>
+    </tr></table>
+  </netui:body>
+</netui:html>
+
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/imageTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/imageTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html runAtClient="true" documentType="xhtml1-transitional">
+    <head>
+        <title>Image Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+        <netui:scriptHeader divPanelSupport='true'/>
+    </head>        
+  <netui:body>
+    <h1 class="normalHead">Image Tests</h1>
+    <netui:anchor action="begin" rel="contents" styleClass="normal" rev="chapter">Home</netui:anchor>
+    <div class="resultDiv">
+        <p class="normal">Images</p>
+        <table width="100%">
+        <tr><td align="right" class="normal">Image:</td><td align="left">
+            <netui:image src="./image/Anieyes.gif" border="1" width="72" height="37" style="border-color:#00cccc;" alt="eyeballs"/>
+        </td></tr>
+        <tr><td align="right" class="normal">ImageAnchor:</td><td align="left">
+                    <netui:imageAnchor action="postImageForm" src="image/activepython.gif" rolloverImage="image/activepythonroll.gif" border="0" alt="Anchor"/>
+        </td></tr>
+        </table>
+    </div>
+    <div class="resultDiv">
+        <p class="normal">Images in Forms</p>
+            <netui:form action="postImageForm">
+                <netui:imageButton src="./image/back.gif" alt="Navigate" accessKey="G" value="foo" rolloverImage="/coreWeb/xhtml/image/backRoll.gif"/>
+            </netui:form>
+    </div>
+    </netui:body>
+</netui:html>
+
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>XHTML Verification Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+        <netui:base />
+    </head>        
+  <netui:body>
+    <h1 class="normalHead">XHTML Verification Tests</h1>
+    <ul>
+    <li><netui:anchor styleClass="normal" action="goAnchorTest" rel="start">Anchor Test</netui:anchor></li>
+    <li><netui:anchor styleClass="normal" action="goCheckboxTest" rel="start">Checkbox Test</netui:anchor></li>
+    <li><netui:anchor styleClass="normal" action="goRadioTest" rel="start">RadioButton Test</netui:anchor></li>
+    <li><netui:anchor styleClass="normal" action="goSelectTest" rel="start">Select Test</netui:anchor></li>
+    <li><netui:anchor styleClass="normal" action="goImageTest" rel="start">Image Test</netui:anchor></li>
+    <li><netui:anchor styleClass="normal" action="goLabelTest" rel="start">Label Test</netui:anchor></li>
+    <li><netui:anchor styleClass="normal" action="goFormLabelTest" rel="start">Form Label Test</netui:anchor></li>
+    </ul>
+  </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/labelTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/labelTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Label Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <netui:body>
+    <h1 class="normalHead">Label Tests</h1>
+    <netui:anchor action="begin" rel="contents" styleClass="normal" rev="chapter">Home</netui:anchor>
+    <div class="resultDiv">
+        <p class="normal">Label: <netui:label value="${pageFlow.labelOne}" styleClass="normalAttr"/></p>
+    </div>
+    </netui:body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/radioResults.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/radioResults.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="formData" type="xhtml.Controller.RadioTests"/>
+<netui-data:declarePageInput name="action" type="java.lang.String"/>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Radio Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <netui:body>
+    <netui:anchor tagId="top"/>
+    <table width="400"><tr><td align="left"><h1 class="normalHead">Radio Post Results</h1></td>
+        <td align="right"><netui:anchor styleClass="normal" action="goRadioTest">Radio Tests</netui:anchor></td>
+    </tr></table>
+    <p>
+        Action: <netui:label value="${pageInput.action}"></netui:label> 
+    </p>
+        <table class="tablebody" border="1" cellspacing="0">
+        <tr class="tablehead" valign="top">
+            <th class="normal">RadioButton Group</th>
+            <th class="normal">Options RadioButton Group</th>
+            <th class="normal">Map Options RadioButton Group</th>
+            <th class="normal">Complex RadioButton Group</th>
+        </tr>
+        <tr valign="top">
+            <td>
+                <netui:label value="${pageInput.formData.rbg}" defaultValue="&nbsp;" styleClass="normal"></netui:label>
+
+            </td>
+            <td>
+                <netui:label value="${pageInput.formData.rbgOpts}" defaultValue="&nbsp;" styleClass="normal"></netui:label>
+            </td>
+            <td>
+                <netui:label value="${pageInput.formData.rbgOptsMap}" defaultValue="&nbsp;" styleClass="normal" />
+            </td>
+            <td>
+                <netui:label value="${pageInput.formData.rbgComplex}" defaultValue="&nbsp;" styleClass="normal" />
+            </td>
+        </tr>
+        </table>        
+  </netui:body>
+</netui:html>
+
+
+  
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/radioTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/radioTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,79 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>RadioGroup Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <netui:body>
+    <h1 class="normalHead">RadioGroup Tests</h1>
+    <netui:anchor action="begin" rel="contents" styleClass="normal" rev="chapter">Home</netui:anchor>
+    <div class="resultDiv">
+        <p class="normal">RadioGroup Tests</p>
+            <netui:form action="postRadioForm">
+                <table>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">RadioButton Group</td>
+                        <td>
+                        <netui:radioButtonGroup dataSource="actionForm.rbg"  orientation="vertical">
+                            <netui:radioButtonOption value="Radio Opt 1" labelStyleClass="normal" disabled="true">Radio Option One</netui:radioButtonOption>
+                            <netui:radioButtonOption value="Radio Opt 2" labelStyleClass="normal">Radio Option Two</netui:radioButtonOption>
+                        </netui:radioButtonGroup>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Repeating Options RadioButton Group</td>
+                        <td>
+                        <netui:radioButtonGroup dataSource="actionForm.rbgOpts" 
+                                optionsDataSource="${pageFlow.radioButtonOptions}" 
+                                orientation="horizontal" 
+                                repeater="true">
+                            <netui:radioButtonOption value="${container.item}" styleClass="normal" />
+                            <netui:label value="${container.item}" styleClass="normal" />
+                        </netui:radioButtonGroup>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Map Options RadioButton Group</td>
+                        <td>
+                        <netui:radioButtonGroup dataSource="actionForm.rbgOptsMap"
+                            optionsDataSource="${pageFlow.radioButtonMapOptions}"
+                            labelStyleClass="normal2" 
+                        >
+                        </netui:radioButtonGroup>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td colspan="2" align="center">
+                            <table cellspacing="0" border="1">
+                            <tr><th class="normalBold" valign="top" align="center">Complex Repeater</th><td>
+                            <netui:radioButtonGroup dataSource="actionForm.rbgComplex" optionsDataSource="${pageFlow.opts}" 
+                                repeater="true">
+                                <netui:radioButtonOption value="${container.item.optionValue}" />
+                                    <netui:label styleClass="${container.item.style}" value="${container.item.name}" /><br />
+                            
+                            </netui:radioButtonGroup>
+                            </td></tr></table>
+                        </td>
+                    </tr>
+                </table>
+                <br />
+                <netui:button type="submit" value="Post RadioForm"/>
+            </netui:form>
+    </div>
+    </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/selectResults.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/selectResults.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,62 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui-data:declarePageInput name="formData" type="xhtml.Controller.SelectTests"/>
+<netui-data:declarePageInput name="action" type="java.lang.String"/>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Select Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <netui:body>
+    <netui:anchor tagId="top"/>
+    <table><tr><td align="left"><h1 class="normalHead">Select Post Results</h1></td>
+        <td align="right"><netui:anchor styleClass="normal" action="goSelectTest">Select Tests</netui:anchor></td>
+    </tr></table>
+    <p>
+        Action: <netui:label value="${pageInput.action}"></netui:label> 
+    </p>
+        <table class="tablebody" border="1" cellspacing="0">
+        <tr class="tablehead" valign="top">
+            <th class="normal">Select</th>
+            <th class="normal">Select Opts</th>
+            <th class="normal">Map Select</th>
+            <th class="normal">Nullable Select</th>
+        </tr>
+        <tr valign="top">
+            <td><netui:label value="${pageInput.formData.sel}" defaultValue="&nbsp;" styleClass="normal"></netui:label></td>
+            <td>
+            <netui-data:repeater dataSource="pageInput.formData.multiSel">
+                <netui-data:repeaterHeader><table class="tablebody"
+                    border="0"></netui-data:repeaterHeader>
+                <netui-data:repeaterItem>
+                    <tr valign="top">
+                        <td><netui:label value="${container.item}" defaultValue="&nbsp;" styleClass="normal"></netui:label></td>
+                    </tr>
+                </netui-data:repeaterItem>
+                <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
+            </netui-data:repeater>
+            </td>
+            <td><netui:label value="${pageInput.formData.selOpts}" defaultValue="&nbsp;" styleClass="normal"></netui:label></td>
+            <td>
+            <ol>
+            <netui-data:repeater dataSource="pageInput.formData.nullable">
+                <netui-data:repeaterItem>
+                    <li class="normal">
+                        <netui:label value="${container.item}" defaultValue="&nbsp;" />
+                    </li>
+            </netui-data:repeaterItem>
+            </netui-data:repeater>
+            </ol>
+        </td></tr>            
+        </table>
+  </netui:body>
+</netui:html>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/selectTest.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/coreWeb/xhtml/selectTest.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html documentType="xhtml1-transitional">
+    <head>
+        <title>Select Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <netui:body>
+    <h1 class="normalHead">Select Tests</h1>
+    <netui:anchor action="begin" rel="contents" styleClass="normal" rev="chapter">Home</netui:anchor>
+    <div class="resultDiv">
+        <p class="normal">Select Tests</p>
+            <netui:form action="postSelectForm">
+                <table>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Select</td>
+                        <td>
+                        <netui:select dataSource="actionForm.sel" defaultValue="Select Opt 1">
+                            <netui:selectOption value="Select Opt 1" styleClass="normalAttr" disabled="true">Select Option One</netui:selectOption>
+                            <netui:selectOption value="Select Opt 2" styleClass="normalAttr2">Select Option Two</netui:selectOption>
+                        </netui:select>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Select With Options</td>
+                        <td>
+                        <netui:select dataSource="actionForm.multiSel" optionsDataSource="${pageFlow.selectOptions}" multiple="true" size="3" styleClass="normalAttr" style="background-color:#00ffff;"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Map Select</td>
+                        <td>
+                        <netui:select dataSource="actionForm.selOpts" optionsDataSource="${pageFlow.selectMapOptions}"/>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Nullable Select</td>
+                        <td>
+                        <netui:select dataSource="actionForm.nullable" optionsDataSource="${pageFlow.nullSelectOptions}" 
+                            size="7" nullable="true" defaultValue="${pageFlow.selectDefault}" repeater="true">
+                            <netui:selectOption repeatingType="Option" value="${container.item}" styleClass="normalAttr" />
+                            <netui:selectOption repeatingType="DataSource" value="ds ${container.item}" styleClass="normalAttr2" />
+                            <netui:selectOption repeatingType="Default" value="def ${container.item}" styleClass="normalAttr3" />
+                            <netui:selectOption repeatingType="Null" value="Null" styleClass="normalAttr4"/>
+                        </netui:select>
+                        </td>
+                    </tr>
+                    
+                </table>
+                <br />
+                <netui:button type="submit" value="Post Form"/>
+            </netui:form>
+    </div>
+    </netui:body>
+</netui:html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<config xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <suffixList>
+        <suffix>jsp</suffix>
+        <suffix>jspx</suffix>
+        <suffix>do</suffix>
+        <suffix>jpf</suffix>
+        <suffix></suffix>
+    </suffixList>
+    <servletURI>testRecorder</servletURI>
+    <baseDirectory>@BASE_DIR@</baseDirectory>
+</config>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,4597 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testDefinitions xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+   <categories>
+      <category>
+         <name>drt</name>
+         <description>drt</description>
+      </category>
+      <category>
+         <name>bvt</name>
+         <description>bvt</description>
+      </category>
+      <category>
+         <name>radarBugs</name>
+         <description>radarBugs</description>
+      </category>
+      <category>
+         <name>clarifyBugs</name>
+         <description>clarifyBugs</description>
+      </category>
+      <category>
+         <name>databinding</name>
+         <description>dataBinding</description>
+      </category>
+      <category>
+         <name>errorTests</name>
+         <description>errorTests</description>
+      </category>
+      <category>
+         <name>mockPortal</name>
+         <description>mockPortal</description>
+      </category>
+      <category>
+         <name>corePageFlow</name>
+         <description>corePageFlow</description>
+      </category>
+      <category>
+         <name>tags</name>
+         <description>tags</description>
+      </category>
+      <category>
+         <name>templates</name>
+         <description>templates</description>
+      </category>
+      <category>
+         <name>trees</name>
+         <description>trees</description>
+      </category>
+      <category>
+         <name>xhtml</name>
+         <description>xhtml</description>
+      </category>
+      <category>
+         <name>qaTests</name>
+         <description>qaTests</description>
+      </category>
+   </categories>
+   <tests>
+      <test>
+         <name>Accesskey</name>
+         <description>Test of the accesskey attribute</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Accesskey</feature>
+         </features>
+      </test>
+      <test>
+         <name>AccesskeyGroup</name>
+         <description>Test of the accesskey attribute</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Accesskey</feature>
+            <feature>CheckBoxGroup</feature>
+            <feature>RadioButtonGroup</feature>
+         </features>
+      </test>
+      <test>
+         <name>ActionChaining</name>
+         <description>Test of passing forms and pageflow-scoped forms with action chaining.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Action</feature>
+            <feature>Form</feature>
+            <feature>Scoping</feature>
+         </features>
+      </test>
+      <test>
+         <name>ActionInterceptors</name>
+         <description>Test of the action-interceptors feature.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Action</feature>
+            <feature>Interceptors</feature>
+         </features>
+      </test>
+      <test>
+         <name>Anchor</name>
+         <description>Test of the anchor tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Anchor</feature>
+         </features>
+      </test>
+      <test>
+         <name>AnchorActions</name>
+         <description>Verify that the expression binding of anchor.action works</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Anchor</feature>
+            <feature>Action</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>AnchorError</name>
+         <description>Errors in the Anchor control</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>Anchor</feature>
+            <feature>URL</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>AnchorFormPosting</name>
+         <description>Using parameters on a anchor fill in an action form.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Binding</feature>
+            <feature>Form</feature>
+            <feature>Anchor</feature>
+            <feature>Parameter</feature>
+         </features>
+      </test>
+      <test>
+         <name>AnchorPosting</name>
+         <description>Using parameters on a anchor to databind to the page flow.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Binding</feature>
+            <feature>Anchor</feature>
+            <feature>Parameter</feature>
+         </features>
+      </test>
+      <test>
+         <name>AnyBean</name>
+         <description>Test of the Any Bean Action Forms feature, including passing to/from actions and nested flows.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Any Bean</feature>
+            <feature>Form</feature>
+            <feature>Nesting</feature>
+         </features>
+      </test>
+      <test>
+         <name>AnyBeanBinding</name>
+         <description>AnyBeanBinding</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>AnyBeanOverload</name>
+         <description>Test of overloading actions with the Any Bean Action Forms feature.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Any Bean</feature>
+            <feature>Overloaded Actions</feature>
+         </features>
+      </test>
+      <test>
+         <name>AppState</name>
+         <description>Binding to the global app state, both directly on a page and through the page flow.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Binding</feature>
+            <feature>GlobalApp</feature>
+         </features>
+      </test>
+      <test>
+         <name>AppStatePass</name>
+         <description>Binding to the global app state, sending state between page flows.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>State</feature>
+         </features>
+      </test>
+      <test>
+         <name>AttrBinding</name>
+         <description>Binding scalar and array values for Strings, ints, floats and booleans.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B13789</name>
+         <description>Databinding with java keywords.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Databinding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B13797</name>
+         <description>Databinding postback directly to the page flow.  Ignoring the form.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>TextBox</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B13803</name>
+         <description>Databinding postback to an action without a form.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Action</feature>
+         </features>
+      </test>
+      <test>
+         <name>B13881</name>
+         <description>Checkbox test</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>CheckBox</feature>
+         </features>
+      </test>
+      <test>
+         <name>B14259</name>
+         <description>Exceptions using relative exception names</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Exceptions</feature>
+         </features>
+      </test>
+      <test>
+         <name>B14683</name>
+         <description>Hit the JSP before the Page Flow</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>JSP</feature>
+         </features>
+      </test>
+      <test>
+         <name>B14754</name>
+         <description>Databinding to an array element in a page flow.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Iterators</feature>
+         </features>
+      </test>
+      <test>
+         <name>B14764</name>
+         <description>Compound expression in label</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Label</feature>
+            <feature>Expressions</feature>
+         </features>
+      </test>
+      <test>
+         <name>B14781</name>
+         <description>Select without a Form</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+         </features>
+      </test>
+      <test>
+         <name>B14787</name>
+         <description>Default Values</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>TextBox</feature>
+            <feature>DefaultValue</feature>
+         </features>
+      </test>
+      <test>
+         <name>B14826</name>
+         <description>Databinding a multiselect to a page flow string array.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Select</feature>
+            <feature>Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>B14999</name>
+         <description>Select no items in a multiselect box.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Select</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15095</name>
+         <description>Setting a checkbox with a String</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>CheckBox</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15174</name>
+         <description>Anchor with actions can have Parameters</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Anchor</feature>
+            <feature>Parameter</feature>
+            <feature>Action</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15175</name>
+         <description>Form with Parameters</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Parameter</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15392</name>
+         <description>Errors returning a form from a nested page flow</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Nesting</feature>
+            <feature>Return Error</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15430</name>
+         <description>Expression Errors with upper case property name.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15454</name>
+         <description>Editting an array produced by a repeater within a form.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>Form</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15574</name>
+         <description>Expression Errors when to textboxes bind to the same thing.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Errors</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15590</name>
+         <description>Repeater Editing using struts expressions.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>Editing</feature>
+            <feature>Expressions</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15642</name>
+         <description>Expression binding with boolean bean properties.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Databinding</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B15964</name>
+         <description>Binding with the url context</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Databinding</feature>
+            <feature>URL</feature>
+         </features>
+      </test>
+      <test>
+         <name>B16092</name>
+         <description>Repeater with and without and item</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>RepeaterItem</feature>
+         </features>
+      </test>
+      <test>
+         <name>B16451</name>
+         <description>not sure</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+      </test>
+      <test>
+         <name>B17287</name>
+         <description>Type Conversion error in the Pad tag.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>RepeaterPad</feature>
+         </features>
+      </test>
+      <test>
+         <name>B17461</name>
+         <description>Databinding Error in the repeater Pad tag.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>RepeaterPad</feature>
+         </features>
+      </test>
+      <test>
+         <name>B18025</name>
+         <description>Compiler initialization of Strings</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Compiler</feature>
+         </features>
+      </test>
+      <test>
+         <name>B18067</name>
+         <description>Verify that StringFormat escape character</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>FormatString</feature>
+            <feature>FormatString</feature>
+         </features>
+      </test>
+      <test>
+         <name>B18068</name>
+         <description>Verify that the FormatNumber type is validated</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>FormatNumber</feature>
+         </features>
+      </test>
+      <test>
+         <name>B22957</name>
+         <description>Anchor Form submit</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Anchor</feature>
+         </features>
+      </test>
+      <test>
+         <name>B28421</name>
+         <description>Template without any content defined</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B28633</name>
+         <description>Databinding errors in the visible tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Visible</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B28774</name>
+         <description>Report errors when the template file is not found</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B28775</name>
+         <description>Report errors when the DefaultPage is not found for a section</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B30458</name>
+         <description>Another form of expression error</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Expressions</feature>
+            <feature>GetData</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B33322</name>
+         <description>Number Format Error</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>FormatNumber</feature>
+            <feature>Exceptions</feature>
+         </features>
+      </test>
+      <test>
+         <name>B33704</name>
+         <description>using the date format against a calendar object</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>FormatDate</feature>
+            <feature>Calendar</feature>
+         </features>
+      </test>
+      <test>
+         <name>B33807</name>
+         <description>Date Format Error against invalid object</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>FormatDate</feature>
+            <feature>Type Conversion</feature>
+         </features>
+      </test>
+      <test>
+         <name>B34263</name>
+         <description>Verify that the TagId is uniquely identified for button and form</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Button</feature>
+            <feature>Form</feature>
+            <feature>TagId</feature>
+         </features>
+      </test>
+      <test>
+         <name>b34566</name>
+         <description>Verify that multiple parameters with the same name are encoded on an anchor</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Anchor</feature>
+            <feature>Parameter</feature>
+            <feature>TagId</feature>
+         </features>
+      </test>
+      <test>
+         <name>B34998</name>
+         <description>Test of multiple line text areas</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>TextArea</feature>
+         </features>
+      </test>
+      <test>
+         <name>B35037</name>
+         <description>Throwing exceptions including files in templates</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+         </features>
+      </test>
+      <test>
+         <name>B35037b</name>
+         <description>Verify that no finding a template results in an error</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+         </features>
+      </test>
+      <test>
+         <name>B35084</name>
+         <description>Image Anchor submitting forms</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>ImageAnchor</feature>
+            <feature>Form</feature>
+         </features>
+      </test>
+      <test>
+         <name>B35084b</name>
+         <description>Image Anchor error reporting invalid action</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>ImageAnchor</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B35094</name>
+         <description>Image src with paramters</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Image</feature>
+            <feature>Parameter</feature>
+         </features>
+      </test>
+      <test>
+         <name>B36628</name>
+         <description>Catch errors when the message-resource is not defined in the Errors and Error tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B36628b</name>
+         <description>Catch errors when the message-resource is not defined in the Errors and Error tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B37240</name>
+         <description>Verify that non-String defaultValues work with Select boxes</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+            <feature>DefaultValue</feature>
+            <feature>Integer</feature>
+         </features>
+      </test>
+      <test>
+         <name>B37374</name>
+         <description>Verify that an anchor.href that evalutes to null reports errors</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Anchor</feature>
+            <feature>Href</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>b37913</name>
+         <description>Verify that empty array and list work inside simple repeaters</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>Iterators</feature>
+         </features>
+      </test>
+      <test>
+         <name>B38182</name>
+         <description>Select Options expression errors.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+            <feature>Errors</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B38183</name>
+         <description>Verify that a repeater expression {container.foo} reports an error.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>Errors</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B38184</name>
+         <description>Verify that a repeater works with an Enumeration</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>Iterations</feature>
+         </features>
+      </test>
+      <test>
+         <name>B39363</name>
+         <description>Verify that updates to a List happen correctly</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Expressions</feature>
+         </features>
+      </test>
+      <test>
+         <name>B39434</name>
+         <description>Verify date format of String type values works</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>FormatDate</feature>
+            <feature>Strings</feature>
+         </features>
+      </test>
+      <test>
+         <name>B39552</name>
+         <description>Verify that options data source may be contain null values.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+            <feature>OptionsDataSource</feature>
+         </features>
+      </test>
+      <test>
+         <name>B39820</name>
+         <description>Multiple forms with anchor submit going to same action</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Anchor</feature>
+            <feature>JavaScript</feature>
+            <feature>Action</feature>
+         </features>
+      </test>
+      <test>
+         <name>B40031</name>
+         <description>declarePageInput errors</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>DeclarePageInput</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>B40596</name>
+         <description>Binding to a package protected class through its public interface.  Fail cause: nested repeaters</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B40862</name>
+         <description>GetData tag and handling a null return value with a removeAttribute.  Fail cause: can't ref. inner class</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>GetData</feature>
+            <feature>RemoveAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>B40999</name>
+         <description>NPE in the optionDataSource for a checkboxgroup and radiobuttongroup</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>RadioButtonGroup</feature>
+            <feature>CheckBoxGroup</feature>
+            <feature>OptionsDataSource</feature>
+         </features>
+      </test>
+      <test>
+         <name>B41391</name>
+         <description>Test binding to private base class</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>B42065</name>
+         <description>NPE if options contain null</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>RadioButtonGroup</feature>
+            <feature>Select</feature>
+            <feature>CheckBoxGroup</feature>
+            <feature>OptionsDataSource</feature>
+         </features>
+      </test>
+      <test>
+         <name>B42486</name>
+         <description/>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+      </test>
+      <test>
+         <name>B42558</name>
+         <description>Test error reporting in a method invocation tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>Errors</feature>
+            <feature>CallPageFlow</feature>
+         </features>
+      </test>
+      <test>
+         <name>B43011</name>
+         <description>Test updating a single valued field from multiple input boxes</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>radarBugs</category>
+         </categories>
+         <features>
+            <feature>TextBox</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>BeginForm</name>
+         <description>Test passing a form to the begin node.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Nesting</feature>
+            <feature>Action</feature>
+            <feature>Form</feature>
+         </features>
+      </test>
+      <test>
+         <name>Binding</name>
+         <description>Test binding structures, arrays, and hashmaps in the page flow</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Binding</feature>
+            <feature>Iterators</feature>
+         </features>
+      </test>
+      <test>
+         <name>BindingUpdateErrors</name>
+         <description>Test of the BindingUpdateErrors tag.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>BindingUpdateErrors</feature>
+         </features>
+      </test>
+      <test>
+         <name>BreakoutNesting</name>
+         <description>Test breaking out of nesting</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Nesting</feature>
+         </features>
+      </test>
+      <test>
+         <name>BugTest21124</name>
+         <description>BugTest21124</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BugTest26856</name>
+         <description>BugTest26856</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BugTest26990</name>
+         <description>BugTest26990</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BugTest27848</name>
+         <description>BugTest27848</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BugTest30303</name>
+         <description>BugTest30303</description>
+         <webapp>coreWeb</webapp>
+      </test>
+      <test>
+         <name>BugTest37949</name>
+         <description>BugTest37949</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BugTest39028</name>
+         <description>BugTest39028</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BugTest40862</name>
+         <description>BugTest40862</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BugTest41007</name>
+         <description>BugTest41007</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BugTest42486</name>
+         <description>BugTest42486</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>BundleBasic</name>
+         <description>Test simple binding to resource bundles</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Bundle Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>BundleBasicError</name>
+         <description>Test simple error conditions when binding to resource bundles</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Errors</feature>
+            <feature>Bundle Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>BundleBasicNoJpf</name>
+         <description>Test simple binding to resource bundles with no JPF in the directory</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Bundle Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>BundleDeclareBundleTag</name>
+         <description>Test the declareBundle tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>DeclareBundle</feature>
+         </features>
+      </test>
+      <test>
+         <name>BundleDeclareBundleTagError</name>
+         <description>Error conditions in the declareBundle tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Errors</feature>
+            <feature>DeclareBundle</feature>
+         </features>
+      </test>
+      <test>
+         <name>BundleStrutsBinding</name>
+         <description>Binding to message resources declared in a JPF</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Bundle Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>ButtonSubmit</name>
+         <description>Test the submit of a form with button actions.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Postback</feature>
+            <feature>Button</feature>
+            <feature>Action</feature>
+         </features>
+      </test>
+      <test>
+         <name>ButtonSubmitTagId</name>
+         <description>Verify button submit to different action with a TagId set</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Button</feature>
+            <feature>TagId</feature>
+            <feature>Action</feature>
+         </features>
+      </test>
+      <test>
+         <name>CallingPageFlow</name>
+         <description>Calling overloaded methods on a page flow.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>CallPageFlow</feature>
+            <feature>MethodParameter</feature>
+            <feature>Overloaded Methods</feature>
+         </features>
+      </test>
+      <test>
+         <name>CallMethodMethodTest</name>
+         <description>Test the callMethod tag invoking 0/1/+ arg methods on a Java class and on a control</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>CallMethod</feature>
+         </features>
+      </test>
+      <test>
+         <name>CallMethodReturnNull</name>
+         <description>Test the correct behavior of returning null from a callMethod tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>CallMethod</feature>
+         </features>
+      </test>
+      <test>
+         <name>CallMethodTagTest</name>
+         <description>Simple test of the callMethod tag.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>CallMethod</feature>
+         </features>
+      </test>
+      <test>
+         <name>CallPageFlow</name>
+         <description>Test the callPageFlow tag when invoking overloaded methods.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>CallMethod</feature>
+         </features>
+      </test>
+      <test>
+         <name>CallPageFlowWithOverloading</name>
+         <description>Test the callPageFlow tag when invoking overloaded methods.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>CallMethod</feature>
+         </features>
+      </test>
+      <test>
+         <name>CellRepeater</name>
+         <description>Simple test of the cell repeater</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Cell Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>CellRepeater2</name>
+         <description>Test various configurations of cell repeater.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Cell Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>CellRepeaterError</name>
+         <description>Errors in the cell repeater</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>Cell Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>CellRepeaterError2</name>
+         <description>Test various configurations of cell repeater in error conditions.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Cell Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>CheckboxDemo</name>
+         <description>Binding to an array of structs with a repeater in a form.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>Form</feature>
+            <feature>Iterators</feature>
+         </features>
+      </test>
+      <test>
+         <name>ClientTable</name>
+         <description>Test of the Table tags binding on the client.</description>
+         <webapp>coreWeb</webapp>
+         <features>
+            <feature>RichUI</feature>
+            <feature>Table</feature>
+            <feature>Client Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>Content</name>
+         <description>Test of the Content tag a Label rendering XML data.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Content</feature>
+            <feature>Label</feature>
+            <feature>Encoding</feature>
+         </features>
+      </test>
+      <test>
+         <name>ConversationalControls</name>
+         <description>Tests invoking conversational controls from page flows.</description>
+         <webapp>coreWeb</webapp>
+         <features>
+            <feature>Controls</feature>
+            <feature>Conversations</feature>
+         </features>
+      </test>
+      <test>
+         <name>Cr121496</name>
+         <description>Multiple forms with parameter and anchor posting</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>clarifyBugs</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Anchor</feature>
+         </features>
+      </test>
+      <test>
+         <name>Cr124972</name>
+         <description>Verify proper encoding of types</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>clarifyBugs</category>
+         </categories>
+         <features>
+            <feature>Parameter</feature>
+            <feature>Encoding</feature>
+         </features>
+      </test>
+      <test>
+         <name>Cr132760</name>
+         <description>Report an Error when a Button points to an invalid action</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>clarifyBugs</category>
+         </categories>
+         <features>
+            <feature>Button</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>Cr137279</name>
+         <description>Report an Error when a RichTree and Node points to an invalid action</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>clarifyBugs</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Node</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>Cr176508</name>
+         <description>Select comparing a String to an Integer and the other way</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>clarifyBugs</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+         </features>
+      </test>
+      <test>
+         <name>Cr180865</name>
+         <description>DivPanel verify that a DivPanel remembers it the current page on postback</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>clarifyBugs</category>
+         </categories>
+         <features>
+            <feature>DivPanel</feature>
+         </features>
+      </test>
+      <test>
+         <name>Cr183774</name>
+         <description>Verify that the tagId attribute works on Hidden</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>clarifyBugs</category>
+         </categories>
+         <features>
+            <feature>Hidden</feature>
+            <feature>TagId</feature>
+         </features>
+      </test>
+      <test>
+         <name>CustomTypeConverterTest</name>
+         <description>Test the use of pluggable type converters.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Type Conversion</feature>
+         </features>
+      </test>
+      <test>
+         <name>DataGridSmokeTest</name>
+         <description>DataGridSmokeTest</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+         </categories>
+      </test>
+      <test>
+         <name>DateConverter</name>
+         <description>Date Converter on post.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Type Conversion</feature>
+         </features>
+      </test>
+      <test>
+         <name>DateFormatString</name>
+         <description>Verify that the date input string works.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>FormatDate</feature>
+            <feature>FormatString</feature>
+            <feature>InputStringPattern</feature>
+         </features>
+      </test>
+      <test>
+         <name>DefaultValues</name>
+         <description>Test default values.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>DefaultValue</feature>
+         </features>
+      </test>
+      <test>
+         <name>DefaultValuesDirect</name>
+         <description>Test default values, directly binding to Page Flow</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>DefaultValue</feature>
+            <feature>PageFlow</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>demo</name>
+         <description>The simple demo.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>TextBox</feature>
+            <feature>Repeater</feature>
+            <feature>Binding</feature>
+            <feature>Templates</feature>
+         </features>
+      </test>
+      <test>
+         <name>DirectFormTest</name>
+         <description>A simple form test binding to page flow.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Postback</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>Disable</name>
+         <description>Test that disabled works on all of the form tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Disabled</feature>
+         </features>
+      </test>
+      <test>
+         <name>DisableBinding</name>
+         <description>Test that databinding the disabled attribute works</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Disabled</feature>
+         </features>
+      </test>
+      <test>
+         <name>DisableImageButton</name>
+         <description>Test that disabled attribute on the ImageButton</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>ImageButton</feature>
+            <feature>Disabled</feature>
+         </features>
+      </test>
+      <test>
+         <name>DivPanel</name>
+         <description>Basic test of the DivPanel</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>DivPanel</feature>
+         </features>
+      </test>
+      <test>
+         <name>DivPanelTree</name>
+         <description>Test of the tree driving the DivPanel</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>DivPanel</feature>
+            <feature>Tree</feature>
+         </features>
+      </test>
+      <test>
+         <name>ErrorTags</name>
+         <description>Tests the error and errors tags and message resources.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Error Tag</feature>
+            <feature>Errors Tag</feature>
+            <feature>Bundle Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>Except</name>
+         <description>Verify that catching exception locally and globally works.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Exceptions</feature>
+         </features>
+      </test>
+      <test>
+         <name>ExceptHier</name>
+         <description>Test of the catching exceptions that are in a hierarchy.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Exceptions</feature>
+            <feature>Hierarchy</feature>
+         </features>
+      </test>
+      <test>
+         <name>ExceptHierPage</name>
+         <description>Test of the catching exceptions that are in a hierarchy navigation to pages.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Exceptions</feature>
+            <feature>Hierarchy</feature>
+            <feature>Page Handlers</feature>
+         </features>
+      </test>
+      <test>
+         <name>Expression</name>
+         <description>Expression errors, reported in-line in the base HTML tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Binding</feature>
+            <feature>Errors</feature>
+            <feature>HTML</feature>
+         </features>
+      </test>
+      <test>
+         <name>FormatSelect</name>
+         <description>Test default values, directly binding to Page Flow</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>DefaultValue</feature>
+            <feature>PageFlow</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>FormatTags</name>
+         <description>Test of the formatters</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Formatting</feature>
+         </features>
+      </test>
+      <test>
+         <name>FormBeanRePostTest52</name>
+         <description>FormBeanRePostTest52</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>FormBeanRePostTest53</name>
+         <description>FormBeanRePostTest53</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>FormTest</name>
+         <description>A simple form test.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Postback</feature>
+            <feature>Binding</feature>
+            <feature>Form</feature>
+         </features>
+      </test>
+      <test>
+         <name>FormValid</name>
+         <description>Full blown validation with message resources, using struts merge</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Validation</feature>
+            <feature>Struts</feature>
+         </features>
+      </test>
+      <test>
+         <name>FormValidAnnot</name>
+         <description>Full blown validation with message resources, messages defined through annotations</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Validation</feature>
+            <feature>Annotation</feature>
+         </features>
+      </test>
+      <test>
+         <name>Forward</name>
+         <description>A forward error within an Action.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Forward</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>ForwardToAction</name>
+         <description>Test of databinding errors when forwarding to actions with and without forms</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Databinding</feature>
+            <feature>Forward</feature>
+            <feature>Action</feature>
+         </features>
+      </test>
+      <test>
+         <name>GetData</name>
+         <description>Simple test of the getData tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>GetData</feature>
+            <feature>Repeater</feature>
+            <feature>PageContext</feature>
+         </features>
+      </test>
+      <test>
+         <name>GlobalAction</name>
+         <description>A simple test of finding the action in the Global.app and nesting that for a page flow.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>GlobalApp</feature>
+            <feature>Nesting</feature>
+         </features>
+      </test>
+      <test>
+         <name>GlobalAppNoJPFBinding</name>
+         <description>Test binding to a Global.app when a JPF isn't present in the directory</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>GlobalApp</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>GlobalForwards</name>
+         <description>A simple test using globally defined forwards.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Forward</feature>
+         </features>
+      </test>
+      <test>
+         <name>Hidden</name>
+         <description>Verify that the dataInput attribute works on the Hidden tag.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Hidden</feature>
+            <feature>DataInput</feature>
+         </features>
+      </test>
+      <test>
+         <name>HtmlExpression</name>
+         <description>Expression errors, reported at the end of the page against the base HTML tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>RepeaterFooter</feature>
+            <feature>Errors</feature>
+            <feature>HTML</feature>
+         </features>
+      </test>
+      <test>
+         <name>ImageAnchorActions</name>
+         <description>Tests the bindability of the action attribute on an image anchor</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>ImageAnchor</feature>
+            <feature>Action</feature>
+            <feature>Databinding</feature>
+         </features>
+      </test>
+      <test>
+         <name>IteratorTest</name>
+         <description>Tests that warnings are returned for null object use by iterators</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Iterators</feature>
+            <feature>Console Logging</feature>
+         </features>
+      </test>
+      <test>
+         <name>JpfScopedFormsTest49</name>
+         <description>JpfScopedFormsTest49</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>JpfScopedFormsTest51</name>
+         <description>JpfScopedFormsTest51</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>JpfScopedFormsTest55</name>
+         <description>JpfScopedFormsTest55</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>JpfScopedFormsTest59</name>
+         <description>JpfScopedFormsTest59</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>JsAllScript</name>
+         <description>JSP Page containing all of the JavaScript components</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>ScriptContainer</feature>
+            <feature>Form</feature>
+            <feature>Focus</feature>
+            <feature>ImageAnchor</feature>
+            <feature>Anchor</feature>
+            <feature>Image</feature>
+            <feature>Image Rollover</feature>
+            <feature>TagId</feature>
+         </features>
+      </test>
+      <test>
+         <name>JsAllScriptHtml</name>
+         <description>JSP Page containing all of the JavaScript components, html tag reporting</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>HTML</feature>
+            <feature>Form</feature>
+            <feature>Focus</feature>
+            <feature>ImageAnchor</feature>
+            <feature>Anchor</feature>
+            <feature>Image</feature>
+            <feature>Image Rollover</feature>
+            <feature>TagId</feature>
+         </features>
+      </test>
+      <test>
+         <name>JsFind</name>
+         <description>Verify that javascript works against the selectbox</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>ScriptContainer</feature>
+            <feature>Select</feature>
+            <feature>JavaScript</feature>
+         </features>
+      </test>
+      <test>
+         <name>JsNoContainers</name>
+         <description>JSP Page containing all of the JavaScript components, no container to report</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Focus</feature>
+            <feature>ImageAnchor</feature>
+            <feature>Anchor</feature>
+            <feature>Image</feature>
+            <feature>Image Rollover</feature>
+            <feature>TagId</feature>
+         </features>
+      </test>
+      <test>
+         <name>jsScriptScopeId</name>
+         <description>Test that scope id works</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>ScriptContainer</feature>
+            <feature>ScopeId</feature>
+         </features>
+      </test>
+      <test>
+         <name>LabelDefaults</name>
+         <description>Test the default value on labels</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Label</feature>
+            <feature>DefaultValue</feature>
+         </features>
+      </test>
+      <test>
+         <name>LabelDefaultValues</name>
+         <description>Entities used in defaultValue are treated as literals</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Label</feature>
+            <feature>DefaultValue</feature>
+         </features>
+      </test>
+      <test>
+         <name>LabelLiteral</name>
+         <description>Test that verifies that the label escaping for HTML works</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Label</feature>
+            <feature>EscapeWhiteSpaceForHtml</feature>
+         </features>
+      </test>
+      <test>
+         <name>LabelStyles</name>
+         <description>Test of styles on a Label.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Label</feature>
+            <feature>Styles</feature>
+         </features>
+      </test>
+      <test>
+         <name>Lifecycle</name>
+         <description>Test of the page flow lifecycle.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Lifecycle</feature>
+         </features>
+      </test>
+      <test>
+         <name>LifecycleExceptions</name>
+         <description>Test of exceptions in the page flow lifecycle methods</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Lifecycle</feature>
+            <feature>Exceptions</feature>
+         </features>
+      </test>
+      <test>
+         <name>LinkNav</name>
+         <description>Test page flow navigation with links.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Postback</feature>
+            <feature>Anchor</feature>
+         </features>
+      </test>
+      <test>
+         <name>LocaleOverrideTest</name>
+         <description>Test overriding the browser's specified Locale with a custom Locale.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>I18n</feature>
+         </features>
+      </test>
+      <test>
+         <name>Message</name>
+         <description>Test of the message and MessageArg tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Message</feature>
+            <feature>MessageArgs</feature>
+         </features>
+      </test>
+      <test>
+         <name>MessageTagTest</name>
+         <description>Test the message / messageArg tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>MessageArgs</feature>
+         </features>
+      </test>
+      <test>
+         <name>MiscJpfTest13</name>
+         <description>MiscJpfTest13</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>MockPortal</name>
+         <description>Tests basic link navigation, form submittal, nesting, return-to, and scoping in our simulated portal.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>mockPortal</category>
+         </categories>
+         <features>
+            <feature>Scoping</feature>
+         </features>
+      </test>
+      <test>
+         <name>MockPortalListenTo</name>
+         <description>Tests 'listenTo' and exception handling under portal.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>mockPortal</category>
+         </categories>
+         <features>
+            <feature>Scoping</feature>
+         </features>
+      </test>
+      <test>
+         <name>ModuleConfigLocator</name>
+         <description>Test DynamicSubappActionServlet.ModuleConfigLocators, which allow the user to specify alternate locations for auto-registered Struts config files.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Struts</feature>
+         </features>
+      </test>
+      <test>
+         <name>MultiForms</name>
+         <description>Posting a form to different action which take differnt forms.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Postback</feature>
+            <feature>Form</feature>
+            <feature>ActionForms</feature>
+         </features>
+      </test>
+      <test>
+         <name>MultipleDatasource</name>
+         <description>Test of Compound expressions used as data source</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>HTML</feature>
+            <feature>DataSource</feature>
+            <feature>Expressions</feature>
+         </features>
+      </test>
+      <test>
+         <name>MultipleForms</name>
+         <description>Multiple forms on a single page</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Postback</feature>
+            <feature>Form</feature>
+         </features>
+      </test>
+      <test>
+         <name>MultiSelect</name>
+         <description>Simple test of multi-select binding to a page flow</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Select</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>NestedFormReturn</name>
+         <description>Test that multiple nested page flows can return the same action differentiated by the return form.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Nesting</feature>
+            <feature>Action</feature>
+            <feature>Form</feature>
+         </features>
+      </test>
+      <test>
+         <name>Nesting</name>
+         <description>Simple Nesting Tests.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Nesting</feature>
+            <feature>Return-to</feature>
+         </features>
+      </test>
+      <test>
+         <name>NestingRepeater</name>
+         <description>Verify that a repeater inside a repeater works.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Databinding</feature>
+            <feature>Nested Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>NestingScope</name>
+         <description>Verify that page flow state is not destroyed when a nested page flow is called.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Scoping</feature>
+            <feature>State</feature>
+            <feature>Nesting</feature>
+         </features>
+      </test>
+      <test>
+         <name>NonNormalizedPath</name>
+         <description>Test forwarding to paths that contain '.' and '..'.  Note: there is an EXPECTED 404 response in this test.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Forward</feature>
+         </features>
+      </test>
+      <test>
+         <name>NullableSelect</name>
+         <description>Verify that nullable select works</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+            <feature>Nullable</feature>
+         </features>
+      </test>
+      <test>
+         <name>OnTest</name>
+         <description>Test of the basic HTML event setters.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>JavaScript</feature>
+         </features>
+      </test>
+      <test>
+         <name>OverloadedActions</name>
+         <description>Returning from nested page flows, with and without forms, and to both normal and overloaded actions.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Nesting</feature>
+            <feature>Overloaded Actions</feature>
+            <feature>Form</feature>
+         </features>
+      </test>
+      <test>
+         <name>PadRepeater</name>
+         <description>Test of repeater padding and repeater choice.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>RepeaterPad</feature>
+            <feature>RepeaterChoice</feature>
+         </features>
+      </test>
+      <test>
+         <name>PageFlowUtils</name>
+         <description>Tests of utility methods in PageFlowUtils</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+         </features>
+      </test>
+      <test>
+         <name>PageInputTest1</name>
+         <description>PageInputTest1</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest10</name>
+         <description>PageInputTest10</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest12</name>
+         <description>PageInputTest12</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest14</name>
+         <description>PageInputTest14</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest18</name>
+         <description>PageInputTest18</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest19</name>
+         <description>PageInputTest19</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest20</name>
+         <description>PageInputTest20</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest21</name>
+         <description>PageInputTest21</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest22</name>
+         <description>PageInputTest22</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest23</name>
+         <description>PageInputTest23</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest24</name>
+         <description>PageInputTest24</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest25</name>
+         <description>PageInputTest25</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest26</name>
+         <description>PageInputTest26</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest29</name>
+         <description>PageInputTest29</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest3</name>
+         <description>PageInputTest3</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest5</name>
+         <description>PageInputTest5</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest6</name>
+         <description>PageInputTest6</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest7</name>
+         <description>PageInputTest7</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest8</name>
+         <description>PageInputTest8</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageInputTest9</name>
+         <description>PageInputTest9</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>PageScope</name>
+         <description>Verify that page flow state is cleaned up during goto from one page flow to another.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Scoping</feature>
+            <feature>State</feature>
+         </features>
+      </test>
+      <test>
+         <name>ParamEncoding</name>
+         <description>Verify parameter in a URL are encoded correctly.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Parameter</feature>
+            <feature>URL</feature>
+         </features>
+      </test>
+      <test>
+         <name>ParamMulti</name>
+         <description>Verify that multiple parameters with the same name are encoded in forms an anchors</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Parameter</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfErrors</name>
+         <description>Errors in the PageFlowController class</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfExceptions</name>
+         <description>Exception-handling in page flows</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Exceptions</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfForwards</name>
+         <description>Tests of all the ways to forward (relative, webapp-relative, URI, etc.), including redirects.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Forward</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfGlobalApp</name>
+         <description>PageFlow method tests of the global app</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>GlobalApp</feature>
+            <feature>Methods</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfLifecycle</name>
+         <description>Tests of all the PageFlow lifecycle methods</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <!--
+                <category>drt</category>
+-->
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Lifecycle</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfPageFlow</name>
+         <description>Call basic PageFlowController methods</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+         </features>
+      </test>
+      <test>
+         <name>pfPageInput</name>
+         <description>Tests the runtime effects of page-input annotations.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>PageInputs</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfPrevious</name>
+         <description>Report in a page the Previous Page Info</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Previous Page Info</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfReturnTo</name>
+         <description>Test return-to="..." with various combinations of Global.app, forms, nesting</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Return-to</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfScopeForm</name>
+         <description>Test page flow scoping of forms</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Form</feature>
+            <feature>Scoping</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfScoping</name>
+         <description>Test launching of page flows into different (independent) scopes.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Scoping</feature>
+         </features>
+      </test>
+      <test>
+         <name>PfSingleton</name>
+         <description>Test singleton page flows and frames support</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Singletons</feature>
+            <feature>Frames</feature>
+         </features>
+      </test>
+      <test>
+         <name>PostOnForward</name>
+         <description>PostOnForward</description>
+         <webapp>coreWeb</webapp>
+      </test>
+      <test>
+         <name>PrimitiveOptionsDS</name>
+         <description>Using optionsDataSource with primitive wrappers</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>OptionsDataSource</feature>
+         </features>
+      </test>
+      <test>
+         <name>RadioButtonError</name>
+         <description>RadioButton without a RadioButtonGroup parent.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>RadioButton</feature>
+         </features>
+      </test>
+      <test>
+         <name>ReadonlyAction</name>
+         <description>Test read-only actions, which do not cause a page flow to be replicated</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Read-only Actions</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeatCheck</name>
+         <description>Simple test of the repeater checkbox group</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>CheckBoxGroup</feature>
+            <feature>Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeatCheckOptionError</name>
+         <description>Error reporting in the CheckBoxOption inside a repeating CheckBoxGroup.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>CheckBoxGroup</feature>
+            <feature>CheckBoxOption</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeaterDataStructures</name>
+         <description>Tests rendering different types of data structures in the repeater with null, 0, 1, many item data sets.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Iterators</feature>
+            <feature>Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeaterDefaultText</name>
+         <description>Tests the defaultText attribute of the repeater tag.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>DefaultText</feature>
+            <feature>Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeaterErrors</name>
+         <description>Errors in the repeater.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeaterIgnoreNulls</name>
+         <description>Tests the ignoreNulls attribute of the repeater tag.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>IgnoreNulls</feature>
+            <feature>Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeaterNested</name>
+         <description>Tests nested repeaters.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Nested Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeaterPad</name>
+         <description>Tests the pad tag used inside of the repeater.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Repeater</feature>
+            <feature>RepeaterPad</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeaterPadError</name>
+         <description>Errors in the repeater pad.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>RepeaterPad</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeatRadio</name>
+         <description>Simple test of the repeater radioButton group</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>RadioButtonGroup</feature>
+            <feature>Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeatRadioOptionError</name>
+         <description>Error reporting in the RadioButtonOption inside a repeating RadioButtonGroup.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>RadioButtonGroup</feature>
+            <feature>RadioButtonOption</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeatSelect</name>
+         <description>Simple test of the repeater select</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+            <feature>Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>RepeatSelectTypeError</name>
+         <description>Error reporting in the SelectOption inside a repeating Select.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+            <feature>SelectOption</feature>
+            <feature>Repeater</feature>
+         </features>
+      </test>
+      <test>
+         <name>RestoreQueryString</name>
+         <description>Test of the restoreQueryString attribute, which restores the query string on a navigateTo=previousAction.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>NavigateTo</feature>
+         </features>
+      </test>
+      <test>
+         <name>ReturnToExceptions</name>
+         <description>Tests exceptions (NoPreviousPageException, NoPreviousActionException) caused by return-to="*".</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Return-to</feature>
+         </features>
+      </test>
+      <test>
+         <name>ReturnToTest28</name>
+         <description>ReturnToTest28</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest30</name>
+         <description>ReturnToTest30</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest31</name>
+         <description>ReturnToTest31</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest32</name>
+         <description>ReturnToTest32</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest33</name>
+         <description>ReturnToTest33</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest34</name>
+         <description>ReturnToTest34</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest35</name>
+         <description>ReturnToTest35</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest36</name>
+         <description>ReturnToTest36</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest37</name>
+         <description>ReturnToTest37</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest39</name>
+         <description>ReturnToTest39</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest40</name>
+         <description>ReturnToTest40</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest41</name>
+         <description>ReturnToTest41</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest42</name>
+         <description>ReturnToTest42</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest44</name>
+         <description>ReturnToTest44</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest45</name>
+         <description>ReturnToTest45</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest46</name>
+         <description>ReturnToTest46</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest47</name>
+         <description>ReturnToTest47</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest48</name>
+         <description>ReturnToTest48</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ReturnToTest63</name>
+         <description>ReturnToTest63</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>RewriteNameVar</name>
+         <description>Verify that the resultID attribute.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>RewriteName</feature>
+            <feature>ResultId</feature>
+         </features>
+      </test>
+      <test>
+         <name>RewriteTags</name>
+         <description>Test that a the default behavior of rewriteName and rewriteURL work.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>RewriteName</feature>
+            <feature>RewriteURL</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeBindingError</name>
+         <description>Rich Tree Binding Errors</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeClientContent</name>
+         <description>TreeContent test with runAtClient on</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeContent</feature>
+            <feature>RunAtClient</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeClientContentAnchor</name>
+         <description>TreeContent test with anchors and with runAtClient on</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeContent</feature>
+            <feature>Anchor</feature>
+            <feature>RunAtClient</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeContent</name>
+         <description>Base test of TreeContent</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeContent</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeContentAnchor</name>
+         <description>Base test of TreeContent with anchors</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeContent</feature>
+            <feature>Anchor</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeDisabled</name>
+         <description>Test of the disable attribute on a treeItem</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>RichTreeDynamicBaseTree</name>
+         <description>Dynamically created Tree</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Dynamic Creation</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeEmptyTree</name>
+         <description>Empty Tree Error reporting</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeHref</name>
+         <description>Test of the Href and Target attributes</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>RichTreeInvalidLayout</name>
+         <description>Invalid layout in the 8.1 tree, cr180331</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Bug</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeLongLabels</name>
+         <description>Long labels cause layout issues in 8.1, cr182056</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Bug</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeOverride</name>
+         <description>Test of the treePropertyOverride tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>RichTreeOverrideTwo</name>
+         <description>Test of the treePropertyOverride tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>RichTreeRunAtClient</name>
+         <description>Tree runAtClient behavior</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>RunAtClient</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeSelectionStyle</name>
+         <description>Tree currently selected item styles</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Select</feature>
+            <feature>Styles</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeStaticBaseTree</name>
+         <description>Base Tree defined statically through a JSP</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Static Definition</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeTreeHtml</name>
+         <description>Setting the label through body content on the TreeItem tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeItem</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeTreeHtmlTwo</name>
+         <description>Setting the label through body content on the TreeItem tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeItem</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeTreeStyle</name>
+         <description>Setting styles on trees</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Styles</feature>
+         </features>
+      </test>
+      <test>
+         <name>RichTreeWriteTreeError</name>
+         <description>Error writting the tree to the property</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>Roles</name>
+         <description>Test roles-allowed.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Roles</feature>
+            <feature>Security</feature>
+         </features>
+      </test>
+      <test>
+         <name>RtexpTagId</name>
+         <description>Verify that runtime expression on tagId attributes work</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>TagId</feature>
+            <feature>Expressions</feature>
+         </features>
+      </test>
+      <test>
+         <name>RuntimeErrors</name>
+         <description>Verify basic runtimeErorrs tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>ScopedJpfTest1</name>
+         <description>ScopedJpfTest1</description>
+         <webapp>coreWeb</webapp>
+      </test>
+      <test>
+         <name>SecureLinks</name>
+         <description>Test of secure links from various tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Tags</feature>
+            <feature>Security</feature>
+         </features>
+      </test>
+      <test>
+         <name>Security</name>
+         <description>Security Test</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Security</feature>
+         </features>
+      </test>
+      <test>
+         <name>Select</name>
+         <description>Test directly binding select boxes to page flows.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+            <feature>Binding</feature>
+         </features>
+      </test>
+      <test>
+         <name>SerializeXMLTag</name>
+         <description>Tests the SerializeXML tag.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>XMLBeans</feature>
+         </features>
+      </test>
+      <test>
+         <name>SessionBean</name>
+         <description>Using the scope to defined the bean type</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Scoping</feature>
+            <feature>ActionForms</feature>
+         </features>
+      </test>
+      <test>
+         <name>SimpleExpressionTest</name>
+         <description>SimpleExpressionTest</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>simplerepeater</name>
+         <description>Simple smoketest of the repeater running on WLS; this test is shared with Tomcat.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsFormBeanTest1</name>
+         <description>StrutsFormBeanTest1</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsFormBeanTest2</name>
+         <description>StrutsFormBeanTest2</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsInteropTest1</name>
+         <description>StrutsInteropTest1</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsInteropTest2</name>
+         <description>StrutsInteropTest2</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsInteropTest3</name>
+         <description>StrutsInteropTest3</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsInteropTest4</name>
+         <description>StrutsInteropTest4</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsInteropTest5</name>
+         <description>StrutsInteropTest5</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsMergeTest2</name>
+         <description>StrutsMergeTest2</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsMergeTest3</name>
+         <description>StrutsMergeTest3</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsMergeTest4</name>
+         <description>StrutsMergeTest4</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsMergeTest6</name>
+         <description>StrutsMergeTest6</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsMergeTest62</name>
+         <description>StrutsMergeTest62</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsMergeTest6Error</name>
+         <description>StrutsMergeTest6Error</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsMergeTest7</name>
+         <description>StrutsMergeTest7</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>StrutsMergeTest8</name>
+         <description>StrutsMergeTest8</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>Style</name>
+         <description>Test of the Style attribute.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Styles</feature>
+         </features>
+      </test>
+      <test>
+         <name>StyleClass</name>
+         <description>Test of the StyleClass attribute.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Styles</feature>
+         </features>
+      </test>
+      <test>
+         <name>StyleOptions</name>
+         <description>Test of the label styles for CheckBoxGroup and RadioButtonGroup</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Styles</feature>
+         </features>
+      </test>
+      <test>
+         <name>TagIds</name>
+         <description>Test of the tagId attributes on all of the non-form tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>TagId</feature>
+         </features>
+      </test>
+      <test>
+         <name>TagImage</name>
+         <description>Errors generated by the Image Tag, displayed in-line</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>Image</feature>
+            <feature>Errors</feature>
+            <feature>Display in-line</feature>
+         </features>
+      </test>
+      <test>
+         <name>TagImageHtml</name>
+         <description>Errors generated by the Image Tag, displayed in the footer</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>Image</feature>
+            <feature>Errors</feature>
+            <feature>Repeater</feature>
+            <feature>RepeaterFooter</feature>
+         </features>
+      </test>
+      <test>
+         <name>TagIteration</name>
+         <description>Iterators over single items</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>CheckBoxGroup</feature>
+            <feature>Select</feature>
+            <feature>RadioButtonGroup</feature>
+            <feature>OptionsDataSource</feature>
+            <feature>Iterators</feature>
+         </features>
+      </test>
+      <test>
+         <name>TagSizeBinding</name>
+         <description>Binding to the size attributes on the tags</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>tags</category>
+         </categories>
+         <features>
+            <feature>Image</feature>
+            <feature>ImageAnchor</feature>
+            <feature>ImageButton</feature>
+            <feature>Select</feature>
+            <feature>TextBox</feature>
+            <feature>TextArea</feature>
+            <feature>Databinding</feature>
+         </features>
+      </test>
+      <test>
+         <name>TempException</name>
+         <description>Throwing an exception from inside a template</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Exceptions</feature>
+         </features>
+      </test>
+      <test>
+         <name>TempNegate</name>
+         <description>Test of the visible tag and the negate attribute</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Visible</feature>
+            <feature>Negate</feature>
+         </features>
+      </test>
+      <test>
+         <name>TempNest</name>
+         <description>Test of nested templates</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Nesting</feature>
+         </features>
+      </test>
+      <test>
+         <name>TempRelative</name>
+         <description>Test of relative templates</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+         </features>
+      </test>
+      <test>
+         <name>TempTest1</name>
+         <description>A simple template test.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+         </features>
+      </test>
+      <test>
+         <name>TempTest2</name>
+         <description>Section not found for template.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>TempTest3</name>
+         <description>Section without content found for template.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>TempVisibility</name>
+         <description>Section and Title databound and Sections may be visible or not</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Section</feature>
+            <feature>Visible</feature>
+            <feature>Databinding</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttribute1</name>
+         <description>Verification test of the TreeAttribute tag - apply to nodes</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttribute2</name>
+         <description>Verification test of the TreeAttribute tag - apply to descendents</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttribute3</name>
+         <description>Verification test of the TreeAttribute tag - apply to descendents and override</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttribute4</name>
+         <description>Verification test of the TreeAttribute tag - descendent attributes overridden by element scoped</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttribute5</name>
+         <description>Verification test of the TreeAttribute tag - descendent attributes overridden by multiple element scoped</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttribute6</name>
+         <description>Verification test of the TreeAttribute tag - multiple descendents in the same hierarchy</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttribute7</name>
+         <description>Verification test of the TreeAttribute tag - multiple descendents in the same hierarchy with local scoped attributes</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttribute8</name>
+         <description>Verification test of the TreeAttribute tag - single descendent with multiple element scoped attributes</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeAttributeBits</name>
+         <description>Verify that booleans work in the TreeHtmlAttributeInfo class</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>TreeHtmlAttributeInfo</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeMultiAttr1</name>
+         <description>Basic verification that setting multiple attribute with the treeHtmlAttribute</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeHtmlAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeMultiAttr2</name>
+         <description>Verification that a multi can override a single descendent.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeHtmlAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeMultiAttr3</name>
+         <description>Verification that of multi descendent.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeHtmlAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeMultiAttr4</name>
+         <description>Multi descedent overriding multi descendent.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeHtmlAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>TreeMultiAttr5</name>
+         <description>Multi descedent overriding multi descendent on overlapping attributes.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>trees</category>
+         </categories>
+         <features>
+            <feature>Tree</feature>
+            <feature>TreeHtmlAttribute</feature>
+         </features>
+      </test>
+      <test>
+         <name>UnhandledException</name>
+         <description>An Unhandled Exception error.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>errorTests</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Exceptions</feature>
+         </features>
+      </test>
+      <test>
+         <name>UrlBinding</name>
+         <description>Test of binding to the {url} context.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>URL</feature>
+            <feature>Databinding</feature>
+         </features>
+      </test>
+      <test>
+         <name>ValFwdErrTest54</name>
+         <description>ValFwdErrTest54</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ValFwdErrTest56</name>
+         <description>ValFwdErrTest56</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ValFwdErrTest57</name>
+         <description>ValFwdErrTest57</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>ValFwdErrTest58</name>
+         <description>ValFwdErrTest58</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>qaTests</category>
+         </categories>
+      </test>
+      <test>
+         <name>Validate</name>
+         <description>A simple test of validation in a Form.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Validation</feature>
+         </features>
+      </test>
+      <test>
+         <name>Validation2</name>
+         <description>Tests of basic validation and validation using the Struts ValidatorPlugIn (as well as netui:error, netui:errors).</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Form</feature>
+            <feature>Validation</feature>
+         </features>
+      </test>
+      <test>
+         <name>Visible</name>
+         <description>Test of using the Visible tag in a template</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Visible</feature>
+            <feature>Databinding</feature>
+         </features>
+      </test>
+      <test>
+         <name>VisibleError</name>
+         <description>Error databinding the Visible tag</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>templates</category>
+         </categories>
+         <features>
+            <feature>Templates</feature>
+            <feature>Visible</feature>
+            <feature>Errors</feature>
+         </features>
+      </test>
+      <test>
+         <name>WebinfSrc</name>
+         <description>Test of server support for page flows in WEB-INF/src.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+         </features>
+      </test>
+      <test>
+         <name>XhtmlAnchor</name>
+         <description>Validation of the XHTML for Anchors</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>xhtml</category>
+         </categories>
+         <features>
+            <feature>Anchor</feature>
+            <feature>XHTML</feature>
+         </features>
+      </test>
+      <test>
+         <name>XhtmlCheckBox</name>
+         <description>Validation of the XHTML for Checkbox and CheckboxGroup</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>xhtml</category>
+         </categories>
+         <features>
+            <feature>CheckBox</feature>
+            <feature>CheckBoxGroup</feature>
+            <feature>XHTML</feature>
+         </features>
+      </test>
+      <test>
+         <name>XhtmlFormLabel</name>
+         <description>Validation of the XHTML for FormLabel</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>xhtml</category>
+         </categories>
+         <features>
+            <feature>FormLabel</feature>
+            <feature>XHTML</feature>
+         </features>
+      </test>
+      <test>
+         <name>XhtmlImage</name>
+         <description>Validation of the XHTML for Image</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>xhtml</category>
+         </categories>
+         <features>
+            <feature>Image</feature>
+            <feature>XHTML</feature>
+         </features>
+      </test>
+      <test>
+         <name>XhtmlLabel</name>
+         <description>Validation of the XHTML for Label</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>xhtml</category>
+         </categories>
+         <features>
+            <feature>Label</feature>
+            <feature>XHTML</feature>
+         </features>
+      </test>
+      <test>
+         <name>XhtmlRadio</name>
+         <description>Validation of the XHTML for RadioButton and RadioButtonGroup</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>xhtml</category>
+         </categories>
+         <features>
+            <feature>RadioButtonOption</feature>
+            <feature>RadioButtonGroup</feature>
+            <feature>XHTML</feature>
+         </features>
+      </test>
+      <test>
+         <name>XhtmlSelect</name>
+         <description>Validation of the XHTML for Select</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>xhtml</category>
+         </categories>
+         <features>
+            <feature>Select</feature>
+            <feature>XHTML</feature>
+         </features>
+      </test>
+   </tests>
+</testDefinitions>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-webapp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/config/testRecorder-webapp.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<server xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <name>drt-test</name>
+    <hostname>localhost</hostname>
+    <port>8080</port>
+    <webapps>
+        <webapp>
+            <name>coreWeb</name>
+            <description>NetUI DRT application</description>
+            <testMode>true</testMode>
+            <contextRoot>/coreWeb</contextRoot>
+            <testDefinitionsDirectory>@DOMAIN_DIR@/drt/testRecorder/tests</testDefinitionsDirectory>
+        </webapp>
+    </webapps>
+</server>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Accesskey.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Accesskey.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Accesskey</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>02 Jul 2004, 05:39:16.415 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/accesskey/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-7e178913:fd81d916f9:-6bc8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Access Key Test</h4>
+        <p style="color:green">
+        This test defines a set of access keys that allow access to the various page components.  The access keys are marked
+        next to the component.  These don't always work for every type of component.
+        </p>
+        <a href="/coreWeb/tags/accesskey/begin.do" accesskey="H"><b>(H)</b>ome</a>
+        <br>
+        <a href="/coreWeb/tags/accesskey/post.do" accesskey="P"><b>(P)</b>ost</a>
+        <br>
+        <a href="/coreWeb/tags/accesskey/begin.do"><img src="/coreWeb/tags/accesskey/./folder.gif" accesskey="W"></a><b>(W)</b>
+        <form name="myBean" action="/coreWeb/tags/accesskey/post.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Color:</td>
+                    <td>
+                    
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.color}" value="foo" accesskey="8" alt="PageFlow Text for Alt"><span>foo</span> <b>(8)</b><br/>
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.color}" value="bar" accesskey="9" alt="PageFlow Text for Alt"><span>bar</span> <b>(9)</b><br/>
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.color}" value="baz" accesskey="0" alt="PageFlow Text for Alt"><span>baz</span> <b>(0)</b><br/>
+                    
+                   </td>
+                </tr>
+                <tr valign="top">
+                    <td>Des<b>(C)</b>ription:</td>
+                    <td>
+                    <textarea name="{actionForm.description}" accesskey="C"></textarea>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td><b>(D)</b>isabled:</td>
+                    <td>
+                    <input type="hidden" name="wlw-checkbox_key:{actionForm.disabled}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.disabled}" accesskey="D" alt="PageFlow Text for Alt">
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>na<b>(M)</b>e:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="" accesskey="M" alt="PageFlow Text for Alt">
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td><b>(K)</b>ype:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}" accesskey="K">
+<option value="foo">foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option></select>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Attributes:</td>
+                    <td>
+                    <input type="hidden" name="wlw-checkbox_group_key:{actionForm.attributes}OldValue" value="true">
+                        <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="fenders" accesskey="1" alt="PageFlow Text for Alt"><span>fenders</span> <b>(1)</b><br/>
+                        <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="wheels" accesskey="2" alt="PageFlow Text for Alt"><span>wheels</span> <b>(2)</b><br/>
+                        <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="windows" accesskey="3" alt="PageFlow Text for Alt"><span>windows</span> <b>(3)</b><br/>
+                    
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Form Submit" accesskey="F" alt="PageFlow Text for Alt"><b>(F)</b>
+            <input type="Reset" value="Reset" accesskey="R" alt="PageFlow Text for Alt"><b>(R)</b>
+            <input type="image" src="/coreWeb/tags/accesskey/./folder.gif" accesskey="X"><b>(X)</b>
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/accesskey/post.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:{actionForm.attributes}</ses:name>
+                  <ses:value>fenders</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:{actionForm.attributes}</ses:name>
+                  <ses:value>wheels</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:{actionForm.attributes}</ses:name>
+                  <ses:value>windows</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:{actionForm.attributes}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{actionForm.disabled}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{actionForm.disabled}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-radio_button_group_key:{actionForm.color}</ses:name>
+                  <ses:value>foo</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.type}</ses:name>
+                  <ses:value>foo</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.type}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.description}</ses:name>
+                  <ses:value>kkk</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.name}</ses:name>
+                  <ses:value>ss</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>3A2C999EC2DE4301913A4AB04CAB1310</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>563</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=3A2C999EC2DE4301913A4AB04CAB1310</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-7e178913:fd81d916f9:-6bc8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/tags/accesskey/begin.do" accesskey="H">Home</a><br/>
+        <b>Attributes:</b><br/>
+        <ol>
+                <li>
+                    <span>fenders</span>
+                </li>
+            
+                <li>
+                    <span>wheels</span>
+                </li>
+            
+                <li>
+                    <span>windows</span>
+                </li>
+            </ol><br>
+        <b>Color:</b> <span>foo</span><br/>
+        <b>Description:</b> <span>kkk</span><br/>
+        <b>Disabled:</b> <span>true</span><br/>
+        <b>Name:</b> <span>ss</span><br/>
+        <b>Type:</b> <span>foo</span><br/>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>02 Jul 2004, 05:39:17.426 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>1</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AccesskeyGroup.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AccesskeyGroup.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>AccesskeyGroup</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:18:21.526 PM MST</startDate>
+  <description>test of the accesskey on the group tags.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/accesskeyGroup/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ff1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <br>
+        <form name="myBean" action="/coreWeb/tags/accesskeyGroup/post.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Attributes:</td>
+                    <td>
+                    <input type="hidden" name="wlw-checkbox_group_key:{actionForm.attributes}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="fenders" accesskey="1" alt="finders"><span>fenders (1)</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="wheels" accesskey="2" alt="wheels"><span>wheels (2)</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.attributes}" value="windows" accesskey="3" alt="windows"><span>windows (3)</span><br>
+
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="radio" name="wlw-radio_button_group_key:{actionForm.type}" value="red" accesskey="A" alt="red"><span>red (a)</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.type}" value="blue" accesskey="B" alt="blue"><span>blue (b)</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.type}" value="yellow" accesskey="C" alt="yellow"><span>yellow (c)</span><br>
+
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="post">
+        </form>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/accesskeyGroup/post.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.attributes}</name>
+          <value>fenders</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.attributes}</name>
+          <value>wheels</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.attributes}</name>
+          <value>windows</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.attributes}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.type}</name>
+          <value>yellow</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>305</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ff1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/tags/accesskeyGroup/begin.do" accesskey="H">Home</a><br/>
+        <b>Attributes:</b><br/>
+        <ol>
+                <li>
+                    <span>fenders</span>
+                </li>
+            
+                <li>
+                    <span>wheels</span>
+                </li>
+            
+                <li>
+                    <span>windows</span>
+                </li>
+            </ol><br>
+        <b>Type:</b> <span>yellow</span><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:18:24.871 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ActionChaining.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ActionChaining.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ActionChaining</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:18:25.532 PM MST</startDate>
+  <description>Test of passing forms and pageflow-scoped forms with action chaining.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/ActionChainingController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        <h3>Action Chaining</h3>
+        
+        <a href="/coreWeb/miniTests/actionChaining/action1a.do">pageflow-scoped action -> non-pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action2a.do">non-pageflow-scoped action -> pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action3a.do">pageflow-scoped action -> non-pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action4a.do">non-pageflow-scoped action -> pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action5a.do">pass an incompatible form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/action1a.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        Forms were the same?  <b><span>false</span></b>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/begin.do">back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        <h3>Action Chaining</h3>
+        
+        <a href="/coreWeb/miniTests/actionChaining/action1a.do">pageflow-scoped action -> non-pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action2a.do">non-pageflow-scoped action -> pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action3a.do">pageflow-scoped action -> non-pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action4a.do">non-pageflow-scoped action -> pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action5a.do">pass an incompatible form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/action2a.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        Forms were the same?  <b><span>false</span></b>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/begin.do">back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        <h3>Action Chaining</h3>
+        
+        <a href="/coreWeb/miniTests/actionChaining/action1a.do">pageflow-scoped action -> non-pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action2a.do">non-pageflow-scoped action -> pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action3a.do">pageflow-scoped action -> non-pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action4a.do">non-pageflow-scoped action -> pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action5a.do">pass an incompatible form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/action3a.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        Forms were the same?  <b><span>true</span></b>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/begin.do">back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        <h3>Action Chaining</h3>
+        
+        <a href="/coreWeb/miniTests/actionChaining/action1a.do">pageflow-scoped action -> non-pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action2a.do">non-pageflow-scoped action -> pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action3a.do">pageflow-scoped action -> non-pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action4a.do">non-pageflow-scoped action -> pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action5a.do">pass an incompatible form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/action4a.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        Forms were the same?  <b><span>true</span></b>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/begin.do">back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Action Chaining
+        </title>
+    </head>
+    <body>
+        <h3>Action Chaining</h3>
+        
+        <a href="/coreWeb/miniTests/actionChaining/action1a.do">pageflow-scoped action -> non-pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action2a.do">non-pageflow-scoped action -> pageflow-scoped action</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action3a.do">pageflow-scoped action -> non-pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action4a.do">non-pageflow-scoped action -> pageflow-scoped action, with form explicitly passed</a>
+        <br>
+        <a href="/coreWeb/miniTests/actionChaining/action5a.do">pass an incompatible form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/actionChaining/action5a.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7fec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - No Matching Action Method</title></head>
+ <body>
+ <h1>Page Flow Error - No Matching Action Method</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/miniTests/actionChaining/ActionChainingController.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>action5b</td></tr>
+ <tr><td><b>Form:</b></td><td>miniTests.actionChaining.ActionChainingController$SomeForm</td></tr>
+ </table><br />
+ <span style="color:red">Could not find matching action method for action=<b>action5b</b>, form=<b>miniTests.actionChaining.ActionChainingController$SomeForm</b>.</span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:18:33.574 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>10</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>9</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ActionInterceptors.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ActionInterceptors.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1326 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ActionInterceptors</sessionName>
+  <tester>rich</tester>
+  <startDate>17 May 2004, 03:57:53.446 PM GMT-07:00</startDate>
+  <description>Tests action interceptors.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/InterceptorsController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    
+    <h3>Action Interceptors</h3>
+
+    
+            Messages:
+            <ul>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+    
+    <br>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptWithNestedFlow.do">interceptWithNestedFlow</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptBeforeAction.do">interceptBeforeAction</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptAfterAction.do">interceptAfterAction</a>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/interceptWithNestedFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body bgcolor="#ccffff">
+    <h3>Nested</h3>
+
+
+    <a href="/coreWeb/miniTests/interceptors/nested/done.do">return, and raise this nested page flow's return-action</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/nested/done.do?returnToOriginalPage=true">return, and go to originally-intended page</a>
+    
+    
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/nested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+
+    Returned from the nested page flow (action "nestedDone" raised).
+    <br>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/begin.do">back to start</a>
+
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    
+    <h3>Action Interceptors</h3>
+
+    
+            Messages:
+            <ul>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptWithNestedFlow.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): sending to nested page flow /miniTests/interceptors/nested/NestedController.jpf.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (post-intercept): before returning action nestedDone.  Original URI = /miniTests/interceptors/interceptWithNestedFlow.do</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action nestedDone.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action nestedDone.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action nestedDone.  Original URI = /nestedDone.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action nestedDone.  Original URI = /nestedDone.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+    
+    <br>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptWithNestedFlow.do">interceptWithNestedFlow</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptBeforeAction.do">interceptBeforeAction</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptAfterAction.do">interceptAfterAction</a>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/interceptWithNestedFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body bgcolor="#ccffff">
+    <h3>Nested</h3>
+
+
+    <a href="/coreWeb/miniTests/interceptors/nested/done.do">return, and raise this nested page flow's return-action</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/nested/done.do?returnToOriginalPage=true">return, and go to originally-intended page</a>
+    
+    
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/nested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>returnToOriginalPage</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    
+    <h3>Action Interceptors</h3>
+
+    
+            Messages:
+            <ul>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptWithNestedFlow.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): sending to nested page flow /miniTests/interceptors/nested/NestedController.jpf.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (post-intercept): before returning action nestedDone.  Original URI = /miniTests/interceptors/interceptWithNestedFlow.do</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action nestedDone.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action nestedDone.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action nestedDone.  Original URI = /nestedDone.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action nestedDone.  Original URI = /nestedDone.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptWithNestedFlow.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): sending to nested page flow /miniTests/interceptors/nested/NestedController.jpf.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (post-intercept): before returning action nestedDone.  Original URI = /miniTests/interceptors/interceptWithNestedFlow.do</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action interceptWithNestedFlow.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action interceptWithNestedFlow.  Original URI = /index.jsp</span></li>
+        
+    
+    <br>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptWithNestedFlow.do">interceptWithNestedFlow</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptBeforeAction.do">interceptBeforeAction</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptAfterAction.do">interceptAfterAction</a>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/interceptBeforeAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+
+    Intercepted!
+    
+    <br>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/begin.do">start over</a>
+
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    
+    <h3>Action Interceptors</h3>
+
+    
+            Messages:
+            <ul>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptWithNestedFlow.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): sending to nested page flow /miniTests/interceptors/nested/NestedController.jpf.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (post-intercept): before returning action nestedDone.  Original URI = /miniTests/interceptors/interceptWithNestedFlow.do</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action nestedDone.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action nestedDone.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action nestedDone.  Original URI = /nestedDone.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action nestedDone.  Original URI = /nestedDone.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptWithNestedFlow.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): sending to nested page flow /miniTests/interceptors/nested/NestedController.jpf.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (post-intercept): before returning action nestedDone.  Original URI = /miniTests/interceptors/interceptWithNestedFlow.do</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action interceptWithNestedFlow.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action interceptWithNestedFlow.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptBeforeAction.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action interceptBeforeAction.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action interceptBeforeAction: sending to intercepted.jsp.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+    
+    <br>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptWithNestedFlow.do">interceptWithNestedFlow</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptBeforeAction.do">interceptBeforeAction</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptAfterAction.do">interceptAfterAction</a>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/interceptAfterAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+
+    Intercepted!
+    
+    <br>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/begin.do">start over</a>
+
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/interceptors/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f7b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    
+    <h3>Action Interceptors</h3>
+
+    
+            Messages:
+            <ul>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptWithNestedFlow.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): sending to nested page flow /miniTests/interceptors/nested/NestedController.jpf.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (post-intercept): before returning action nestedDone.  Original URI = /miniTests/interceptors/interceptWithNestedFlow.do</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action nestedDone.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action nestedDone.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action nestedDone.  Original URI = /nestedDone.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action nestedDone.  Original URI = /nestedDone.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptWithNestedFlow.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): sending to nested page flow /miniTests/interceptors/nested/NestedController.jpf.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (post-intercept): before returning action nestedDone.  Original URI = /miniTests/interceptors/interceptWithNestedFlow.do</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action interceptWithNestedFlow.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action interceptWithNestedFlow.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptBeforeAction.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action interceptBeforeAction.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action interceptBeforeAction: sending to intercepted.jsp.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action interceptAfterAction.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action interceptAfterAction.  Original URI = null</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action interceptAfterAction.  Original URI = /neverGetHere.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action interceptAfterAction.  Original URI = /neverGetHere.jsp</span></li>
+        
+            <li><span style="color:blue">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action interceptAfterAction: sending to intercepted.jsp.  Original URI = /neverGetHere.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$BeforeInterceptor2 (intercept): before action begin.  Original URI = null</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+            <li><span style="color:green">class miniTests.interceptors.InterceptorsController$AfterInterceptor2 (intercept): after action begin.  Original URI = /index.jsp</span></li>
+        
+    
+    <br>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptWithNestedFlow.do">interceptWithNestedFlow</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptBeforeAction.do">interceptBeforeAction</a>
+    <br>
+    <a href="/coreWeb/miniTests/interceptors/interceptAfterAction.do">interceptAfterAction</a>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>17 May 2004, 03:57:55.649 PM GMT-07:00</endDate>
+  <sessionStatus>pass</sessionStatus>
+  <testCount>10</testCount>
+  <passedCount>10</passedCount>
+  <failedCount>0</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Anchor.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Anchor.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,863 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Anchor</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>02 Jul 2004, 07:31:54.294 AM MDT</ses:startDate>
+   <ses:description>Test of Anchors</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Test of Anchor</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/Begin.jsp">
+</head>
+<body>
+<a id="Top" name="Top"></a>
+<h4>Anchor Tests</h4>
+<p style="color:green">
+This is a set of tests of anchors.  The following anchors will navigate to a target page.  At the
+top and the bottom of the page are anchors which use the <b>linkName</b> attribute.
+<br>
+Anchor supports <b>action</b> and <b>href</b> as the primary means of navigation.  In addition
+<b>linkName</b> can also be used to navigate within a page.  To create a named anchor, you simply
+set the <b>tagId</b> attribute and nothing else.  This creates an anchor that can be a target
+of another anchor.  Finally, the <b>location</b> attribute many be used with the <b>href</b>
+attribute to create an anchor of the form of href#location.  The <b>location</b> attribute does
+not work with an <b>action</b> attribute.
+</p>
+<ul>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>action</b></li>
+<li><a href="/coreWeb/tags/anchor/simpleAction.do">Navigate</a> --
+        Navigation through a <b>Simple Action</b></li>
+<li><a href="/coreWeb/tags/anchor/myForward.jsp">Navigate</a> --
+        Navigation through an <b>href</b> directly to the JSP</li>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>href</b> to the action</li>
+<li><a href="#Label">Navigate</a> --
+        Navigate to a link on this page through an <b>linkName</b></li>
+</ul>
+<p>There is a bunch of blank space to create a target on the bottom of the page</p>
+<hr />
+<div style="height: 500px">
+<p>Spacer Div</p>
+</div>
+<hr />
+<p>
+This is a named location 'Label'.  The link will take you back to the top of the page<br>
+<a id="Label" name="Label"></a>
+<a href="#Top">Go To Top</a>
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/navigate.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/tags/anchor/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Forward Target</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/myForward.jsp">
+</head>
+<body>
+<a href="#Top"></a>
+<h4>Forward Target</h4>
+<p>
+<a href="/coreWeb/tags/anchor/begin.do">Home</a> Use an explicit <b>href</b> contain action<br>
+<a href="/coreWeb/tags/anchor/Begin.jsp#Label">Home</a>
+        Go to the bottom of the Home page using the <b>location</b><br />
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/tags/anchor/navigate.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Test of Anchor</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/Begin.jsp">
+</head>
+<body>
+<a id="Top" name="Top"></a>
+<h4>Anchor Tests</h4>
+<p style="color:green">
+This is a set of tests of anchors.  The following anchors will navigate to a target page.  At the
+top and the bottom of the page are anchors which use the <b>linkName</b> attribute.
+<br>
+Anchor supports <b>action</b> and <b>href</b> as the primary means of navigation.  In addition
+<b>linkName</b> can also be used to navigate within a page.  To create a named anchor, you simply
+set the <b>tagId</b> attribute and nothing else.  This creates an anchor that can be a target
+of another anchor.  Finally, the <b>location</b> attribute many be used with the <b>href</b>
+attribute to create an anchor of the form of href#location.  The <b>location</b> attribute does
+not work with an <b>action</b> attribute.
+</p>
+<ul>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>action</b></li>
+<li><a href="/coreWeb/tags/anchor/simpleAction.do">Navigate</a> --
+        Navigation through a <b>Simple Action</b></li>
+<li><a href="/coreWeb/tags/anchor/myForward.jsp">Navigate</a> --
+        Navigation through an <b>href</b> directly to the JSP</li>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>href</b> to the action</li>
+<li><a href="#Label">Navigate</a> --
+        Navigate to a link on this page through an <b>linkName</b></li>
+</ul>
+<p>There is a bunch of blank space to create a target on the bottom of the page</p>
+<hr />
+<div style="height: 500px">
+<p>Spacer Div</p>
+</div>
+<hr />
+<p>
+This is a named location 'Label'.  The link will take you back to the top of the page<br>
+<a id="Label" name="Label"></a>
+<a href="#Top">Go To Top</a>
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/simpleAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/tags/anchor/begin.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Forward Target</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/myForward.jsp">
+</head>
+<body>
+<a href="#Top"></a>
+<h4>Forward Target</h4>
+<p>
+<a href="/coreWeb/tags/anchor/begin.do">Home</a> Use an explicit <b>href</b> contain action<br>
+<a href="/coreWeb/tags/anchor/Begin.jsp#Label">Home</a>
+        Go to the bottom of the Home page using the <b>location</b><br />
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/tags/anchor/simpleAction.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Test of Anchor</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/Begin.jsp">
+</head>
+<body>
+<a id="Top" name="Top"></a>
+<h4>Anchor Tests</h4>
+<p style="color:green">
+This is a set of tests of anchors.  The following anchors will navigate to a target page.  At the
+top and the bottom of the page are anchors which use the <b>linkName</b> attribute.
+<br>
+Anchor supports <b>action</b> and <b>href</b> as the primary means of navigation.  In addition
+<b>linkName</b> can also be used to navigate within a page.  To create a named anchor, you simply
+set the <b>tagId</b> attribute and nothing else.  This creates an anchor that can be a target
+of another anchor.  Finally, the <b>location</b> attribute many be used with the <b>href</b>
+attribute to create an anchor of the form of href#location.  The <b>location</b> attribute does
+not work with an <b>action</b> attribute.
+</p>
+<ul>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>action</b></li>
+<li><a href="/coreWeb/tags/anchor/simpleAction.do">Navigate</a> --
+        Navigation through a <b>Simple Action</b></li>
+<li><a href="/coreWeb/tags/anchor/myForward.jsp">Navigate</a> --
+        Navigation through an <b>href</b> directly to the JSP</li>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>href</b> to the action</li>
+<li><a href="#Label">Navigate</a> --
+        Navigate to a link on this page through an <b>linkName</b></li>
+</ul>
+<p>There is a bunch of blank space to create a target on the bottom of the page</p>
+<hr />
+<div style="height: 500px">
+<p>Spacer Div</p>
+</div>
+<hr />
+<p>
+This is a named location 'Label'.  The link will take you back to the top of the page<br>
+<a id="Label" name="Label"></a>
+<a href="#Top">Go To Top</a>
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/myForward.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/tags/anchor/begin.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Forward Target</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/myForward.jsp">
+</head>
+<body>
+<a href="#Top"></a>
+<h4>Forward Target</h4>
+<p>
+<a href="/coreWeb/tags/anchor/begin.do">Home</a> Use an explicit <b>href</b> contain action<br>
+<a href="/coreWeb/tags/anchor/Begin.jsp#Label">Home</a>
+        Go to the bottom of the Home page using the <b>location</b><br />
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/tags/anchor/myForward.jsp</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Test of Anchor</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/Begin.jsp">
+</head>
+<body>
+<a id="Top" name="Top"></a>
+<h4>Anchor Tests</h4>
+<p style="color:green">
+This is a set of tests of anchors.  The following anchors will navigate to a target page.  At the
+top and the bottom of the page are anchors which use the <b>linkName</b> attribute.
+<br>
+Anchor supports <b>action</b> and <b>href</b> as the primary means of navigation.  In addition
+<b>linkName</b> can also be used to navigate within a page.  To create a named anchor, you simply
+set the <b>tagId</b> attribute and nothing else.  This creates an anchor that can be a target
+of another anchor.  Finally, the <b>location</b> attribute many be used with the <b>href</b>
+attribute to create an anchor of the form of href#location.  The <b>location</b> attribute does
+not work with an <b>action</b> attribute.
+</p>
+<ul>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>action</b></li>
+<li><a href="/coreWeb/tags/anchor/simpleAction.do">Navigate</a> --
+        Navigation through a <b>Simple Action</b></li>
+<li><a href="/coreWeb/tags/anchor/myForward.jsp">Navigate</a> --
+        Navigation through an <b>href</b> directly to the JSP</li>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>href</b> to the action</li>
+<li><a href="#Label">Navigate</a> --
+        Navigate to a link on this page through an <b>linkName</b></li>
+</ul>
+<p>There is a bunch of blank space to create a target on the bottom of the page</p>
+<hr />
+<div style="height: 500px">
+<p>Spacer Div</p>
+</div>
+<hr />
+<p>
+This is a named location 'Label'.  The link will take you back to the top of the page<br>
+<a id="Label" name="Label"></a>
+<a href="#Top">Go To Top</a>
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/navigate.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/tags/anchor/begin.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Forward Target</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/myForward.jsp">
+</head>
+<body>
+<a href="#Top"></a>
+<h4>Forward Target</h4>
+<p>
+<a href="/coreWeb/tags/anchor/begin.do">Home</a> Use an explicit <b>href</b> contain action<br>
+<a href="/coreWeb/tags/anchor/Begin.jsp#Label">Home</a>
+        Go to the bottom of the Home page using the <b>location</b><br />
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchor/Begin.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=809D07A7D8BDF8303287DC0931D83B52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/tags/anchor/navigate.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Test of Anchor</title>
+<base href="http://localhost:8080/coreWeb/tags/anchor/Begin.jsp">
+</head>
+<body>
+<a id="Top" name="Top"></a>
+<h4>Anchor Tests</h4>
+<p style="color:green">
+This is a set of tests of anchors.  The following anchors will navigate to a target page.  At the
+top and the bottom of the page are anchors which use the <b>linkName</b> attribute.
+<br>
+Anchor supports <b>action</b> and <b>href</b> as the primary means of navigation.  In addition
+<b>linkName</b> can also be used to navigate within a page.  To create a named anchor, you simply
+set the <b>tagId</b> attribute and nothing else.  This creates an anchor that can be a target
+of another anchor.  Finally, the <b>location</b> attribute many be used with the <b>href</b>
+attribute to create an anchor of the form of href#location.  The <b>location</b> attribute does
+not work with an <b>action</b> attribute.
+</p>
+<ul>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>action</b></li>
+<li><a href="/coreWeb/tags/anchor/simpleAction.do">Navigate</a> --
+        Navigation through a <b>Simple Action</b></li>
+<li><a href="/coreWeb/tags/anchor/myForward.jsp">Navigate</a> --
+        Navigation through an <b>href</b> directly to the JSP</li>
+<li><a href="/coreWeb/tags/anchor/navigate.do">Navigate</a> --
+        Navigation through an <b>href</b> to the action</li>
+<li><a href="#Label">Navigate</a> --
+        Navigate to a link on this page through an <b>linkName</b></li>
+</ul>
+<p>There is a bunch of blank space to create a target on the bottom of the page</p>
+<hr />
+<div style="height: 500px">
+<p>Spacer Div</p>
+</div>
+<hr />
+<p>
+This is a named location 'Label'.  The link will take you back to the top of the page<br>
+<a id="Label" name="Label"></a>
+<a href="#Top">Go To Top</a>
+</p>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>02 Jul 2004, 07:32:40.230 AM MDT</ses:endDate>
+   <ses:testCount>9</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorActions.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorActions.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>AnchorActions</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>07 Jul 2004, 08:15:45.885 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchorActions/ActionOne.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-64b69cb9:fd99ce7512:-7649</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <h4>Anchor bound inside a repeater</h4>
+    <p style="color:green">
+    This test has two parts.  the first is an anchor found inside of a repeater.  The repeater is bound
+    to a list of actions which are bound as the action for the anchor and the label of the anchor.  When any
+    of these are preseed, the last action will be updated.
+    </p>
+    <p style="color:green">
+    The second part of the test is the errors.  Pushing this link leads to a page of errors.
+    </p>
+    <ul>
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionOne.do"><span>ActionOne</span></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionTwo.do"><span>ActionTwo</span></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionThree.do"><span>ActionThree</span></a>
+                </li>
+            </ul>
+    <a href="/coreWeb/tags/anchorActions/goErrors.do">Errors</a><br>
+    <hr>
+    <b>Last Action:</b>&nbsp;<span>ActionOne</span>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchorActions/ActionTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-64b69cb9:fd99ce7512:-7649</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <h4>Anchor bound inside a repeater</h4>
+    <p style="color:green">
+    This test has two parts.  the first is an anchor found inside of a repeater.  The repeater is bound
+    to a list of actions which are bound as the action for the anchor and the label of the anchor.  When any
+    of these are preseed, the last action will be updated.
+    </p>
+    <p style="color:green">
+    The second part of the test is the errors.  Pushing this link leads to a page of errors.
+    </p>
+    <ul>
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionOne.do"><span>ActionOne</span></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionTwo.do"><span>ActionTwo</span></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionThree.do"><span>ActionThree</span></a>
+                </li>
+            </ul>
+    <a href="/coreWeb/tags/anchorActions/goErrors.do">Errors</a><br>
+    <hr>
+    <b>Last Action:</b>&nbsp;<span>ActionTwo</span>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchorActions/ActionThree.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-64b69cb9:fd99ce7512:-7649</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <h4>Anchor bound inside a repeater</h4>
+    <p style="color:green">
+    This test has two parts.  the first is an anchor found inside of a repeater.  The repeater is bound
+    to a list of actions which are bound as the action for the anchor and the label of the anchor.  When any
+    of these are preseed, the last action will be updated.
+    </p>
+    <p style="color:green">
+    The second part of the test is the errors.  Pushing this link leads to a page of errors.
+    </p>
+    <ul>
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionOne.do"><span>ActionOne</span></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionTwo.do"><span>ActionTwo</span></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/anchorActions/ActionThree.do"><span>ActionThree</span></a>
+                </li>
+            </ul>
+    <a href="/coreWeb/tags/anchorActions/goErrors.do">Errors</a><br>
+    <hr>
+    <b>Last Action:</b>&nbsp;<span>ActionThree</span>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/anchorActions/goErrors.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-64b69cb9:fd99ce7512:-7649</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Anchor Errors</h4>
+        <p style="color:green">
+        This test has a set of anchors that have a databound action.  In the first case there is
+        a null action.  The second case is an invalid action.  There is a different error message for
+        each.
+        </p>
+        <p>
+        Null Action:<span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Anchor</b>]</span><br>
+        Invalid Action:<span style="color:red;background-color:white">
+ [<b>Tag Error:2</b>, Found in tag <b>Anchor</b>]</span><br>
+        <hr>
+        <a href="/coreWeb/tags/anchorActions/ActionTwo.do">Home</a><br>
+        </p>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Anchor</th><th>Message</th><td>Action was resolved as "", this is probably the result of an expression bound to a null Object.</td></tr>
+<tr><th>2</th><th>Anchor</th><th>Message</th><td>Action 'invalidAction' is not a valid action.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>07 Jul 2004, 08:15:45.935 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>AnchorError</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>07 Jul 2004, 12:04:44.715 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/errors/anchorError/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-7fc6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Anchor Errors</title>
+<base href="http://localhost:8080/coreWeb/errors/anchorError/Begin.jsp">
+</head>
+<body>
+<h4>Anchor Errors</h4>
+<p style="color:green">
+This test verifies a set of errors that may occur within anchor tags.  There are a bunch of types 
+of errors.  Common errors include, calling an action that doesn't exist, setting more than one of
+<b>linkName</b>, <b>action</b>, <b>href</b>, and <b>clientAction</b>.  This test only displays
+this page.
+</p>
+<ul>
+<li><span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Anchor</b>]</span> -- Bad Action </li>
+<li><span style="color:red;background-color:white">
+ [<b>Tag Error:2</b>, Found in tag <b>Anchor</b>]</span> -- Action and Href Defined </li>
+<li><span style="color:red;background-color:white">
+ [<b>Tag Error:3</b>, Found in tag <b>Anchor</b>]</span> -- Action and ClientAction Defined </li>
+<li><span style="color:red;background-color:white">
+ [<b>Tag Error:4</b>, Found in tag <b>Anchor</b>]</span> -- Action and linName Defined </li>
+<div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Anchor</th><th>Message</th><td>Action 'badAction' is not a valid action.</td></tr>
+<tr><th>2</th><th>Anchor</th><th>Message</th><td>The Anchor URI is invalid; it must be exactly one of href, action, linkName, clientAction</td></tr>
+<tr><th>3</th><th>Anchor</th><th>Message</th><td>The Anchor URI is invalid; it must be exactly one of href, action, linkName, clientAction</td></tr>
+<tr><th>4</th><th>Anchor</th><th>Message</th><td>The Anchor URI is invalid; it must be exactly one of href, action, linkName, clientAction</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>07 Jul 2004, 12:04:45.676 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorFormPosting.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorFormPosting.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>AnchorFormPosting</sessionName>
+  <tester>Daryl</tester>
+  <startDate>02 Apr 2003, 10:24:13.920 AM MST</startDate>
+  <description>Use an anchor to call an action and fill up the expected form.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/anchorFormPosting/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7ff0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/anchorFormPosting/postback.do?firstName=FirstName&lastName=LastName">Value in parameter
+<br />
+<br /></a>
+<hr />
+Value: <span></span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/anchorFormPosting/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/anchorFormPosting/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>firstName</name>
+          <value>FirstName</value>
+        </parameter>
+        <parameter>
+          <name>lastName</name>
+          <value>LastName</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7ff0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/anchorFormPosting/postback.do?firstName=FirstName&lastName=LastName">Value in parameter
+<br />
+<br /></a>
+<hr />
+Value: <span>LastName, FirstName</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>02 Apr 2003, 10:24:15.483 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorPosting.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnchorPosting.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>AnchorPosting</sessionName>
+  <tester>Daryl</tester>
+  <startDate>02 Apr 2003, 10:24:15.795 AM MST</startDate>
+  <description>Databinding through and anchor and parameters to a page flow.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/anchorPosting/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7feb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/anchorPosting/postback.do?%7BpageFlow.name%7D=foo&%7BpageFlow.type%7D=bar">Value in parameter
+<br />
+<br /></a>
+<hr />
+Name: <span></span><br />
+Type: <span></span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/anchorPosting/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/anchorPosting/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.name}</name>
+          <value>foo</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.type}</name>
+          <value>bar</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7feb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/anchorPosting/postback.do?%7BpageFlow.name%7D=foo&%7BpageFlow.type%7D=bar">Value in parameter
+<br />
+<br /></a>
+<hr />
+Name: <span>foo</span><br />
+Type: <span>bar</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>02 Apr 2003, 10:24:17.264 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBean.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBean.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>AnyBean</sessionName>
+  <tester>rich</tester>
+  <startDate>17 May 2004, 05:04:20.290 PM GMT-07:00</startDate>
+  <description>Test of the Any Bean Action Forms feature, including passing to/from actions and nested flows.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/AnyBeanController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/index.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Start</h3>
+
+        <a href="/coreWeb/pageFlowCore/anybean/showSubmit.do">showSubmit</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/goNested.do">goNested</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/chain.do">chain actions</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/showSubmit.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/submit.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Submit Bean</h3>
+
+        <form name="anyBeanActionForm" action="/coreWeb/pageFlowCore/anybean/submit.do" method="post">
+            foo: <input type="text" name="{actionForm.foo}" value="initial value">
+            <br>
+            <input type="submit" value="Click">
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.foo}</name>
+          <value>hi</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>23</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/result.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Result</h3>
+
+        foo: <b><span>hi</span></b>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/begin.do">go to start</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/index.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Start</h3>
+
+        <a href="/coreWeb/pageFlowCore/anybean/showSubmit.do">showSubmit</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/goNested.do">goNested</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/chain.do">chain actions</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/nested/index.jsp">
+    </head>
+    <body>
+
+        <a href="/coreWeb/pageFlowCore/anybean/nested/done1.do">done (return with outputFormBeanType)</a>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/anybean/nested/done2.do">done (return with outputFormBean)</a>
+
+        </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/nested/done1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/nestingResult.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Nesting Result</h3>
+
+        msg: <span>default msg</span>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/begin.do">go to start</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/index.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Start</h3>
+
+        <a href="/coreWeb/pageFlowCore/anybean/showSubmit.do">showSubmit</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/goNested.do">goNested</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/chain.do">chain actions</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/nested/index.jsp">
+    </head>
+    <body>
+
+        <a href="/coreWeb/pageFlowCore/anybean/nested/done1.do">done (return with outputFormBeanType)</a>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/anybean/nested/done2.do">done (return with outputFormBean)</a>
+
+        </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/nested/done2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/nestingResult.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Nesting Result</h3>
+
+        msg: <span>hello</span>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/begin.do">go to start</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/index.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Start</h3>
+
+        <a href="/coreWeb/pageFlowCore/anybean/showSubmit.do">showSubmit</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/goNested.do">goNested</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/chain.do">chain actions</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anybean/chain.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApTETuNcKsO2GrWjt3PQD7vr7uwSBASHlV9yk2tpYKsgddR01Fc1!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-7fdf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/anybean/result.jsp">
+        <title>Any Bean Test</title>
+    </head>
+    <body>
+        <h3>Result</h3>
+
+        foo: <b><span>from a chained action</span></b>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anybean/begin.do">go to start</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>17 May 2004, 05:04:20.618 PM GMT-07:00</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>11</testCount>
+  <passedCount>10</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBeanBinding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBeanBinding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,760 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>AnyBeanBinding</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>17 May 2004, 05:01:41.149 PM GMT-07:00</startDate>
+  <description>Sanity test of binding to a non-ActionForm typed action form.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/anybean/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-8000</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/databinding/anybean/index.jsp">
+    </head>
+    <body>
+        <a href="/coreWeb/databinding/anybean/showAnyBeanForm.do">AnyBean Form</a>
+        <br/>
+        <br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/anybean/showAnyBeanForm.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-8000</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/databinding/anybean/updateAnyBean.jsp">
+    </head>
+    <body>
+        <form name="anyBeanActionForm" action="/coreWeb/databinding/anybean/updateAnyBean.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Name:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="">
+                    </td>
+                </tr>
+            </table>
+            <br>
+            &nbsp;
+            <input type="submit" value="updateAnyBean">
+        </form>
+        <br/>
+        <br/>
+        POSTed value: <span></span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/anybean/updateAnyBean.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>Homer Simpson</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>35</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-8000</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/databinding/anybean/updateAnyBean.jsp">
+    </head>
+    <body>
+        <form name="anyBeanActionForm" action="/coreWeb/databinding/anybean/updateAnyBean.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Name:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="Homer Simpson">
+                    </td>
+                </tr>
+            </table>
+            <br>
+            &nbsp;
+            <input type="submit" value="updateAnyBean">
+        </form>
+        <br/>
+        <br/>
+        POSTed value: <span>Homer Simpson</span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/anybean/updateAnyBean.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>Marge Simpson</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>35</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-8000</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/databinding/anybean/updateAnyBean.jsp">
+    </head>
+    <body>
+        <form name="anyBeanActionForm" action="/coreWeb/databinding/anybean/updateAnyBean.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Name:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="Marge Simpson">
+                    </td>
+                </tr>
+            </table>
+            <br>
+            &nbsp;
+            <input type="submit" value="updateAnyBean">
+        </form>
+        <br/>
+        <br/>
+        POSTed value: <span>Marge Simpson</span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/anybean/updateAnyBean.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-8000</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/databinding/anybean/updateAnyBean.jsp">
+    </head>
+    <body>
+        <form name="anyBeanActionForm" action="/coreWeb/databinding/anybean/updateAnyBean.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Name:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="">
+                    </td>
+                </tr>
+            </table>
+            <br>
+            &nbsp;
+            <input type="submit" value="updateAnyBean">
+        </form>
+        <br/>
+        <br/>
+        POSTed value: <span></span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/anybean/updateAnyBean.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>Bart Simpson</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>34</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApSrjTeWu309ROlbj11xZn03KBqCQtwDQZhbtso8ELJsTHYBmvfg!-1734642265</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4fecfbb1:fc9569dacf:-8000</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/databinding/anybean/updateAnyBean.jsp">
+    </head>
+    <body>
+        <form name="anyBeanActionForm" action="/coreWeb/databinding/anybean/updateAnyBean.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Name:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="Bart Simpson">
+                    </td>
+                </tr>
+            </table>
+            <br>
+            &nbsp;
+            <input type="submit" value="updateAnyBean">
+        </form>
+        <br/>
+        <br/>
+        POSTed value: <span>Bart Simpson</span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>17 May 2004, 05:01:51.711 PM GMT-07:00</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>6</testCount>
+  <passedCount>3</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBeanOverload.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AnyBeanOverload.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>AnyBeanOverload</sessionName>
+  <tester>rich</tester>
+  <startDate>11 May 2004, 10:31:54.646 AM MDT</startDate>
+  <description>Test of overloading actions with the Any Bean Action Forms feature.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anyBeanOverload/AnyBeanOverloadController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ag8TPaQym4jxMaXEi0WJ5jwyUuT9zpVNDpt5Ou88I9rOMfDlwURD!-1084035671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ag8TPaQym4jxMaXEi0WJ5jwyUuT9zpVNDpt5Ou88I9rOMfDlwURD!-1084035671</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <body>
+        <font color="red"><span></span></font>
+
+        <br>
+        <br>
+        <form name="anyBeanActionForm" action="/coreWeb/pageFlowCore/anyBeanOverload/overload.do" method="post">
+            <input type="submit" value="hit overloaded action (should get String version)">
+        </form>
+
+        <br>
+        <a href="/coreWeb/pageFlowCore/anyBeanOverload/chainToString.do">chainToString</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anyBeanOverload/chainToHashMap.do">chainToString</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anyBeanOverload/overload.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ag8TPaQym4jxMaXEi0WJ5jwyUuT9zpVNDpt5Ou88I9rOMfDlwURD!-1084035671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ag8TPaQym4jxMaXEi0WJ5jwyUuT9zpVNDpt5Ou88I9rOMfDlwURD!-1084035671</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/anyBeanOverload/AnyBeanOverloadController.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <body>
+        <font color="red"><span>in String overload: </span></font>
+
+        <br>
+        <br>
+        <form name="anyBeanActionForm" action="/coreWeb/pageFlowCore/anyBeanOverload/overload.do" method="post">
+            <input type="submit" value="hit overloaded action (should get String version)">
+        </form>
+
+        <br>
+        <a href="/coreWeb/pageFlowCore/anyBeanOverload/chainToString.do">chainToString</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anyBeanOverload/chainToHashMap.do">chainToString</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anyBeanOverload/chainToString.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ag8TPaQym4jxMaXEi0WJ5jwyUuT9zpVNDpt5Ou88I9rOMfDlwURD!-1084035671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ag8TPaQym4jxMaXEi0WJ5jwyUuT9zpVNDpt5Ou88I9rOMfDlwURD!-1084035671</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/anyBeanOverload/overload.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <body>
+        <font color="red"><span>in String overload: hello</span></font>
+
+        <br>
+        <br>
+        <form name="anyBeanActionForm" action="/coreWeb/pageFlowCore/anyBeanOverload/overload.do" method="post">
+            <input type="submit" value="hit overloaded action (should get String version)">
+        </form>
+
+        <br>
+        <a href="/coreWeb/pageFlowCore/anyBeanOverload/chainToString.do">chainToString</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anyBeanOverload/chainToHashMap.do">chainToString</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/anyBeanOverload/chainToHashMap.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ag8TPaQym4jxMaXEi0WJ5jwyUuT9zpVNDpt5Ou88I9rOMfDlwURD!-1084035671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ag8TPaQym4jxMaXEi0WJ5jwyUuT9zpVNDpt5Ou88I9rOMfDlwURD!-1084035671</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/anyBeanOverload/chainToString.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <body>
+        <font color="red"><span>in HashMap overload</span></font>
+
+        <br>
+        <br>
+        <form name="anyBeanActionForm" action="/coreWeb/pageFlowCore/anyBeanOverload/overload.do" method="post">
+            <input type="submit" value="hit overloaded action (should get String version)">
+        </form>
+
+        <br>
+        <a href="/coreWeb/pageFlowCore/anyBeanOverload/chainToString.do">chainToString</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/anyBeanOverload/chainToHashMap.do">chainToString</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>11 May 2004, 10:32:15.957 AM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AppState.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AppState.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>AppState</sessionName>
+  <tester>Daryl</tester>
+  <startDate>18 Nov 2002, 04:24:26.979 PM MST</startDate>
+  <description>Binding to the GlobalApp from both a JSP page and from a page flow.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/appState/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9Z2EcXFNeFIon5zHlc1u2HB83VI0vKEHwLQaC1vw2IBsWpmmyPWR!-1442538207</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9Z2EcXFNeFIon5zHlc1u2HB83VI0vKEHwLQaC1vw2IBsWpmmyPWR!-1442538207</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Basic Global App</title>
+</head>
+<body>
+<h4>Basic Global App</h4>
+App State: <span>running</span><br />
+App State through page flow: <span>App DRT</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>18 Nov 2002, 04:24:49.330 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AppStatePass.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AppStatePass.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>AppStatePass</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>03 Jul 2004, 03:32:01.982 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/appStatePass/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-25c4d142:fd86eaf7ac:-7fb2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Pass State betweeen page flows groups</title>
+</head>
+<body>
+<h4>Pass State betweeen page flows groups</h4>
+<p style="color:green">
+This test passing state between page flows using the globalApp.  Each action will append state to the globalApp.getPageFlowState
+property.  Then a nested page flow is called and will display the same state variable.  The nested page flow will return
+to the action or page.  These are different page flow actions.   
+</p>
+<a href="/coreWeb/miniTests/appStatePass/nest.do">Nest Page Flow</a>
+<hr>
+Global State:<b><br />begin</b>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/appStatePass/nest.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-25c4d142:fd86eaf7ac:-7fb2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Nested Page</title>
+</head>
+<body>
+<h4>Nested Page</h4>
+<a href="/coreWeb/miniTests/appStatePass/nested/nestOne.do">Nest Return to Page</a><br />
+<a href="/coreWeb/miniTests/appStatePass/nested/nestTwo.do">Nest Return to Action</a><br />
+<hr />
+Global State:<b><br />begin<br />nest<br />[nested]begin</b>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/appStatePass/nested/nestOne.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-25c4d142:fd86eaf7ac:-7fb2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Pass State betweeen page flows groups</title>
+</head>
+<body>
+<h4>Pass State betweeen page flows groups</h4>
+<p style="color:green">
+This test passing state between page flows using the globalApp.  Each action will append state to the globalApp.getPageFlowState
+property.  Then a nested page flow is called and will display the same state variable.  The nested page flow will return
+to the action or page.  These are different page flow actions.   
+</p>
+<a href="/coreWeb/miniTests/appStatePass/nest.do">Nest Page Flow</a>
+<hr>
+Global State:<b><br />begin<br />nest<br />[nested]begin<br />[nested]nestOne<br />returnToPage</b>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/appStatePass/nest.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testnumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-25c4d142:fd86eaf7ac:-7fb2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Nested Page</title>
+</head>
+<body>
+<h4>Nested Page</h4>
+<a href="/coreWeb/miniTests/appStatePass/nested/nestOne.do">Nest Return to Page</a><br />
+<a href="/coreWeb/miniTests/appStatePass/nested/nestTwo.do">Nest Return to Action</a><br />
+<hr />
+Global State:<b><br />begin<br />nest<br />[nested]begin<br />[nested]nestOne<br />returnToPage<br />nest<br />[nested]begin</b>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/appStatePass/nested/nestTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testnumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-25c4d142:fd86eaf7ac:-7fb2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Pass State betweeen page flows groups</title>
+</head>
+<body>
+<h4>Pass State betweeen page flows groups</h4>
+<p style="color:green">
+This test passing state between page flows using the globalApp.  Each action will append state to the globalApp.getPageFlowState
+property.  Then a nested page flow is called and will display the same state variable.  The nested page flow will return
+to the action or page.  These are different page flow actions.   
+</p>
+<a href="/coreWeb/miniTests/appStatePass/nest.do">Nest Page Flow</a>
+<hr>
+Global State:<b><br />begin<br />nest<br />[nested]begin<br />[nested]nestOne<br />returnToPage<br />nest<br />[nested]begin<br />[nested]nestTwo<br />returnToAction</b>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>03 Jul 2004, 03:32:03.845 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>5</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>5</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AttrBinding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/AttrBinding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>AttrBinding</sessionName>
+  <tester>Daryl</tester>
+  <startDate>21 Nov 2002, 02:23:49.609 PM MST</startDate>
+  <description>A test verifying basic data binding</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/attrBinding/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9dOTqwiT9iiqLiI6z1as8FuahnOxPxR4kwTrwBtoyG2hxhZEcNlu!-1511389413</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9dOTqwiT9iiqLiI6z1as8FuahnOxPxR4kwTrwBtoyG2hxhZEcNlu!-1511389413</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testNumber</name>
+          <value>1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>c7d960:f1a87ba04a:-7ff2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Attribute Binding</title>
+</head>
+<body>
+<h4>Scalar Attributes</h4>
+Int Property: <span>17</span><br />
+String Property: <span>StringBinding</span><br />
+Float Property: <span>17.17</span><br />
+Boolean Property: <span>true</span><br />
+<h4>Array Attributes</h4>
+
+<b>Ints</b></br>
+<table><tr>
+
+  <td><span>1</span></td>
+
+  <td><span>2</span></td>
+
+  <td><span>3</span></td>
+
+</tr></table>
+
+<b>Strings</b></br>
+<table width="50%"><tr>
+
+  <td><span>foo</span></td>
+
+  <td><span>bar</span></td>
+
+  <td><span>blee</span></td>
+
+</tr></table>
+
+<b>Floats</b></br>
+<table width="50%"><tr>
+
+  <td><span>16.16</span></td>
+
+  <td><span>17.17</span></td>
+
+  <td><span>18.18</span></td>
+
+</tr></table>
+
+<b>Booleans</b></br>
+<table width="50%"><tr>
+
+  <td><span>true</span></td>
+
+  <td><span>false</span></td>
+
+  <td><span>true</span></td>
+
+  <td><span>true</span></td>
+
+  <td><span>false</span></td>
+
+</tr></table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>21 Nov 2002, 02:23:58.181 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13789.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13789.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B13789</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>04 Jul 2004, 07:25:16.038 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b13789/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-4bc5e1ac:fd8ce6415b:-7f87</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Begin</title>
+</head>
+<body>
+<h4>Directly Bind to a {pageFlow}</h4>
+<p style="color:green">
+This test will directly bind a textBox to a pageFlow.  When the form is submitted, the page flow will be updated.
+The results page will also directly bind to the pageFlow to get the value posted.  There is a default value specified 
+which should be shown when the form is first displayed.  The value of the default is '<b>Default</b>'.
+</p>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b13789/next1.do" method="post">
+<input type="text" name="{pageFlow.string}" value="Default">
+<br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b13789/next1.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{pageFlow.string}</ses:name>
+                  <ses:value>Default</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>29</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-4bc5e1ac:fd8ce6415b:-7f87</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Page1</title>
+</head>
+<body>
+<p style="color:green">
+This page directly binds to the page flow using a label
+</p>
+<hr>
+Label: <span>Default</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>04 Jul 2004, 07:25:16.869 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13797.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13797.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B13797</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>04 Jul 2004, 07:25:16.919 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b13797/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-4bc5e1ac:fd8ce6415b:-7f82</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Begin</title>
+</head>
+<body>
+<h4>binding directly to a pageFlow</h4>
+<p style="color:green">
+This test binds a textbox value directly to a pageflow property.  The value is found from a property
+on the page flow.  The action called by the form takes a form bean which is ignored.  This is almost the exact same
+test as <b>13803</b>, except there the action does not have a form bean. The value then updates that property.  
+The results page shows the updated value.
+</p>
+<form name="formBean" action="/coreWeb/bugs/b13797/next1.do" method="post">
+    <input type="text" name="{pageFlow.string}" value="String">
+    <br>
+    <input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b13797/next1.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>currentURI</ses:name>
+                  <ses:value>/coreWeb/bugs/b13797/Begin.jsp</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{pageFlow.string}</ses:name>
+                  <ses:value>Change</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>78</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-4bc5e1ac:fd8ce6415b:-7f82</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Page1</title>
+</head>
+<body>
+<p style="color:green">
+This is the results posted from the form.  It must match what was entered in the textbox.
+</p>
+<hr>
+String Value = '<span>Change</span>'
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>04 Jul 2004, 07:25:18.121 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13803.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13803.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B13803</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>04 Jul 2004, 07:25:18.161 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b13803/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-4bc5e1ac:fd8ce6415b:-7f7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Begin</title>
+</head>
+<body>
+<h4>Direct Binding without Form</h4>
+<p style="color:green">
+This test will post a form that binds directly to the page flow.  The action called does not take a form bean
+so the only way to post back information is through the form bean.  This is very similar to <b>b13797</b>.
+</p>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b13803/next1.do" method="post">
+    <input type="text" name="{pageFlow.string}" value="String">
+    <br>
+    <input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b13803/next1.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>currentURI</ses:name>
+                  <ses:value>/coreWeb/bugs/b13803/Begin.jsp</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{pageFlow.string}</ses:name>
+                  <ses:value>Foo-String</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>82</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=9B366A03D6CBCDCA928D60A45BC48E10</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-4bc5e1ac:fd8ce6415b:-7f7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Page1</title>
+</head>
+<body>
+<h4>Results</h4>
+<p style="color:green">This binds to the results that should have been posted by the form.  You should see the results here
+</p>
+PageFlow.String: <span>Foo-String</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>04 Jul 2004, 07:25:18.952 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13881.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B13881.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,703 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B13881</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:06:43.826 AM MST</startDate>
+  <description>Test of the checkbox</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b13881/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-79b9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Checkbox test</title>
+</head>
+<body>
+<h4>Checkbox Tests</h4>
+<form name="form" action="/coreWeb/bugs/b13881/next.do" method="post">
+Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}"><br />
+True Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked><br />
+<br />
+Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox}"><br />
+True Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox2}" checked><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Checkbox from Form: <span>false</span><br />
+True Checkbox Form: <span>true</span><br />
+<br />
+Checkbox from Page Flow: <span>false</span><br />
+True Checkbox from Page Flow: <span>true</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b13881/next.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox1}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>329</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-79b9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Checkbox test</title>
+</head>
+<body>
+<h4>Checkbox Tests</h4>
+<form name="form" action="/coreWeb/bugs/b13881/next.do" method="post">
+Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" checked><br />
+True Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}"><br />
+<br />
+Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox}" checked><br />
+True Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox2}"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Checkbox from Form: <span>true</span><br />
+True Checkbox Form: <span>false</span><br />
+<br />
+Checkbox from Page Flow: <span>true</span><br />
+True Checkbox from Page Flow: <span>false</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b13881/next.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox1}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox2}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox2}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>425</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-79b9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Checkbox test</title>
+</head>
+<body>
+<h4>Checkbox Tests</h4>
+<form name="form" action="/coreWeb/bugs/b13881/next.do" method="post">
+Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" checked><br />
+True Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked><br />
+<br />
+Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox}" checked><br />
+True Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox2}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox2}" checked><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Checkbox from Form: <span>true</span><br />
+True Checkbox Form: <span>true</span><br />
+<br />
+Checkbox from Page Flow: <span>true</span><br />
+True Checkbox from Page Flow: <span>true</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b13881/next.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>234</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-79b9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Checkbox test</title>
+</head>
+<body>
+<h4>Checkbox Tests</h4>
+<form name="form" action="/coreWeb/bugs/b13881/next.do" method="post">
+Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}"><br />
+True Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}"><br />
+<br />
+Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox}"><br />
+True Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox2}"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Checkbox from Form: <span>false</span><br />
+True Checkbox Form: <span>false</span><br />
+<br />
+Checkbox from Page Flow: <span>false</span><br />
+True Checkbox from Page Flow: <span>false</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b13881/next.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox2}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox2}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checkBox}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>330</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-79b9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Checkbox test</title>
+</head>
+<body>
+<h4>Checkbox Tests</h4>
+<form name="form" action="/coreWeb/bugs/b13881/next.do" method="post">
+Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}"><br />
+True Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked><br />
+<br />
+Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox}"><br />
+True Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox2}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox2}" checked><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Checkbox from Form: <span>false</span><br />
+True Checkbox Form: <span>true</span><br />
+<br />
+Checkbox from Page Flow: <span>false</span><br />
+True Checkbox from Page Flow: <span>true</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:06:48.813 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>5</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14259.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14259.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B14259</sessionName>
+  <tester>Daryl</tester>
+  <startDate>07 May 2004, 03:39:38.133 PM MDT</startDate>
+  <description>Test Exceptions using relative class names</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b14259/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AcCJYIxx7wQGIKvU73rs7j94rsi18h2HevJqkLqhtYOAXecz8bkb!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AcCJYIxx7wQGIKvU73rs7j94rsi18h2HevJqkLqhtYOAXecz8bkb!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7a44</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exceptions</title>
+</head>
+<body>
+<h4>Exceptions</h3>
+<a href="/coreWeb/bugs/b14259/throwGlobal.do">Global To Method</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b14259/throwGlobal.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AcCJYIxx7wQGIKvU73rs7j94rsi18h2HevJqkLqhtYOAXecz8bkb!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AcCJYIxx7wQGIKvU73rs7j94rsi18h2HevJqkLqhtYOAXecz8bkb!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7a44</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Error Page</title>
+</head>
+<body>
+<h4>Report Exception</h4>
+Page Flow Message: <span>caught [MyException] in globalHandler</span><br />
+Exception Tag Message <hr/>bugs.b14259.Controller$MyException: Global Exception being Thrown<hr />
+Exception Tag No StackTrace<hr/>bugs.b14259.Controller$MyException: Global Exception being Thrown<hr/>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>07 May 2004, 03:39:42.930 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14683.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14683.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B14683</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>05 Jul 2004, 07:40:31.753 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b14683/Begin.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>F316D2938853C48173BF3BBBBD39A5F9</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=F316D2938853C48173BF3BBBBD39A5F9</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-3aeff050:fd8f87a912:-7f6f</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Hit a JSP Directly</title>
+</head>
+<body>
+<h4>Hit a JSP Directly</h4>
+<p style="color:green">
+In this example, we hit the JSP directly before the page flow is created.  There is a label which binds to 
+a page flow variable.  The JSP filter needs to insure that the page flow is created.  Below you should see the 
+value '<b>String</b>'.  This is the only page of the test.
+</p>
+Value: '<span>String</span>'
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>05 Jul 2004, 07:40:32.554 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14754.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14754.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B14754</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>05 Jul 2004, 07:40:32.584 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b14754/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>F316D2938853C48173BF3BBBBD39A5F9</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=F316D2938853C48173BF3BBBBD39A5F9</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-3aeff050:fd8f87a912:-7f6b</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Array Type Binding</title>
+</head>
+<body>
+<h4>Array Type Binding</h4>
+<p style="color:green">
+This will bind a label to the 4th element of an array inside a page flow.  The value should be '<b>5</b>'.   This is the only page
+hit during this test.
+</p>
+Element [4]: <span>5</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>05 Jul 2004, 07:40:33.706 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14764.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14764.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B14764</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>05 Jul 2004, 07:40:33.736 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b14764/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>F316D2938853C48173BF3BBBBD39A5F9</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=F316D2938853C48173BF3BBBBD39A5F9</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-3aeff050:fd8f87a912:-7f67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Compound Expressions</title>
+</head>
+<body>
+<h4>Compound Expression</h4>
+<p style="color:green">
+This test demonstrates binding to multiple page flow variables inside
+the same label.  The value should be 'lastname, firstname', where the
+names are bound to page flow variables.  This is the only page hit in 
+this test.
+</p>
+Name: <span>Blow, Joe</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>05 Jul 2004, 07:40:34.537 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14781.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14781.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B14781</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>05 Jul 2004, 08:37:47.854 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b14781/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>66562F636451405A4D2F83FAF68FB09C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=66562F636451405A4D2F83FAF68FB09C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>6b74974a:fd8fa8ce15:-7549</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Select Binding to PageFlow</title>
+</head>
+<body>
+<h4>Select Binding to PageFlow</h4>
+<p style="color:green">
+This is a test of the select binding directly to the page flow.  The
+dataSource, optionsDataSource and defaultValue all come from the page flow.
+This page then posts the form in a postback to the same page.  You should
+option selected below the form.
+</p>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b14781/postback.do" method="post">
+Select Box: <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3" selected>Option 3</option>
+<option value="Option 4">Option 4</option></select>
+ <br>
+<input type="submit" value="Submit">
+</form><br>
+Selected: <span></span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b14781/postback.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>currentURI</ses:name>
+                  <ses:value>/coreWeb/bugs/b14781/Begin.jsp</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{pageFlow.selected}</ses:name>
+                  <ses:value>Option 3</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>66562F636451405A4D2F83FAF68FB09C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>82</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=66562F636451405A4D2F83FAF68FB09C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>6b74974a:fd8fa8ce15:-7549</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Select Binding to PageFlow</title>
+</head>
+<body>
+<h4>Select Binding to PageFlow</h4>
+<p style="color:green">
+This is a test of the select binding directly to the page flow.  The
+dataSource, optionsDataSource and defaultValue all come from the page flow.
+This page then posts the form in a postback to the same page.  You should
+option selected below the form.
+</p>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b14781/postback.do" method="post">
+Select Box: <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3" selected>Option 3</option>
+<option value="Option 4">Option 4</option></select>
+ <br>
+<input type="submit" value="Submit">
+</form><br>
+Selected: <span>Option 3</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b14781/postback.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>currentURI</ses:name>
+                  <ses:value>/coreWeb/bugs/b14781/Begin.jsp</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{pageFlow.selected}</ses:name>
+                  <ses:value>Option 1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>66562F636451405A4D2F83FAF68FB09C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>82</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=66562F636451405A4D2F83FAF68FB09C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>6b74974a:fd8fa8ce15:-7549</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Select Binding to PageFlow</title>
+</head>
+<body>
+<h4>Select Binding to PageFlow</h4>
+<p style="color:green">
+This is a test of the select binding directly to the page flow.  The
+dataSource, optionsDataSource and defaultValue all come from the page flow.
+This page then posts the form in a postback to the same page.  You should
+option selected below the form.
+</p>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b14781/postback.do" method="post">
+Select Box: <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}">
+<option value="Option 1" selected>Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4">Option 4</option></select>
+ <br>
+<input type="submit" value="Submit">
+</form><br>
+Selected: <span>Option 1</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>05 Jul 2004, 08:37:47.894 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>3</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14787.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14787.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B14787</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:21:58.070 AM MST</startDate>
+  <description>Verify textbox default values</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b14787/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7992</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Default Value Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/bugs/b14787/postback.do" method="post">
+Select Box: <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option></select><br />
+Textbox 1: <input type="text" name="{pageFlow.text1}" value="text1"><br />
+Textbox 2: <input type="text" name="{pageFlow.text2}" value="text2Default"> (null data source) <br />
+<input type="submit" value="Submit">
+</form><br />
+<b>Actual PageFlowController values</b><br/>
+text2Default: <span>text2Default</span><br/>
+text2: <span></span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b14787/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/bugs/b14787/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 4</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.text1}</name>
+          <value>text1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.text2}</name>
+          <value>text2Default</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>144</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7992</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Default Value Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/bugs/b14787/postback.do" method="post">
+Select Box: <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option></select><br />
+Textbox 1: <input type="text" name="{pageFlow.text1}" value="text1"><br />
+Textbox 2: <input type="text" name="{pageFlow.text2}" value="text2Default"> (null data source) <br />
+<input type="submit" value="Submit">
+</form><br />
+<b>Actual PageFlowController values</b><br/>
+text2Default: <span>text2Default</span><br/>
+text2: <span>text2Default</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:22:00.744 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14826.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14826.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,421 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B14826</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:22:01.354 AM MST</startDate>
+  <description>Databinding a multi-select tag</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b14826/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-798d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/bugs/b14826/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple>
+<option value="Option 1">Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b><br />
+
+  <span>Option 2</span><br />
+
+  <span>Option 4</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b14826/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/bugs/b14826/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 3</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 4</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>182</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-798d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/bugs/b14826/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple>
+<option value="Option 1" selected>Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3" selected>Option 3</option>
+<option value="Option 4" selected>Option 4</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b><br />
+
+  <span>Option 1</span><br />
+
+  <span>Option 2</span><br />
+
+  <span>Option 3</span><br />
+
+  <span>Option 4</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b14826/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/bugs/b14826/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>83</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-798d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/bugs/b14826/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple>
+<option value="Option 1">Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4">Option 4</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b><br />
+
+  <span>Option 2</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:22:04.549 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14999.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B14999.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B14999</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:22:05.130 AM MST</startDate>
+  <description>Deselect all items in a multiselect.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/multiSelect/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7987</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/tags/multiSelect/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple size="6">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option>
+<option value="Option 5">Option 5</option>
+<option value="Option 6" selected>Option 6</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b> size = <span>-1</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/multiSelect/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-select_key:{pageFlow.selected}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>53</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkmWuALbrKUCpPuPfRcrmpGzNDcoTTzMnPLkRIC2luCUXm5PXb6G!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7987</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/tags/multiSelect/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple size="6">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4">Option 4</option>
+<option value="Option 5">Option 5</option>
+<option value="Option 6">Option 6</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b> size = <span>0</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:22:07.022 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15095.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15095.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,581 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15095</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:07:22.241 AM MST</startDate>
+  <description>Test of setting a checkbox with a String</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15095/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7981</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>check box bug</title>
+</head>
+<form name="form" action="/coreWeb/bugs/b15095/postback.do" method="post">
+   Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.check}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.check}" checked><br />
+   <input type="submit" value="Submit">
+</form>
+<hr />
+Value: <span></span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15095/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.check}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.check}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>100</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7981</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>check box bug</title>
+</head>
+<form name="form" action="/coreWeb/bugs/b15095/postback.do" method="post">
+   Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.check}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{actionForm.check}" checked><br />
+   <input type="submit" value="Submit">
+</form>
+<hr />
+Value: <span>true</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15095/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.check}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>55</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7981</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>check box bug</title>
+</head>
+<form name="form" action="/coreWeb/bugs/b15095/postback.do" method="post">
+   Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.check}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.check}"><br />
+   <input type="submit" value="Submit">
+</form>
+<hr />
+Value: <span>false</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15095/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.check}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>55</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7981</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>check box bug</title>
+</head>
+<form name="form" action="/coreWeb/bugs/b15095/postback.do" method="post">
+   Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.check}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.check}"><br />
+   <input type="submit" value="Submit">
+</form>
+<hr />
+Value: <span>false</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15095/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.check}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.check}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>100</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7981</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>check box bug</title>
+</head>
+<form name="form" action="/coreWeb/bugs/b15095/postback.do" method="post">
+   Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.check}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{actionForm.check}" checked><br />
+   <input type="submit" value="Submit">
+</form>
+<hr />
+Value: <span>true</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:07:27.198 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>5</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15174.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15174.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15174</sessionName>
+  <tester>Daryl</tester>
+  <startDate>02 Apr 2003, 10:28:12.007 AM MST</startDate>
+  <description>Using a Paramter with an Anchor targetting an action.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15174/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Bug 25</title>
+</head>
+<body>
+<a href="/coreWeb/bugs/b15174/postback.do?foo=bar">Postback through Action
+<br /></a>
+<a href="/coreWeb/bugs/b15174/hrefPostback.do?foo=baz">Postback through URL
+<br /></a>
+<hr />
+Action: <span>begin</span><br />
+Foo: <span></span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15174/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>bar</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Bug 25</title>
+</head>
+<body>
+<a href="/coreWeb/bugs/b15174/postback.do?foo=bar">Postback through Action
+<br /></a>
+<a href="/coreWeb/bugs/b15174/hrefPostback.do?foo=baz">Postback through URL
+<br /></a>
+<hr />
+Action: <span>postback</span><br />
+Foo: <span>bar</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15174/hrefPostback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>baz</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Bug 25</title>
+</head>
+<body>
+<a href="/coreWeb/bugs/b15174/postback.do?foo=bar">Postback through Action
+<br /></a>
+<a href="/coreWeb/bugs/b15174/hrefPostback.do?foo=baz">Postback through URL
+<br /></a>
+<hr />
+Action: <span>hrefPostback</span><br />
+Foo: <span>baz</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>02 Apr 2003, 10:28:13.741 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15175.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15175.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15175</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:07:31.895 AM MST</startDate>
+  <description>Verify that a Form may have a Parameter</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15175/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7973</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Parameters</title>
+</head>
+<body>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b15175/postback.do" method="post">
+<input type="hidden" name="foo" value="form-parameter-bar">
+<br />
+<input type="submit" value="Submit">
+</form>
+<hr />
+Action: <span>begin</span><br />
+Foo: <span></span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15175/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>form-parameter-bar</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7973</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Parameters</title>
+</head>
+<body>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b15175/postback.do" method="post">
+<input type="hidden" name="foo" value="form-parameter-bar">
+<br />
+<input type="submit" value="Submit">
+</form>
+<hr />
+Action: <span>postback</span><br />
+Foo: <span>form-parameter-bar</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:07:34.679 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15234.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15234.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15234</sessionName>
+  <tester>Daryl</tester>
+  <startDate>28 Feb 2003, 09:06:24.722 AM MST</startDate>
+  <description>Test of anchor.forward</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15234/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2fIcAtSlGYCtR0DwdzdftHhK2LMj10k0u27XV36Z5sWiHEaW0Vy4!-1810766099</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2fIcAtSlGYCtR0DwdzdftHhK2LMj10k0u27XV36Z5sWiHEaW0Vy4!-1810766099</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Test of Anchor</title>
+</head>
+<body>
+<h4>Anchor Tests</h4>
+<a href="/coreWeb/bugs/b15234/myForward.jsp">Forward</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15234/myForward.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2fIcAtSlGYCtR0DwdzdftHhK2LMj10k0u27XV36Z5sWiHEaW0Vy4!-1810766099</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2fIcAtSlGYCtR0DwdzdftHhK2LMj10k0u27XV36Z5sWiHEaW0Vy4!-1810766099</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/bugs/b15234/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>myForward</title>
+</head>
+<body>
+<h4>My Forward</h4>
+<a href="/coreWeb/bugs/b15234/Begin.jsp">Home</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15234/Begin.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2fIcAtSlGYCtR0DwdzdftHhK2LMj10k0u27XV36Z5sWiHEaW0Vy4!-1810766099</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2fIcAtSlGYCtR0DwdzdftHhK2LMj10k0u27XV36Z5sWiHEaW0Vy4!-1810766099</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/bugs/b15234/myForward.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Test of Anchor</title>
+</head>
+<body>
+<h4>Anchor Tests</h4>
+<a href="/coreWeb/bugs/b15234/myForward.jsp">Forward</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15234/myForward.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2fIcAtSlGYCtR0DwdzdftHhK2LMj10k0u27XV36Z5sWiHEaW0Vy4!-1810766099</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2fIcAtSlGYCtR0DwdzdftHhK2LMj10k0u27XV36Z5sWiHEaW0Vy4!-1810766099</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/bugs/b15234/Begin.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>myForward</title>
+</head>
+<body>
+<h4>My Forward</h4>
+<a href="/coreWeb/bugs/b15234/Begin.jsp">Home</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>28 Feb 2003, 09:07:00.193 AM MST</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15392.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15392.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15392</sessionName>
+  <tester>Daryl</tester>
+  <startDate>03 Mar 2003, 11:23:50.732 AM MST</startDate>
+  <description>Test or returning a form from a nested page flow but not having an action that takes that form.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15392/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2jdNRFY3O5ZmFAQQDy2Hn0QMMPpnd11z4rXlC1EZUxcXWWAAG07X!1176788655</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2jdNRFY3O5ZmFAQQDy2Hn0QMMPpnd11z4rXlC1EZUxcXWWAAG07X!1176788655</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Passing a Bad Form</title>
+</head>
+<body>
+<h4>Passing a Bad Form</h4>    
+<a href="/coreWeb/bugs/b15392/getUserInfo.do">Get User</a>
+<hr />
+User: <span>Not Defined</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15392/getUserInfo.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2jdNRFY3O5ZmFAQQDy2Hn0QMMPpnd11z4rXlC1EZUxcXWWAAG07X!1176788655</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2jdNRFY3O5ZmFAQQDy2Hn0QMMPpnd11z4rXlC1EZUxcXWWAAG07X!1176788655</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/bugs/b15392/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - No Matching Action Method</title></head>
+ <body>
+ <h1>Page Flow Error - No Matching Action Method</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/bugs/b15392/nesting/Controller.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>begin</td></tr>
+ <tr><td><b>Form:</b></td><td>bugs.b15392.Controller$Form</td></tr>
+ </table><br />
+ <span style="color:red">Could not find matching action method for action=<b>begin</b>, form=<b>bugs.b15392.Controller$Form</b>.</span>
+ </body></html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>03 Mar 2003, 11:24:28.928 AM MST</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15430.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15430.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B15430</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>05 Jul 2004, 09:25:19.715 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b15430/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>B87E1339DB1CA02E0B3ACCB5E07CCB08</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=B87E1339DB1CA02E0B3ACCB5E07CCB08</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-51e6775:fd8fe7d488:-7f36</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Checkbox Binding Errors</title>
+</head>
+<body>
+<h4>Checkbox Binding Errors</h4>
+<p style="color:green">
+This test contains two binding errors. One binds to the actionForm and one 
+binds to the pageFlow.  These errors should be seend in the page.  This is the only page of the test.
+</p>
+<form name="form" action="/coreWeb/bugs/b15430/next.do" method="post">
+Checkbox from form: <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CheckBox</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{actionForm.bad}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{actionForm.bad}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "bad" on object of type "class bugs.b15430.Controller$Form"</td></tr>
+</table></span>
+<br />
+True Checkbox from form: <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked><br />
+<br />
+Checkbox from page flow: <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CheckBox</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.bad}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.bad}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "bad" on object of type "class bugs.b15430.Controller"</td></tr>
+</table></span>
+<br />
+True Checkbox from page flow: <input type="hidden" name="wlw-checkbox_key:{pageFlow.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checkBox2}" checked><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Checkbox from Form: <span>false</span><br />
+True Checkbox Form: <span>true</span><br />
+<br />
+Checkbox from Page Flow: <span>false</span><br />
+True Checkbox from Page Flow: <span>true</span><br />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>05 Jul 2004, 09:25:20.656 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15454.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15454.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,579 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15454</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:07:46.917 AM MST</startDate>
+  <description>Test of editing the contents of a repeater inside a form.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15454/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-795e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b15454/postback.do" method="post">
+
+  <input type="text" name="{pageFlow.info[0]}" value="Option 1"><br />
+
+  <input type="text" name="{pageFlow.info[1]}" value="Option 2"><br />
+
+  <input type="text" name="{pageFlow.info[2]}" value="Option 3"><br />
+
+  <input type="text" name="{pageFlow.info[3]}" value="Option 4"><br />
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+<b>Results:</b><br />
+
+  <span>Option 1</span><br />
+
+  <span>Option 2</span><br />
+
+  <span>Option 3</span><br />
+
+  <span>Option 4</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15454/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.info[0]}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[1]}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[2]}</name>
+          <value>3</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[3]}</name>
+          <value>4</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>115</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-795e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b15454/postback.do" method="post">
+
+  <input type="text" name="{pageFlow.info[0]}" value="1"><br />
+
+  <input type="text" name="{pageFlow.info[1]}" value="2"><br />
+
+  <input type="text" name="{pageFlow.info[2]}" value="3"><br />
+
+  <input type="text" name="{pageFlow.info[3]}" value="4"><br />
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+<b>Results:</b><br />
+
+  <span>1</span><br />
+
+  <span>2</span><br />
+
+  <span>3</span><br />
+
+  <span>4</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15454/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.info[0]}</name>
+          <value>11</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[1]}</name>
+          <value>22</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[2]}</name>
+          <value>33</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[3]}</name>
+          <value>44</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>119</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-795e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b15454/postback.do" method="post">
+
+  <input type="text" name="{pageFlow.info[0]}" value="11"><br />
+
+  <input type="text" name="{pageFlow.info[1]}" value="22"><br />
+
+  <input type="text" name="{pageFlow.info[2]}" value="33"><br />
+
+  <input type="text" name="{pageFlow.info[3]}" value="44"><br />
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+<b>Results:</b><br />
+
+  <span>11</span><br />
+
+  <span>22</span><br />
+
+  <span>33</span><br />
+
+  <span>44</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15454/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.info[0]}</name>
+          <value>11</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[1]}</name>
+          <value>x</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[2]}</name>
+          <value>x</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[3]}</name>
+          <value>44</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>117</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-795e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b15454/postback.do" method="post">
+
+  <input type="text" name="{pageFlow.info[0]}" value="11"><br />
+
+  <input type="text" name="{pageFlow.info[1]}" value="x"><br />
+
+  <input type="text" name="{pageFlow.info[2]}" value="x"><br />
+
+  <input type="text" name="{pageFlow.info[3]}" value="44"><br />
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+<b>Results:</b><br />
+
+  <span>11</span><br />
+
+  <span>x</span><br />
+
+  <span>x</span><br />
+
+  <span>44</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:07:51.193 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15574.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15574.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15574</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:07:51.904 AM MST</startDate>
+  <description>Test of binding multiple textboxes to the same variable.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15574/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7957</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b15574/postback.do" method="post">
+<b>Bound to the page flow</b><br />
+
+  <input type="text" name="{pageFlow.info[0]}" value="1"><br />
+
+  <input type="text" name="{pageFlow.info[1]}" value="2"><br />
+
+  <input type="text" name="{pageFlow.info[2]}" value="3"><br />
+
+  <input type="text" name="{pageFlow.info[3]}" value="4"><br />
+
+<br />
+<b>Bound to the form</b><br />
+
+  <input type="text" name="{pageFlow.info[0]}" value="1"><br />
+
+  <input type="text" name="{pageFlow.info[1]}" value="2"><br />
+
+  <input type="text" name="{pageFlow.info[2]}" value="3"><br />
+
+  <input type="text" name="{pageFlow.info[3]}" value="4"><br />
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+<b>Results:</b><br />
+
+  <span>1</span><br />
+
+  <span>2</span><br />
+
+  <span>3</span><br />
+
+  <span>4</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15574/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.info[0]}</name>
+          <value>1x</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[0]}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[1]}</name>
+          <value>2x</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[1]}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[2]}</name>
+          <value>3x</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[2]}</name>
+          <value>3</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[3]}</name>
+          <value>4x</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.info[3]}</name>
+          <value>4</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>235</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7957</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b15574/postback.do" method="post">
+<b>Bound to the page flow</b><br />
+
+  <input type="text" name="{pageFlow.info[0]}" value="1"><br />
+
+  <input type="text" name="{pageFlow.info[1]}" value="2"><br />
+
+  <input type="text" name="{pageFlow.info[2]}" value="3"><br />
+
+  <input type="text" name="{pageFlow.info[3]}" value="4"><br />
+
+<br />
+<b>Bound to the form</b><br />
+
+  <input type="text" name="{pageFlow.info[0]}" value="1"><br />
+
+  <input type="text" name="{pageFlow.info[1]}" value="2"><br />
+
+  <input type="text" name="{pageFlow.info[2]}" value="3"><br />
+
+  <input type="text" name="{pageFlow.info[3]}" value="4"><br />
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+<b>Results:</b><br />
+
+  <span>1</span><br />
+
+  <span>2</span><br />
+
+  <span>3</span><br />
+
+  <span>4</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:07:54.838 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15590.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15590.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15590</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:07:55.509 AM MST</startDate>
+  <description>Repeater Update with Struts expression syntax</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15590/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7952</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form name="form" action="/coreWeb/bugs/b15590/postback.do" method="post">
+<b>Bound to the form</b><br />
+Name <input type="text" name="{actionForm.name}" value="Name"><br />
+
+  <input type="text" name="{actionForm.strings[0]}" value="String 1"><br />
+
+  <input type="text" name="{actionForm.strings[1]}" value="String 2"><br />
+
+  <input type="text" name="{actionForm.strings[2]}" value="String 3"><br />
+
+  <input type="text" name="{actionForm.strings[3]}" value="String 4"><br />
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+<b>Results:</b><br />
+
+  <span>String 1</span><br />
+
+  <span>String 2</span><br />
+
+  <span>String 3</span><br />
+
+  <span>String 4</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15590/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>Name</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.strings[0]}</name>
+          <value>x</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.strings[1]}</name>
+          <value>y</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.strings[2]}</name>
+          <value>z</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.strings[3]}</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>162</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7952</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form name="form" action="/coreWeb/bugs/b15590/postback.do" method="post">
+<b>Bound to the form</b><br />
+Name <input type="text" name="{actionForm.name}" value="Name"><br />
+
+  <input type="text" name="{actionForm.strings[0]}" value="x"><br />
+
+  <input type="text" name="{actionForm.strings[1]}" value="y"><br />
+
+  <input type="text" name="{actionForm.strings[2]}" value="z"><br />
+
+  <input type="text" name="{actionForm.strings[3]}" value="a"><br />
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+<b>Results:</b><br />
+
+  <span>x</span><br />
+
+  <span>y</span><br />
+
+  <span>z</span><br />
+
+  <span>a</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:07:58.473 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15642.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15642.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15642</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:07:59.174 AM MST</startDate>
+  <description>Test of binding to boolean bean properties.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15642/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-794d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form name="form" action="/coreWeb/bugs/b15642/postback.do" method="post">
+Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.checked}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checked}"><br />
+Checkbox PageFlowController <input type="hidden" name="wlw-checkbox_key:{pageFlow.checked}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checked}"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15642/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checked</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkedOldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checked}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checked}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>133</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-794d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form name="form" action="/coreWeb/bugs/b15642/postback.do" method="post">
+Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.checked}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checked}" checked><br />
+Checkbox PageFlowController <input type="hidden" name="wlw-checkbox_key:{pageFlow.checked}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checked}" checked><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15642/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkedOldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checked}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checked}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>119</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-794d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form name="form" action="/coreWeb/bugs/b15642/postback.do" method="post">
+Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.checked}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checked}"><br />
+Checkbox PageFlowController <input type="hidden" name="wlw-checkbox_key:{pageFlow.checked}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checked}" checked><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15642/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkedOldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.checked}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>77</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-794d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Update through a repeater</title>
+</head>
+<body>
+<h4>Update Through A Repeater</h4>
+<form name="form" action="/coreWeb/bugs/b15642/postback.do" method="post">
+Checkbox <input type="hidden" name="wlw-checkbox_key:{actionForm.checked}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checked}"><br />
+Checkbox PageFlowController <input type="hidden" name="wlw-checkbox_key:{pageFlow.checked}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.checked}"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:08:03.360 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15964.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B15964.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B15964</sessionName>
+  <tester>Daryl</tester>
+  <startDate>03 Mar 2003, 11:58:07.380 AM MST</startDate>
+  <description>Test of binding to the URL context.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15964/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2jlbZ1UZza4ZlNO9cVLdmmDfoLyciz4P7g9n5jutkWi2qRoBRSSs!-12542443</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2jlbZ1UZza4ZlNO9cVLdmmDfoLyciz4P7g9n5jutkWi2qRoBRSSs!-12542443</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Parameter Test</title>
+</head>
+<body>
+<a href="/coreWeb/bugs/b15964/postback.do?foo=param-foo&baz=param-baz&bar=param-bar">Postback</a>
+<hr />
+Foo <span></span><br />
+Bar <span></span><br />
+Baz <span></span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b15964/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>bar</name>
+          <value>param-bar</value>
+        </parameter>
+        <parameter>
+          <name>baz</name>
+          <value>param-baz</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>param-foo</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2jlbZ1UZza4ZlNO9cVLdmmDfoLyciz4P7g9n5jutkWi2qRoBRSSs!-12542443</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2jlbZ1UZza4ZlNO9cVLdmmDfoLyciz4P7g9n5jutkWi2qRoBRSSs!-12542443</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/bugs/b15964/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Parameter Test</title>
+</head>
+<body>
+<a href="/coreWeb/bugs/b15964/postback.do?foo=param-foo&baz=param-baz&bar=param-bar">Postback</a>
+<hr />
+Foo <span>param-foo</span><br />
+Bar <span>param-bar</span><br />
+Baz <span>param-baz</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>03 Mar 2003, 11:58:31.215 AM MST</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B16092.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B16092.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B16092</sessionName>
+  <tester>Daryl</tester>
+  <startDate>03 Mar 2003, 12:30:28.230 PM MST</startDate>
+  <description>Test of a repeater with and without a repeater item in it.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b16092/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2jt1vdahbka78rHoZoSFSpA9StyslShmp8B9eSgvDCjIwxJSPlMh!-817110852</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2jt1vdahbka78rHoZoSFSpA9StyslShmp8B9eSgvDCjIwxJSPlMh!-817110852</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Repeater Error</title>
+</head>
+<h4>Repeater Error</h4>
+<b>With repeaterItem</b><br />
+
+<hr />
+<b>Without repeaterItem</b><br />
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>03 Mar 2003, 12:30:47.959 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B16451.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B16451.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B16451</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:08:10.080 AM MST</startDate>
+  <description>Another test point of failing to bind on the processPopulate.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b16451/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-793d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Post A Form</title>
+<!-- target -->
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b16451/Begin.jsp">
+</head>
+<body>
+<h4>Post A Form</h4>
+<form name="form" action="/coreWeb/bugs/b16451/postback.do" method="post" style="border: solid 1pt;padding: 10pt">
+Text:<input type="text" name="{actionForm.foo}" value=""><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b16451/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.foo}</name>
+          <value>foo</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>24</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-793d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Post A Form</title>
+<!-- target -->
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b16451/Begin.jsp">
+</head>
+<body>
+<h4>Post A Form</h4>
+<form name="form" action="/coreWeb/bugs/b16451/postback.do" method="post" style="border: solid 1pt;padding: 10pt">
+Text:<input type="text" name="{actionForm.foo}" value=""><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:08:12.794 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B17287.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B17287.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B17287</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 08:27:27.908 PM MDT</ses:startDate>
+   <ses:description>Ensure that type conversion exception from String to int is caught and reported as an ELException.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b17287/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>61F56CA2F9A0EC6BDF0B2636E4F9BEB2</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=61F56CA2F9A0EC6BDF0B2636E4F9BEB2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Cell Repeater</title>
+</head>
+<body>
+<b>Error in Cell Repeater - Invalid rows value</b>
+
+success -- caught ELException; assumed to be related to invalid String to int type conversion
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 08:27:35.569 PM MDT</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B17461.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B17461.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B17461</ses:sessionName>
+   <ses:tester>daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 08:28:29.937 PM MDT</ses:startDate>
+   <ses:description>daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b17461/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27c63d2b:fda072db3a:-68ec</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Padding Repeater Errors</title>
+</head>
+<body>
+<h4>Padding Repeater Errors</h4>
+<b>Binding Errors</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Repeater</td>
+ <th>Errors</th><td colspan="2">2</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Can not use a value of "0" for the field "maxRepeat"; the value must be greater than zero.</td></tr>
+<tr><th>Tag Error</th><th>Message</th><td colspan="3">Can not use a value of "0" for the field "minRepeat"; the value must be greater than or equal to zero.</td></tr>
+</table></span>
+
+<hr />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 08:28:30.268 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18025.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18025.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B18025</sessionName>
+  <tester>Daryl</tester>
+  <startDate>03 Mar 2003, 01:44:34.691 PM MST</startDate>
+  <description>Static initialization of Variables</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b18025/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2j2S1xYr9zWaxz7tMH6MRgFmKd0VUENqkyw9v4N9b4DxXZ9kAPDP!-1605665819</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2j2S1xYr9zWaxz7tMH6MRgFmKd0VUENqkyw9v4N9b4DxXZ9kAPDP!-1605665819</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>final property test</title>
+</head>
+<body>
+<br/>
+A final string: <b>'<span>a final string</span>'</b>
+<br/>
+A non-final string: <b>'<span>a non-final string</span>'</b>
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>03 Mar 2003, 01:44:52.426 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18067.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18067.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B18067</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Jan 2003, 04:39:09.694 PM MST</startDate>
+  <description>Testing the Escaping in the StringFormat</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b18067/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2xORx1DRA2Q35zgH3Bns2Q6QNgNUV9Kc2PziK8DCc1we84gIGepy!1015546474</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2xORx1DRA2Q35zgH3Bns2Q6QNgNUV9Kc2PziK8DCc1we84gIGepy!1015546474</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Format bug</title>
+</head>
+<body>
+<h4>Format bug</h4>
+<span>#A-BCDEF-G</span>
+<br />
+<span>$A-BCDEF-G</span>
+<hr />
+<b>Should be</b><br />
+#A-BCDEF-G<br />
+$A-BCDEF-G<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>24 Jan 2003, 04:41:50.864 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18068.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B18068.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B18068</sessionName>
+  <tester>Daryl</tester>
+  <startDate>20 Mar 2004, 10:04:06.235 AM MST</startDate>
+  <description>Verify that the FormatNumber tag validates the type.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b18068/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-189e36e1:fb692b5d8a:-791b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Format Error</title>
+</head>
+<body>
+<h4>Format Error -- Should report an error for an invalid type</h4>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Label</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The NumberFormat type must be "number", "currency", or "percent".</td></tr>
+</table></span>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>20 Mar 2004, 10:04:07.497 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B22957.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B22957.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B22957</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 11:00:31.760 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b22957/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIrIslktmDbS5sIyiXnqwdIhZU1TKqszprQojWV7wtcJa68GUX2!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIrIslktmDbS5sIyiXnqwdIhZU1TKqszprQojWV7wtcJa68GUX2!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-6851</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Bug 22957
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+         &lt;form id="Netui_Form_0" action="/coreWeb/bugs/b22957/foo.do" method="post"> 
+            &lt;a href="/coreWeb/bugs/b22957/foo.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b22957/foo.do");return false;'>Create&lt;/a> 
+        &lt;/form>
+        &lt;span>begin&lt;/span>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b22957/foo.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIrIslktmDbS5sIyiXnqwdIhZU1TKqszprQojWV7wtcJa68GUX2!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIrIslktmDbS5sIyiXnqwdIhZU1TKqszprQojWV7wtcJa68GUX2!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-6851</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Bug 22957
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+         &lt;form id="Netui_Form_0" action="/coreWeb/bugs/b22957/foo.do" method="post"> 
+            &lt;a href="/coreWeb/bugs/b22957/foo.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b22957/foo.do");return false;'>Create&lt;/a> 
+        &lt;/form>
+        &lt;span>foo&lt;/span>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 11:00:37.248 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28421.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28421.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B28421</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Apr 2003, 01:42:38.735 PM MDT</startDate>
+  <description>Default content is displayed if no sections are defined</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b28421/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2qg4m2l2j6Mg21bbqTDEV0bM1NDZgm32yUJSohGrXlElaV66ORhs!-782704002</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2qg4m2l2j6Mg21bbqTDEV0bM1NDZgm32yUJSohGrXlElaV66ORhs!-782704002</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+   
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <head>
+        <title>
+            Bug Index
+        </title>
+    </head>
+    <body>
+        <h4>
+            Bug Index
+        </h4>
+        <!--Generated by WebLogic Workshop-->
+
+
+
+
+<b>This is the default content.</b>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Apr 2003, 01:42:56.000 PM MDT</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28633.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28633.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B28633</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 09:34:11.100 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b28633/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-35ead49b:fda1c948e7:-755c</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+<body>
+<h4>Visibility Error</h4>
+<p style="color:green">
+This tests the default binding of an expression in the visible tag.  The default is 'false' so
+the text "This is text..." should not be visible below.  This is a single page test.
+</p>
+<hr>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 09:34:12.602 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28774.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28774.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B28774</sessionName>
+  <tester>Daryl</tester>
+  <startDate>20 Mar 2004, 10:04:24.852 AM MST</startDate>
+  <description>Report Errors when the template file cannot be found.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b28774/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-189e36e1:fb692b5d8a:-78f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+   
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Template</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Template file [../bad.jsp] was not found.</td></tr>
+</table></span>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b28774/bug1/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-189e36e1:fb692b5d8a:-78f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+   
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Template</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Template file [bad.jsp] was not found.</td></tr>
+</table></span>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b28774/bug2/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-189e36e1:fb692b5d8a:-78f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+   
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <head>
+        <title>
+            Index
+        </title>
+    </head>
+    <body>
+        <h4>
+            Index
+        </h4>
+        <!--Generated by WebLogic Workshop-->
+
+
+
+
+<b>This is the default content.</b>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>20 Mar 2004, 10:04:28.377 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28775.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B28775.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B28775</sessionName>
+  <tester>Daryl</tester>
+  <startDate>20 Mar 2004, 10:04:28.908 AM MST</startDate>
+  <description>Report errors if the section default page is not found</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b28775/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-189e36e1:fb692b5d8a:-78f0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+   
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <head>
+        <title>
+            Index
+        </title>
+    </head>
+    <body>
+        <h4>
+            Index
+        </h4>
+        <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>IncludeSection</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The defaultPage file [bad.jsp] was not found.</td></tr>
+</table></span>
+
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b28775/bug1/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ac57ASvcUXbpM1mkSuSWUV2tcRVXqdQeXntxBB3pdPjGAh0kqwyr!-1017168403</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-189e36e1:fb692b5d8a:-78f0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+   
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <head>
+        <title>
+            Index
+        </title>
+    </head>
+    <body>
+        <h4>
+            Index
+        </h4>
+        <!--Generated by WebLogic Workshop-->
+
+
+
+
+<b>This is the default content.</b>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>20 Mar 2004, 10:04:31.912 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B30458.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B30458.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B30458</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 10:37:31.140 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b30458/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-b9c5fb7:fd9f34a175:-724d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Bug 30458
+        </title>
+    </head>
+    <body>
+        
+        <table cellspacing="0" cellpadding="4" border="1"
+                class="tablebody" >
+                <tr>
+                    <td><span>Foo</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>Bar</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>Baz</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>Blee</span></td>
+                </tr>
+            </table>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 10:37:32.406 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33322.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33322.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B33322</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:40:00.958 PM MST</startDate>
+  <description>Error Reporting in the NumberFormatter</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b33322/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78ed</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Bug 33322
+        </title>
+    </head>
+    <body>
+    <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Label</b>]</span><br />
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Label</th><th>Message</th><td>FormatError while formatting: Multiple decimal separators in pattern "999.00.999".</td></tr>
+</table></div>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:40:03.041 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33704.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33704.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B33704</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:40:03.762 PM MST</startDate>
+  <description>Test of formatDate against the Calendar</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b33704/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78e9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Bug 33322
+        </title>
+    </head>
+    <body>
+    Date: <span>05/23/2003</span><br />
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:40:05.745 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33807.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B33807.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B33807</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:40:06.456 PM MST</startDate>
+  <description>Catch error when the type being formatted by the dataFormatter is not correct.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b33807/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78e5</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Bug 33322
+        </title>
+    </head>
+    <body>
+    Date: <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Label</b>]</span><br />
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Label</th><th>Message</th><td>The type "bugs.b33807.Controller$Foo" may not be formatted by a formatDate tag.</td></tr>
+</table></div>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:40:08.459 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B34263.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B34263.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B34263</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 11:00:37.999 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b34263/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIrIslktmDbS5sIyiXnqwdIhZU1TKqszprQojWV7wtcJa68GUX2!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIrIslktmDbS5sIyiXnqwdIhZU1TKqszprQojWV7wtcJa68GUX2!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-6811</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Bug 34263
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="name" id="FormOne" action="/coreWeb/bugs/b34263/EnterName.do" method="post">
+            &lt;table>
+                &lt;tr>
+                    &lt;td>LastName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.lastName}" value="">
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr>
+                    &lt;td>FirstName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.firstName}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;input type="submit" id="NameEnter" value="Enter">
+            &lt;input type="submit" name="actionOverride:DeleteName" value="Delete">
+        &lt;/form>
+        &lt;form name="search" id="FormTwo" action="/coreWeb/bugs/b34263/EnterSearch.do" method="post">
+            &lt;table>
+                &lt;tr>
+                    &lt;td>Query:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.query}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;input type="submit" id="SearchEnter" value="Enter Search">
+            &lt;input type="submit" name="actionOverride:EnterAdvancedSearch" value="Advanced Search...">
+        &lt;/form>
+        &lt;form id="FormThree" action="/coreWeb/bugs/b34263/begin.do" method="post">
+            &lt;table>&lt;/table>
+            Advanced: &lt;input type="hidden" name="wlw-checkbox_key:{pageFlow.advanced}OldValue" value="false">&lt;input type="checkbox" name="wlw-checkbox_key:{pageFlow.advanced}" checked>
+            &lt;br>
+            Verbose: &lt;input type="hidden" name="wlw-checkbox_key:{pageFlow.verbose}OldValue" value="false">&lt;input type="checkbox" name="wlw-checkbox_key:{pageFlow.verbose}">
+            &lt;br>
+            &lt;input type="submit" id="CustomizeUpdate" value="Enter">
+            &lt;input type="submit" id="CustomizeReset" value="Reset">
+        &lt;/form>
+        &lt;form id="FormFour" action="/coreWeb/bugs/b34263/begin.do" method="post">
+            &lt;input type="submit" id="MiscOne" value="Misc One">
+            &lt;input type="submit" id="MiscTwo" value="Misc Two">
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.FormFour="FormFour"
+netui_names.CustomizeReset="CustomizeReset"
+netui_names.SearchAdvanced="actionOverride:EnterAdvancedSearch"
+netui_names.SearchEnter="SearchEnter"
+netui_names.FormThree="FormThree"
+netui_names.NameEnter="NameEnter"
+netui_names.CustomizeUpdate="CustomizeUpdate"
+netui_names.NameDelete="actionOverride:DeleteName"
+netui_names.MiscOne="MiscOne"
+netui_names.MiscTwo="MiscTwo"
+netui_names.FormOne="FormOne"
+netui_names.FormTwo="FormTwo"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 11:00:42.435 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B34998.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B34998.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B34998</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>03 Jul 2004, 03:33:08.528 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b34998/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-25c4d142:fd86eaf7ac:-7ec6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Bug 34998
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;h4>Bug 34998&lt;/h4>
+        &lt;p style="color:green">
+        This test simply posts a textArea and the sets a text property on the pageFlow.  The results
+        will then display that value.  The resulting text should be exactly the same as entered into the textArea.
+        &lt;/p>
+        &lt;form name="name" id="FormOne" action="/coreWeb/bugs/b34998/EnterName.do" method="post">
+            &lt;table>
+                &lt;tr>
+                    &lt;td>Text:&lt;/td>
+                    &lt;td>
+                    &lt;textarea name="{actionForm.text}">&lt;/textarea>
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;input type="submit" value="Enter">
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.FormOne="FormOne"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b34998/EnterName.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.text}</ses:name>
+                  <ses:value>1
+2
+3
+4
+[end]</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>47</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=56D5E5B8C33B2C9463E17AA18BC93A1C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-25c4d142:fd86eaf7ac:-7ec6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Bug 34998
+        </title>
+    </head>
+    <body>
+       1
+2
+3
+4
+[end]
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>03 Jul 2004, 03:33:12.293 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>1</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35037.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35037.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B35037</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>30 Jun 2004, 11:26:12.952 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b35037/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>7C273412E2817092712E009B1FEA64C3</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=7C273412E2817092712E009B1FEA64C3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-362f81ef:fd76964241:-7e99</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+   
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Template</td>
+ <th>Errors</th><td colspan="2">2</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Servlet Exception occured including template: hello</td></tr>
+<tr><th>Tag Error</th><th>Message</th><td colspan="3">Servlet Exception occured include template: foo.jsp, message: hello</td></tr>
+</table></span>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 11:26:14.083 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35037b.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35037b.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B35037b</sessionName>
+  <tester>Daryl</tester>
+  <startDate>30 Mar 2004, 04:58:56.643 PM MST</startDate>
+  <description>Test that a missing template file reports an error.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35037b/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AqJl2GNOxh8ENTsZca1FcabB831en2JLqWSYXS2Tdy0PUDdlsve5!1393123761</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AqJl2GNOxh8ENTsZca1FcabB831en2JLqWSYXS2Tdy0PUDdlsve5!1393123761</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+<body>
+
+   
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Template</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Template file [foo.jsp] was not found.</td></tr>
+</table></span>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>30 Mar 2004, 04:59:11.635 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35084.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35084.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,603 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B35084</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:09:28.673 AM MST</startDate>
+  <description>Test of submitting a form with multiple imageAnchors</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35084/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-78d3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+
+<html>
+    <head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b35084/index.jsp">
+    </head>
+     <body style="margin:0">
+        <a href="/coreWeb/bugs/b35084/start.do">Start</a>
+     </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35084/start.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-78d3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+  <head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b35084/lastName.jsp">
+  </head>
+  <body style="margin:0">
+   <form name="nameActionForm" id="Netui_Form_0" action="/coreWeb/bugs/b35084/next.do" method="post">
+        <table border="0" style="font-size:10">
+            <tr>
+                <td>
+                    Text: <input type="text" name="{actionForm.lastname}" value="">   
+                </td>
+            </tr>
+            <tr>
+                <td>         
+                    <a href="/coreWeb/bugs/b35084/begin.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b35084/begin.do");return false;'><img src="/coreWeb/bugs/b35084/../../resources/images/back.gif"></a>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+                    !!!!
+                    <a href="/coreWeb/bugs/b35084/next.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b35084/next.do");return false;'><img src="/coreWeb/bugs/b35084/../../resources/images/insert.gif"></a>
+                </td>
+            </tr>
+        </table>
+    </form>         
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35084/begin.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.lastname}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>26</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-78d3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+
+<html>
+    <head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b35084/index.jsp">
+    </head>
+     <body style="margin:0">
+        <a href="/coreWeb/bugs/b35084/start.do">Start</a>
+     </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35084/start.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-78d3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+  <head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b35084/lastName.jsp">
+  </head>
+  <body style="margin:0">
+   <form name="nameActionForm" id="Netui_Form_0" action="/coreWeb/bugs/b35084/next.do" method="post">
+        <table border="0" style="font-size:10">
+            <tr>
+                <td>
+                    Text: <input type="text" name="{actionForm.lastname}" value="">   
+                </td>
+            </tr>
+            <tr>
+                <td>         
+                    <a href="/coreWeb/bugs/b35084/begin.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b35084/begin.do");return false;'><img src="/coreWeb/bugs/b35084/../../resources/images/back.gif"></a>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+                    !!!!
+                    <a href="/coreWeb/bugs/b35084/next.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b35084/next.do");return false;'><img src="/coreWeb/bugs/b35084/../../resources/images/insert.gif"></a>
+                </td>
+            </tr>
+        </table>
+    </form>         
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35084/next.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.lastname}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>26</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-78d3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+  <head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b35084/done.jsp">
+  </head>
+  <body>
+    <span>foo</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:09:34.652 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>3</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35084b.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35084b.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B35084b</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:09:35.383 AM MST</startDate>
+  <description>ImageAnchor raising invalid action</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35084b/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-78cb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+
+<html>
+    <head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b35084b/index.jsp">
+    </head>
+     <body style="margin:0">
+        <a href="/coreWeb/bugs/b35084b/start.do">Start</a>
+     </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35084b/start.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-78cb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+  <head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/b35084b/lastName.jsp">
+  </head>
+  <body style="margin:0">
+   <form name="nameActionForm" id="Netui_Form_0" action="/coreWeb/bugs/b35084b/next.do" method="post">
+        <table border="0" style="font-size:10">
+            <tr>
+                <td>
+                    Text: <input type="text" name="{actionForm.lastname}" value="">   
+                </td>
+            </tr>
+            <tr>
+                <td>         
+                    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>ImageAnchor</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Action beginbogus is not a valid action.</td></tr>
+</table></span>
+
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+                    !!!!
+                    <a href="/coreWeb/bugs/b35084b/next.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b35084b/next.do");return false;'><img src="/coreWeb/bugs/b35084b/../../resources/images/insert.gif"></a>
+                </td>
+            </tr>
+        </table>
+    </form>         
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:09:38.647 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35094.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B35094.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B35094</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:40:34.766 PM MST</startDate>
+  <description>Test of adding parameters to an image src attribute</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b35094/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+    <p>
+        New Web Application Page
+        <img src="/coreWeb/bugs/b35094/../../resources/images/handlerightmiddle.gif?name=27">
+        </p>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:40:36.689 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B36628.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B36628.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,534 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B36628</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:40:37.400 PM MST</startDate>
+  <description>Verify that error and errors handle undefined message-resources</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78bb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b36628/throwRT.do">Throw Runtime Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628/throwIA.do">Throw Illegal Argument Exception</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628/throwRT.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78bb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Error One</h4>
+        <a href="/coreWeb/bugs/b36628/begin.do">Home</a><br>
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Errors</b>]</span><br>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Errors</th><th>Message</th><td>An error occurred accessing the message bundle.  This may be because the message-resource is not defined within the page flow.  The error: Cannot find message resources under key org.apache.struts.action.MESSAGE</td></tr>
+</table></div>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78bb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b36628/throwRT.do">Throw Runtime Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628/throwIA.do">Throw Illegal Argument Exception</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628/throwIA.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78bb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Error Two</h4>
+       <a href="/coreWeb/bugs/b36628/begin.do">Home</a><br>
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Error</b>]</span><br/>
+     <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Error</th><th>Message</th><td>An error occurred accessing the message bundle.  This may be because the message-resource is not defined within the page flow.  The error: Cannot find message resources under key org.apache.struts.action.MESSAGE</td></tr>
+</table></div>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78bb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b36628/throwRT.do">Throw Runtime Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628/throwIA.do">Throw Illegal Argument Exception</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:40:43.659 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>5</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B36628b.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B36628b.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,743 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B36628b</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:40:44.310 PM MST</startDate>
+  <description>Error and Errors handling of no message-resource</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628b/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78b3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b36628b/throwRT.do">Throw Runtime Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628b/throwIA.do">Throw Illegal Argument Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628b/throwIAc.do">Throw Illegal Access Exception</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628b/throwRT.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78b3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Error One</h4>
+        <a href="/coreWeb/bugs/b36628b/begin.do">Home</a><br>
+        This message came from exceptions.Messages.
+<br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628b/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78b3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b36628b/throwRT.do">Throw Runtime Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628b/throwIA.do">Throw Illegal Argument Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628b/throwIAc.do">Throw Illegal Access Exception</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628b/throwIA.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78b3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Error Two</h4>
+       <a href="/coreWeb/bugs/b36628b/begin.do">Home</a><br>
+        Here is a completely new message
+<br/>
+     </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628b/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78b3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b36628b/throwRT.do">Throw Runtime Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628b/throwIA.do">Throw Illegal Argument Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628b/throwIAc.do">Throw Illegal Access Exception</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628b/throwIAc.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78b3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Other Errors</h4>
+        <a href="/coreWeb/bugs/b36628b/foo/..\Controller.jpf">Home</a><br>
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Errors</b>]</span><br>
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:2</b>, Found in tag <b>Error</b>]</span><br>
+        
+    </body><div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Errors</th><th>Message</th><td>An error occurred accessing the message bundle.  This may be because the message-resource is not defined within the page flow.  The error: Cannot find message resources under key org.apache.struts.action.MESSAGE</td></tr>
+<tr><th>2</th><th>Error</th><th>Message</th><td>An error occurred accessing the message bundle.  This may be because the message-resource is not defined within the page flow.  The error: Cannot find message resources under key org.apache.struts.action.MESSAGE</td></tr>
+</table></div>
+
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b36628b/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78b3</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b36628b/throwRT.do">Throw Runtime Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628b/throwIA.do">Throw Illegal Argument Exception</a>
+        <br>
+        <a href="/coreWeb/bugs/b36628b/throwIAc.do">Throw Illegal Access Exception</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:40:52.792 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>7</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>7</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B37240.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B37240.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B37240</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:40:53.513 PM MST</startDate>
+  <description>Test that defaultValue works with Integer.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b37240/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78a9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        New Web Application Page
+        <form name="selectedValueForm" action="/coreWeb/bugs/b37240/postback.do" method="post">
+        <br/>
+            Select:
+            <input type="hidden" name="wlw-select_key:{actionForm.selectedValue}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectedValue}">
+<option value="1">First Choice</option>
+<option value="2">Second Choice</option>
+<option value="3" selected>Third Choice</option>
+<option value="4">Fourth Choice</option>
+<option value="5">Fifth Choice</option></select>
+        <br/>
+        <br/>
+            Multi Select:
+            <input type="hidden" name="wlw-select_key:{actionForm.selectedValue2}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectedValue2}" multiple size="5">
+<option value="1">First Choice</option>
+<option value="2" selected>Second Choice</option>
+<option value="3">Third Choice</option>
+<option value="4" selected>Fourth Choice</option>
+<option value="5">Fifth Choice</option></select>
+            <br>
+            <input type="submit" value="postback">
+        </form>
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b37240/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-select_key:{actionForm.selectedValue2}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.selectedValue2}</name>
+          <value>4</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.selectedValue2}</name>
+          <value>5</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.selectedValue2}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.selectedValue}</name>
+          <value>4</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.selectedValue}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>325</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-78a9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        New Web Application Page
+        <form name="selectedValueForm" action="/coreWeb/bugs/b37240/postback.do" method="post">
+        <br/>
+            Select:
+            <input type="hidden" name="wlw-select_key:{actionForm.selectedValue}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectedValue}">
+<option value="1">First Choice</option>
+<option value="2">Second Choice</option>
+<option value="3">Third Choice</option>
+<option value="4" selected>Fourth Choice</option>
+<option value="5">Fifth Choice</option></select>
+        <br/>
+        <br/>
+            Multi Select:
+            <input type="hidden" name="wlw-select_key:{actionForm.selectedValue2}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectedValue2}" multiple size="5">
+<option value="1" selected>First Choice</option>
+<option value="2">Second Choice</option>
+<option value="3">Third Choice</option>
+<option value="4" selected>Fourth Choice</option>
+<option value="5" selected>Fifth Choice</option></select>
+            <br>
+            <input type="submit" value="postback">
+        </form>
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:40:56.577 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B37374.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B37374.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B37374</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 06:29:11.967 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b37374/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7e68</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <form name="topForm" action="/coreWeb/bugs/b37374/submitIt.do" method="post">
+        <table>
+         
+            <tr> <td> 
+                <a href="/coreWeb/bugs/b37374/results.jsp">results.jsp</a> 
+            </td> 
+            </tr> 
+         
+            <tr> <td> 
+                <span style="color:red;background-color:white">
+ [<b>Expression Error:1</b>, Found in tag <b>Anchor</b>]</span> 
+            </td> 
+            </tr> 
+         
+            <tr> <td> 
+                <a href="/coreWeb/bugs/b37374/results.jsp">results.jsp</a> 
+            </td> 
+            </tr> 
+         
+        </table>
+        </form>
+        <hr />
+        <form name="topForm" action="/coreWeb/bugs/b37374/submitIt.do" method="post">
+        <table>
+         
+            <tr> <td> 
+                <a href="/coreWeb/bugs/b37374/results.jsp"><img src="/coreWeb/resources/images/bar-background.gif"></a> 
+            </td> 
+            </tr> 
+         
+            <tr> <td> 
+                <span style="color:red;background-color:white">
+ [<b>Expression Error:4</b>, Found in tag <b>ImageAnchor</b>]</span> 
+            </td> 
+            </tr> 
+         
+            <tr> <td> 
+                <a href="/coreWeb/bugs/b37374/results.jsp"><img src="/coreWeb/resources/images/bar-background.gif"></a> 
+            </td> 
+            </tr> 
+         
+        </table>
+        </form>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th rowspan="2">1</th><th rowspan="2">Anchor</th><th>Attribute</th><td>href</td>
+ <th>Expression</th><td>{container.item.domainOwner}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{container.item.domainOwner}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Can not evaluate the identifier "domainOwner" on a null value object.</td></tr>
+<tr><th rowspan="2">2</th><th rowspan="2">Content</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.domainOwner}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{container.item.domainOwner}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Can not evaluate the identifier "domainOwner" on a null value object.</td></tr>
+<tr><th>3</th><th>Anchor</th><th>Message</th><td>The href expression "{container.item.domainOwner}" resolved to null.</td></tr>
+<tr><th rowspan="2">4</th><th rowspan="2">ImageAnchor</th><th>Attribute</th><td>href</td>
+ <th>Expression</th><td>{container.item.domainOwner}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{container.item.domainOwner}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Can not evaluate the identifier "domainOwner" on a null value object.</td></tr>
+<tr><th>5</th><th>ImageAnchor</th><th>Message</th><td>The href expression "{container.item.domainOwner}" resolved to null.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 06:29:14.237 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38182.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38182.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B38182</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>30 Jun 2004, 03:13:08.680 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b38182/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>EA6E9332C79910AD480DA44AE3C09D85</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>*/*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=EA6E9332C79910AD480DA44AE3C09D85</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-7452</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <br/>
+        <form name="form" action="/coreWeb/bugs/b38182/submitForm.do" method="post">
+            <hidden name="foo" value="bar"/>
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Select/Options Source</td>
+                    <td>
+                        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Select</b>]</span>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Select</th><th>Message</th><td>The expression "<b>{pageFlow.selectOptions</b>" is an invalid expression for an <b>optionsDataSource</b> and could not be evaluated.  Cause: org.apache.beehive.netui.script.IllegalExpressionException: org.apache.beehive.netui.script.el.ExpressionParseException: Error occurred parsing expression "{pageFlow.selectOptions".</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 03:13:09.481 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38183.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38183.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B38183</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 08:17:25.812 PM MDT</ses:startDate>
+   <ses:description>Ensure that an ELException is thrown when {container.foo} is evaluated on a repeater since "foo" doesn't exist on the container implicit object.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b38183/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>C1658E2743780BA4359BA6E05A6ADF71</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=C1658E2743780BA4359BA6E05A6ADF71</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+      success -- caught ELException; assumed to be related to missing {container.foo}
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 08:17:34.645 PM MDT</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38184.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B38184.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B38184</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:41:08.945 PM MST</startDate>
+  <description>Verify that repeater accepts a Enumeration</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b38184/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7894</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+      <h4>List</h4>
+      <ul><li><span>One</span></li>
+        <li><span>Two</span></li>
+        <li><span>Three</span></li>
+        </ul>
+      <hr />
+      <h4>Enumeration</h4>
+      <ul><li><span>One</span></li>
+        <li><span>Two</span></li>
+        <li><span>Three</span></li>
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:41:11.138 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39363.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39363.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,543 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B39363</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>25 Mar 2004, 12:10:22.070 AM MST</startDate>
+  <description>Test ArrayList updates.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b39363/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-788e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>List Update Test</title>
+  </head>
+
+  <body>
+    <h1>List Update Test</h1>
+
+<form name="listForm" action="/coreWeb/bugs/b39363/postback.do" method="post">
+
+<b>List Data</b><br/>
+<table><tr><td>List</td></tr>
+      <tr><td>
+      <input type="text" name="{actionForm.list[0]}" value="foo1">
+      </td></tr>
+    
+      <tr><td>
+      <input type="text" name="{actionForm.list[1]}" value="bar1">
+      </td></tr>
+    </table>
+  <br/>
+  <br/>
+  <input type="submit" value="Submit">
+</form>
+<br/>
+<br/>
+<br>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b39363/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.list[0]}</name>
+          <value>foo2</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.list[1]}</name>
+          <value>bar2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>67</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-788e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>List Update Test</title>
+  </head>
+
+  <body>
+    <h1>List Update Test</h1>
+
+<form name="listForm" action="/coreWeb/bugs/b39363/postback.do" method="post">
+
+<b>List Data</b><br/>
+<table><tr><td>List</td></tr>
+      <tr><td>
+      <input type="text" name="{actionForm.list[0]}" value="foo2">
+      </td></tr>
+    
+      <tr><td>
+      <input type="text" name="{actionForm.list[1]}" value="bar2">
+      </td></tr>
+    </table>
+  <br/>
+  <br/>
+  <input type="submit" value="Submit">
+</form>
+<br/>
+<br/>
+<br>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b39363/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.list[0]}</name>
+          <value>asdf</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.list[1]}</name>
+          <value>qwer</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>67</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-788e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>List Update Test</title>
+  </head>
+
+  <body>
+    <h1>List Update Test</h1>
+
+<form name="listForm" action="/coreWeb/bugs/b39363/postback.do" method="post">
+
+<b>List Data</b><br/>
+<table><tr><td>List</td></tr>
+      <tr><td>
+      <input type="text" name="{actionForm.list[0]}" value="asdf">
+      </td></tr>
+    
+      <tr><td>
+      <input type="text" name="{actionForm.list[1]}" value="qwer">
+      </td></tr>
+    </table>
+  <br/>
+  <br/>
+  <input type="submit" value="Submit">
+</form>
+<br/>
+<br/>
+<br>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b39363/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.list[0]}</name>
+          <value>asdf</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.list[1]}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>63</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiE5Stmna2SIbdx7WkIncPaCS6mtNqk0gaF3kONNKRP010O3VujM!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-788e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>List Update Test</title>
+  </head>
+
+  <body>
+    <h1>List Update Test</h1>
+
+<form name="listForm" action="/coreWeb/bugs/b39363/postback.do" method="post">
+
+<b>List Data</b><br/>
+<table><tr><td>List</td></tr>
+      <tr><td>
+      <input type="text" name="{actionForm.list[0]}" value="asdf">
+      </td></tr>
+    
+      <tr><td>
+      <input type="text" name="{actionForm.list[1]}" value="">
+      </td></tr>
+    </table>
+  <br/>
+  <br/>
+  <input type="submit" value="Submit">
+</form>
+<br/>
+<br/>
+<br>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:10:26.166 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39434.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39434.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B39434</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:41:11.859 PM MST</startDate>
+  <description>Verify that FormatDate works with Strings.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b39434/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7890</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        From Label: ("08/28/2003"):
+        <span>08/28/2003</span> <br />
+        From Label: ("08/28/03"):
+        <span>08/28/2003</span>  <br />
+        From Label: ("08/28/72"):
+        <span>08/28/1972</span>  <br />
+        From Label: ("08282003"):
+        <span>08/28/2003</span> <br />
+        From Label: ("082803"):
+        <span>08/28/2003</span>  <br />
+        From Label: ("082872"):
+        <span>08/28/1972</span>  <br />
+        Repeater from String: 
+         
+             <span>07/04/03</span> 
+           
+             <span>08/10/12</span> 
+           
+
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:41:14.122 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39552.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39552.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B39552</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:41:14.853 PM MST</startDate>
+  <description>Verify that the optionDataSource may contains null entries.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b39552/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-788c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multi Select
+        </title>
+    </head>
+    <body>
+        <p>
+        MultiSelect <br/>
+        <br/>
+        <form name="postbackForm" action="/coreWeb/bugs/b39552/postback.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>SelectedItems:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.selectedItems}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectedItems}">
+<option value="1">Option 1</option>
+<option value="2">Option 2</option>
+<option value="3">Option 3</option>
+<option value="4">Option 4</option>
+<option value="5">Option 5</option></select>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Radio Button Group Items:</td>
+                    <td>
+                    <input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="1"><span>Option 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="2"><span>Option 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="3"><span>Option 3</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="4"><span>Option 4</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="5"><span>Option 5</span><br>
+
+                    </td>
+                </tr>
+                
+                <tr valign="top">
+                    <td>CheckBox Group Items:</td>
+                    <td>
+                    <input type="hidden" name="wlw-checkbox_group_key:{actionForm.selectedItems}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="1"><span>Option 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="2"><span>Option 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="3"><span>Option 3</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="4"><span>Option 4</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="5"><span>Option 5</span><br>
+
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postback">
+        </form>
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b39552/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_group_key:{actionForm.selectedItems}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.selectedItems}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.selectedItems}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>179</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-788c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multi Select
+        </title>
+    </head>
+    <body>
+        <p>
+        MultiSelect <br/>
+        <br/>
+        <form name="postbackForm" action="/coreWeb/bugs/b39552/postback.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>SelectedItems:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.selectedItems}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectedItems}">
+<option value="1" selected>Option 1</option>
+<option value="2">Option 2</option>
+<option value="3">Option 3</option>
+<option value="4">Option 4</option>
+<option value="5">Option 5</option></select>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Radio Button Group Items:</td>
+                    <td>
+                    <input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="1"><span>Option 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="2"><span>Option 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="3"><span>Option 3</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="4"><span>Option 4</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.selectedItems}" value="5"><span>Option 5</span><br>
+
+                    </td>
+                </tr>
+                
+                <tr valign="top">
+                    <td>CheckBox Group Items:</td>
+                    <td>
+                    <input type="hidden" name="wlw-checkbox_group_key:{actionForm.selectedItems}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="1" checked><span>Option 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="2"><span>Option 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="3"><span>Option 3</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="4"><span>Option 4</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.selectedItems}" value="5"><span>Option 5</span><br>
+
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postback">
+        </form>
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:41:18.007 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39820.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B39820.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1754 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B39820</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 11:10:49.831 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>Sample Application Page&lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;H4>Try different combination, and observe the result.&lt;/H4>
+        &lt;form name="theFormBean" id="tagId1" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 1">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=foo" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=bar" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        
+        &lt;form name="theFormBean" id="tagId2" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 2">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+foo" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+foo");return false;'>Not Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+bar" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+bar");return false;'>Not Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.tagId2="tagId2"
+netui_names.tagId1="tagId1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/theAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>form</ses:name>
+                  <ses:value>Form 1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>foo</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.prop1}</ses:name>
+                  <ses:value>x</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>46</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>Sample Application Resutl Page</title>
+    </head>
+    <body>
+        Prop1: <span>x</span><br>
+        Prop2: <span>foo</span><br>
+        Form: <span>Form 1</span><br>
+        <p>
+        <a href="/coreWeb/bugs/b39820/begin.do">back</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>Sample Application Page&lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;H4>Try different combination, and observe the result.&lt;/H4>
+        &lt;form name="theFormBean" id="tagId1" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 1">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=foo" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=bar" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        
+        &lt;form name="theFormBean" id="tagId2" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 2">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+foo" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+foo");return false;'>Not Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+bar" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+bar");return false;'>Not Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.tagId2="tagId2"
+netui_names.tagId1="tagId1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/theAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>form</ses:name>
+                  <ses:value>Form 1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.prop1}</ses:name>
+                  <ses:value>x</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>46</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>Sample Application Resutl Page</title>
+    </head>
+    <body>
+        Prop1: <span>x</span><br>
+        Prop2: <span>bar</span><br>
+        Form: <span>Form 1</span><br>
+        <p>
+        <a href="/coreWeb/bugs/b39820/begin.do">back</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>Sample Application Page&lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;H4>Try different combination, and observe the result.&lt;/H4>
+        &lt;form name="theFormBean" id="tagId1" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 1">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=foo" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=bar" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        
+        &lt;form name="theFormBean" id="tagId2" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 2">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+foo" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+foo");return false;'>Not Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+bar" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+bar");return false;'>Not Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.tagId2="tagId2"
+netui_names.tagId1="tagId1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/theAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>form</ses:name>
+                  <ses:value>Form 2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>not foo</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.prop1}</ses:name>
+                  <ses:value>y</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>50</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>Sample Application Resutl Page</title>
+    </head>
+    <body>
+        Prop1: <span>y</span><br>
+        Prop2: <span>not foo</span><br>
+        Form: <span>Form 2</span><br>
+        <p>
+        <a href="/coreWeb/bugs/b39820/begin.do">back</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>7</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>Sample Application Page&lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;H4>Try different combination, and observe the result.&lt;/H4>
+        &lt;form name="theFormBean" id="tagId1" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 1">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=foo" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=bar" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        
+        &lt;form name="theFormBean" id="tagId2" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 2">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+foo" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+foo");return false;'>Not Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+bar" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+bar");return false;'>Not Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.tagId2="tagId2"
+netui_names.tagId1="tagId1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/theAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>form</ses:name>
+                  <ses:value>Form 2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>not bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.prop1}</ses:name>
+                  <ses:value>y</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>50</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>Sample Application Resutl Page</title>
+    </head>
+    <body>
+        Prop1: <span>y</span><br>
+        Prop2: <span>not bar</span><br>
+        Form: <span>Form 2</span><br>
+        <p>
+        <a href="/coreWeb/bugs/b39820/begin.do">back</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>Sample Application Page&lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;H4>Try different combination, and observe the result.&lt;/H4>
+        &lt;form name="theFormBean" id="tagId1" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 1">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=foo" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=bar" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        
+        &lt;form name="theFormBean" id="tagId2" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 2">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+foo" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+foo");return false;'>Not Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+bar" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+bar");return false;'>Not Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.tagId2="tagId2"
+netui_names.tagId1="tagId1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>10</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/theAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>form</ses:name>
+                  <ses:value>Form 1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.prop1}</ses:name>
+                  <ses:value>x</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>46</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>10</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>Sample Application Resutl Page</title>
+    </head>
+    <body>
+        Prop1: <span>x</span><br>
+        Prop2: <span>bar</span><br>
+        Form: <span>Form 1</span><br>
+        <p>
+        <a href="/coreWeb/bugs/b39820/begin.do">back</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>11</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>11</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>Sample Application Page&lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;H4>Try different combination, and observe the result.&lt;/H4>
+        &lt;form name="theFormBean" id="tagId1" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 1">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=foo" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=bar" onclick='anchor_submit_form("tagId1","/coreWeb/bugs/b39820/theAction.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        
+        &lt;form name="theFormBean" id="tagId2" action="/coreWeb/bugs/b39820/theAction.do" method="post">
+&lt;input type="hidden" name="form" value="Form 2">
+            
+            &lt;table>
+                &lt;tr>
+                    &lt;td>&lt;span>Prop1:&lt;/span>&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.prop1}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+foo" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+foo");return false;'>Not Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/b39820/theAction.do?prop2=not+bar" onclick='anchor_submit_form("tagId2","/coreWeb/bugs/b39820/theAction.do?prop2=not+bar");return false;'>Not Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.tagId2="tagId2"
+netui_names.tagId1="tagId1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>12</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b39820/theAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>form</ses:name>
+                  <ses:value>Form 2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>not foo</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.prop1}</ses:name>
+                  <ses:value>y</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>50</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5c80</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>12</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>Sample Application Resutl Page</title>
+    </head>
+    <body>
+        Prop1: <span>y</span><br>
+        Prop2: <span>not foo</span><br>
+        Form: <span>Form 2</span><br>
+        <p>
+        <a href="/coreWeb/bugs/b39820/begin.do">back</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 11:10:50.081 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>12</ses:testCount>
+   <ses:passedCount>6</ses:passedCount>
+   <ses:failedCount>6</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40031.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40031.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B40031</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:41:34.711 PM MST</startDate>
+  <description>Error in the declarePageInput</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b40031/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7871</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b40031/post.do">Post</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b40031/post.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7871</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>DeclarePageInput</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The name attribute of the declarePageInput tag can not be an empty string.</td></tr>
+</table></span>
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        string 1:<span>From the page</span> <br/>
+        string 2:<span>From the page</span> <br/>
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:41:37.996 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40596.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40596.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B40596</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>30 Jun 2004, 01:18:48.847 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b40596/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>DA2F5C578D20771625E7F151509FCBE5</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>*/*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=DA2F5C578D20771625E7F151509FCBE5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>6f1af61b:fd76c1b050:-69ff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+<a href="/coreWeb/bugs/b40596/index.jsp?foo=bar&123=456&123=qwe&abc=def">Link</a>
+<br/>
+<br/>
+<hr/>
+
+
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b40596/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>123</ses:name>
+                  <ses:value>456</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>123</ses:name>
+                  <ses:value>qwe</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>abc</ses:name>
+                  <ses:value>def</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>foo</ses:name>
+                  <ses:value>bar</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>DA2F5C578D20771625E7F151509FCBE5</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=DA2F5C578D20771625E7F151509FCBE5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>6f1af61b:fd76c1b050:-69ff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+<a href="/coreWeb/bugs/b40596/index.jsp?foo=bar&123=456&123=qwe&abc=def">Link</a>
+<br/>
+<br/>
+<hr/>
+
+
+
+    <span>foo</span><br/>
+
+    
+        &nbsp;&nbsp;<span>bar</span><br/>
+    
+
+
+
+    <span>123</span><br/>
+
+    
+        &nbsp;&nbsp;<span>456</span><br/>
+    
+        &nbsp;&nbsp;<span>qwe</span><br/>
+    
+
+
+
+    <span>abc</span><br/>
+
+    
+        &nbsp;&nbsp;<span>def</span><br/>
+    
+
+
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 01:18:48.867 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>1</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40862.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40862.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B40862</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>09 Jul 2004, 01:58:51.546 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b40862/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27b9ba8f:fda56b30ee:-7ff8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader; .NET CLR 1.1.4322)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;table cellpadding="0" width="100%" cellspacing="0">
+    &lt;tr>
+            &lt;td height="215" valign="top" class="Overline">
+                  &lt;table width="100%" border="0" cellpadding="2" cellspacing="0" class="portaltext">
+                    &lt;!--DWLayoutTable-->
+                    &lt;tr>
+                      &lt;td valign="top"> &lt;p>&lt;strong>Reports &amp;amp; Research&lt;/strong>
+                          &lt;span class="hightlite">(&lt;em>Web&lt;/em> Notes Login Required)&lt;/span>
+                          &lt;br />
+
+                            
+
+                            
+                                    &lt;p>
+                                        &lt;a href="http://nyc-db-07.jpmorganchase.com/IBGCMWEB.NSF/GCMRCDSSpreadWidenersNACurrent?ReadForm">&lt;span>CDS Spread Wideners Report - NA&lt;/span>&lt;/a>
+                                    &amp;nbsp;&amp;nbsp;
+                                        &lt;a href="/coreWeb/bugs/b40862/editCompanies.do?reportNo=0">edit&lt;/a>
+                                    &lt;p>
+                                    &lt;!-- If there is a list of companies, render them here -->
+                                    
+                                    
+                                    
+
+                                    
+                                    &lt;table border=1>
+                                        &lt;tr>
+                                    
+                                        &lt;td>&lt;font color="red">RHAT&lt;/font>&lt;/td>
+                                    
+                                        &lt;td>&lt;font color="blue">SUNW&lt;/font>&lt;/td>
+                                    
+                                        &lt;/tr>
+                                    &lt;/table>
+                                    
+                                
+                                    &lt;p>
+                                        &lt;a href="http://nyc-db-07.jpmorganchase.com/IBGCMWEB.NSF/GCMRCDSSpreadWidenersEMEACurrent?ReadForm">&lt;span>CDS Spread Wideners Report - EMEA&lt;/span>&lt;/a>
+                                    &amp;nbsp;&amp;nbsp;
+                                        &lt;a href="/coreWeb/bugs/b40862/editCompanies.do?reportNo=1">edit&lt;/a>
+                                    &lt;p>
+                                    &lt;!-- If there is a list of companies, render them here -->
+                                    
+                                    
+                                    
+
+                                    
+                                
+                                    &lt;p>
+                                        &lt;a href="http://nyc-db-07.jpmorganchase.com/IBGCMWEB.NSF/GCMRCDSSpreadWidenersEMEACurrent?ReadForm">&lt;span>CDS Spread Wideners Report - BARFOO&lt;/span>&lt;/a>
+                                    &amp;nbsp;&amp;nbsp;
+                                        &lt;a href="/coreWeb/bugs/b40862/editCompanies.do?reportNo=2">edit&lt;/a>
+                                    &lt;p>
+                                    &lt;!-- If there is a list of companies, render them here -->
+                                    
+                                    
+                                    
+
+                                    
+                                
+                                    &lt;p>
+                                        &lt;a href="http://nyc-db-07.jpmorganchase.com/IBGCMWEB.NSF/GCMRCDSSpreadWidenersEMEACurrent?ReadForm">&lt;span>CDS Spread Wideners Report - FOOBAR&lt;/span>&lt;/a>
+                                    &amp;nbsp;&amp;nbsp;
+                                        &lt;a href="/coreWeb/bugs/b40862/editCompanies.do?reportNo=3">edit&lt;/a>
+                                    &lt;p>
+                                    &lt;!-- If there is a list of companies, render them here -->
+                                    
+                                    
+                                    
+
+                                    
+                                
+
+                        &lt;/td>
+                    &lt;/tr>
+                  &lt;/table>
+                &lt;/td>
+        &lt;/tr>
+
+&lt;/table></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>09 Jul 2004, 01:58:53.031 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40999.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B40999.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B40999</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 06:29:45.096 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/b40999/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7e27</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <br>
+        <form name="myBean" action="/coreWeb/bugs/b40999/post.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Attributes:</td>
+                    <td>
+                    <span style="color:red;background-color:white">
+ [<b>Expression Error:1</b>, Found in tag <b>CheckBoxGroup</b>]</span>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <span style="color:red;background-color:white">
+ [<b>Expression Error:2</b>, Found in tag <b>RadioButtonGroup</b>]</span>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="post">
+        </form>
+        <br>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th rowspan="2">1</th><th rowspan="2">CheckBoxGroup</th><th>Attribute</th><td>optionsDataSource</td>
+ <th>Expression</th><td>{actionForm.colors}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{actionForm.colors}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "colors" on object of type "class bugs.b40999.Controller$MyBean"</td></tr>
+<tr><th rowspan="2">2</th><th rowspan="2">RadioButtonGroup</th><th>Attribute</th><td>optionsDataSource</td>
+ <th>Expression</th><td>{actionForm.colors}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{actionForm.colors}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "colors" on object of type "class bugs.b40999.Controller$MyBean"</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 06:29:47.961 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B41391.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B41391.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1473 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B41391</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>26 Mar 2004, 02:41:48.040 PM MST</startDate>
+  <description>Test the use of the ignoreNulls and its interaction with padding and header / item / footer tags in the repeater.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b41391/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-785f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Repeater Test</title>
+  </head>
+  <body>
+    <p>
+      <b>Repeater Test</b>
+      <br/>
+      <br/>
+
+
+<h1><span>Null Array</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+        <hr/>
+
+<h1><span>Empty Array</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+        <ol>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        </ol>
+    
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+        <hr/>
+
+<h1><span>Dense Array</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+        <ol>
+    
+        <li><span>String: 0</span></li>
+    
+        <li><span>String: 1</span></li>
+    
+        <li><span>String: 2</span></li>
+    
+        <li><span>String: 3</span></li>
+    
+        <li><span>String: 4</span></li>
+    
+        </ol>
+    
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <hr/>
+
+<h1><span>SparseArray_firstNull</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+        <ol>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>String: 1</span></li>
+    
+        <li><span>String: 2</span></li>
+    
+        <li><span>String: 3</span></li>
+    
+        <li><span>String: 4</span></li>
+    
+        </ol>
+    
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <hr/>
+
+<h1><span>SparseArray_lastNull</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+        <ol>
+    
+        <li><span>String: 0</span></li>
+    
+        <li><span>String: 1</span></li>
+    
+        <li><span>String: 2</span></li>
+    
+        <li><span>String: 3</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        </ol>
+    
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <hr/>
+
+<h1><span>SparseArray_endsNull</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+        <ol>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>String: 1</span></li>
+    
+        <li><span>String: 2</span></li>
+    
+        <li><span>String: 3</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        </ol>
+    
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <hr/>
+
+<h1><span>SparseArray_oddNull</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+        <ol>
+    
+        <li><span>String: 0</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>String: 2</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>String: 4</span></li>
+    
+        </ol>
+    
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 4</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 0</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <hr/>
+
+<h1><span>SparseArray_evenNull</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+        <ol>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>String: 1</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>String: 3</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        </ol>
+    
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 3</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td><span>Pad text: 1</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 1</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <hr/>
+
+<h1><span>SpraseArray_middleNonNull</span></h1>
+<br/>
+<br/>
+<b>Data Set</b>
+<br/>
+<br/>
+
+        <ol>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>String: 2</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        <li><span>&nbsp;</span></li>
+    
+        </ol>
+    
+<br/>
+        <b>ignoreNulls=false</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td><span>Pad text: 0</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=true, padContext (min=10)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td><span>Pad text: 2</span></td></tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <br/>
+        <b>ignoreNulls=false, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>&nbsp;</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <b>ignoreNulls=true, padContext (max=1)</b><br/>
+        
+                <table class="tablebody" border="1">
+                <tr><td>Start Table</td></tr>
+            
+                <tr>
+                    <td><span>String: 2</span></td>
+                </tr>
+            
+                <tr><td>End Table</td></tr>
+                </table>
+            
+        <hr/>
+
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:41:54.830 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42065.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42065.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B42065</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:41:55.551 PM MST</startDate>
+  <description>NPE when optionsDataSource contains null.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b42065/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-785b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <input type="hidden" name="wlw-checkbox_group_key:{pageFlow.value}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.value}" value="40"><span>40</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.value}" value="32" checked><span>32</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.value}" value="10"><span>10</span><br>
+<br/>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioValue}" value="40"><span>40</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioValue}" value="32" checked><span>32</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioValue}" value="10"><span>10</span><br>
+<br/>
+        <input type="hidden" name="wlw-select_key:{pageFlow.value}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.value}">
+<option value="40">40</option>
+<option value="32" selected>32</option>
+<option value="10">10</option></select><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:41:57.604 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42486.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42486.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B42486</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 10:06:43.718 AM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b42486/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-b9c5fb7:fd9f34a175:-7609</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Radar 42486 Repro</title>
+  </head>
+  <body>
+    <b>Radar 42486 Repro</b>
+
+<ol> 
+        <li><span>a</span> & <span>b</span></li>
+    </ol> 
+
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 10:06:45.062 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42558.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B42558.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B42558</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>11 Jul 2004, 01:31:34.364 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b42558/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-7cd7b352:fdafacb4a3:-7e40</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>B42558 Repro</title>
+  </head>
+
+  <body>
+    <h1>B42558 Repro</h1>
+
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CallPageFlow</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not invoke method "sayHello" on the object named "current page flow" because: java.lang.reflect.InvocationTargetException</td></tr>
+</table></span>
+
+
+<br/>
+Page Flow said: <span></span>
+<br/>
+<br/>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>11 Jul 2004, 01:31:36.367 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B43011.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/B43011.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B43011</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>26 Mar 2004, 02:42:03.001 PM MST</startDate>
+  <description>Test updating a single valued field from a page with text boxes that all reference the same property.  The result is a String[] in the request.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b43011/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-784f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            New Web Application Page
+        </p>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b43011/postback.do" method="post">
+    <input type="text" name="{pageFlow.field1}" value="foo"><br/>
+    <input type="text" name="{pageFlow.field1}" value="foo"><br/>
+    <input type="submit" value="POST">
+</form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b43011/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.field1}</name>
+          <value>1234</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.field1}</name>
+          <value>5678</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>53</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-784f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            New Web Application Page
+        </p>
+<form id="Netui_Form_0" action="/coreWeb/bugs/b43011/postback.do" method="post">
+    <input type="text" name="{pageFlow.field1}" value="5678"><br/>
+    <input type="text" name="{pageFlow.field1}" value="5678"><br/>
+    <input type="submit" value="POST">
+</form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:42:05.765 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BeginForm.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BeginForm.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BeginForm</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 11:49:19.544 PM MST</startDate>
+  <description>Test passing a form to a nested page flow through the begin node</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/beginForm/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7fb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Pass a Form to a Begin</title>
+</head>
+<body>
+<h4>Pass a Form to a Begin</h4>    
+<a href="/coreWeb/miniTests/beginForm/getUserInfo.do">Get User</a>
+<hr />
+User: <span>Not Defined</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/beginForm/getUserInfo.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7fb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Databinding from an Anchor</title>
+</head>
+<body>
+<hr />
+<form name="form" action="/coreWeb/miniTests/beginForm/nesting/submit.do" method="post">
+First Name: <input type="text" name="{actionForm.firstName}" value="[firstname]"><br />
+Last Name: <input type="text" name="{actionForm.lastName}" value="[lastname]"><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/beginForm/nesting/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/beginForm/nesting/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>firstName</name>
+          <value>Foo</value>
+        </parameter>
+        <parameter>
+          <name>lastName</name>
+          <value>Bar</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>95</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7fb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Pass a Form to a Begin</title>
+</head>
+<body>
+<h4>Pass a Form to a Begin</h4>    
+<a href="/coreWeb/miniTests/beginForm/getUserInfo.do">Get User</a>
+<hr />
+User: <span>Name: Bar, Foo</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 11:49:22.869 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Binding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Binding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Binding</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>06 Jul 2004, 11:50:19.412 AM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/binding/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>*/*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>50bcf3cb:fd9588c026:-7d57</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Binding To Structures</title>
+</head>
+<body>
+<h4>Binding To Structures and fields</h4>
+HashMap["foo"]: <b><span>bar</span></b><br />
+HashMap."Baz": <b><span>blee</span></b><br />
+Hash.Array[3]: <b><span>3</span></b><br />
+Array [2]: <b><span>2</span></b><br />
+public.field: <b><span>Public Field</span></b><br />
+public.Array [1]: <b><span>1</span></b><br />
+class.field: <b><span>Info.value</span></b><br />
+Hash.class.field: <b><span>Info.value</span></b><br />
+public.class.field: <b><span>Info.value</span></b><br />
+public Hash["foo"]: <b><span>bar</span></b><br />
+public Hash "Baz" with ".": <b><span>blee</span></b><br />
+public Hash <null> with ".": <b><span></span></b><br />
+public Hash <null> with ["nullValue"]: <b><span></span></b><br />
+public, existing null field: <b><span></span></b><br />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>06 Jul 2004, 11:50:19.553 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BindingUpdateErrors.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BindingUpdateErrors.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>BindingUpdateErrors</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>07 Jul 2004, 01:59:13.001 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/bindingUpdateErrors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-5807</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>BindingUpdateErrors test</h4>
+        <p style="color:green">
+        This test will post a form to an action that doesn't accept a form.  This will generate a set
+        of binding update errors because the values don't update anything.  These errors will be
+        reported below by the<b>bindingUpdateErrors</b> tag.  You should enter a value into the form and
+        hit the submit button.  Then this page will redisplay with the binding errors.
+        </p>
+        <hr>
+        <form name="nameBean" action="/coreWeb/tags/bindingUpdateErrors/postName.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>FirstName:</td>
+                    <td>
+                    <input type="text" name="{actionForm.firstName}" value="">
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>LastName:</td>
+                    <td>
+                    <input type="text" name="{actionForm.lastName}" value="">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postName">&nbsp;
+        <hr>
+        <br>
+        Errors for actionForm.firstName: <br>
+        Errors for actionForm.lastame: <br>
+         </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/bindingUpdateErrors/postName.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>xx</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>xx</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>A1A19ECE7B348CABFD6CB983DFE09EB1</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>58</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=A1A19ECE7B348CABFD6CB983DFE09EB1; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-5807</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>BindingUpdateErrors test</h4>
+        <p style="color:green">
+        This test will post a form to an action that doesn't accept a form.  This will generate a set
+        of binding update errors because the values don't update anything.  These errors will be
+        reported below by the<b>bindingUpdateErrors</b> tag.  You should enter a value into the form and
+        hit the submit button.  Then this page will redisplay with the binding errors.
+        </p>
+        <hr>
+        <form name="nameBean" action="/coreWeb/tags/bindingUpdateErrors/postName.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>FirstName:</td>
+                    <td>
+                    <input type="text" name="{actionForm.firstName}" value="xx">
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>LastName:</td>
+                    <td>
+                    <input type="text" name="{actionForm.lastName}" value="xx">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postName">&nbsp;
+        <hr>
+        <br>
+        Errors for actionForm.firstName: <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>BindingUpdateErrors</b>]</span><br>
+        Errors for actionForm.lastame: <span style="color:red;background-color:white">
+ [<b>Tag Error:2</b>, Found in tag <b>BindingUpdateErrors</b>]</span><br>
+         </form>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>BindingUpdateErrors</th><th>Message</th><td>Binding Update Failed for 'actionForm.firstName', cause: Exception when attempting to update the expression "{actionForm.firstName}" with available binding contexts [actionForm, pageFlow, globalApp]. Root cause: java.lang.RuntimeException: Could not update expression because a public field named "firstName" or setter for the property "firstName" could not be found.</td></tr>
+<tr><th>2</th><th>BindingUpdateErrors</th><th>Message</th><td>Binding Update Failed for 'actionForm.lastName', cause: Exception when attempting to update the expression "{actionForm.lastName}" with available binding contexts [actionForm, pageFlow, globalApp]. Root cause: java.lang.RuntimeException: Could not update expression because a public field named "lastName" or setter for the property "lastName" could not be found.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>07 Jul 2004, 01:59:13.261 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BreakoutNesting.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BreakoutNesting.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2057 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BreakoutNesting</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:19:13.020 PM MST</startDate>
+  <description>Tests breaking out of nesting.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/StatefulController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Stateful Controller
+        </title>
+    </head>
+    <body>
+        <h3>Stateful Controller</h3>
+
+        state: <b><span>begin action modified this</span></b>
+
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/goNested.do">go nested</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/breakout.do">break out</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do">nest deeper</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do">break out of the nesting stack completely</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Stateful Controller
+        </title>
+    </head>
+    <body>
+        <h3>Stateful Controller</h3>
+
+        state: <b><span>begin action modified this</span></b>
+
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/goNested.do">go nested</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/breakout.do">break out</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do">nest deeper</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do">break out of the nesting stack completely</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Double-Nested
+        </title>
+    </head>
+    <body>
+        <h3>Double-Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/doubleNested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/doubleNested/breakout.do">break out</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/doubleNested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/breakout.do">break out</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do">nest deeper</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do">break out of the nesting stack completely</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Stateful Controller
+        </title>
+    </head>
+    <body>
+        <h3>Stateful Controller</h3>
+
+        state: <b><span>begin action modified this</span></b>
+
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/goNested.do">go nested</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/breakout.do">break out</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do">nest deeper</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do">break out of the nesting stack completely</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/breakout.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Stateful Controller
+        </title>
+    </head>
+    <body>
+        <h3>Stateful Controller</h3>
+
+        state: <b><span>begin action modified this</span></b>
+
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/goNested.do">go nested</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/breakout.do">break out</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do">nest deeper</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do">break out of the nesting stack completely</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Double-Nested
+        </title>
+    </head>
+    <body>
+        <h3>Double-Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/doubleNested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/doubleNested/breakout.do">break out</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/doubleNested/breakout.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>12</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Stateful Controller
+        </title>
+    </head>
+    <body>
+        <h3>Stateful Controller</h3>
+
+        state: <b><span>begin action modified this</span></b>
+
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/goNested.do">go nested</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>13</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/breakout.do">break out</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do">nest deeper</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do">break out of the nesting stack completely</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>14</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Double-Nested
+        </title>
+    </head>
+    <body>
+        <h3>Double-Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/doubleNested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/doubleNested/breakout.do">break out</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>15</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/doubleNested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>15</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/breakout.do">break out</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do">nest deeper</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do">break out of the nesting stack completely</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>16</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/breakout.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>16</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Stateful Controller
+        </title>
+    </head>
+    <body>
+        <h3>Stateful Controller</h3>
+
+        state: <b><span>begin action modified this</span></b>
+
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/goNested.do">go nested</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>17</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>17</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/done.do">exit legitimately</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/breakout.do">break out</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/nestDeeper.do">nest deeper</a>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do">break out of the nesting stack completely</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>18</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/breakoutNesting/nested/utterBreakout.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f9c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>18</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Other Controller
+        </title>
+    </head>
+    <body>
+        <h3>Other Controller</h3>
+
+        page flow stack: <b><span>null</span></b>
+
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/breakoutNesting/other/startOver.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:19:25.198 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>18</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>18</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest21124.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest21124.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1455 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest21124</sessionName>
+  <tester>BVT</tester>
+  <startDate>05 Jun 2003, 11:31:31.550 AM MDT</startDate>
+  <description>Test that various types of Exceptions, and Errors, wrapped and unwrapped in UndeclaredThrowableException are handled properly.  Also tests that wrapped Exceptions and are unwrapped by the runtime.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug21124/act1.do">throw Wrapped Checked</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act2.do">throw Wrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act3.do">throw Unwrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act4.do">throw Wrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act5.do">throw Unwrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act6.do">throw Wrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act7.do">throw Unwrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/act1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            Passed - <a href="/coreWeb/miscJpf/bug21124/begin.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/act1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug21124/act1.do">throw Wrapped Checked</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act2.do">throw Wrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act3.do">throw Unwrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act4.do">throw Wrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act5.do">throw Unwrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act6.do">throw Wrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act7.do">throw Unwrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/act2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            Passed - <a href="/coreWeb/miscJpf/bug21124/begin.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/act2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug21124/act1.do">throw Wrapped Checked</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act2.do">throw Wrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act3.do">throw Unwrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act4.do">throw Wrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act5.do">throw Unwrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act6.do">throw Wrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act7.do">throw Unwrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/act3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            Passed - <a href="/coreWeb/miscJpf/bug21124/begin.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/act3.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug21124/act1.do">throw Wrapped Checked</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act2.do">throw Wrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act3.do">throw Unwrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act4.do">throw Wrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act5.do">throw Unwrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act6.do">throw Wrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act7.do">throw Unwrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/act4.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            Passed - <a href="/coreWeb/miscJpf/bug21124/begin.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/act4.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug21124/act1.do">throw Wrapped Checked</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act2.do">throw Wrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act3.do">throw Unwrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act4.do">throw Wrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act5.do">throw Unwrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act6.do">throw Wrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act7.do">throw Unwrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/act5.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            Passed - <a href="/coreWeb/miscJpf/bug21124/begin.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/act5.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug21124/act1.do">throw Wrapped Checked</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act2.do">throw Wrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act3.do">throw Unwrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act4.do">throw Wrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act5.do">throw Unwrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act6.do">throw Wrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act7.do">throw Unwrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/act6.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            Passed - <a href="/coreWeb/miscJpf/bug21124/begin.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/act6.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug21124/act1.do">throw Wrapped Checked</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act2.do">throw Wrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act3.do">throw Unwrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act4.do">throw Wrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act5.do">throw Unwrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act6.do">throw Wrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act7.do">throw Unwrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>15</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/act7.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            Passed - <a href="/coreWeb/miscJpf/bug21124/begin.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>16</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/act7.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 21124 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 21124 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug21124/act1.do">throw Wrapped Checked</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act2.do">throw Wrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act3.do">throw Unwrapped Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act4.do">throw Wrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act5.do">throw Unwrapped Error</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act6.do">throw Wrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/act7.do">throw Unwrapped, unspecified Runtime</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug21124/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>17</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug21124/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2f2GUilq8NuNtJehzSW32CPi3vXs1NQikHCfn1NON8CVEqULNAw7!986312224</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug21124/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>05 Jun 2003, 11:32:44.812 AM MDT</endDate>
+  <testCount>17</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest26856.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest26856.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest26856</sessionName>
+  <tester>BVT</tester>
+  <startDate>24 May 2004, 01:18:51.309 PM MDT</startDate>
+  <description>Test data-binding for resource bundles.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26856/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7832</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Bug 26856 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 26856 test - StartTest.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="Jpf1.jpf">Start test</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26856/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7832</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+    <head>
+        <title>MiscJpf Bug 26856 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26856 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+         <center>
+            <a href="/coreWeb/miscJpf/bug26856/Jsp2.jsp">Explicitly declared resource bundle Tests</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug26856/Jsp3.jsp">Resource bundles declared in JPF Tests</a>
+         </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26856/Jsp2.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7832</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+   <head>
+      <title>MiscJpf Bug 26856 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 26856 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      
+      
+
+      <h3>Test 1</h3>
+      <em>Print a message from bundle1.</em>
+      <br/>
+      <span>This is message (1) from resource bundle (bundle1.properties).</span>
+
+      <hr width="95%"/><br/>
+      <h3>Test 2</h3>
+      <em>Print a message from bundle2.</em>
+      <br/>
+      <span>This is message (1) from resource bundle (bundle2.properties).</span>
+
+      <hr width="95%"/><br/>
+      <h3>Test 3</h3>
+      <em>Print a message from and nonexistant bundle An error is expected.</em>
+      <br/>
+      <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Label</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{bundle.xtheBundle1.message1}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{bundle.xtheBundle1.message1}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: The bundle named "xtheBundle1" was not found in the list of registered bundles with names [theBundle2, theBundle1] or implicit bundle names [default, myMessages/miscJpf/bug26856, myBundle1/miscJpf/bug26856].</td></tr>
+</table></span>
+
+
+      <hr width="95%"/><br/>
+      <h3>Test 4</h3>
+      <em>Print a nonexistant message from bundle An error is expected.</em>
+      <br/>
+      <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Label</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{bundle.theBundle1.message1x}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{bundle.theBundle1.message1x}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key message1x</td></tr>
+</table></span>
+
+
+      <hr width="95%"/><br/>
+      <h3>Test 5</h3>
+      <em>Declare a bundle with the reserved name "default" An error is expected.</em>
+      <br/>
+      <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>DeclareBundle</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The name "default" is not a valid name for a declared bundle; it is reserved for reference to the default message-resources file for the current page flow.</td></tr>
+</table></span>
+
+
+      <hr width="95%"/><br/><br/>
+      <center>
+         <a href="/coreWeb/miscJpf/bug26856/done.do">Done</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26856/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7832</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+    <head>
+        <title>MiscJpf Bug 26856 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26856 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+         <center>
+            <a href="/coreWeb/miscJpf/bug26856/Jsp2.jsp">Explicitly declared resource bundle Tests</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug26856/Jsp3.jsp">Resource bundles declared in JPF Tests</a>
+         </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26856/Jsp3.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7832</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+    <head>
+        <title>MiscJpf Bug 26856 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26856 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 1</h3>
+        <em>Message from default resource bundle.</em>
+        <br/>
+        <span>This is message (1) from the default resource bundle (StrutsMessages.properties).</span>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 2</h3>
+        <em>Message from named resource bundle, using quotes.</em>
+        <br/>
+        <span>This is message (1) from resource bundle (NamedStrutsMessages.properties).</span>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 3</h3>
+        <em>Message from named resource bundle, using single quotes.</em>
+        <br/>
+        <span>This is message (1) from resource bundle (NamedStrutsMessages.properties).</span>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 4</h3>
+        <em>Non-existant message from default resource bundle.  "nonExistentMessage" bracketed with "?'s" is expected.</em>
+        <br/>
+        <span>???en_US.nonExistentMessage???</span>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 5</h3>
+        <em>Message from non-existant resource bundle.  An error is expected.</em>
+        <br/>
+        <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Label</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{bundle.missingBundle.nonExistentMessage}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{bundle.missingBundle.nonExistentMessage}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: The bundle named "missingBundle" was not found in the list of registered bundles with names [] or implicit bundle names [default, myMessages/miscJpf/bug26856, myBundle1/miscJpf/bug26856].</td></tr>
+</table></span>
+<br/>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 6</h3>
+        <em>"Overloaded" bundle name.</em>
+        <br/>
+        
+        <span>This is message (2) from resource bundle (bundle1.properties).</span>
+        <br/>
+        <span>This is message (2) from resource bundle (bundle2.properties).</span>
+
+        <hr width="95%"/>
+        <br/>
+        <h3>Test 7</h3>
+        <em>Message with value substitution. SubTest 7 will give an error.</em>
+        <br/>
+        <ol>
+            <li> <!-- Test 1 -->
+                
+                <span>This is message (3) from resource bundle (bundle2.properties). Param 0: (Arg0), Param 1: (Arg1), Param 2: (Arg2)</span>
+            </li>
+            <li> <!-- Test 2 -->
+                
+                <span>This is message (3) from resource bundle (bundle2.properties). Param 0: (Arg0), Param 1: (Arg1), Param 2: ({2})</span>
+            </li>
+            <li> <!-- Test 3 -->
+                
+                <span>This is message (3) from resource bundle (bundle2.properties). Param 0: (Arg0), Param 1: (Arg1), Param 2: (Arg2)</span>
+            </li>
+            <li> <!-- Test 4 -->
+                
+                <span>This is message (4) from resource bundle (bundle2.properties). Param 1: (Arg1), Param 0: (Arg0), Param 2: (Arg2)</span>
+            </li>
+            <li> <!-- Test 5 -->
+                
+                <span>This is message (5) from resource bundle (bundle2.properties). Param 2: (Arg2), Param 1: (Arg1), Param 0: (Arg0)</span>
+            </li>
+            <li> <!-- Test 6 -->
+                
+                <span>This is message (6) from resource bundle (bundle2.properties). Param 2: (Arg1), Param 1: (Arg1), Param 0: (Arg1)</span>
+            </li>
+            <li> <!-- Test 7 -->
+                <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Message</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Error formatting message "This is message (7) from resource bundle (bundle2.properties). Param 2: ({0}), Param 1: ({-1}), Param 0: ({2})".  Cause: negative argument number -1</td></tr>
+</table></span>
+
+                <span></span>
+            </li>
+        </ol>
+        <hr width="95%"/><br/><br/>
+        <center>
+            <a href="/coreWeb/miscJpf/bug26856/done.do">Done</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26856/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7832</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+    <head>
+        <title>MiscJpf Bug 26856 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26856 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+         <center>
+            <a href="/coreWeb/miscJpf/bug26856/Jsp2.jsp">Explicitly declared resource bundle Tests</a>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug26856/Jsp3.jsp">Resource bundles declared in JPF Tests</a>
+         </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:19:00.552 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>6</testCount>
+  <passedCount>4</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest26990.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest26990.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest26990</sessionName>
+  <tester>BVT</tester>
+  <startDate>22 May 2003, 03:20:44.189 PM MDT</startDate>
+  <description>Test getServlet() being called from onCreate(), beforeAction(), afterAction(),onDestroy().</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26990/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2N2BULoKofi5k82zM44sR0BaWaKr9AIH1VLKIibp2qcUN9Lzkumz!913827268</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2N2BULoKofi5k82zM44sR0BaWaKr9AIH1VLKIibp2qcUN9Lzkumz!913827268</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 26990 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26990 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26990/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2N2BULoKofi5k82zM44sR0BaWaKr9AIH1VLKIibp2qcUN9Lzkumz!913827268</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2N2BULoKofi5k82zM44sR0BaWaKr9AIH1VLKIibp2qcUN9Lzkumz!913827268</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug26990/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 26990 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 26990 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <a href="/coreWeb/miscJpf/bug26990/jpfAction1.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug26990/jpfAction1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2N2BULoKofi5k82zM44sR0BaWaKr9AIH1VLKIibp2qcUN9Lzkumz!913827268</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2N2BULoKofi5k82zM44sR0BaWaKr9AIH1VLKIibp2qcUN9Lzkumz!913827268</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug26990/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>22 May 2003, 03:21:23.393 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest27848.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest27848.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest27848</sessionName>
+  <tester>BVT</tester>
+  <startDate>27 May 2003, 11:55:49.259 AM MDT</startDate>
+  <description>Test a jsp page calling a jpf method that calls getRequest().</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug27848/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 27848 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 27848 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug27848/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug27848/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 27848 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 27848 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <span>some string</span>
+            <br/><br/>
+            <a href="/coreWeb/miscJpf/bug27848/jpfAction1.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug27848/jpfAction1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug27848/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>27 May 2003, 11:56:26.671 AM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest30303.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest30303.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest30303</sessionName>
+  <tester>BVT</tester>
+  <startDate>27 May 2003, 12:02:52.975 PM MDT</startDate>
+  <description>Tests having the enctype="multipart/form-data" for a multipart request.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug30303/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 30303 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 30303 test - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug30303/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug30303/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+      <title>MiscJpf Bug 30303 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 30303 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+      <font color="red">
+         <strong>
+            Do Not change any of the values just press the "Submit" button!
+         </strong>
+      </font>
+
+      <!-- ---------------------------------------------------------------------
+      The most important part of this test is to have the form's enctype to be
+      "multipart/form-data".
+      ---------------------------------------------------------------------- -->
+      <form name="uploadForm" method="post" action="/coreWeb/miscJpf/bug30303/jpfAction1.do" enctype="multipart/form-data">
+         <table align="center" width="100%" border="0">
+            <tr>
+               <td align="right" width="50%">
+                  Struts text:
+               </td>
+               <td align="left" width="50%">
+                  <input type="text" name="{actionForm.strutsText}" value="Struts Value"/>
+               </td>
+            </tr>
+            <tr>
+               <td align="right" width="50%">
+                  PageFlow text:
+               </td>
+               <td align="left" width="50%">
+                  <input type="text" name="{actionForm.pageflowText}" value="PageFlow Value"/>
+               </td>
+            </tr>
+         </table>
+         <br/>
+         <input type="submit" value="Submit"/>
+      </form>
+   </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug30303/jpfAction1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>298</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>multipart/form-data; boundary=---------------------------7d332c9110520</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2TldgBuB2OYI8Hf4kT7RAU8GBjFdVFIJuGV1amEMN73YHG2svyZ2!1893460649</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug30303/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>27 May 2003, 12:03:11.234 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest37949.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest37949.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest37949</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>09 Oct 2003, 04:54:36.500 PM MDT</startDate>
+  <description>Test that non-serializable ScopedRequest attributes are not placed in the Session.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug37949/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1FnFlEsg2RJ3tuwYSeUQMj86SmvmL1wq1GHxiLg5SademkQ2JcJl!1179083541</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1FnFlEsg2RJ3tuwYSeUQMj86SmvmL1wq1GHxiLg5SademkQ2JcJl!1179083541</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug37949/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>MiscJpf Bug 37949 test</title>
+    </head>
+    <body>
+        <h3 align="center">MiscJpf Bug 37949 test - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <a href="/coreWeb/miscJpf/bug37949/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug37949/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1FnFlEsg2RJ3tuwYSeUQMj86SmvmL1wq1GHxiLg5SademkQ2JcJl!1179083541</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1FnFlEsg2RJ3tuwYSeUQMj86SmvmL1wq1GHxiLg5SademkQ2JcJl!1179083541</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug37949/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>09 Oct 2003, 04:54:50.638 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest39028.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest39028.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,599 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest39028</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Mar 2004, 02:53:29.274 PM MST</startDate>
+  <description>Tests bug 39028 where
+return-to="currentPage" is called more then once consecutively.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug39028/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7641</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+      <title>MiscJpf Bug 39028 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 39028 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <netui-data:declarePageInput name="visit" type="int" />
+      <center>
+         <font color="blue">
+            Page visit: <font color="blue">"<span>1</span>"</font>
+         </font>
+         <br/><br/>
+         The 1st time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action1.do">Continue...</a>
+
+         <br/><br/>
+         The 2nd time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action2.do">Continue...</a>
+
+         <br/><br/>
+         The 3rd time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action2.do">Continue...</a>
+
+         <br/><br/>
+         The 4th time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug39028/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7641</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+      <title>MiscJpf Bug 39028 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 39028 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <netui-data:declarePageInput name="visit" type="int" />
+      <center>
+         <font color="blue">
+            Page visit: <font color="blue">"<span>2</span>"</font>
+         </font>
+         <br/><br/>
+         The 1st time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action1.do">Continue...</a>
+
+         <br/><br/>
+         The 2nd time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action2.do">Continue...</a>
+
+         <br/><br/>
+         The 3rd time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action2.do">Continue...</a>
+
+         <br/><br/>
+         The 4th time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug39028/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7641</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+      <title>MiscJpf Bug 39028 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 39028 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <netui-data:declarePageInput name="visit" type="int" />
+      <center>
+         <font color="blue">
+            Page visit: <font color="blue">"<span>3</span>"</font>
+         </font>
+         <br/><br/>
+         The 1st time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action1.do">Continue...</a>
+
+         <br/><br/>
+         The 2nd time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action2.do">Continue...</a>
+
+         <br/><br/>
+         The 3rd time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action2.do">Continue...</a>
+
+         <br/><br/>
+         The 4th time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug39028/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7641</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+      <title>MiscJpf Bug 39028 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug 39028 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <netui-data:declarePageInput name="visit" type="int" />
+      <center>
+         <font color="blue">
+            Page visit: <font color="blue">"<span>4</span>"</font>
+         </font>
+         <br/><br/>
+         The 1st time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action1.do">Continue...</a>
+
+         <br/><br/>
+         The 2nd time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action2.do">Continue...</a>
+
+         <br/><br/>
+         The 3rd time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/action2.do">Continue...</a>
+
+         <br/><br/>
+         The 4th time you see this page, press here:
+         <a href="/coreWeb/miscJpf/bug39028/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug39028/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Akj0K1hdZZP3mJOmTP2nAMKm4xPtpGEH7k0dDe1vZ1daoSAH5xt7!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7641</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:53:31.948 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest40862.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest40862.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,435 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest40862</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>14 Oct 2003, 01:37:55.987 PM MDT</startDate>
+  <description>Test that null entries are shown properly by the &lt;netui-data:getData&gt; tag.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug40862/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1MQtc1GM57KT3NG18ZTXKDgr1zSZgeWQeBEZimHgzQCTEBtzI2CM!734568676</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1MQtc1GM57KT3NG18ZTXKDgr1zSZgeWQeBEZimHgzQCTEBtzI2CM!734568676</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug40862/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Bug40862</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug40862 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with MiscJpf</font></h2>
+         <br/><br/>
+
+         
+                 <span>Repeater string: 0</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 1</span>
+                 
+                 
+                 <br/>
+             
+                 <span></span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 3</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 4</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 5</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 6</span>
+                 
+                 
+                 <br/>
+             
+                 <span></span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 8</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 9</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 10</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 11</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 12</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 13</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 14</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 15</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 16</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 17</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 18</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 19</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 20</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 21</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 22</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 23</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 24</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 25</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 26</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 27</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 28</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 29</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 30</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 31</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 32</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 33</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 34</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 35</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 36</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 37</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 38</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 39</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 40</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 41</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 42</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 43</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 44</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 45</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 46</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 47</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 48</span>
+                 
+                 
+                 <br/>
+             
+                 <span>Repeater string: 49</span>
+                 
+                 
+                 <br/>
+             
+
+
+         <br/><br/>
+         <a href="/coreWeb/miscJpf/bug40862/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug40862/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1MQtc1GM57KT3NG18ZTXKDgr1zSZgeWQeBEZimHgzQCTEBtzI2CM!734568676</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1MQtc1GM57KT3NG18ZTXKDgr1zSZgeWQeBEZimHgzQCTEBtzI2CM!734568676</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug40862/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>14 Oct 2003, 01:38:13.061 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest41007.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest41007.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest41007</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>15 Oct 2003, 09:41:02.831 AM MDT</startDate>
+  <description>Test that if the return-form and the actual form in the forward differ an exception is thown.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug41007/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1NqXOUHUtS9RR1WDjzCoIZGyS2HTCNua3aNpl1aRDYJzFZsyL8IZ!2107024581</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1NqXOUHUtS9RR1WDjzCoIZGyS2HTCNua3aNpl1aRDYJzFZsyL8IZ!2107024581</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug41007/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Bug41007 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug41007 test - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="/coreWeb/miscJpf/bug41007/action1.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug41007/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1NqXOUHUtS9RR1WDjzCoIZGyS2HTCNua3aNpl1aRDYJzFZsyL8IZ!2107024581</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1NqXOUHUtS9RR1WDjzCoIZGyS2HTCNua3aNpl1aRDYJzFZsyL8IZ!2107024581</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug41007/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Bug41007 test</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug41007 test - SubJsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <a href="/coreWeb/miscJpf/bug41007/subJpf/action1.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug41007/subJpf/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1NqXOUHUtS9RR1WDjzCoIZGyS2HTCNua3aNpl1aRDYJzFZsyL8IZ!2107024581</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1NqXOUHUtS9RR1WDjzCoIZGyS2HTCNua3aNpl1aRDYJzFZsyL8IZ!2107024581</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug41007/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>15 Oct 2003, 09:41:18.193 AM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest42486.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BugTest42486.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>BugTest42486</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>31 Oct 2003, 02:27:20.565 PM MST</startDate>
+  <description>Test that the infinite loop in databinding has been fixed.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug42486/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1iTCTTJgeKf5FI7asnx6NAmrM6XVBM4qhoYnxIPjFlUPFPv895hm!-1698592254</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1iTCTTJgeKf5FI7asnx6NAmrM6XVBM4qhoYnxIPjFlUPFPv895hm!-1698592254</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug42486/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Bug42486</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Bug42486 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing infinite loop</font></h2>
+         <br/><br/>
+
+         
+                
+                 <br/>
+            
+
+         <br/><br/>
+         <a href="/coreWeb/miscJpf/bug42486/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/bug42486/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1iTCTTJgeKf5FI7asnx6NAmrM6XVBM4qhoYnxIPjFlUPFPv895hm!-1698592254</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1iTCTTJgeKf5FI7asnx6NAmrM6XVBM4qhoYnxIPjFlUPFPv895hm!-1698592254</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/bug42486/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>31 Oct 2003, 02:27:34.703 PM MST</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasic.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasic.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>BundleBasic</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 07:51:32.187 AM GMT-07:00</ses:startDate>
+   <ses:description>Basic "bundle" implicit object binding</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/bundle/basic/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple Bundle Tests</title>
+  </head>
+  <body>
+    <b>Simple Bundle Tests</b>
+    
+    <p>
+    <span>This is message 1 text from bundle1.properties.</span><br/>
+    <br/>
+    Multi-word message key: <span>This is a message with a multi-word key separated by dots</span><br/>
+    <br/>
+    </p>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 07:51:36.984 AM GMT-07:00</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasicError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasicError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>BundleBasicError</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 07:52:14.359 AM GMT-07:00</ses:startDate>
+   <ses:description>Error conditions when binding to resource bundles.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/bundle/basicerror/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple Bundle Tests</title>
+  </head>
+  <body>
+    <b>Simple Bundle Error Tests</b>
+    <p>
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>DeclareBundle</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The name "default" is not a valid name for a declared bundle; it is reserved for reference to the default message-resources file for the current page flow.</td></tr>
+</table></span>
+
+    </p>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 07:52:19.000 AM GMT-07:00</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasicNoJpf.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleBasicNoJpf.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>BundleBasicNoJpf</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 07:52:52.046 AM GMT-07:00</ses:startDate>
+   <ses:description>Binding to resource bundles with no page flow.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/bundle/basicnojpf/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+    <head>
+        <title>
+            Bundle Test
+        </title>
+    </head>
+    <body>
+       
+       
+        Bundle Messages:
+        <ul>
+        <li><b>[</b><span>String from the Errors.properties</span><b>]</b>
+        <li><b>[</b><span>Text Bundle String</span><b>]</b>
+        <li><b>[</b><span>String 2 from Errors.properties</span><b>]</b>
+        <li><b>[</b><span>Text Bundle String 2</span><b>]</b>
+        <li><b>[</b><span>##$String$##</span><b>]</b>
+        <li><b>[</b><span>---- String ----</span><b>]</b>
+        </ul>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 07:52:55.687 AM GMT-07:00</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleDeclareBundleTag.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleDeclareBundleTag.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>BundleDeclareBundleTag</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 07:53:29.812 AM GMT-07:00</ses:startDate>
+   <ses:description>Tests of the declareBundle tag with various bundle names.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/bundle/declarebundle/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Bundle Binding Tests</title>
+  </head>
+  <body>
+    <b>Bundle Binding Tests</b>
+    <br/>
+    bundle.bundle1.message1: <span>This is message 1 text from bundle1.properties.</span><br/>
+    bundle.germanBundle1.message1: <span>Ein message von Deutschland.</span><br/>
+    bundle["!@$%%^&"].message1: <span>This is message 1 text.</span><br/>
+    bundle["bundle2"].message1: <span>This is message 1 text from bundle2.properties</span><br/>
+    bundle.bundle2.message2: <span>This is message 2 text from bundle2.properties</span><br/>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 07:53:32.890 AM GMT-07:00</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleDeclareBundleTagError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleDeclareBundleTagError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>BundleDeclareBundleTagError</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 07:53:57.281 AM GMT-07:00</ses:startDate>
+   <ses:description>Error tests using the declareBundle tag</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/bundle/declarebundleerror/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>declareBundle Binding Error Tests</title>
+    
+    
+    
+    
+  </head>
+  <body>
+    <b>Bundle Binding Tests</b>
+<b>Empty declareBundle.name attribute</b><br/>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>DeclareBundle</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The name attribute is "" and must be a String with length greater than zero.</td></tr>
+</table></span>
+
+<br/>
+<br/>
+<b>Empty declareBundle.bundlePath attribute</b><br/>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>DeclareBundle</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The resourcePath attribute is "" and must be a String that references a Java properties file.</td></tr>
+</table></span>
+
+<br/>
+<b>Empty declareBundle.bundlePath and declareBundle.name attributes</b><br/>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>DeclareBundle</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The resourcePath attribute is "" and must be a String that references a Java properties file.</td></tr>
+</table></span>
+
+<br/>
+
+<b>Whacking the BundleContext.KEY attribute with another type</b><br/>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>DeclareBundle</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The PageContext contains an attribute under the BundleContex key of the wrong type "java.util.ArrayList".  This object must be removed before the bundle binding context can be enabled.</td></tr>
+</table></span>
+
+<br/>
+<br/>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 07:54:00.468 AM GMT-07:00</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleStrutsBinding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/BundleStrutsBinding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>BundleStrutsBinding</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 07:54:21.546 AM GMT-07:00</ses:startDate>
+   <ses:description>Binding to message resources declared in a JPF.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/bundle/struts/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=CE16F3B73132FBDFB6492A6189725952</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Struts Interop i18n Tests</title>
+  </head>
+  <body>
+    <b>Struts Interop i18n Tests</b>
+    <p>
+    default bundle: <span>Hello from Struts i18n interop</span><br/>
+    double quotes: <span>Hello from Struts i18n interop that is not the default for this Struts 1.1 module.</span><br/>
+    single quotes: <span>Hello from Struts i18n interop that is not the default for this Struts 1.1 module.</span><br/>
+    <br/>
+    <br/>
+    </p>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 07:54:24.468 AM GMT-07:00</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ButtonSubmit.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ButtonSubmit.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,475 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ButtonSubmit</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 11:49:42.808 PM MST</startDate>
+  <description>Mini test of button submit</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/buttonSubmit/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7f8e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/buttonSubmit/buttonOne.do" method="post">
+<input type="submit" name="actionOverride:/buttonOne" value="Button One">
+<input type="submit" name="actionOverride:/buttonTwo" value="Button Two">
+</form>
+<br />
+Last Action: <span>begin</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/buttonSubmit/buttonOne.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:/buttonOne</name>
+          <value>Button One</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/buttonSubmit/Begin.jsp</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>102</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7f8e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/buttonSubmit/buttonOne.do" method="post">
+<input type="submit" name="actionOverride:/buttonOne" value="Button One">
+<input type="submit" name="actionOverride:/buttonTwo" value="Button Two">
+</form>
+<br />
+Last Action: <span>buttonOne</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/buttonSubmit/buttonOne.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:/buttonTwo</name>
+          <value>Button Two</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/buttonSubmit/Begin.jsp</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>102</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7f8e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/buttonSubmit/buttonOne.do" method="post">
+<input type="submit" name="actionOverride:/buttonOne" value="Button One">
+<input type="submit" name="actionOverride:/buttonTwo" value="Button Two">
+</form>
+<br />
+Last Action: <span>buttonTwo</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/buttonSubmit/buttonOne.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:/buttonOne.do</name>
+          <value>Button One</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/buttonSubmit/Begin.jsp</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>105</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7f8e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/buttonSubmit/buttonOne.do" method="post">
+<input type="submit" name="actionOverride:/buttonOne" value="Button One">
+<input type="submit" name="actionOverride:/buttonTwo" value="Button Two">
+</form>
+<br />
+Last Action: <span>buttonOne</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 11:49:46.353 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ButtonSubmitTagId.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ButtonSubmitTagId.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,516 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>ButtonSubmitTagId</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 11:24:36.810 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/buttonSubmitTagId/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5099</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Bug 34263
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="name" id="FormOne" action="/coreWeb/tags/buttonSubmitTagId/EnterName.do" method="post">
+            &lt;table>
+                &lt;tr>
+                    &lt;td>LastName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.lastName}" value="">
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr>
+                    &lt;td>FirstName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.firstName}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;input type="submit" id="NameEnter" value="Enter">
+            &lt;input type="submit" name="actionOverride:DeleteName" value="Delete">
+        &lt;/form>
+        &lt;hr />
+        &lt;span>begin&lt;/span>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.NameEnter="NameEnter"
+netui_names.NameDelete="actionOverride:DeleteName"
+netui_names.FormOne="FormOne"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/buttonSubmitTagId/EnterName.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>x</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>x</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>56</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5099</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Bug 34263
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="name" id="FormOne" action="/coreWeb/tags/buttonSubmitTagId/EnterName.do" method="post">
+            &lt;table>
+                &lt;tr>
+                    &lt;td>LastName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.lastName}" value="x">
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr>
+                    &lt;td>FirstName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.firstName}" value="x">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;input type="submit" id="NameEnter" value="Enter">
+            &lt;input type="submit" name="actionOverride:DeleteName" value="Delete">
+        &lt;/form>
+        &lt;hr />
+        &lt;span>EnterName&lt;/span>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.NameEnter="NameEnter"
+netui_names.NameDelete="actionOverride:DeleteName"
+netui_names.FormOne="FormOne"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/buttonSubmitTagId/EnterName.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>actionOverride:DeleteName</ses:name>
+                  <ses:value>Delete</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>y</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>y</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>91</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5099</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Bug 34263
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="name" id="FormOne" action="/coreWeb/tags/buttonSubmitTagId/EnterName.do" method="post">
+            &lt;table>
+                &lt;tr>
+                    &lt;td>LastName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.lastName}" value="y">
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr>
+                    &lt;td>FirstName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.firstName}" value="y">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;input type="submit" id="NameEnter" value="Enter">
+            &lt;input type="submit" name="actionOverride:DeleteName" value="Delete">
+        &lt;/form>
+        &lt;hr />
+        &lt;span>DeleteName&lt;/span>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.NameEnter="NameEnter"
+netui_names.NameDelete="actionOverride:DeleteName"
+netui_names.FormOne="FormOne"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 11:24:41.517 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>3</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodMethodTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodMethodTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>CallMethodMethodTest</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>09 Jul 2004, 04:52:22.140 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/callMethod/callMethod/variousMethods.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>*/*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27b9ba8f:fda56b30ee:-765c</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Various callMethod Test</title>
+  </head>
+  <body>
+    <b>Various callMethod Test</b>
+
+<b>Calls on an arbitrary Java object with callMethod</b>
+<br/>
+<!-- test 1 -->
+
+<span>public method</span>
+<br/>
+<br/>
+<!-- test 2 -->
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CallMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "protectedMethod" with 0 parameter(s) on the referenced object.</td></tr>
+</table></span>
+
+<span></span>
+<br/>
+<br/>
+<!-- test 3 -->
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CallMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "privateMethod" with 0 parameter(s) on the referenced object.</td></tr>
+</table></span>
+
+<span></span>
+<br/>
+<br/>
+<!-- test 4 -->
+
+<span>public static method</span>
+<br/>
+<br/>
+<!-- test 5 -->
+
+<span>public method: zero arg</span>
+<br/>
+<br/>
+<!-- test 6 -->
+
+<span>public method: value1: 123</span>
+<br/>
+<br/>
+<!-- test 7 -->
+
+<span>public method: value1: 123 value2: 456</span>
+<br/>
+<br/>
+<br/>
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Wed Sep 10 12:14:17 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Wed Sep 10 12:43:31 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>09 Jul 2004, 04:52:22.359 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodReturnNull.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodReturnNull.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>CallMethodReturnNull</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>09 Jul 2004, 04:49:26.968 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/callMethod/returnNull/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27b9ba8f:fda56b30ee:-7665</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader; .NET CLR 1.1.4322)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>CallMethod Null Return Test</title>
+  </head>
+
+  <body>
+    <b>CallMethod Null Return Test</b><br/>
+    <br/>
+<b>Non-Null return value</b><br/>
+
+${pageScope.jpfSays}: <span>Hello World!</span>
+
+<br/>
+<br/>
+<b>Null return value</b><br/>
+
+${pageScope.jpfSays}: <span></span>
+<br/>
+<br/>
+    <b>Via code:</b> null
+
+    <hr>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>09 Jul 2004, 04:49:27.187 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodTagTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallMethodTagTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>CallMethodTagTest</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>09 Sep 2003, 04:50:48.111 PM MDT</startDate>
+  <description>Simple test of the callMethod tag.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/callMethod/callMethod/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1eY00jP23TRsP0dnwCkQn9Jzl3vPbN5K2GxzzLclCzJeHnDe1i8k!892638672</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1eY00jP23TRsP0dnwCkQn9Jzl3vPbN5K2GxzzLclCzJeHnDe1i8k!892638672</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>callMethod Tag Test</title>
+  </head>
+  <body>
+    <b>callMethod Tag Test</b>
+
+<span>Something! -- anon. Page Flow Controller</span>
+<br/>
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>09 Sep 2003, 04:51:01.010 PM MDT</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallPageFlow.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallPageFlow.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>CallPageFlow</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>13 Jan 2004, 02:23:18.234 PM GMT-07:00</startDate>
+  <description>Tests calling a page flow to get simple values and to invoke a method via a repeater on the page flow.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/callMethod/callPageFlow/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>d115db:fa1110c565:-7ae1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Call Page Flow Tests</title>
+  </head>
+
+  <body>
+    <b>Call Page Flow Tests</b><br/>
+<a href="/coreWeb/databinding/callMethod/callPageFlow/SimpleTest.do">SimpleTest</a><br/>
+<a href="/coreWeb/databinding/callMethod/callPageFlow/SumTest.do">SumTest</a><br/>
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/callMethod/callPageFlow/SimpleTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>d115db:fa1110c565:-7ae1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple JSP -&gt; JPF Test</title>
+  </head>
+
+  <body>
+    <b>Call Page Flow Tests</b><br/>
+
+PageFlow defaultText = <span>Some Default Text</span><br/>
+<br/>
+
+
+
+PageFlow said: <span>Hello JSP Page</span><br/>
+<br/>
+<br/>
+<a href="/coreWeb/databinding/callMethod/callPageFlow/begin.do">Home</a>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/callMethod/callPageFlow/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>d115db:fa1110c565:-7ae1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Call Page Flow Tests</title>
+  </head>
+
+  <body>
+    <b>Call Page Flow Tests</b><br/>
+<a href="/coreWeb/databinding/callMethod/callPageFlow/SimpleTest.do">SimpleTest</a><br/>
+<a href="/coreWeb/databinding/callMethod/callPageFlow/SumTest.do">SumTest</a><br/>
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/callMethod/callPageFlow/SumTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>d115db:fa1110c565:-7ae1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple JSP -&gt; JPF Test</title>
+    <link rel="stylesheet" href="../default.css" type="text/css"/>
+  </head>
+
+  <body>
+    <b>Call Page Flow Tests</b><br/>
+
+
+
+        <table class="table">
+        <tr class="tablehead"><td>Name</td><td>Quantity</td><td>Price</td></tr>
+    
+        <tr class="row">
+        <td><span>Product A</span></td>
+        <td><center><span>3</span></center></td>
+        <td><span>$9.95</span>
+        </td>
+        </tr>
+    
+        <tr class="row">
+        <td><span>Product C</span></td>
+        <td><center><span>2</span></center></td>
+        <td><span>$19.95</span>
+        </td>
+        </tr>
+    
+        <tr class="row">
+        <td><span>Product B</span></td>
+        <td><center><span>5</span></center></td>
+        <td><span>$29.95</span>
+        </td>
+        </tr>
+    
+        <tr class="row">
+        <td><span>Product D</span></td>
+        <td><center><span>1</span></center></td>
+        <td><span>$39.95</span>
+        </td>
+        </tr>
+    
+        <tr class="row">
+        <td><span>Product E</span></td>
+        <td><center><span>3</span></center></td>
+        <td><span>$59.95</span>
+        </td>
+        </tr>
+    
+        <tr class="row">
+        <td><span>Product F</span></td>
+        <td><center><span>2</span></center></td>
+        <td><span>$1.95</span>
+        </td>
+        </tr>
+    
+        <tr class="row">
+        <td><span>Product G</span></td>
+        <td><center><span>2</span></center></td>
+        <td><span>$4.95</span>
+        </td>
+        </tr>
+    
+        <tr>
+            <td></td>
+            <td>Sum:</td>
+            <td>
+            
+            <span>$453.10</span>
+            </td>
+         </tr>
+        </table>
+    
+<br/>
+<br/>
+<a href="/coreWeb/databinding/callMethod/callPageFlow/begin.do">Home</a>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/callMethod/callPageFlow/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEh22rI4pPWzy5VCigqPpumNlKIfLSwknIwKHJNaxZY47V7kqLJW!1396698601</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>d115db:fa1110c565:-7ae1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Call Page Flow Tests</title>
+  </head>
+
+  <body>
+    <b>Call Page Flow Tests</b><br/>
+<a href="/coreWeb/databinding/callMethod/callPageFlow/SimpleTest.do">SimpleTest</a><br/>
+<a href="/coreWeb/databinding/callMethod/callPageFlow/SumTest.do">SumTest</a><br/>
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>13 Jan 2004, 02:23:23.156 PM GMT-07:00</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>3</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallPageFlowWithOverloading.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallPageFlowWithOverloading.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>CallPageFlowWithOverloading</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>11 Jul 2004, 01:32:58.876 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/callMethod/overloading/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>*/*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-7cd7b352:fdafacb4a3:-7d90</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>CallMethod Overloading Test</title>
+  </head>
+
+  <body>
+    <b>CallMethod Overloading Test</b>
+<br/>
+<br/>
+<b>foo()</b>
+
+<span>called the method: foo()</span>
+<br/>
+<b>foo(Integer)</b>
+
+<span>called the method: foo(Integer oInt)</span>
+<br/>
+<b>foo(int)</b>
+
+<span>called the method: foo(int pInt)</span>
+<br/>
+<br/>
+<b>foo(String, int)</b>
+
+<span>called the method: foo(String oString, int pInt)</span>
+<br/>
+<br/>
+<b>foo(String, Integer)</b>
+
+<span>called the method: foo(String oString, Integer pInt)</span>
+<br/>
+<br/>
+<b>foo(String)</b>
+
+<span>called the method: foo(String oString)</span>
+<br/>
+<br/>
+<b>Error tests</b>
+<br/>
+<b>foo(int)</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CallPageFlow</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "foo" with 1 parameter(s) of type(s) (java.lang.STring) on the current page flow.</td></tr>
+</table></span>
+
+<span></span>
+<br/>
+<br/>
+<b>foo(String, int)</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CallPageFlow</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "foo" with 2 parameter(s) of type(s) (int, java.lang.String) on the current page flow.</td></tr>
+</table></span>
+
+<span></span>
+<br/>
+<br/>
+<b>foo(Integer)</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CallPageFlow</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "foo" with 1 parameter(s) of type(s) (FooBar) on the current page flow.</td></tr>
+</table></span>
+
+<span></span>
+<br/>
+<br/>
+<b>foo(?)</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CallPageFlow</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "foo" with 1 parameter(s) of type(s) () on the current page flow.</td></tr>
+</table></span>
+
+<span></span>
+<br/>
+<br/>
+    <hr>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>11 Jul 2004, 01:33:01.249 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallingPageFlow.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CallingPageFlow.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>CallingPageFlow</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:19:35.272 PM MST</startDate>
+  <description>Calling overloaded methods on a page flow.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/controlTests/callingPageFlow/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f76</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        
+        <span>Calling callableMethod(String) &#39;String&#39;</span> <br>
+        <span>Calling callableMethod(int) &#39;2&#39;</span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:19:36.945 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeater.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeater.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>CellRepeater</sessionName>
+  <tester>Daryl</tester>
+  <startDate>14 Jan 2003, 08:25:39.975 AM MST</startDate>
+  <description>Simple tests of the cell repeater</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/cellRepeater/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2krMYFeaC92WqfghzeHB2dWzKPaT01v7v3gjh2V36TmfU2A21fnm!1521853567</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2krMYFeaC92WqfghzeHB2dWzKPaT01v7v3gjh2V36TmfU2A21fnm!1521853567</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testNumber</name>
+          <value>1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>5292e6:f2bd4ac018:-7fc5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Cell Repeater</title>
+<style type="text/css">
+.cellTable {
+        border: 1px solid red;
+        border-collapse: collapse;
+        empty-cells: show;
+} 
+.cellCell {
+        border: 1px solid red;
+} 
+</style>
+</head>
+<body>
+<h4>Cell Repeater</h4>
+<b> more cells than data</b>
+<table class="cellTable"><tr><td class="cellCell">
+  Item: <span>1</span>
+</td><td class="cellCell">
+  Item: <span>2</span>
+</td><td class="cellCell">
+  Item: <span>3</span>
+</td><td class="cellCell">
+  Item: <span>4</span>
+</td></tr>
+<tr><td class="cellCell">
+  Item: <span>5</span>
+</td><td class="cellCell">
+  Item: <span>6</span>
+</td><td class="cellCell">
+  Item: <span>7</span>
+</td><td class="cellCell">
+  Item: <span>8</span>
+</td></tr>
+<tr><td class="cellCell">
+  Item: <span>9</span>
+</td><td class="cellCell">
+  Item: <span>10</span>
+</td><td class="cellCell">&nbsp;</td><td class="cellCell">&nbsp;</td></tr>
+<tr><td class="cellCell">&nbsp;</td><td class="cellCell">&nbsp;</td><td class="cellCell">&nbsp;</td><td class="cellCell">&nbsp;</td></tr>
+</table>
+<hr />
+<b>less cells than data</b>
+<table><tr><td>
+  Item: <span>1</span>
+</td><td>
+  Item: <span>2</span>
+</td></tr>
+<tr><td>
+  Item: <span>3</span>
+</td><td>
+  Item: <span>4</span>
+</td></tr>
+<tr><td>
+  Item: <span>5</span>
+</td><td>
+  Item: <span>6</span>
+</td></tr>
+</table>
+<hr />
+<b>Veritical Repeat</b>
+<table><tr><td>
+  Item: <span>1</span>
+</td><td>
+  Item: <span>3</span>
+</td><td>
+  Item: <span>5</span>
+</td></tr>
+<tr><td>
+  Item: <span>2</span>
+</td><td>
+  Item: <span>4</span>
+</td><td>
+  Item: <span>6</span>
+</td></tr>
+</table>
+<hr />
+<b>Vertical Repeat = false</b>
+<table><tr><td>
+  Item: <span>1</span>
+</td><td>
+  Item: <span>2</span>
+</td><td>
+  Item: <span>3</span>
+</td></tr>
+<tr><td>
+  Item: <span>4</span>
+</td><td>
+  Item: <span>5</span>
+</td><td>
+  Item: <span>6</span>
+</td></tr>
+</table>
+<hr />
+<b>Databind rows</b>
+<table><tr><td>
+  Item: <span>1</span>
+</td><td>
+  Item: <span>2</span>
+</td><td>
+  Item: <span>3</span>
+</td><td>
+  Item: <span>4</span>
+</td><td>
+  Item: <span>5</span>
+</td></tr>
+<tr><td>
+  Item: <span>6</span>
+</td><td>
+  Item: <span>7</span>
+</td><td>
+  Item: <span>8</span>
+</td><td>
+  Item: <span>9</span>
+</td><td>
+  Item: <span>10</span>
+</td></tr>
+</table>
+<hr />
+<b>Databind cols</b>
+<table><tr><td>
+  Item: <span>1</span>
+</td><td>
+  Item: <span>2</span>
+</td><td>
+  Item: <span>3</span>
+</td><td>
+  Item: <span>4</span>
+</td><td>
+  Item: <span>5</span>
+</td></tr>
+<tr><td>
+  Item: <span>6</span>
+</td><td>
+  Item: <span>7</span>
+</td><td>
+  Item: <span>8</span>
+</td><td>
+  Item: <span>9</span>
+</td><td>
+  Item: <span>10</span>
+</td></tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>14 Jan 2003, 08:25:43.540 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeater2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeater2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,524 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>CellRepeater2</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 06:56:59.913 PM MDT</ses:startDate>
+   <ses:description>Test the cell repeater in various valid data sets and min / max configurations</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/cellRepeater/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9D6B2EF9774DFEE078BC48E9F33F8907</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=9D6B2EF9774DFEE078BC48E9F33F8907</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Cell Repeater</title>
+    <link rel="stylesheet" href="../default.css" type="text/css"/>
+  </head>
+
+  <body>
+    <b>Cell Repeater</b>
+
+<br/>
+<b>17 Item Array</b>
+<br/>
+<br/>
+<b>4x5 with 17 items</b><br/>
+<table class="table"><tr><td class="cell">
+    Item: <span>0</span>
+</td><td class="altCell">
+    Item: <span>1</span>
+</td><td class="cell">
+    Item: <span>2</span>
+</td><td class="altCell">
+    Item: <span>3</span>
+</td><td class="cell">
+    Item: <span>4</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>5</span>
+</td><td class="cell">
+    Item: <span>6</span>
+</td><td class="altCell">
+    Item: <span>7</span>
+</td><td class="cell">
+    Item: <span>8</span>
+</td><td class="altCell">
+    Item: <span>9</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>10</span>
+</td><td class="altCell">
+    Item: <span>11</span>
+</td><td class="cell">
+    Item: <span>12</span>
+</td><td class="altCell">
+    Item: <span>13</span>
+</td><td class="cell">
+    Item: <span>14</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>15</span>
+</td><td class="cell">
+    Item: <span>16</span>
+</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td></tr>
+</table>
+<br/>
+<b>4x5 with 17 items and databound row / column sizes</b><br/>
+<table class="table"><tr><td class="cell">
+    Item: <span>0</span>
+</td><td class="altCell">
+    Item: <span>1</span>
+</td><td class="cell">
+    Item: <span>2</span>
+</td><td class="altCell">
+    Item: <span>3</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>4</span>
+</td><td class="cell">
+    Item: <span>5</span>
+</td><td class="altCell">
+    Item: <span>6</span>
+</td><td class="cell">
+    Item: <span>7</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>8</span>
+</td><td class="altCell">
+    Item: <span>9</span>
+</td><td class="cell">
+    Item: <span>10</span>
+</td><td class="altCell">
+    Item: <span>11</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>12</span>
+</td><td class="cell">
+    Item: <span>13</span>
+</td><td class="altCell">
+    Item: <span>14</span>
+</td><td class="cell">
+    Item: <span>15</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>16</span>
+</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td></tr>
+</table>
+<br/>
+<b>4x5 (vert) with 17 items</b><br/>
+<table class="table"><tr><td class="altCell">
+    Item: <span>0</span>
+</td><td class="cell">
+    Item: <span>4</span>
+</td><td class="altCell">
+    Item: <span>8</span>
+</td><td class="cell">
+    Item: <span>12</span>
+</td><td class="altCell">
+    Item: <span>16</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>1</span>
+</td><td class="altCell">
+    Item: <span>5</span>
+</td><td class="cell">
+    Item: <span>9</span>
+</td><td class="altCell">
+    Item: <span>13</span>
+</td><td class="cell">&nbsp;</td></tr>
+<tr><td class="altCell">
+    Item: <span>2</span>
+</td><td class="cell">
+    Item: <span>6</span>
+</td><td class="altCell">
+    Item: <span>10</span>
+</td><td class="cell">
+    Item: <span>14</span>
+</td><td class="altCell">&nbsp;</td></tr>
+<tr><td class="cell">
+    Item: <span>3</span>
+</td><td class="altCell">
+    Item: <span>7</span>
+</td><td class="cell">
+    Item: <span>11</span>
+</td><td class="altCell">
+    Item: <span>15</span>
+</td><td class="cell">&nbsp;</td></tr>
+</table>
+<br/>
+<b>Small 4 Item Array</b><br/>
+<br/>
+<b>1x5 with 4 items</b><br/>
+<table><tr><td>
+    Item: <span>0</span>
+</td><td>
+    Item: <span>1</span>
+</td><td>
+    Item: <span>2</span>
+</td><td>
+    Item: <span>3</span>
+</td><td>&nbsp;</td></tr>
+</table>
+<br/>
+<b>1x5 (vert) with 4 items</b><br/>
+<table><tr><td>
+    Item: <span>0</span>
+</td><td>
+    Item: <span>1</span>
+</td><td>
+    Item: <span>2</span>
+</td><td>
+    Item: <span>3</span>
+</td><td>&nbsp;</td></tr>
+</table>
+<br/>
+<b>5x1 with 4 items</b><br/>
+<table><tr><td>
+    Item: <span>0</span>
+</td></tr>
+<tr><td>
+    Item: <span>1</span>
+</td></tr>
+<tr><td>
+    Item: <span>2</span>
+</td></tr>
+<tr><td>
+    Item: <span>3</span>
+</td></tr>
+<tr><td>&nbsp;</td></tr>
+</table>
+<br/>
+<b>5x1 (vert) with 4 items</b><br/>
+<table><tr><td>
+    Item: <span>0</span>
+</td></tr>
+<tr><td>
+    Item: <span>1</span>
+</td></tr>
+<tr><td>
+    Item: <span>2</span>
+</td></tr>
+<tr><td>
+    Item: <span>3</span>
+</td></tr>
+<tr><td>&nbsp;</td></tr>
+</table>
+<br/>
+<b>1x1 with 4 items</b><br/>
+<table><tr><td>
+    Item: <span>0</span>
+</td></tr>
+</table>
+<br/>
+<b>1x1 (vert) with 4 items</b><br/>
+<table><tr><td>
+    Item: <span>0</span>
+</td></tr>
+</table>
+<br/>
+<b>2x2 (horiz) with 4 items</b><br/>
+<table><tr><td>
+    Item: <span>0</span>
+</td><td>
+    Item: <span>1</span>
+</td></tr>
+<tr><td>
+    Item: <span>2</span>
+</td><td>
+    Item: <span>3</span>
+</td></tr>
+</table>
+<br/>
+<b>2x2 (vert) with 4 items</b><br/>
+<table><tr><td>
+    Item: <span>0</span>
+</td><td>
+    Item: <span>2</span>
+</td></tr>
+<tr><td>
+    Item: <span>1</span>
+</td><td>
+    Item: <span>3</span>
+</td></tr>
+</table>
+<br/>
+<b>Zero Item Array</b>
+<br/>
+<table><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+</table>
+<br/>
+<table><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+</table>
+<b>Zero Item Array with styles</b>
+<br/>
+<table class="table"><tr><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td></tr>
+<tr><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td></tr>
+<tr><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td></tr>
+<tr><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td></tr>
+</table>
+<br/>
+<b>NULL Array</b>
+<br/>
+<table><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+</table>
+<br/>
+<b>NULL Array with styles</b>
+<br/>
+<table class="table"><tr><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td></tr>
+<tr><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td></tr>
+<tr><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td></tr>
+<tr><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td><td class="cell">&nbsp;</td><td class="altCell">&nbsp;</td></tr>
+</table>
+<br/>
+<table><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+</table>
+<br/>
+<b>4x5 (vert) with 17 items</b><br/>
+<table class="table"><tr><td class="altCell">
+    Item: <span>0</span>
+</td><td class="cell">
+    Item: <span>4</span>
+</td><td class="altCell">
+    Item: <span>8</span>
+</td><td class="cell">
+    Item: <span>12</span>
+</td><td class="altCell">
+    Item: <span>16</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>1</span>
+</td><td class="altCell">
+    Item: <span>5</span>
+</td><td class="cell">
+    Item: <span>9</span>
+</td><td class="altCell">
+    Item: <span>13</span>
+</td><td class="cell">&nbsp;</td></tr>
+<tr><td class="altCell">
+    Item: <span>2</span>
+</td><td class="cell">
+    Item: <span>6</span>
+</td><td class="altCell">
+    Item: <span>10</span>
+</td><td class="cell">
+    Item: <span>14</span>
+</td><td class="altCell">&nbsp;</td></tr>
+<tr><td class="cell">
+    Item: <span>3</span>
+</td><td class="altCell">
+    Item: <span>7</span>
+</td><td class="cell">
+    Item: <span>11</span>
+</td><td class="altCell">
+    Item: <span>15</span>
+</td><td class="cell">&nbsp;</td></tr>
+</table>
+<br/>
+<b>4x5 (vert) with 17 items</b><br/>
+<table class="table"><tr><td class="altCell">
+    Item: <span>0</span>
+</td><td class="cell">
+    Item: <span>2</span>
+</td><td class="altCell">
+    Item: <span>4</span>
+</td><td class="cell">
+    Item: <span>6</span>
+</td><td class="altCell">
+    Item: <span>8</span>
+</td><td class="cell">
+    Item: <span>10</span>
+</td><td class="altCell">
+    Item: <span>12</span>
+</td><td class="cell">
+    Item: <span>14</span>
+</td><td class="altCell">
+    Item: <span>16</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>1</span>
+</td><td class="altCell">
+    Item: <span>3</span>
+</td><td class="cell">
+    Item: <span>5</span>
+</td><td class="altCell">
+    Item: <span>7</span>
+</td><td class="cell">
+    Item: <span>9</span>
+</td><td class="altCell">
+    Item: <span>11</span>
+</td><td class="cell">
+    Item: <span>13</span>
+</td><td class="altCell">
+    Item: <span>15</span>
+</td><td class="cell">&nbsp;</td></tr>
+</table>
+<br/>
+<b>4x5 (vert) with 17 items</b><br/>
+<table class="table"><tr><td class="altCell">
+    Item: <span>0</span>
+</td><td class="cell">
+    Item: <span>9</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>1</span>
+</td><td class="altCell">
+    Item: <span>10</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>2</span>
+</td><td class="cell">
+    Item: <span>11</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>3</span>
+</td><td class="altCell">
+    Item: <span>12</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>4</span>
+</td><td class="cell">
+    Item: <span>13</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>5</span>
+</td><td class="altCell">
+    Item: <span>14</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>6</span>
+</td><td class="cell">
+    Item: <span>15</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>7</span>
+</td><td class="altCell">
+    Item: <span>16</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>8</span>
+</td><td class="cell">&nbsp;</td></tr>
+</table>
+<br/>
+<b>4x5 (vert) with 17 items</b><br/>
+<table class="table"><tr><td class="altCell">
+    Item: <span>0</span>
+</td><td class="cell">
+    Item: <span>1</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>2</span>
+</td><td class="altCell">
+    Item: <span>3</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>4</span>
+</td><td class="cell">
+    Item: <span>5</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>6</span>
+</td><td class="altCell">
+    Item: <span>7</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>8</span>
+</td><td class="cell">
+    Item: <span>9</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>10</span>
+</td><td class="altCell">
+    Item: <span>11</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>12</span>
+</td><td class="cell">
+    Item: <span>13</span>
+</td></tr>
+<tr><td class="cell">
+    Item: <span>14</span>
+</td><td class="altCell">
+    Item: <span>15</span>
+</td></tr>
+<tr><td class="altCell">
+    Item: <span>16</span>
+</td><td class="cell">&nbsp;</td></tr>
+</table>
+<br/>
+<br/>
+<br/>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 06:57:05.441 PM MDT</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeaterError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeaterError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>CellRepeaterError</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 06:31:35.729 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/errors/cellRepeaterError/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7d61</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Cell Repeater</title>
+<style type="text/css">
+.cellTable {
+        border: 1px solid red;
+        border-collapse: collapse;
+        empty-cells: show;
+} 
+.cellCell {
+        border: 1px solid red;
+} 
+</style>
+</head>
+<body>
+<b>Error in Cell Repeater - rows/cols</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CellRepeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">At least one of the 'rows' and 'columns' attributes must be set to a valid number</td></tr>
+</table></span>
+
+<hr />
+<b>Error in Cell Repeater - datasource</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CellRepeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.foo}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.foo}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "foo" on object of type "class errors.cellRepeaterError.Controller"</td></tr>
+</table></span>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 06:31:37.765 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeaterError2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CellRepeaterError2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>CellRepeaterError2</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 06:58:38.355 PM MDT</ses:startDate>
+   <ses:description>Test error conditions on the cell repeater.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/cellrepeatererror/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9D6B2EF9774DFEE078BC48E9F33F8907</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=9D6B2EF9774DFEE078BC48E9F33F8907</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Cell Repeater</title>
+    <link rel="stylesheet" href="../default.css" type="text/css"/>
+  </head>
+
+  <body>
+    <b>Cell Repeater</b>
+
+<br/>
+<b>17 Item Array</b>
+<br/>
+<br/>
+<b>Expected Failures</b><br/>
+
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CellRepeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The rows attribute for the CellRepeater is '-42' and must be greater than zero.</td></tr>
+</table></span>
+
+
+<hr/>
+
+<br/>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CellRepeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">At least one of the 'rows' and 'columns' attributes must be set to a valid number</td></tr>
+</table></span>
+
+
+<hr/>
+
+Expected failure, rows expression evaluates to NaN
+<hr/>
+
+<br/>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CellRepeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The columns attribute for the CellRepeater is '-42' and must be greater than zero.</td></tr>
+</table></span>
+
+
+<hr/>
+
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CellRepeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{globalApp.noCellRepeaterProperty}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{globalApp.noCellRepeaterProperty}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noCellRepeaterProperty" on object of type "class global.Global"</td></tr>
+</table></span>
+
+
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 06:58:43.332 PM MDT</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CheckboxDemo.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CheckboxDemo.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,815 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>CheckboxDemo</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 09:37:13.176 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/checkboxDemo/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27c63d2b:fda072db3a:-5ef8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Checkbox Demo</title>
+</head>
+<body>
+<h4>Checkbox Demo</h4>
+<form name="form" action="/coreWeb/checkboxDemo/postback.do" method="post">
+
+<table>
+
+<tr><td><span>File-0</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}"></td></tr>
+
+<tr><td><span>File-1</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}"></td></tr>
+
+<tr><td><span>File-2</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}"></td></tr>
+
+<tr><td><span>File-3</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}"></td></tr>
+
+<tr><td><span>File-4</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}"></td></tr>
+
+</table>
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<b>Results:</b><br />
+
+<ul>
+
+    
+    
+
+    
+    
+
+    
+    
+
+    
+    
+
+    
+    
+
+</ul>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/checkboxDemo/postback.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8E172F4B3E6AB4CF5D8958C740C39A56</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>598</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8E172F4B3E6AB4CF5D8958C740C39A56; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27c63d2b:fda072db3a:-5ef8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Checkbox Demo</title>
+</head>
+<body>
+<h4>Checkbox Demo</h4>
+<form name="form" action="/coreWeb/checkboxDemo/postback.do" method="post">
+
+<table>
+
+<tr><td><span>File-0</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}" checked></td></tr>
+
+<tr><td><span>File-1</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}" checked></td></tr>
+
+<tr><td><span>File-2</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}"></td></tr>
+
+<tr><td><span>File-3</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}"></td></tr>
+
+<tr><td><span>File-4</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}" checked></td></tr>
+
+</table>
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<b>Results:</b><br />
+
+<ul>
+
+    
+    
+       <li><span>File-0</span></li>
+    
+
+    
+    
+       <li><span>File-1</span></li>
+    
+
+    
+    
+
+    
+    
+
+    
+    
+       <li><span>File-4</span></li>
+    
+
+</ul>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/checkboxDemo/postback.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8E172F4B3E6AB4CF5D8958C740C39A56</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>657</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8E172F4B3E6AB4CF5D8958C740C39A56; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27c63d2b:fda072db3a:-5ef8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Checkbox Demo</title>
+</head>
+<body>
+<h4>Checkbox Demo</h4>
+<form name="form" action="/coreWeb/checkboxDemo/postback.do" method="post">
+
+<table>
+
+<tr><td><span>File-0</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}" checked></td></tr>
+
+<tr><td><span>File-1</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}" checked></td></tr>
+
+<tr><td><span>File-2</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}" checked></td></tr>
+
+<tr><td><span>File-3</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}" checked></td></tr>
+
+<tr><td><span>File-4</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}"></td></tr>
+
+</table>
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<b>Results:</b><br />
+
+<ul>
+
+    
+    
+       <li><span>File-0</span></li>
+    
+
+    
+    
+       <li><span>File-1</span></li>
+    
+
+    
+    
+       <li><span>File-2</span></li>
+    
+
+    
+    
+       <li><span>File-3</span></li>
+    
+
+    
+    
+
+</ul>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/checkboxDemo/postback.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8E172F4B3E6AB4CF5D8958C740C39A56</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>722</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8E172F4B3E6AB4CF5D8958C740C39A56; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27c63d2b:fda072db3a:-5ef8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Checkbox Demo</title>
+</head>
+<body>
+<h4>Checkbox Demo</h4>
+<form name="form" action="/coreWeb/checkboxDemo/postback.do" method="post">
+
+<table>
+
+<tr><td><span>File-0</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}" checked></td></tr>
+
+<tr><td><span>File-1</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}" checked></td></tr>
+
+<tr><td><span>File-2</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}" checked></td></tr>
+
+<tr><td><span>File-3</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}" checked></td></tr>
+
+<tr><td><span>File-4</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}" checked></td></tr>
+
+</table>
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<b>Results:</b><br />
+
+<ul>
+
+    
+    
+       <li><span>File-0</span></li>
+    
+
+    
+    
+       <li><span>File-1</span></li>
+    
+
+    
+    
+       <li><span>File-2</span></li>
+    
+
+    
+    
+       <li><span>File-3</span></li>
+    
+
+    
+    
+       <li><span>File-4</span></li>
+    
+
+</ul>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/checkboxDemo/postback.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8E172F4B3E6AB4CF5D8958C740C39A56</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>447</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8E172F4B3E6AB4CF5D8958C740C39A56; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27c63d2b:fda072db3a:-5ef8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Checkbox Demo</title>
+</head>
+<body>
+<h4>Checkbox Demo</h4>
+<form name="form" action="/coreWeb/checkboxDemo/postback.do" method="post">
+
+<table>
+
+<tr><td><span>File-0</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[0].selected}"></td></tr>
+
+<tr><td><span>File-1</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[1].selected}"></td></tr>
+
+<tr><td><span>File-2</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[2].selected}" checked></td></tr>
+
+<tr><td><span>File-3</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[3].selected}"></td></tr>
+
+<tr><td><span>File-4</span></td><td>
+<td><input type="hidden" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.fileInfo.files[4].selected}"></td></tr>
+
+</table>
+
+<br />
+<input type="submit" value="Submit">
+</form>
+<b>Results:</b><br />
+
+<ul>
+
+    
+    
+
+    
+    
+
+    
+    
+       <li><span>File-2</span></li>
+    
+
+    
+    
+
+    
+    
+
+</ul>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 09:37:13.917 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>5</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>5</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ChoiceRepeater.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ChoiceRepeater.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,561 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ChoiceRepeater</sessionName>
+  <tester>daryl</tester>
+  <startDate>26 Mar 2004, 08:07:31.543 AM MST</startDate>
+  <description>Simple test of the Choice tag inside a repeater.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/choiceRepeater/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-325b199d:fb87b38206:-7f69</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Choice Repeater</title>
+</head>
+<body>
+<h4>choice Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/miniTests/choiceRepeater/postback.do" method="post">
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Cake" checked><span>Cake</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Live"><span>Live</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Oasis"><span>Oasis</span><br>
+
+<input type="submit" value="Submit">
+</form>
+<hr />
+<b>Using a default</b>
+<table border="1" cellpadding="0" cellspacing="0">
+        <tr><td style="color:red" width="100pt"><span>Comfort Eagle</span></td></tr>
+    
+        <tr><td style="color:red" width="100pt"><span>Fashion Nugget</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>V</span></td></tr>
+    
+        <tr><td style="color:red" width="100pt"><span>Prolonging the Magic</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Familar to Millions</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Definity Maybe</span></td></tr>
+    </table>
+<hr />
+<table border="1" cellpadding="0" cellspacing="0">
+        <tr><td width="100pt"><span>Comfort Eagle</span></td></tr>
+    
+        <tr><td width="100pt"><span>Fashion Nugget</span></td></tr>
+    
+        <tr><td width="100pt"><span>Prolonging the Magic</span></td></tr>
+    </table>
+<hr />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/choiceRepeater/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-radio_button_group_key:{pageFlow.filter}</name>
+          <value>Live</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>55</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-325b199d:fb87b38206:-7f69</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Choice Repeater</title>
+</head>
+<body>
+<h4>choice Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/miniTests/choiceRepeater/postback.do" method="post">
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Cake"><span>Cake</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Live" checked><span>Live</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Oasis"><span>Oasis</span><br>
+
+<input type="submit" value="Submit">
+</form>
+<hr />
+<b>Using a default</b>
+<table border="1" cellpadding="0" cellspacing="0">
+        <tr><td style="color:gray" width="100pt"><span>Comfort Eagle</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Fashion Nugget</span></td></tr>
+    
+        <tr><td style="color:red" width="100pt"><span>V</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Prolonging the Magic</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Familar to Millions</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Definity Maybe</span></td></tr>
+    </table>
+<hr />
+<table border="1" cellpadding="0" cellspacing="0">
+        <tr><td width="100pt"><span>V</span></td></tr>
+    </table>
+<hr />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/choiceRepeater/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-radio_button_group_key:{pageFlow.filter}</name>
+          <value>Oasis</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>56</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-325b199d:fb87b38206:-7f69</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Choice Repeater</title>
+</head>
+<body>
+<h4>choice Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/miniTests/choiceRepeater/postback.do" method="post">
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Cake"><span>Cake</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Live"><span>Live</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Oasis" checked><span>Oasis</span><br>
+
+<input type="submit" value="Submit">
+</form>
+<hr />
+<b>Using a default</b>
+<table border="1" cellpadding="0" cellspacing="0">
+        <tr><td style="color:gray" width="100pt"><span>Comfort Eagle</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Fashion Nugget</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>V</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Prolonging the Magic</span></td></tr>
+    
+        <tr><td style="color:red" width="100pt"><span>Familar to Millions</span></td></tr>
+    
+        <tr><td style="color:red" width="100pt"><span>Definity Maybe</span></td></tr>
+    </table>
+<hr />
+<table border="1" cellpadding="0" cellspacing="0">
+        <tr><td width="100pt"><span>Familar to Millions</span></td></tr>
+    
+        <tr><td width="100pt"><span>Definity Maybe</span></td></tr>
+    </table>
+<hr />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/choiceRepeater/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-radio_button_group_key:{pageFlow.filter}</name>
+          <value>Cake</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>55</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-325b199d:fb87b38206:-7f69</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Choice Repeater</title>
+</head>
+<body>
+<h4>choice Repeater</h4>
+<form id="Netui_Form_0" action="/coreWeb/miniTests/choiceRepeater/postback.do" method="post">
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Cake" checked><span>Cake</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Live"><span>Live</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.filter}" value="Oasis"><span>Oasis</span><br>
+
+<input type="submit" value="Submit">
+</form>
+<hr />
+<b>Using a default</b>
+<table border="1" cellpadding="0" cellspacing="0">
+        <tr><td style="color:red" width="100pt"><span>Comfort Eagle</span></td></tr>
+    
+        <tr><td style="color:red" width="100pt"><span>Fashion Nugget</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>V</span></td></tr>
+    
+        <tr><td style="color:red" width="100pt"><span>Prolonging the Magic</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Familar to Millions</span></td></tr>
+    
+        <tr><td style="color:gray" width="100pt"><span>Definity Maybe</span></td></tr>
+    </table>
+<hr />
+<table border="1" cellpadding="0" cellspacing="0">
+        <tr><td width="100pt"><span>Comfort Eagle</span></td></tr>
+    
+        <tr><td width="100pt"><span>Fashion Nugget</span></td></tr>
+    
+        <tr><td width="100pt"><span>Prolonging the Magic</span></td></tr>
+    </table>
+<hr />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 08:07:35.318 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ClientTable.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ClientTable.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ClientTable</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 03:10:23.780 PM MST</startDate>
+  <description>Test of the table with client side binding</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/clientTable/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7547</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>Client Side Table</title>
+    </head>
+    <body>
+        <h4>Client Side Table</h4>
+        <table netui:dataSource="{client.data.stocks}">
+            <tr>
+                <td netui:dataSource="{container.item.symbol}"></td>
+                <td><span netui:dataSource="{container.item.price}"></span></td>
+            
+        </table>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 03:10:24.982 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Content.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Content.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Content</sessionName>
+  <tester>Daryl</tester>
+  <startDate>13 Dec 2002, 12:02:28.683 PM MST</startDate>
+  <description>Test of the Content Tag vs Label</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/content/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>96u2aMH6xO8YuY3SAL5FTJVWk6xKV1JGCyoPBYYkhhguHkjkpDyP!-1126332125</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=96u2aMH6xO8YuY3SAL5FTJVWk6xKV1JGCyoPBYYkhhguHkjkpDyP!-1126332125</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Content and Literal</title>
+</head>
+<body>
+<h4>Content And Literal</h4>
+<h4>Label</h4>
+nbsp [<span>&amp;nbsp</span>]<br />
+& [<span>&amp;amp;</span>]<br />
+< [<span>&amp;lt;</span>]<br />
+html [<span>&lt;b&gt;Bold&lt;/b&gt;</span>]<br />
+text [<span>Some Text</span>]<br />
+<h4>Content</h4>
+nbsp [&nbsp]<br />
+& [&amp;]<br />
+< [&lt;]<br />
+html [<b>Bold</b>]<br />
+text [Some Text]<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>13 Dec 2002, 12:08:16.015 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ConversationalControls.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ConversationalControls.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,767 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ConversationalControls</sessionName>
+  <tester>rich</tester>
+  <startDate>14 Aug 2003, 08:54:51.640 AM GMT-07:00</startDate>
+  <description>Tests invoking conversational controls from page flows.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/ctrlConversation/testController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><body>
+        
+        <table width="100%" cellpadding="0" class="tablebody" cellspacing="0">
+            <tr>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Actions With No Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/getN.do">getN</a>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Input Forms For Actions With Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/setNLink.do">setN</a>
+                            </td>
+                        </tr>
+                    </table>
+                    <br/>
+                    <br/>
+                </td>
+            </tr>
+            <tr class="tablehead">
+                <td align="left" colspan="2">
+                    Results Area
+                </td>
+            </tr>
+        </table>
+        <br/>
+        <i>none</i><br/>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf">Leave this page flow (and come right back)</a>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/ctrlConversation/setNLink.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/ctrlConversation/testController.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+    
+    
+<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+
+
+
+<html>
+  <head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/miniTests/ctrlConversation/setN.jsp">
+    <title>setN</title>
+    <link href="/coreWeb/resources/css/style.css" type="text/css" rel="stylesheet"/>
+  </head>
+  <body style="margin:0">
+    
+  <!-- header.jsp -->
+
+  <table width="100%" border="0" cellpadding="0" cellspacing="0">
+  <!-- Topmost table containing the primary header graphics and color -->
+   <tr>
+   <!--Primary header color defined here in the form of 'bgcolor="#8fc5ff"' -->
+    <td width="100%" height="96" valign="top" bgcolor="#8fc5ff">
+    <!-- Left justified graphic image with arrows -->
+    <img src="/coreWeb/resources/images/weblogic-img-lt.jpg" border="0" align="left">
+    <!-- Right justified graphic text 'Weblogic Workshop version 2.0' -->
+    <img src="/coreWeb/resources/images/weblogic-img-rt.gif" border="0" align="right">
+    </td>
+   </tr>
+  </table>
+  <table width="100%" border="0" cellpadding="0" cellspacing="0">
+  <!-- Smaller, lower table containing the decorative 'bar' which could be used for navigation -->
+   <tr>
+    <!-- Styled, graphical look of 'bar' defined here using a repeatable image specified as 'background="bar-background.gif"' -->
+    <td width="100%" height="21" background="/coreWeb/resources/images/bar-background.gif">&nbsp;</td>
+  </tr>
+  </table>
+  <!-- end header.jsp -->
+
+    <br/>
+    
+        <br/>
+        <form name="setNForm" method="post" action="/coreWeb/miniTests/ctrlConversation/setN.do">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>N:</td>
+                    <td>
+                        <input type="text" name="{actionForm.n}" value="0"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+        </form>
+    
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/ctrlConversation/setN.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.n}</name>
+          <value>1</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>20</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/ctrlConversation/setNLink.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><body>
+        
+        <table width="100%" cellpadding="0" class="tablebody" cellspacing="0">
+            <tr>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Actions With No Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/getN.do">getN</a>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Input Forms For Actions With Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/setNLink.do">setN</a>
+                            </td>
+                        </tr>
+                    </table>
+                    <br/>
+                    <br/>
+                </td>
+            </tr>
+            <tr class="tablehead">
+                <td align="left" colspan="2">
+                    Results Area
+                </td>
+            </tr>
+        </table>
+        <br/>
+        <i>none</i><br/>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf">Leave this page flow (and come right back)</a>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/ctrlConversation/getN.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/ctrlConversation/setN.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><body>
+        
+        <table width="100%" cellpadding="0" class="tablebody" cellspacing="0">
+            <tr>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Actions With No Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/getN.do">getN</a>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Input Forms For Actions With Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/setNLink.do">setN</a>
+                            </td>
+                        </tr>
+                    </table>
+                    <br/>
+                    <br/>
+                </td>
+            </tr>
+            <tr class="tablehead">
+                <td align="left" colspan="2">
+                    Results Area
+                </td>
+            </tr>
+        </table>
+        <br/>
+        2<br/>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf">Leave this page flow (and come right back)</a>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/ctrlConversation/getN.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><body>
+        
+        <table width="100%" cellpadding="0" class="tablebody" cellspacing="0">
+            <tr>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Actions With No Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/getN.do">getN</a>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Input Forms For Actions With Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/setNLink.do">setN</a>
+                            </td>
+                        </tr>
+                    </table>
+                    <br/>
+                    <br/>
+                </td>
+            </tr>
+            <tr class="tablehead">
+                <td align="left" colspan="2">
+                    Results Area
+                </td>
+            </tr>
+        </table>
+        <br/>
+        <i>none</i><br/>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf">Leave this page flow (and come right back)</a>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/ctrlConversation/getN.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=17wIrpui2vVvYgKUxAP0Y160A4O0K7pMY31xDAibEoG6MaI25EzF!694102740</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><body>
+        
+        <table width="100%" cellpadding="0" class="tablebody" cellspacing="0">
+            <tr>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Actions With No Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/getN.do">getN</a>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+                <td valign="top">
+                    <table width="100%">
+                        <tr>
+                            <td>Input Forms For Actions With Parameters</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="/coreWeb/miniTests/ctrlConversation/setNLink.do">setN</a>
+                            </td>
+                        </tr>
+                    </table>
+                    <br/>
+                    <br/>
+                </td>
+            </tr>
+            <tr class="tablehead">
+                <td align="left" colspan="2">
+                    Results Area
+                </td>
+            </tr>
+        </table>
+        <br/>
+        0<br/>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/ctrlConversation/nothing/nothingController.jpf">Leave this page flow (and come right back)</a>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>14 Aug 2003, 08:55:51.797 AM GMT-07:00</endDate>
+  <testCount>6</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Cr121496.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Cr121496.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,922 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Cr121496</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 11:10:54.698 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/cr121496/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5b86</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form id="Netui_Form_0" action="/coreWeb/bugs/cr121496/post.do" method="post">
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=foo" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/cr121496/post.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=bar" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/cr121496/post.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        &lt;hr/>
+        &lt;form id="Netui_Form_1" action="/coreWeb/bugs/cr121496/post.do" method="post">
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=not+foo" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/bugs/cr121496/post.do?prop2=not+foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=not+bar" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/bugs/cr121496/post.do?prop2=not+bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/cr121496/post.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>9</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5b86</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/cr121496/begin.do">Home</a><br>
+        Prop2: <span>foo</span> 
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/cr121496/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5b86</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form id="Netui_Form_0" action="/coreWeb/bugs/cr121496/post.do" method="post">
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=foo" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/cr121496/post.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=bar" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/cr121496/post.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        &lt;hr/>
+        &lt;form id="Netui_Form_1" action="/coreWeb/bugs/cr121496/post.do" method="post">
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=not+foo" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/bugs/cr121496/post.do?prop2=not+foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=not+bar" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/bugs/cr121496/post.do?prop2=not+bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/cr121496/post.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>bar</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>9</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5b86</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/cr121496/begin.do">Home</a><br>
+        Prop2: <span>bar</span> 
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/cr121496/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5b86</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form id="Netui_Form_0" action="/coreWeb/bugs/cr121496/post.do" method="post">
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=foo" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/cr121496/post.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=bar" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/cr121496/post.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        &lt;hr/>
+        &lt;form id="Netui_Form_1" action="/coreWeb/bugs/cr121496/post.do" method="post">
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=not+foo" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/bugs/cr121496/post.do?prop2=not+foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=not+bar" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/bugs/cr121496/post.do?prop2=not+bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/cr121496/post.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>not foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>13</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5b86</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/cr121496/begin.do">Home</a><br>
+        Prop2: <span>not foo</span> 
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/cr121496/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5b86</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>7</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form id="Netui_Form_0" action="/coreWeb/bugs/cr121496/post.do" method="post">
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=foo" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/cr121496/post.do?prop2=foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=bar" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/cr121496/post.do?prop2=bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+        &lt;hr/>
+        &lt;form id="Netui_Form_1" action="/coreWeb/bugs/cr121496/post.do" method="post">
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=not+foo" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/bugs/cr121496/post.do?prop2=not+foo");return false;'>Foo&lt;/a>
+            &lt;a href="/coreWeb/bugs/cr121496/post.do?prop2=not+bar" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/bugs/cr121496/post.do?prop2=not+bar");return false;'>Bar&lt;/a>
+        &lt;/form>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/bugs/cr121496/post.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>prop2</ses:name>
+                  <ses:value>not bar</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>13</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiLLRPO15Jlk8mK9WvLr3xjuVD2wH1yv8pKj3KK0Es4CduH6pmAT!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-5b86</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/cr121496/begin.do">Home</a><br>
+        Prop2: <span>not bar</span> 
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 11:10:54.808 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>8</ses:testCount>
+   <ses:passedCount>4</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Cr124972.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Cr124972.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Cr124972</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:42:14.758 PM MST</startDate>
+  <description>Verify encoding of paramater values</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr124972/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-783f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/cr124972/index.jsp">
+    </head>
+    <body>
+    <a href="/coreWeb/bugs/cr124972/next.do?foo=This+is+a+value+with+spaces+and+%27%26%27+and+%27%3F%27+in+it">Next</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr124972/next.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>This is a value with spaces and '&amp;' and '?' in it</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkiXWtFW8FZqscp1vxbYvVXblDcKjhcMJsDLQQNhnAns9wKYsquu!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-783f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/cr124972/index.jsp">
+    </head>
+    <body>
+    <a href="/coreWeb/bugs/cr124972/next.do?foo=This+is+a+value+with+spaces+and+%27%26%27+and+%27%3F%27+in+it">Next</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:42:17.472 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CustomTypeConverterTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/CustomTypeConverterTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>CustomTypeConverterTest</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>25 Mar 2004, 12:04:26.378 AM MST</startDate>
+  <description>Test the use of a custom type converter for use on handling POSTs into custom form / page flow property types.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/typeConverter/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiEaUJ9BQYn5gj7euZIfTpm1tWc8ladZrF8s86XnNpEuxStwlQbX!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiEaUJ9BQYn5gj7euZIfTpm1tWc8ladZrF8s86XnNpEuxStwlQbX!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7a63</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Person Type Converter Test</title>
+  </head>
+
+  <body>
+    <h1>Person Type Converter Test</h1>
+<form name="personForm" action="/coreWeb/databinding/typeConverter/postback.do" method="post">
+<table>
+<tr><td><b>Current Person</b>:</td><td><span></span></td></tr>
+<tr><td>New Person</td><td><input type="text" name="{actionForm.person}" value=""></td></tr>
+<tr><td colspan=2><input type="submit" value="Submit"></td></tr>
+</table>
+</form>
+
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Sat Feb 08 21:17:16 Mountain Standard Time 2003 -->
+<!-- hhmts start -->
+Last modified: Sat Feb 08 21:19:40 Mountain Standard Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/typeConverter/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.person}</name>
+          <value>Homer J Simpson</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiEaUJ9BQYn5gj7euZIfTpm1tWc8ladZrF8s86XnNpEuxStwlQbX!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>39</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiEaUJ9BQYn5gj7euZIfTpm1tWc8ladZrF8s86XnNpEuxStwlQbX!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7a63</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Person Type Converter Test</title>
+  </head>
+
+  <body>
+    <h1>Person Type Converter Test</h1>
+<form name="personForm" action="/coreWeb/databinding/typeConverter/postback.do" method="post">
+<table>
+<tr><td><b>Current Person</b>:</td><td><span>name: Homer J Simpson</span></td></tr>
+<tr><td>New Person</td><td><input type="text" name="{actionForm.person}" value="name: Homer J Simpson"></td></tr>
+<tr><td colspan=2><input type="submit" value="Submit"></td></tr>
+</table>
+</form>
+
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Sat Feb 08 21:17:16 Mountain Standard Time 2003 -->
+<!-- hhmts start -->
+Last modified: Sat Feb 08 21:19:40 Mountain Standard Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:04:29.152 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DataGridSmokeTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DataGridSmokeTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>DataGridSmokeTest</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>29 Mar 2004, 04:51:21.093 PM GMT-07:00</startDate>
+  <description>Smoke test of the core data grid features including basic pager rendering, parameters on anchors, and formatters on columns. This test uses the JSP tags to render the data grid's model objects.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/datagrid/basic/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ao1P31OjoeQMqWjuSzDfEQv8ojLHoCAFWDTwvSbtUifq25JsU217!1512687268</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ao1P31OjoeQMqWjuSzDfEQv8ojLHoCAFWDTwvSbtUifq25JsU217!1512687268</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Pragma</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/databinding/datagrid/basic/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+
+
+  
+
+<br/>
+<br/>
+Page 1 of 1&nbsp;&nbsp;
+<table class="datagrid">
+<thead>
+<tr class="datagrid-header"><th class="datagrid-header-cell">Symbol</th>
+<th class="datagrid-header-cell">Web</th>
+<th class="datagrid-header-cell">Price</th>
+</tr>
+</thead>
+
+<tr class="datagrid-even"><td class="datagrid-data-cell">BEAS</td><td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&symbol=BEAS"><span>BEA Systems</span></a></td><td class="datagrid-data-cell">$14.35</td></tr>
+<tr class="datagrid-odd"><td class="datagrid-data-cell">CSCO</td><td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&symbol=CSCO"><span>Cisco Systems</span></a></td><td class="datagrid-data-cell">$19.42</td></tr>
+<tr class="datagrid-even"><td class="datagrid-data-cell">GE</td><td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&symbol=GE"><span>General Electric</span></a></td><td class="datagrid-data-cell">$59.42</td></tr>
+<tr class="datagrid-odd"><td class="datagrid-data-cell">RHAT</td><td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&symbol=RHAT"><span>RedHat Systems</span></a></td><td class="datagrid-data-cell">$18.20</td></tr>
+<tr class="datagrid-even"><td class="datagrid-data-cell">YHOO</td><td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&symbol=YHOO"><span>Yahoo Inc</span></a></td><td class="datagrid-data-cell">$48.16</td></tr>
+</table>
+
+<br/>
+<br/>
+<a href="/coreWeb/databinding/datagrid/basic/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/datagrid/basic/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ao1P31OjoeQMqWjuSzDfEQv8ojLHoCAFWDTwvSbtUifq25JsU217!1512687268</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ao1P31OjoeQMqWjuSzDfEQv8ojLHoCAFWDTwvSbtUifq25JsU217!1512687268</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Pragma</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/databinding/datagrid/basic/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+
+
+  
+
+<br/>
+<br/>
+Page 1 of 1&nbsp;&nbsp;
+<table class="datagrid">
+<thead>
+<tr class="datagrid-header"><th class="datagrid-header-cell">Symbol</th>
+<th class="datagrid-header-cell">Web</th>
+<th class="datagrid-header-cell">Price</th>
+</tr>
+</thead>
+
+<tr class="datagrid-even"><td class="datagrid-data-cell">BEAS</td><td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&symbol=BEAS"><span>BEA Systems</span></a></td><td class="datagrid-data-cell">$14.35</td></tr>
+<tr class="datagrid-odd"><td class="datagrid-data-cell">CSCO</td><td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&symbol=CSCO"><span>Cisco Systems</span></a></td><td class="datagrid-data-cell">$19.42</td></tr>
+<tr class="datagrid-even"><td class="datagrid-data-cell">GE</td><td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&symbol=GE"><span>General Electric</span></a></td><td class="datagrid-data-cell">$59.42</td></tr>
+<tr class="datagrid-odd"><td class="datagrid-data-cell">RHAT</td><td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&symbol=RHAT"><span>RedHat Systems</span></a></td><td class="datagrid-data-cell">$18.20</td></tr>
+<tr class="datagrid-even"><td class="datagrid-data-cell">YHOO</td><td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&symbol=YHOO"><span>Yahoo Inc</span></a></td><td class="datagrid-data-cell">$48.16</td></tr>
+</table>
+
+<br/>
+<br/>
+<a href="/coreWeb/databinding/datagrid/basic/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>29 Mar 2004, 04:51:43.140 PM GMT-07:00</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DateConverter.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DateConverter.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>DateConverter</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:19:55.892 PM MST</startDate>
+  <description>Verify that setting a date in an action form works.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/dateConverter/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f53</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <form name="formBean" action="/coreWeb/tags/dateConverter/results.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Date:</td>
+                    <td>
+                    <input type="text" name="{actionForm.date}" value="10/25/03 00:00" size="16" readonly>
+                    
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="text" name="{actionForm.type}" value="This is the type">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="results">
+        </form>
+     </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/dateConverter/results.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.date}</name>
+          <value>10/25/03 00:00</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.type}</name>
+          <value>This is the type</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>81</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f53</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        Date:<span>10/25/03 &nbsp;00:00</span><br/> 
+        Type:<span>This is the type</span><br/>   
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:19:58.686 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DateFormatString.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DateFormatString.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>DateFormatString</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>05 Jul 2004, 08:07:10.411 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/dateFormatString/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD8DC702CA2580B8DF8DF160785F2C23</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD8DC702CA2580B8DF8DF160785F2C23</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>729233a0:fd9231710a:-7d40</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <h4>Date Format Tests</h4>
+    <p style="color:green">
+    This test verifies formating of the date.  The first set of contains the
+    pattern inside the tag and binds to various dates that are properties of
+    the pageflow.  The second set binds to the pattern in the page flow.
+    The final set are errors and generate error messages.
+    </p>
+    <hr>
+    <body><h4>In tags</h4>
+        2003/10/25: <span>10/25/2003</span> <br>
+        2003-10-25: <span>10/25/2003</span> <br>
+        2003.10.25: <span>10/25/2003</span> <br>
+        <hr ><h4>Data Binding</h4>
+        2003/10/25: <span>10/25/2003</span> <br>
+        2003-10-25: <span>10/25/2003</span> <br>
+        2003.10.25: <span>10/25/2003</span> <br>
+        <hr><h4>Errors</h4>
+        2003.10.25: <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Label</b>]</span> <br>
+        2003.10.25: <span style="color:red;background-color:white">
+ [<b>Tag Error:2</b>, Found in tag <b>Label</b>]</span> <br>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Label</th><th>Message</th><td>The stringInputPattern "yy.MN.dd" is invalid.  IllegalArgumentException: Illegal pattern character 'N'</td></tr>
+<tr><th>2</th><th>Label</th><th>Message</th><td>The String "2003.10.25" is not in an understood date format.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>05 Jul 2004, 08:07:11.853 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DefaultValues.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DefaultValues.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>DefaultValues</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:05:30.619 AM MST</startDate>
+  <description>Test that Default Values on the HTML tags work</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/defaultValues/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f4d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Default Values</title>
+</head>
+<body>
+<h4>Default Values</h4>
+</body>
+<form name="form" action="/coreWeb/miniTests/defaultValues/postback.do" method="post">
+   <input type="text" name="{actionForm.text}" value="Page Flow Default Text"><br />
+   <textarea name="{actionForm.textArea}">Page Flow Default Text Area</textarea><br />
+   <input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Default Option" selected>Default Option</option></select><br />
+   <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio 1"><span>Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio 2"><span>Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio 3"><span>Radio 3</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Default Radio" checked><span>Default Radio</span><br>
+<br />
+   <input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkGroup}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Check 1"><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Check 2"><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Check 3"><span>Check 3</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Default Check 1" checked><span>Default Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Default Check 2" checked><span>Default Check 2</span><br>
+<br />
+   <input type="submit" value="Submit">
+</form>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/defaultValues/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkGroup</name>
+          <value>Check 2</value>
+        </parameter>
+        <parameter>
+          <name>checkGroupPostBack</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/defaultValues/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radioGroup</name>
+          <value>Radio 2</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>Option 2</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value>x</value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value>x</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>159</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f4d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Default Values</title>
+</head>
+<body>
+<h4>Default Values</h4>
+</body>
+<form name="form" action="/coreWeb/miniTests/defaultValues/postback.do" method="post">
+   <input type="text" name="{actionForm.text}" value="x"><br />
+   <textarea name="{actionForm.textArea}">x</textarea><br />
+   <input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Default Option">Default Option</option></select><br />
+   <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio 1"><span>Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio 2" checked><span>Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio 3"><span>Radio 3</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Default Radio"><span>Default Radio</span><br>
+<br />
+   <input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkGroup}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Check 1"><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Check 2" checked><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Check 3"><span>Check 3</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Default Check 1"><span>Default Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkGroup}" value="Default Check 2"><span>Default Check 2</span><br>
+<br />
+   <input type="submit" value="Submit">
+</form>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:05:33.153 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DefaultValuesDirect.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DefaultValuesDirect.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,451 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>DefaultValuesDirect</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:05:33.814 AM MST</startDate>
+  <description>Test of default value and directly binding to the Page Flow</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/defaultValuesDirect/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f48</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Default Values Direct</title>
+</head>
+<body>
+<h4>Default Values Direct</h4>
+</body>
+<form id="Netui_Form_0" action="/coreWeb/miniTests/defaultValuesDirect/postback.do" method="post">
+   <input type="text" name="{pageFlow.text}" value="Page Flow Default Text"><br />
+   <textarea name="{pageFlow.textArea}">Page Flow Default Text Area</textarea><br />
+   <input type="hidden" name="wlw-select_key:{pageFlow.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.select}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Default Option" selected>Default Option</option></select><br />
+   <input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 1"><span>Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 2"><span>Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 3"><span>Radio 3</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Default Radio" checked><span>Default Radio</span><br>
+<br />
+   <input type="hidden" name="wlw-checkbox_group_key:{pageFlow.checkGroup}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 1"><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 2"><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 3"><span>Check 3</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Default Check 1" checked><span>Default Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Default Check 2" checked><span>Default Check 2</span><br>
+<br />
+   <input type="submit" value="Submit">
+</form>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/defaultValuesDirect/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/defaultValuesDirect/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.checkGroup}</name>
+          <value>Check 2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.checkGroup}PostBack</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.radioGroup}</name>
+          <value>Radio 2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.select}</name>
+          <value>Option 2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.textArea}</name>
+          <value>Text Area</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.text}</name>
+          <value>Text</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>266</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f48</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Default Values Direct</title>
+</head>
+<body>
+<h4>Default Values Direct</h4>
+</body>
+<form id="Netui_Form_0" action="/coreWeb/miniTests/defaultValuesDirect/postback.do" method="post">
+   <input type="text" name="{pageFlow.text}" value="Text"><br />
+   <textarea name="{pageFlow.textArea}">Text Area</textarea><br />
+   <input type="hidden" name="wlw-select_key:{pageFlow.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.select}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Default Option">Default Option</option></select><br />
+   <input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 1"><span>Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 2" checked><span>Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 3"><span>Radio 3</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Default Radio"><span>Default Radio</span><br>
+<br />
+   <input type="hidden" name="wlw-checkbox_group_key:{pageFlow.checkGroup}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 1"><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 2" checked><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 3"><span>Check 3</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Default Check 1"><span>Default Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Default Check 2"><span>Default Check 2</span><br>
+<br />
+   <input type="submit" value="Submit">
+</form>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/defaultValuesDirect/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/defaultValuesDirect/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.checkGroup}</name>
+          <value>Check 1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.checkGroup}</name>
+          <value>Check 2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.checkGroup}PostBack</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.radioGroup}</name>
+          <value>Radio 1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.select}</name>
+          <value>Option 1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.textArea}</name>
+          <value>Text Area</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.text}</name>
+          <value>Text</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>299</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f48</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Default Values Direct</title>
+</head>
+<body>
+<h4>Default Values Direct</h4>
+</body>
+<form id="Netui_Form_0" action="/coreWeb/miniTests/defaultValuesDirect/postback.do" method="post">
+   <input type="text" name="{pageFlow.text}" value="Text"><br />
+   <textarea name="{pageFlow.textArea}">Text Area</textarea><br />
+   <input type="hidden" name="wlw-select_key:{pageFlow.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.select}">
+<option value="Option 1" selected>Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Default Option">Default Option</option></select><br />
+   <input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 1" checked><span>Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 2"><span>Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Radio 3"><span>Radio 3</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Default Radio"><span>Default Radio</span><br>
+<br />
+   <input type="hidden" name="wlw-checkbox_group_key:{pageFlow.checkGroup}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 1" checked><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 2" checked><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Check 3"><span>Check 3</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Default Check 1"><span>Default Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Default Check 2"><span>Default Check 2</span><br>
+<br />
+   <input type="submit" value="Submit">
+</form>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:05:36.848 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DirectFormTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DirectFormTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1407 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>DirectFormTest</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:05:42.276 AM MST</startDate>
+  <description>This is the form test but it directly binds to the PageFlowController.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/directFormTest/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f3b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/directFormTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/directFormTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{pageFlow.exposed.text}" value=""></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{pageFlow.exposed.textArea}"></textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{pageFlow.exposed.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.exposed.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span></span></td>
+          <td><span></span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span></span></td>
+          <td><span></span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span></span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span></span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span></span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span></span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/directFormTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/directFormTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.radio}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.select}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.textArea}</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.text}</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>277</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f3b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/directFormTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/directFormTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{pageFlow.exposed.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{pageFlow.exposed.textArea}"></textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{pageFlow.exposed.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.exposed.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>Change, old value &#39;&#39; new value &#39;Test&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/directFormTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/directFormTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.radio}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.select}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.textArea}</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.text}</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>281</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f3b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/directFormTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/directFormTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{pageFlow.exposed.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{pageFlow.exposed.textArea}">Test</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{pageFlow.exposed.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.exposed.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>Change, old value &#39;&#39; new value &#39;Test&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/directFormTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/directFormTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.radio}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.select}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.textArea}</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.text}</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>281</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f3b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/directFormTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/directFormTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{pageFlow.exposed.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{pageFlow.exposed.textArea}">Test</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{pageFlow.exposed.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.exposed.select}" size="3"><option value="1" selected>Choice 1</option>
+        <option value="2">Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>Change, old value &#39;2&#39; new value &#39;1&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/directFormTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/directFormTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.radio}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.select}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.textArea}</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.text}</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>281</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f3b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/directFormTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/directFormTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{pageFlow.exposed.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{pageFlow.exposed.textArea}">Test</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{pageFlow.exposed.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.exposed.select}" size="3"><option value="1" selected>Choice 1</option>
+        <option value="2">Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="1" checked><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="2"><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>Change, old value &#39;2&#39; new value &#39;1&#39;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/directFormTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/directFormTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.radio}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.select}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.textArea}</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.text}</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>281</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f3b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/directFormTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/directFormTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{pageFlow.exposed.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{pageFlow.exposed.textArea}">Test</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{pageFlow.exposed.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.exposed.select}" size="3"><option value="1" selected>Choice 1</option>
+        <option value="2">Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="1" checked><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="2"><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/directFormTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/directFormTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox1}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.checkBox2}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.radio}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.select}</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.textArea}</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.exposed.text}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>273</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7f3b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/directFormTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/directFormTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{pageFlow.exposed.text}" value=""></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.exposed.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{pageFlow.exposed.textArea}"></textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{pageFlow.exposed.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.exposed.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{pageFlow.exposed.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>Change, old value &#39;Test&#39; new value &#39;&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>Change, old value &#39;Test&#39; new value &#39;&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>Change, old value &#39;1&#39; new value &#39;2&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>Change, old value &#39;1&#39; new value &#39;2&#39;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:05:48.606 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>7</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>7</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Disable.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Disable.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Disable</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>07 Jul 2004, 01:44:05.404 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disable/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69e1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <h4>This test disabled all of the form elements</h4>
+        <p style="color:green">
+        In this test we disable all of the elements that may be found in a form.  For all of the elements
+        the <b>disable</b> attribute is set to true.  The form is posted and the values posted will be
+        dumped in the results page.
+        </p>
+        <hr>
+        <form name="form" action="/coreWeb/tags/disable/submitForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <input type="text" name="{actionForm.textBox}" value="Default Value" disabled>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <textarea name="{actionForm.textArea}" disabled>Default Value</textarea>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options</td>
+                    <td>
+                        <select name="wlw-select_key:{actionForm.select}" disabled><option value="Option One">Option One</option>
+                        <option value="Option Two" selected>Option Two</option>
+                        <option value="Option Three">Option Three</option>
+                        <option value="Option Four">Option Four</option>
+                        <option value="Option Five">Option Five</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options Source</td>
+                    <td>
+                        <select name="wlw-select_key:{actionForm.selectThree}" disabled>
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3" selected>Option 3</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select (option Disabled):</td>
+                    <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.selectTwo}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectTwo}"><option value="Option Six" disabled>Option Six</option> 
+                        <option value="Option Seven">Option Seven</option>
+                        <option value="Option Eight" disabled>Option Eight</option> 
+                        <option value="Option Nine" selected>Option Nine</option>
+                        <option value="Option Ten" disabled>Option Ten</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options</td>
+                    <td>
+                        
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio One" disabled><span>Radio One</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Two" disabled checked><span>Radio Two</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Three" disabled><span>Radio Three</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Four" disabled><span>Radio Four</span><br />
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options Source</td>
+                    <td>
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 1" disabled><span>Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 2" disabled checked><span>Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 3" disabled><span>Radio 3</span><br>
+
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox</td>
+                    <td>
+                        Check One <input type="checkbox" name="wlw-checkbox_key:{actionForm.check1}" disabled checked><br />
+                        Check Two <input type="checkbox" name="wlw-checkbox_key:{actionForm.check2}" disabled>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options Source</td>
+                    <td>
+                        <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 1" disabled><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 2" disabled><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 3" disabled checked><span>Check 3</span><br>
+
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options</td>
+                    <td>
+                        
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check One" disabled><span>Check One</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Two" disabled><span>Check Two</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Three" disabled><span>Check Three</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Four" disabled checked><span>Check Four</span><br />
+                        
+
+                    </td>
+                </tr>
+
+            </table>
+            <br>&nbsp;
+            <input type="submit" value="Submit">
+            <input type="submit" value="Submit (Disabled)" disabled>
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disable/submitForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.selectTwo}</ses:name>
+                  <ses:value>Option Nine</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.selectTwo}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>7C38674CAB276913C2921F7D808180C1</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>112</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=7C38674CAB276913C2921F7D808180C1; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69e1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    <h4>Disable Form Post Results</h4>
+    <p style="color:green">
+    This test dumps the contents ofthe request parameter names posted by the disable test. The only control not disabled
+    is a select that has individual options disabled.  It also reports
+    the contents of the form that was posted to the action.
+    </p>
+    <hr>
+    <h4>Parameter Data</h4>
+    
+    <ul>
+                <li><span>wlw-select_key:{actionForm.selectTwo}</span></li>
+                
+            
+                <li><span>wlw-select_key:{actionForm.selectTwo}OldValue</span></li>
+                
+            </ul>
+    <hr>
+    <h4>Form Data</h4>
+    <table border="1" cellspacing="0">
+    <tr><td>TextBox</td><td><span></span>&nbsp;</td></tr>
+    <tr><td>TextArea</td><td><span></span>&nbsp;</td></tr>
+    <tr><td>Select/Options</td><td>
+        <ul>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select/Options Source:</td><td>
+        <ul>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select (option Disabled):</td><td>
+        <ul>
+        
+           <li><span>Option Nine</span></li>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>radioGroup</td><td><span></span>&nbsp;</td></tr>
+    <tr><td>radioGroup2</td><td><span></span>&nbsp;</td></tr>
+    <tr><td>check1</td><td><span>true</span>&nbsp;</td></tr>
+    <tr><td>check2</td><td><span>false</span>&nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options Source:</td><td>
+        <ul>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options</td><td>
+        <ul>
+        
+        </ul>
+    &nbsp;</td></tr>
+    </table>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>07 Jul 2004, 01:44:05.464 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DisableBinding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DisableBinding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>DisableBinding</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>07 Jul 2004, 01:44:05.504 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disableBinding/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69dc</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <h4>Disabled Bound to PageFlow</h4>
+        <p style="color:green">
+        This test is the same as the <b>Disable</b> test except that the value of the <b>disabled</b> attribute
+        is bound to a page flow variable.  In this case all of the various form items are disabled.  When the
+        form is posted a results page displays the contents of the form posted.  When you return from the
+        results page the form will become enabled (disabled="false").
+        </p>
+        <br>
+        <form name="form" action="/coreWeb/tags/disableBinding/submitForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <input type="text" name="{actionForm.textBox}" value="Default Value" disabled>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <textarea name="{actionForm.textArea}" disabled>Default Value</textarea>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options</td>
+                    <td>
+                        <select name="wlw-select_key:{actionForm.select}" disabled><option value="Option One">Option One</option>
+                        <option value="Option Two" selected>Option Two</option>
+                        <option value="Option Three">Option Three</option>
+                        <option value="Option Four">Option Four</option>
+                        <option value="Option Five">Option Five</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options Source</td>
+                    <td>
+                        <select name="wlw-select_key:{actionForm.selectThree}" disabled>
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3" selected>Option 3</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select (option Disabled):</td>
+                    <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.selectTwo}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectTwo}"><option value="Option Six" disabled>Option Six</option>
+                        <option value="Option Seven">Option Seven</option>
+                        <option value="Option Eight" disabled>Option Eight</option>
+                        <option value="Option Nine" selected>Option Nine</option>
+                        <option value="Option Ten" disabled>Option Ten</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options</td>
+                    <td>
+                        
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio One" disabled><span>Radio One</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Two" disabled checked><span>Radio Two</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Three" disabled><span>Radio Three</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Four" disabled><span>Radio Four</span><br />
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options Source</td>
+                    <td>
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 1" disabled><span>Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 2" disabled checked><span>Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 3" disabled><span>Radio 3</span><br>
+
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox</td>
+                    <td>
+                        Check One <input type="checkbox" name="wlw-checkbox_key:{actionForm.check1}" disabled checked><br />
+                        Check Two <input type="checkbox" name="wlw-checkbox_key:{actionForm.check2}" disabled>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options Source</td>
+                    <td>
+                        <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 1" disabled><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 2" disabled><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 3" disabled checked><span>Check 3</span><br>
+
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options</td>
+                    <td>
+                        
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check One" disabled><span>Check One</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Two" disabled><span>Check Two</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Three" disabled><span>Check Three</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Four" disabled checked><span>Check Four</span><br />
+                        
+
+                    </td>
+                </tr>
+
+            </table>
+            <br>&nbsp;
+            <input type="submit" value="Submit">
+            <input type="submit" value="Submit (Disabled)" disabled>
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disableBinding/submitForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.selectTwo}</ses:name>
+                  <ses:value>Option Nine</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.selectTwo}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>80784B83FA81B83893E38996A0276AED</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>112</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=80784B83FA81B83893E38996A0276AED; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69dc</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    <a href="/coreWeb/tags/disableBinding/flipBinding.do">Home</a>
+    <h4>Disable Form Post Results</h4>
+    <p style="color:green">
+    This page displays the contents of the form posted by the input form.  The whole form is displayed.  The
+    <b>Home</b> link will flip the enable/disable state of the form on the previous page.
+    </p>
+    <hr>
+    <h4>Form Data</h4>
+    <table border="1" cellspacing="0">
+    <tr><td>TextBox</td><td><span></span>&nbsp;</td></tr>
+    <tr><td>TextArea</td><td><span></span>&nbsp;</td></tr>
+    <tr><td>Select/Options</td><td>
+        <ul>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select/Options Source:</td><td>
+        <ul>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select (option Disabled):</td><td>
+        <ul>
+        
+           <li><span>Option Nine</span></li>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>radioGroup</td><td><span></span>&nbsp;</td></tr>
+    <tr><td>radioGroup2</td><td><span></span>&nbsp;</td></tr>
+    <tr><td>check1</td><td><span>true</span>&nbsp;</td></tr>
+    <tr><td>check2</td><td><span>false</span>&nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options Source:</td><td>
+        <ul>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options</td><td>
+        <ul>
+        
+        </ul>
+    &nbsp;</td></tr>
+    </table>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disableBinding/flipBinding.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>80784B83FA81B83893E38996A0276AED</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=80784B83FA81B83893E38996A0276AED; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69dc</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <h4>Disabled Bound to PageFlow</h4>
+        <p style="color:green">
+        This test is the same as the <b>Disable</b> test except that the value of the <b>disabled</b> attribute
+        is bound to a page flow variable.  In this case all of the various form items are disabled.  When the
+        form is posted a results page displays the contents of the form posted.  When you return from the
+        results page the form will become enabled (disabled="false").
+        </p>
+        <br>
+        <form name="form" action="/coreWeb/tags/disableBinding/submitForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <input type="text" name="{actionForm.textBox}" value="Default Value">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <textarea name="{actionForm.textArea}">Default Value</textarea>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options</td>
+                    <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}"><option value="Option One">Option One</option>
+                        <option value="Option Two" selected>Option Two</option>
+                        <option value="Option Three">Option Three</option>
+                        <option value="Option Four">Option Four</option>
+                        <option value="Option Five">Option Five</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select/Options Source</td>
+                    <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.selectThree}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectThree}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3" selected>Option 3</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select (option Disabled):</td>
+                    <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.selectTwo}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.selectTwo}"><option value="Option Six">Option Six</option>
+                        <option value="Option Seven">Option Seven</option>
+                        <option value="Option Eight">Option Eight</option>
+                        <option value="Option Nine" selected>Option Nine</option>
+                        <option value="Option Ten">Option Ten</option></select>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options</td>
+                    <td>
+                        
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio One"><span>Radio One</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Two" checked><span>Radio Two</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Three"><span>Radio Three</span><br />
+                           <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup}" value="Radio Four"><span>Radio Four</span><br />
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Radio Group/Options Source</td>
+                    <td>
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 1"><span>Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 2" checked><span>Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radioGroup2}" value="Radio 3"><span>Radio 3</span><br>
+
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox</td>
+                    <td>
+                        Check One <input type="hidden" name="wlw-checkbox_key:{actionForm.check1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.check1}" checked><br />
+                        Check Two <input type="hidden" name="wlw-checkbox_key:{actionForm.check2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.check2}">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options Source</td>
+                    <td>
+                        <input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkOne}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 1"><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 2"><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkOne}" value="Check 3" checked><span>Check 3</span><br>
+
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>CheckBox Group/Options</td>
+                    <td>
+                        <input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkTwo}OldValue" value="true">
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check One"><span>Check One</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Two"><span>Check Two</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Three"><span>Check Three</span><br />
+                           <input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkTwo}" value="Check Four" checked><span>Check Four</span><br />
+                        
+
+                    </td>
+                </tr>
+
+            </table>
+            <br>&nbsp;
+            <input type="submit" value="Submit">
+            <input type="submit" value="Submit (Disabled)">
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disableBinding/submitForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:{actionForm.checkOne}</ses:name>
+                  <ses:value>Check 3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:{actionForm.checkOne}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:{actionForm.checkTwo}</ses:name>
+                  <ses:value>Check Four</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:{actionForm.checkTwo}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{actionForm.check1}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{actionForm.check1}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:{actionForm.check2}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-radio_button_group_key:{actionForm.radioGroup2}</ses:name>
+                  <ses:value>Radio 2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-radio_button_group_key:{actionForm.radioGroup}</ses:name>
+                  <ses:value>Radio Two</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.selectThree}</ses:name>
+                  <ses:value>Option 3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.selectThree}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.selectTwo}</ses:name>
+                  <ses:value>Option Nine</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.selectTwo}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.select}</ses:name>
+                  <ses:value>Option Two</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.select}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.textArea}</ses:name>
+                  <ses:value>Default Value</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.textBox}</ses:name>
+                  <ses:value>Default Value</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>80784B83FA81B83893E38996A0276AED</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>953</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=80784B83FA81B83893E38996A0276AED; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69dc</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    <a href="/coreWeb/tags/disableBinding/flipBinding.do">Home</a>
+    <h4>Disable Form Post Results</h4>
+    <p style="color:green">
+    This page displays the contents of the form posted by the input form.  The whole form is displayed.  The
+    <b>Home</b> link will flip the enable/disable state of the form on the previous page.
+    </p>
+    <hr>
+    <h4>Form Data</h4>
+    <table border="1" cellspacing="0">
+    <tr><td>TextBox</td><td><span>Default Value</span>&nbsp;</td></tr>
+    <tr><td>TextArea</td><td><span>Default Value</span>&nbsp;</td></tr>
+    <tr><td>Select/Options</td><td>
+        <ul>
+        
+           <li><span>Option Two</span></li>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select/Options Source:</td><td>
+        <ul>
+        
+           <li><span>Option 3</span></li>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>Select (option Disabled):</td><td>
+        <ul>
+        
+           <li><span>Option Nine</span></li>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>radioGroup</td><td><span>Radio Two</span>&nbsp;</td></tr>
+    <tr><td>radioGroup2</td><td><span>Radio 2</span>&nbsp;</td></tr>
+    <tr><td>check1</td><td><span>true</span>&nbsp;</td></tr>
+    <tr><td>check2</td><td><span>false</span>&nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options Source:</td><td>
+        <ul>
+        
+           <li><span>Check 3</span></li>
+        
+        </ul>
+    &nbsp;</td></tr>
+    <tr><td>CheckBox Group/Options</td><td>
+        <ul>
+        
+           <li><span>Check Four</span></li>
+        
+        </ul>
+    &nbsp;</td></tr>
+    </table>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>07 Jul 2004, 01:44:05.614 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DisableImageButton.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DisableImageButton.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,439 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>DisableImageButton</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>07 Jul 2004, 01:44:05.664 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disableImageButton/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69d5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <br>
+        <h4>Disable an Image Button</h4>
+        <p style="color:green">
+        This test has an ImageButton that is disabled.  You ushould not be able to post this
+        form with that image Button.  The <b>disabled</b> attribute is databound and when you return from
+        the results page, evertying becomes enabled (both the imageButton and the textBox).  The results page
+        will display the contents of the textbox.
+        </p>
+        <hr>
+        <form name="form" action="/coreWeb/tags/disableImageButton/submitForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <input type="text" name="{actionForm.textBox}" value="Default Value" disabled>
+                    </td>
+                </tr>
+            </table>
+            <br>&nbsp;
+            <input type="submit" value="Submit">
+            <input type="image" src="/coreWeb/resources/images/delete.gif" disabled>
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disableImageButton/submitForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>41C46FF7DA60122DF8383BA1F1FC356B</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=41C46FF7DA60122DF8383BA1F1FC356B; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69d5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    <a href="/coreWeb/tags/disableImageButton/flipBinding.do">Home</a>
+         <h4>Disable an Image Button</h4>
+         <p style="color:green">
+         This results page display the Parameter names posted and also the content of the
+         textbox posted.  When you hit the <b>Home</b> anchor, the disabled/enable state of the page will
+         be flipped.
+        </p>
+         <hr>
+         <h4>Posted Parameters</h4>
+    
+    
+    <hr />
+    <h4>The textbox value</h4>
+    <table border="1" cellspacing="0">
+    <tr><td>TextBox</td><td><span></span>&nbsp;</td></tr>
+    </table>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disableImageButton/flipBinding.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>41C46FF7DA60122DF8383BA1F1FC356B</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=41C46FF7DA60122DF8383BA1F1FC356B; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69d5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <br>
+        <h4>Disable an Image Button</h4>
+        <p style="color:green">
+        This test has an ImageButton that is disabled.  You ushould not be able to post this
+        form with that image Button.  The <b>disabled</b> attribute is databound and when you return from
+        the results page, evertying becomes enabled (both the imageButton and the textBox).  The results page
+        will display the contents of the textbox.
+        </p>
+        <hr>
+        <form name="form" action="/coreWeb/tags/disableImageButton/submitForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <input type="text" name="{actionForm.textBox}" value="Default Value">
+                    </td>
+                </tr>
+            </table>
+            <br>&nbsp;
+            <input type="submit" value="Submit">
+            <input type="image" src="/coreWeb/resources/images/delete.gif">
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/disableImageButton/submitForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>x</ses:name>
+                  <ses:value>13</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>y</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.textBox}</ses:name>
+                  <ses:value>Default Value</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>41C46FF7DA60122DF8383BA1F1FC356B</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>47</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=41C46FF7DA60122DF8383BA1F1FC356B; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-5f2a843c:fd9ac6d6c7:-69d5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+    <a href="/coreWeb/tags/disableImageButton/flipBinding.do">Home</a>
+         <h4>Disable an Image Button</h4>
+         <p style="color:green">
+         This results page display the Parameter names posted and also the content of the
+         textbox posted.  When you hit the <b>Home</b> anchor, the disabled/enable state of the page will
+         be flipped.
+        </p>
+         <hr>
+         <h4>Posted Parameters</h4>
+    
+    <ul>
+                <li><span>y</span></li>
+                
+            
+                <li><span>x</span></li>
+                
+            
+                <li><span>{actionForm.textBox}</span></li>
+                
+            </ul>
+    <hr />
+    <h4>The textbox value</h4>
+    <table border="1" cellspacing="0">
+    <tr><td>TextBox</td><td><span>Default Value</span>&nbsp;</td></tr>
+    </table>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>07 Jul 2004, 01:44:05.734 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DivPanel.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DivPanel.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>DivPanel</sessionName>
+  <tester>Daryl</tester>
+  <startDate>21 May 2004, 11:37:39.195 AM MDT</startDate>
+  <description>Basic test of the DivPanel</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/divPanel/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Au9nWwiUsuCB7PvNG2zRsHUYawRIaof3UETb3OQxxhPCZnHzfG74!1339223224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Au9nWwiUsuCB7PvNG2zRsHUYawRIaof3UETb3OQxxhPCZnHzfG74!1339223224</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4df75c0c:fca8a19aa9:-7f27</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Basic DivPanel 
+        </title>
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+        <script src="/coreWeb/resources/javascript/netui-tree.js"></script>    
+    </head>
+    <body>
+    <h4>Basic DivPanel</h4>
+        <div  id="divPanel" netui-div-panel="true">
+            <div  id="page1">
+            <table><tr>
+                <td colspan="2" align="center">Page 1</td>
+            </tr><tr>
+                <td width="100pt">&nbsp</td>
+                <td width="100pt"><a href="" onclick='return netUI.action("divPanel.showPage(\"page2\");");'>Next</a></td>
+            </tr></table>
+            </div>
+            <div  id="page2">
+            <table><tr>
+                <td colspan="2" align="center">Page 2</td>
+            </tr><tr>
+                <td width="100pt"><a href="" onclick='return netUI.action("divPanel.showPage(\"page1\");");'>Previous</a></td>
+                <td width="100pt"><a href="" onclick='return netUI.action("divPanel.showPage(\"page3\");");'>Next</a></td>
+            </tr></table>
+            </div>
+             <div  id="page3">
+            <table><tr>
+                <td colspan="2" align="center">Page 3</td>
+            </tr><tr>
+                <td width="100pt"><a href="" onclick='return netUI.action("divPanel.showPage(\"page2\");");'>Previous</a></td>
+                <td width="100pt">&nbsp;</td>
+            </tr></table>
+            </div>
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.divPanel="divPanel"
+netui_names.page2="page2"
+netui_names.page3="page3"
+netui_names.page1="page1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUIDivPanel object and initialize it.
+     this.netUIDivPanel = new NetUIDivPanel();
+     this.netUIDivPanel.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUIDivPanel object and initialize it.
+     netUI.netUIDivPanel.rewriteAnchor(node);
+
+
+}
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>21 May 2004, 11:37:41.538 AM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DivPanelTree.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/DivPanelTree.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>DivPanelTree</sessionName>
+  <tester>Daryl</tester>
+  <startDate>21 May 2004, 11:37:41.558 AM MDT</startDate>
+  <description>Test of the divPanel and Tree driving what is selected.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/divPanelTree/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Au9nWwiUsuCB7PvNG2zRsHUYawRIaof3UETb3OQxxhPCZnHzfG74!1339223224</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Au9nWwiUsuCB7PvNG2zRsHUYawRIaof3UETb3OQxxhPCZnHzfG74!1339223224</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-4df75c0c:fca8a19aa9:-7f23</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+        <style type="text/css">
+            .selected {color: #0000cc;}
+            .unselected {color: #cccccc;}
+        </style>
+        
+        <!-- This needs to be put here by the script container -->
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+        <script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+    </head>
+    <body>
+        <table width="100%" cellspacing="5"><tr><td width="20%" valign="top">
+        <table border="0" cellspacing="0" cellpadding="0">
+  <tr valign="middle">
+    <td><a href="" netui-tree-anchor="expand" netui-tree-id="0" ><img src="/coreWeb/resources/images/handledownlast.gif" border="0" alt="" /></a></td>
+    <td align='left' colspan="5"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"RootPage\");");'>Tree</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><a href="" netui-tree-anchor="expand" netui-tree-id="0.0" ><img src="/coreWeb/resources/images/handledownmiddle.gif" border="0" alt="" /></a></td>
+    <td align='left' colspan="4"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page1\");");'>1</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><img src="/coreWeb/resources/images/linevertical.gif" border="0" alt="" /></td>
+    <td><img src="/coreWeb/resources/images/linemiddlenode.gif" border="0" alt="" /></td>
+    <td align='left' colspan="3"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page11\");");'>1.1</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><img src="/coreWeb/resources/images/linevertical.gif" border="0" alt="" /></td>
+    <td><img src="/coreWeb/resources/images/linemiddlenode.gif" border="0" alt="" /></td>
+    <td align='left' colspan="3"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page12\");");'>1.2</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><img src="/coreWeb/resources/images/linevertical.gif" border="0" alt="" /></td>
+    <td><a href="" netui-tree-anchor="expand" netui-tree-id="0.0.2" ><img src="/coreWeb/resources/images/handledownmiddle.gif" border="0" alt="" /></a></td>
+    <td align='left' colspan="3"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page13\");");'>1.3</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><img src="/coreWeb/resources/images/linevertical.gif" border="0" alt="" /></td>
+    <td><img src="/coreWeb/resources/images/linevertical.gif" border="0" alt="" /></td>
+    <td><img src="/coreWeb/resources/images/linemiddlenode.gif" border="0" alt="" /></td>
+    <td align='left' colspan="2"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page131\");");'>1.3.1</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><img src="/coreWeb/resources/images/linevertical.gif" border="0" alt="" /></td>
+    <td><img src="/coreWeb/resources/images/linevertical.gif" border="0" alt="" /></td>
+    <td><img src="/coreWeb/resources/images/linelastnode.gif" border="0" alt="" /></td>
+    <td align='left' colspan="2"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page132\");");'>1.3.2</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><img src="/coreWeb/resources/images/linevertical.gif" border="0" alt="" /></td>
+    <td><img src="/coreWeb/resources/images/linelastnode.gif" border="0" alt="" /></td>
+    <td align='left' colspan="3"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page14\");");'>1.4</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><img src="/coreWeb/resources/images/linemiddlenode.gif" border="0" alt="" /></td>
+    <td align='left' colspan="4"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page2\");");'>2</a></td>
+  </tr>
+  <tr valign="middle">
+    <td></td>
+    <td><img src="/coreWeb/resources/images/linelastnode.gif" border="0" alt="" /></td>
+    <td align='left' colspan="4"> <a href="" class="unselected" onclick='return netUI.action("divPanel.showPage(\"Page3\");");'>3</a></td>
+  </tr>
+</table>
+
+        </td><td valign="top" width="50%">
+                <div  id="divPanel" netui-div-panel="true">
+                    <div  id="RootPage"><h4>Root of the Tree<h4></div>
+                    <div  id="Page1"><h4>Page 1</h4></div>
+                    <div  id="Page11"><h4>Page 1.1</h4></div>
+                    <div  id="Page12"><h4>Page 1.12</h4></div>
+                    <div  id="Page13"><h4>Page 1.3</h4></div>
+                    <div  id="Page131"><h4>Page 1.3.1</h4></div>
+                    <div  id="Page132"><h4>Page 1.3.2</h4></div>
+                    <div  id="Page14"><h4>Page 1.4</h4></div>
+                    <div  id="Page2"><h4>Page 2</h4></div>
+                    <div  id="Page3"><h4>Page 3</h4></div>
+                </div>
+        </td></tr></table>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.divPanel="divPanel"
+netui_names.Page12="Page12"
+netui_names.RootPage="RootPage"
+netui_names.Page2="Page2"
+netui_names.Page13="Page13"
+netui_names.Page3="Page3"
+netui_names.Page11="Page11"
+netui_names.Page132="Page132"
+netui_names.Page131="Page131"
+netui_names.Page14="Page14"
+netui_names.Page1="Page1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUIDivPanel object and initialize it.
+     this.netUIDivPanel = new NetUIDivPanel();
+     this.netUIDivPanel.init();
+
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUIDivPanel object and initialize it.
+     netUI.netUIDivPanel.rewriteAnchor(node);
+
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>21 May 2004, 11:37:44.082 AM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ErrorTags.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ErrorTags.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1434 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ErrorTags</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:20:43.541 PM MST</startDate>
+  <description>Tests the error and errors tags and message resources.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/errorsController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Error and Errors Tags
+        </title>
+    </head>
+    <body>
+        <font color="red">
+            
+            
+            
+            
+        </font>
+        
+        <a href="/coreWeb/tags/errors/errorAction.do">succeed</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorAction.do?showDefaultError=&showBundleError2=&showBundleError1=&showRootError=">fail - error tag</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction1.do?showDefaultError=">fail - errors tag 1</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction2.do?showBundleError1=">fail - errors tag 2</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction3.do?showBundleError2=">fail - errors tag 3</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction4.do?showRootError=">fail - errors tag 4</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/errorAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Error and Errors Tags
+        </title>
+    </head>
+    <body>
+        <font color="red">
+            
+            
+            
+            
+        </font>
+        
+        <a href="/coreWeb/tags/errors/errorAction.do">succeed</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorAction.do?showDefaultError=&showBundleError2=&showBundleError1=&showRootError=">fail - error tag</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction1.do?showDefaultError=">fail - errors tag 1</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction2.do?showBundleError1=">fail - errors tag 2</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction3.do?showBundleError2=">fail - errors tag 3</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction4.do?showRootError=">fail - errors tag 4</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/errorAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>showBundleError1</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>showBundleError2</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>showDefaultError</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>showRootError</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Error and Errors Tags
+        </title>
+    </head>
+    <body>
+        <font color="red">
+            This came from Messages1.properties
+<br>
+            This came from Messages2.properties.  Arg1 = ARG1.
+<br>
+            This came from Messages2.properties.  Arg1 = ARG1.  Arg2 = ARG2.
+<br>
+            This came from RootMessages.properties.  Arg1 = ARG1, arg2 = ARG2, arg3 = ARG3.
+<br>
+        </font>
+        
+        <a href="/coreWeb/tags/errors/errorAction.do">succeed</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorAction.do?showDefaultError=&showBundleError2=&showBundleError1=&showRootError=">fail - error tag</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction1.do?showDefaultError=">fail - errors tag 1</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction2.do?showBundleError1=">fail - errors tag 2</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction3.do?showBundleError2=">fail - errors tag 3</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction4.do?showRootError=">fail - errors tag 4</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/errorsAction1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>showDefaultError</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Errors Tag 1
+        </title>
+    </head>
+    <body>
+        <h3>Errors Tag 1</h3>
+        
+        <font color="red">
+This came from Messages1.properties
+</font><br>
+
+        
+        <br>
+        <a href="/coreWeb/tags/errors/goPrev.do">go back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/goPrev.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Error and Errors Tags
+        </title>
+    </head>
+    <body>
+        <font color="red">
+            
+            
+            
+            
+        </font>
+        
+        <a href="/coreWeb/tags/errors/errorAction.do">succeed</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorAction.do?showDefaultError=&showBundleError2=&showBundleError1=&showRootError=">fail - error tag</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction1.do?showDefaultError=">fail - errors tag 1</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction2.do?showBundleError1=">fail - errors tag 2</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction3.do?showBundleError2=">fail - errors tag 3</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction4.do?showRootError=">fail - errors tag 4</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/errorsAction2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>showBundleError1</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Errors Tag 2-3
+        </title>
+    </head>
+    <body>
+        <h3>Errors Tag 2-3</h3>
+        
+        <font color="red">
+This came from Messages2.properties.  Arg1 = ARG1.
+</font><br>
+
+        
+        <br>
+        <a href="/coreWeb/tags/errors/goPrev.do">go back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/goPrev.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Error and Errors Tags
+        </title>
+    </head>
+    <body>
+        <font color="red">
+            
+            
+            
+            
+        </font>
+        
+        <a href="/coreWeb/tags/errors/errorAction.do">succeed</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorAction.do?showDefaultError=&showBundleError2=&showBundleError1=&showRootError=">fail - error tag</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction1.do?showDefaultError=">fail - errors tag 1</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction2.do?showBundleError1=">fail - errors tag 2</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction3.do?showBundleError2=">fail - errors tag 3</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction4.do?showRootError=">fail - errors tag 4</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/errorsAction3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>showBundleError2</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Errors Tag 2-3
+        </title>
+    </head>
+    <body>
+        <h3>Errors Tag 2-3</h3>
+        
+        <font color="red">
+This came from Messages2.properties.  Arg1 = ARG1.  Arg2 = ARG2.
+</font><br>
+
+        
+        <br>
+        <a href="/coreWeb/tags/errors/goPrev.do">go back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/goPrev.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Error and Errors Tags
+        </title>
+    </head>
+    <body>
+        <font color="red">
+            
+            
+            
+            
+        </font>
+        
+        <a href="/coreWeb/tags/errors/errorAction.do">succeed</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorAction.do?showDefaultError=&showBundleError2=&showBundleError1=&showRootError=">fail - error tag</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction1.do?showDefaultError=">fail - errors tag 1</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction2.do?showBundleError1=">fail - errors tag 2</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction3.do?showBundleError2=">fail - errors tag 3</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction4.do?showRootError=">fail - errors tag 4</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/errorsAction4.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>showRootError</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Errors Tag 4
+        </title>
+    </head>
+    <body>
+        <h3>Errors Tag 4</h3>
+        
+        <font color="red">
+This came from RootMessages.properties.  Arg1 = ARG1, arg2 = ARG2, arg3 = ARG3.
+</font><br>
+
+        
+        <br>
+        <a href="/coreWeb/tags/errors/goPrev.do">go back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/errors/goPrev.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7f13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Error and Errors Tags
+        </title>
+    </head>
+    <body>
+        <font color="red">
+            
+            
+            
+            
+        </font>
+        
+        <a href="/coreWeb/tags/errors/errorAction.do">succeed</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorAction.do?showDefaultError=&showBundleError2=&showBundleError1=&showRootError=">fail - error tag</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction1.do?showDefaultError=">fail - errors tag 1</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction2.do?showBundleError1=">fail - errors tag 2</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction3.do?showBundleError2=">fail - errors tag 3</a>
+        <br>
+        <a href="/coreWeb/tags/errors/errorsAction4.do?showRootError=">fail - errors tag 4</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:20:54.747 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>11</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>11</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Except.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Except.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,391 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Except</sessionName>
+  <tester>Daryl</tester>
+  <startDate>12 Nov 2002, 03:49:30.634 PM MST</startDate>
+  <description>Simple test of exceptions.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/except/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exceptions</title>
+</head>
+<body>
+<h4>Exceptions</h3>
+<a href="/coreWeb/except/throwLocal.do">Local To Method</a><br />
+<a href="/coreWeb/except/throwGlobal.do">Global To Method</a><br />
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/except/throwLocal.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/except/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Error Page</title>
+</head>
+<body>
+<h4>Report Exception</h4>
+Message <span>caught [MyException] in localHandler</span><br />
+<a href="/coreWeb/except/goHome.do">Return</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/except/goHome.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/except/throwLocal.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exceptions</title>
+</head>
+<body>
+<h4>Exceptions</h3>
+<a href="/coreWeb/except/throwLocal.do">Local To Method</a><br />
+<a href="/coreWeb/except/throwGlobal.do">Global To Method</a><br />
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/except/throwGlobal.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/except/goHome.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Error Page</title>
+</head>
+<body>
+<h4>Report Exception</h4>
+Message <span>caught [MyException] in globalHandler</span><br />
+<a href="/coreWeb/except/goHome.do">Return</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/except/goHome.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RFm3r2Eilxf1A0qkhGVk3c6a7OtBzesONeSAKLQEMVUbLd2mBhJ!-342104378</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/except/throwGlobal.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exceptions</title>
+</head>
+<body>
+<h4>Exceptions</h3>
+<a href="/coreWeb/except/throwLocal.do">Local To Method</a><br />
+<a href="/coreWeb/except/throwGlobal.do">Global To Method</a><br />
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>12 Nov 2002, 03:49:47.408 PM MST</endDate>
+  <testCount>5</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ExceptHier.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ExceptHier.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,493 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ExceptHier</sessionName>
+  <tester>Daryl</tester>
+  <startDate>06 Dec 2002, 09:00:13.172 AM MST</startDate>
+  <description>Test of handling in an exception hierarchy.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHier/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHier/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwRuntime.do">Throw a Runtime - global handler</a><br />
+<hr />
+Message <span></span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHier/throwBase.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/exceptHier/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHier/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwRuntime.do">Throw a Runtime - global handler</a><br />
+<hr />
+Message <span>handled by [base handler] except = [ExceptBase]</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHier/throwSub.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/exceptHier/throwBase.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHier/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwRuntime.do">Throw a Runtime - global handler</a><br />
+<hr />
+Message <span>handled by [base handler] except = [ExceptSub]</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHier/throwSub2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/exceptHier/throwSub.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHier/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwRuntime.do">Throw a Runtime - global handler</a><br />
+<hr />
+Message <span>handled by [sub2 handler] except = [ExceptSub2]</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHier/throwSubLocal.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/exceptHier/throwSub2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHier/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwRuntime.do">Throw a Runtime - global handler</a><br />
+<hr />
+Message <span>handled by [local sub handler] except = [ExceptSub]</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHier/throwRuntime.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9wJ03yVpOUIYGTvbp4gsXGz72JIIy5e1B3dprndEyffCPgrGr6Nq!-1533100480</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/exceptHier/throwSubLocal.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHier/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHier/throwRuntime.do">Throw a Runtime - global handler</a><br />
+<hr />
+Message <span>handled by [global handler] except = java.lang.RuntimeException</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>06 Dec 2002, 09:00:54.471 AM MST</endDate>
+  <testCount>6</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ExceptHierPage.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ExceptHierPage.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1088 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ExceptHierPage</sessionName>
+  <tester>Daryl</tester>
+  <startDate>02 Apr 2003, 10:25:00.731 AM MST</startDate>
+  <description>Test the exception hierarchy using page based navigation</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHierPage/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwRuntime.do">Throw a Runtime - global handler</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/throwBase.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Base Handler</title>
+</head>
+<body>
+<h4>Base Handler</h4>
+<a href="/coreWeb/miniTests/exceptHierPage/Controller.jpf">Home</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHierPage/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwRuntime.do">Throw a Runtime - global handler</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/throwSub.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Base Handler</title>
+</head>
+<body>
+<h4>Base Handler</h4>
+<a href="/coreWeb/miniTests/exceptHierPage/Controller.jpf">Home</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHierPage/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwRuntime.do">Throw a Runtime - global handler</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/throwSub2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Sub2 Handler</title>
+</head>
+<body>
+<h4>Sub2 Handler</h4>
+<a href="/coreWeb/miniTests/exceptHierPage/Controller.jpf">Home</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHierPage/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwRuntime.do">Throw a Runtime - global handler</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/throwSubLocal.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Local Sub Handler</title>
+</head>
+<body>
+<h4>Local Sub Handler</h4>
+<a href="/coreWeb/miniTests/exceptHierPage/Controller.jpf">Home</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHierPage/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwRuntime.do">Throw a Runtime - global handler</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/throwRuntime.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Global Handler</title>
+</head>
+<body>
+<h4>Global Handler</h4>
+<a href="/coreWeb/miniTests/exceptHierPage/Controller.jpf">Home</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/exceptHierPage/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7f78</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Exception Hierarchy</title>
+</head>
+<body>
+<h4>Exception Hierarchy</h3>
+<a href="/coreWeb/miniTests/exceptHierPage/throwBase.do">Throw a ExceptBase - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub.do">Throw a ExceptSub - base handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSub2.do">Throw a ExceptSub2 - sub2 handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwSubLocal.do">Throw a ExceptSub with local - local sub handler</a><br />
+<a href="/coreWeb/miniTests/exceptHierPage/throwRuntime.do">Throw a Runtime - global handler</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>02 Apr 2003, 10:25:06.200 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>11</testCount>
+  <passedCount>6</passedCount>
+  <failedCount>5</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Expression.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Expression.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Expression</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 09:38:44.633 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/errors/expression/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-35ead49b:fda1c948e7:-7341</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>In-line Expression Errors</title>
+</head>
+<body>
+<h4>In-line Expression Errors</h4>
+<p style="color:green">
+This test verifies that report binding errors to all dataSource attributes.  The errors are reported in-line.
+This test is dupicated by HtmlExpression which reports the errors at the end of the page.
+You only need to hit this page to see the errors.
+</p>
+<hr>
+<form id="Netui_Form_0" action="/coreWeb/errors/expression/postback.do" method="post">
+<table>
+<tr><td>Hidden</td><td><span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Hidden</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.hidden}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.hidden}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "hidden" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+</td></tr>
+<tr><td>TextBox</td><td><span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>TextBox</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.tbDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.tbDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "tbDataSource" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+</td></tr>
+<tr><td>TextArea</td><td><span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>TextArea</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.taDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.taDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "taDataSource" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+</td></tr>
+<tr><td>Checkbox</td><td><span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CheckBox</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.cbDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.cbDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "cbDataSource" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+</td></tr>
+<tr><td>Checkbox Group</td><td><span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CheckBoxGroup</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.cbgDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.cbgDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "cbgDataSource" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>CheckBoxGroup</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.cbgDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.cbgDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "cbgDataSource" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+</td></tr>
+<tr><td>Radio Group</td><td><span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RadioButtonGroup</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.rgDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.rgDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "rgDataSource" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RadioButtonGroup</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.rgDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.rgDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "rgDataSource" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+</td></tr>
+<tr><td>Select</td><td><span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Select</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.sDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.sDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "sDataSource" on object of type "class errors.expression.Controller"</td></tr>
+</table></span>
+</td></tr>
+</table>
+</form>
+<hr />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 09:38:46.376 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormBeanRePostTest52.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormBeanRePostTest52.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,551 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FormBeanRePostTest52</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:21:05.225 AM MST</startDate>
+  <description>Test the behavior of re-posting to form beans on a action forwards.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanRePost/test52/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7698</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>FormBeanRePost Test52</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test52 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/formBeanRePost/test52/action1.do" method="post">
+            <font color="blue">
+               Form String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <input type="text" name="{pageFlow.string}" value="Jpf1 value 1">
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanRePost/test52/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.string}</name>
+          <value>Jpf1 value 1</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>114</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7698</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>FormBeanRePost Test52</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test52 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/formBeanRePost/test52/action3.do" method="post">
+            <font color="blue">
+               Form String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <input type="text" name="{pageFlow.string}" value="Jpf1 value 1">
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanRePost/test52/action3.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.string}</name>
+          <value>Jpf1 value 1</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>114</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7698</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>FormBeanRePost Test52</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test52 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/formBeanRePost/test52/finish.do" method="post">
+            <font color="blue">
+               Form String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <input type="text" name="{pageFlow.string}" value="Jpf1 value 2">
+            </font>
+            <br/><br/>
+            <input type="submit" value="Finish...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanRePost/test52/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.string}</name>
+          <value>Jpf1 value 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>114</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7698</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:21:08.269 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormBeanRePostTest53.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormBeanRePostTest53.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,408 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FormBeanRePostTest53</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:21:08.549 AM MST</startDate>
+  <description>Test the behavior of re-posting to form beans when an action forwards to another action that does not take a form.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanRePost/test53/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7691</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>FormBeanRePost Test53</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test53 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/formBeanRePost/test53/action1.do" method="post">
+            <font color="blue">
+               Form String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <input type="text" name="{pageFlow.string}" value="Jpf1 value 1">
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanRePost/test53/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.string}</name>
+          <value>Jpf1 value 1</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>114</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7691</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>FormBeanRePost Test53</title>
+   </head>
+   <body>
+      <h3 align="center">FormBeanRePost Test53 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing Re-Posting of form beans.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/formBeanRePost/test53/finish.do" method="post">
+            <font color="blue">
+               Form String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               Form String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               PageFlow String 3: <input type="text" name="{pageFlow.string}" value="Jpf1 value 2">
+            </font>
+            <br/><br/>
+            <input type="submit" value="Finish...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanRePost/test53/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.string}</name>
+          <value>Jpf1 value 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>114</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7691</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:21:10.823 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1851 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FormTest</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:06:45.760 AM MST</startDate>
+  <description>Test all the base form tags in a postback mode.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value=""></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}"></textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkBox1OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/formTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radio</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>133</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}"></textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>Change, old value &#39;&#39; new value &#39;Test&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkBox1</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox1OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/formTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radio</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>163</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" checked><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}">Test</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1" selected>Choice 1</option>
+        <option value="2">Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1" checked><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2"><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>Change, old value &#39;&#39; new value &#39;Test&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>Changed</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>Changed</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>Change, old value &#39;2&#39; new value &#39;1&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>Change, old value &#39;2&#39; new value &#39;1&#39;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkBox1</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox1OldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2OldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/formTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radio</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>157</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" checked><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}">Test</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1" selected>Choice 1</option>
+        <option value="2">Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1" checked><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2"><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkBox1OldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2OldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/formTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radio</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>144</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}">Test</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1" checked><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2"><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>Changed</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>Change, old value &#39;1&#39; new value &#39;2&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkBox1OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2OldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/formTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radio</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value>Test</value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value>Test</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>147</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value="Test"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}">Test</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>Test</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>Change, old value &#39;1&#39; new value &#39;2&#39;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkBox1OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2OldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/formTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radio</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>2</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value>x</value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value>x</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>141</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value="x"></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}"><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}" checked></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}">x</textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1">Choice 1</option>
+        <option value="2" selected>Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1"><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2" checked><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span>x</span></td>
+          <td><span>Change, old value &#39;Test&#39; new value &#39;x&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span>x</span></td>
+          <td><span>Change, old value &#39;Test&#39; new value &#39;x&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>2</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkBox1</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox1OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2OldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/formTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radio</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>139</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value=""></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" checked><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}"></textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1" selected>Choice 1</option>
+        <option value="2">Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1" checked><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2"><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>Change, old value &#39;x&#39; new value &#39;&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>Change, old value &#39;x&#39; new value &#39;&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>Changed</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>Changed</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>Change, old value &#39;2&#39; new value &#39;1&#39;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>Change, old value &#39;2&#39; new value &#39;1&#39;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formTest/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>checkBox1</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox1OldValue</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>checkBox2OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/formTest/formTest.jsp</value>
+        </parameter>
+        <parameter>
+          <name>radio</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>select</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>text</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>textArea</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>139</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7edd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Form Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/formTest/formTest.jsp">
+</head>
+<body>
+  <h1>Form Test</h1>
+  <form name="form" action="/coreWeb/formTest/submit.do" method="post">
+  <table width="100%">
+  <tr><td>TextBox</td><td><input type="text" name="{actionForm.text}" value=""></td>
+    <td>CheckboxGroup:</td>
+    <td>Checkbox1 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" checked><br />
+        Checkbox2 <input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox2}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox2}"></td>
+  </tr>
+  <tr><td>TextArea</td><td><textarea name="{actionForm.textArea}"></textarea></td>
+    <td>Select:</td>
+    <td><input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option value="1" selected>Choice 1</option>
+        <option value="2">Choice 2</option>
+        <option value="3">Choice 3</option></select>
+    </td>
+  </tr>
+
+  <tr>
+  <td>A sample radiogroup:</td><td>
+    
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1" checked><span>Choice 1</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2"><span>Choice 2</span><br>
+        <input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="3"><span>Choice 3</span>
+    
+    </td>
+  </tr>
+  <tr><td colspan="4"><input type="submit" value="Change"></td></tr>
+  </table>
+  </form>
+  <hr />
+  <table width="100%" border="1" cellspacing="0">
+  <tr><th>Form Control</th><th>Value</th><th>Change</th></tr>
+  
+        <tr>
+          <td width="100px" ><span>TextBox</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>TextArea</span></td>
+          <td width="300px"><span></span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox1</span></td>
+          <td width="300px"><span>true</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Checkbox2</span></td>
+          <td width="300px"><span>false</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Select</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+        <tr>
+          <td width="100px" ><span>Radio</span></td>
+          <td width="300px"><span>1</span></td>
+          <td><span>&nbsp;</span></td>
+        </tr>
+        
+  </table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:06:53.421 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>9</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>9</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormValid.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormValid.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,583 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FormValid</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:21:35.535 PM MST</startDate>
+  <description>Full blown test of form validation</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/formValid/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ece</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/miniTests/formValid/Begin.jsp">
+</head>
+<body>
+    <form name="emptyForm" action="/coreWeb/miniTests/formValid/formAction.do" method="post">
+        <table>
+            <tr>
+                <th align="right" valign="top">Name:</th>
+                <td align="left"><input type="text" name="{actionForm.name}" value="" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    
+                    &nbsp;
+                </td>
+            </tr>
+            <tr>
+                <th align="right" valign="top">Type:</th>
+                <td align="left"><input type="text" name="{actionForm.type}" value="" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    
+                </td>
+            </tr>
+            <tr>
+                <td align="center" colspan="3">
+                    <input type="submit" value="Submit">&nbsp;
+                </td>
+            </tr>
+            <tr>
+                <td colspan="3" align="center">
+                    
+                </td>
+            </tr>
+        </table>
+    </form>
+    
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/formValid/formAction.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>fff</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.type}</name>
+          <value>ff</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>50</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ece</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/miniTests/formValid/Begin.jsp">
+</head>
+<body>
+    <form name="emptyForm" action="/coreWeb/miniTests/formValid/formAction.do" method="post">
+        <table>
+            <tr>
+                <th align="right" valign="top">Name:</th>
+                <td align="left"><input type="text" name="{actionForm.name}" value="fff" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    Invalid Name, must start with upper case letter
+
+                    &nbsp;
+                </td>
+            </tr>
+            <tr>
+                <th align="right" valign="top">Type:</th>
+                <td align="left"><input type="text" name="{actionForm.type}" value="ff" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    Invalid Type, must be 'foo' or 'bar'
+
+                </td>
+            </tr>
+            <tr>
+                <td align="center" colspan="3">
+                    <input type="submit" value="Submit">&nbsp;
+                </td>
+            </tr>
+            <tr>
+                <td colspan="3" align="center">
+                    Invalid Name, must start with upper case letter
+Invalid Type, must be 'foo' or 'bar'
+
+                </td>
+            </tr>
+        </table>
+    </form>
+    
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/formValid/formAction.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>Fff</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.type}</name>
+          <value>fff</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>51</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ece</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/miniTests/formValid/Begin.jsp">
+</head>
+<body>
+    <form name="emptyForm" action="/coreWeb/miniTests/formValid/formAction.do" method="post">
+        <table>
+            <tr>
+                <th align="right" valign="top">Name:</th>
+                <td align="left"><input type="text" name="{actionForm.name}" value="Fff" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    
+                    &nbsp;
+                </td>
+            </tr>
+            <tr>
+                <th align="right" valign="top">Type:</th>
+                <td align="left"><input type="text" name="{actionForm.type}" value="fff" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    Invalid Type, must be 'foo' or 'bar'
+
+                </td>
+            </tr>
+            <tr>
+                <td align="center" colspan="3">
+                    <input type="submit" value="Submit">&nbsp;
+                </td>
+            </tr>
+            <tr>
+                <td colspan="3" align="center">
+                    Invalid Type, must be 'foo' or 'bar'
+
+                </td>
+            </tr>
+        </table>
+    </form>
+    
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/formValid/formAction.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>Fff</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.type}</name>
+          <value>foo</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>51</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ece</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <span>Name: </span>&nbsp;<span>Fff</span><br />
+        <span>Type:</span>&nbsp;<span>foo</span>
+        </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:21:39.942 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormValidAnnot.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormValidAnnot.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,429 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FormValidAnnot</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:21:40.552 PM MST</startDate>
+  <description>Test of form validation with annotation for the resource.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/formValidAnnot/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ec7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/miniTests/formValidAnnot/Begin.jsp">
+</head>
+<body>
+    <form name="emptyForm" action="/coreWeb/miniTests/formValidAnnot/formAction.do" method="post">
+        <table>
+            <tr>
+                <th align="right" valign="top">Name:</th>
+                <td align="left"><input type="text" name="{actionForm.name}" value="" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    
+                    &nbsp;
+                </td>
+            </tr>
+            <tr>
+                <th align="right" valign="top">Type:</th>
+                <td align="left"><input type="text" name="{actionForm.type}" value="" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    
+                </td>
+            </tr>
+            <tr>
+                <td align="center" colspan="3">
+                    <input type="submit" value="Submit">&nbsp;
+                </td>
+            </tr>
+            <tr>
+                <td colspan="3" align="center">
+                    
+                </td>
+            </tr>
+        </table>
+    </form>
+    
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/formValidAnnot/formAction.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>sdf</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.type}</name>
+          <value>sdfs</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>52</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ec7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/miniTests/formValidAnnot/Begin.jsp">
+</head>
+<body>
+    <form name="emptyForm" action="/coreWeb/miniTests/formValidAnnot/formAction.do" method="post">
+        <table>
+            <tr>
+                <th align="right" valign="top">Name:</th>
+                <td align="left"><input type="text" name="{actionForm.name}" value="sdf" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    Invalid Name, must start with upper case letter
+
+                    &nbsp;
+                </td>
+            </tr>
+            <tr>
+                <th align="right" valign="top">Type:</th>
+                <td align="left"><input type="text" name="{actionForm.type}" value="sdfs" maxlength="36" size="36"></td>
+                
+                <td style="color:red;">
+                    Invalid Type, must be 'foo' or 'bar'
+
+                </td>
+            </tr>
+            <tr>
+                <td align="center" colspan="3">
+                    <input type="submit" value="Submit">&nbsp;
+                </td>
+            </tr>
+            <tr>
+                <td colspan="3" align="center">
+                    Invalid Name, must start with upper case letter
+Invalid Type, must be 'foo' or 'bar'
+
+                </td>
+            </tr>
+        </table>
+    </form>
+    
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/formValidAnnot/formAction.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>Sdf</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.type}</name>
+          <value>foo</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>51</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ec7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <span>Name: </span>&nbsp;<span>Sdf</span><br />
+        <span>Type:</span>&nbsp;<span>foo</span>
+        </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:21:44.388 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormatSelect.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormatSelect.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FormatSelect</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:06:40.783 AM MST</startDate>
+  <description>Odds and Ends on the formatter tags.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/formatSelect/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7ee5</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Date Format Test</title>
+</head>
+<body>
+<h4>Date Format Test</h4>
+<b>Select:</b> <br />
+  <input type="hidden" name="wlw-select_key:{pageFlow.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.select}" size="5"><option value="1">07/10/1996</option> 
+    <option value="2">01/28/2063</option> 
+    <option value="3">01/28/1963</option> 
+    <option value="4">01/01/2063</option> 
+    <option value="5">01/01/1963</option></select> 
+<hr />
+<b>TextBox:</b><br />
+  <input type="text" name="{pageFlow.textBox}" value="123456.00"> 
+<hr />
+<b>TextArea:</b> 
+ <textarea name="{pageFlow.textArea}" rows="3" cols="20">123.45 USD </textarea> 
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:06:42.575 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormatTags.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/FormatTags.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FormatTag</sessionName>
+  <tester>Daryl</tester>
+  <startDate>05 Mar 2004, 01:25:28.221 PM MST</startDate>
+  <description>Base test of the format tag.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/formatTags/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AIhmJ61W0aHKOmKEuJlNH714eEnckriqO7mK4kAmydnt6q1uuj21!-1814385329</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AIhmJ61W0aHKOmKEuJlNH714eEnckriqO7mK4kAmydnt6q1uuj21!-1814385329</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Format Tests</title>
+</head>
+<body>
+<h4>Format Tests</h4>
+<b>String Format</b>
+<table border="1" cellspacing="0">
+<tr><th>Truncate</ty><td>
+<span>A-BCDEF-G</span>
+</td><td>
+<span>a-bcdef-g</span>
+</td><td>&nbsp</td></tr>
+<tr><th>No Truncate</th><td>
+<span>A-BCDEF-GHIJKLMNOPQRSTUVWXYZ</span>
+</td><td>
+<span>a-bcdef-ghijklmnopqrstuvwxyz</span>
+</td><td>&nbsp</td></tr>
+<tr><th>Contains Hash</th>
+<td><pre><span>#-Hashs-#</span></pre></td>
+<th>Contains spac</th>
+<td><pre><span>&lt;- &nbsp;&nbsp;&nbsp;&nbsp;-&gt;</span></pre></td>
+</tr>
+<tr><th>Hash Escape</th>
+<td><span>#A-BCDEF-G</span></td>
+<th>Escape Chars</th>
+<td><span>$A-BCDEF-G</span></td>
+</tr>
+<tr><th>Bind to Pattern</th><td>
+<span>AB-CD</span>
+</td><td>
+<span>ab-cd</span>
+</td><td>&nbsp</td></tr>
+</table>
+<b>Number Format</b>
+<table border="1" cellspacing="0">
+<tr><th>EN Currency</ty><td>
+<span>$12,345.67</span>
+<!-- removing the GB for the moment because this causes the test recorder problems -->
+<th>GB Currency</th><td>
+<span>$12,345.67</span>
+</td></tr>
+<tr><th>EN Number</ty><td>
+<span>12,345.67</span>
+<th>GB Number</th><td>
+<span>12,345.67</span>
+</td></tr>
+<tr><th>EN Percentage</ty><td>
+<span>17%</span>
+<th>GB Percentage</th><td>
+<span>17%</span>
+</td></tr>
+<tr><th>Pattern</ty><td>
+    <span>$123,456.79</span>
+<th>Escaped Pattern</th><td>
+    <span>\123,456.79</span>
+</td></tr>
+</table>
+<b>Date Format</b>
+<table border="1" cellspacing="0">
+<tr><th>US Date</th><td>
+<span>1/17/02 1:30 PM</span>
+</td><th>GB Date</th><td>
+<span>1/17/02 1:30 PM</span>
+</td></tr>
+
+<tr><th>yyyy.MM.dd G 'at' HH:mm:ss z</th><td>
+REGEX:<span>2002.01.17 AD at 13:30:08 .*</span>
+</td><th>yyyy.MM.dd G 'at' HH:mm:ss z  (EN, GB)</th><td>
+Removed because this is not handled by the test recorder correctly
+</td></tr>
+
+<tr><th>yyyy.MM.dd G 'at' HH:mm:ss z (FR)</th><td>
+Removed because the test recorder doesn't handle the resulting encoding correctly.
+</td><th>yyyy.MM.dd G 'at' HH:mm:ss z (RU)</th><td>
+Removed because this is not handled by the test recorder correctly
+</td></tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>05 Mar 2004, 01:25:39.748 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Forward.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Forward.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Forward</sessionName>
+  <tester>Daryl</tester>
+  <startDate>03 Dec 2002, 02:21:26.965 PM MST</startDate>
+  <description>Error test.  Undefined Forward.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/errors/forward/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9tf2HzaJuDhK322cQlLm8pcKO9ZU47EuAeJchfnXwSUb34nrvbVt!2059911029</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9tf2HzaJuDhK322cQlLm8pcKO9ZU47EuAeJchfnXwSUb34nrvbVt!2059911029</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testNumber</name>
+          <value>1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>832226:f1e6449b3c:-7fb1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Link Submit</title>
+</head>
+<body>
+<a href="/coreWeb/errors/forward/forward.do">Forward</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/errors/forward/forward.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9tf2HzaJuDhK322cQlLm8pcKO9ZU47EuAeJchfnXwSUb34nrvbVt!2059911029</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9tf2HzaJuDhK322cQlLm8pcKO9ZU47EuAeJchfnXwSUb34nrvbVt!2059911029</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testNumber</name>
+          <value>2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>832226:f1e6449b3c:-7fb1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - Unresolvable Forward</title></head>
+ <body>
+ <h1>Page Flow Error - Unresolvable Forward</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/errors/forward/Controller.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>forward</td></tr>
+ <tr><td><b>Forward:</b></td><td>forwardError</td></tr>
+ </table><br />
+ <span style="color:red">Unable to find a forward named <b>forwardError</b> on action <b>forward</b>.</span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>03 Dec 2002, 02:21:32.873 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ForwardToAction.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ForwardToAction.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,454 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>ForwardToAction</ses:sessionName>
+   <ses:tester>rich</ses:tester>
+   <ses:startDate>29 Jun 2004, 05:05:23.139 PM MDT</ses:startDate>
+   <ses:description>rich</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/miniTests/forwardToAction/ForwardToActionController.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Ah1DQp1FPoBjPotpO6JzazoN2dBrSeQoCn3jMm2z0G1ZYY9wyGW2!-1783232798</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Ah1DQp1FPoBjPotpO6JzazoN2dBrSeQoCn3jMm2z0G1ZYY9wyGW2!-1783232798</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Keep-Alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>4e84fb5a:fd72a5f2f6:-7f30</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Forward to Action
+        </title>
+    </head>
+    <body>
+        <h3>Forward to Action</h3>
+        <form name="someActionForm" action="/coreWeb/miniTests/forwardToAction/someAction.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>
+                        Foo:
+                    </td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="">
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <input type="submit" value="Submit">
+            <input type="checkbox" name="withForm"> Forward to action with form
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/miniTests/forwardToAction/someAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>withForm</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>aaa</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Ah1DQp1FPoBjPotpO6JzazoN2dBrSeQoCn3jMm2z0G1ZYY9wyGW2!-1783232798</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>36</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Ah1DQp1FPoBjPotpO6JzazoN2dBrSeQoCn3jMm2z0G1ZYY9wyGW2!-1783232798</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Keep-Alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>4e84fb5a:fd72a5f2f6:-7f30</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Forward to Action - Results
+        </title>
+    </head>
+    <body>
+        <h3>Forward to Action</h3>
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>BindingUpdateErrors</b>]</span>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/forwardToAction/begin.do">start over</a>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>BindingUpdateErrors</th><th>Message</th><td>Binding Update Failed for '{actionForm.foo}', cause: Exception when attempting to update the expression "{actionForm.foo}" with available binding contexts [actionForm, pageFlow, globalApp]. Root cause: java.lang.RuntimeException: Could not update expression because a public field named "foo" or setter for the property "foo" could not be found.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/miniTests/forwardToAction/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Ah1DQp1FPoBjPotpO6JzazoN2dBrSeQoCn3jMm2z0G1ZYY9wyGW2!-1783232798</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Ah1DQp1FPoBjPotpO6JzazoN2dBrSeQoCn3jMm2z0G1ZYY9wyGW2!-1783232798</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Keep-Alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>4e84fb5a:fd72a5f2f6:-7f30</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Forward to Action
+        </title>
+    </head>
+    <body>
+        <h3>Forward to Action</h3>
+        <form name="someActionForm" action="/coreWeb/miniTests/forwardToAction/someAction.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>
+                        Foo:
+                    </td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="">
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <input type="submit" value="Submit">
+            <input type="checkbox" name="withForm"> Forward to action with form
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/miniTests/forwardToAction/someAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>aaa</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Ah1DQp1FPoBjPotpO6JzazoN2dBrSeQoCn3jMm2z0G1ZYY9wyGW2!-1783232798</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>24</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Ah1DQp1FPoBjPotpO6JzazoN2dBrSeQoCn3jMm2z0G1ZYY9wyGW2!-1783232798</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Keep-Alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>4e84fb5a:fd72a5f2f6:-7f30</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Forward to Action - Results
+        </title>
+    </head>
+    <body>
+        <h3>Forward to Action</h3>
+        
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/forwardToAction/begin.do">start over</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 05:05:28.075 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>3</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GetData.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GetData.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>GetData</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 03:11:48.608 PM MST</startDate>
+  <description>Test of the getData tag.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/controlTests/getData/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-74a1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            GetData Test
+        </title>
+    </head>
+    <body>
+        
+        <table cellspacing="0" cellpadding="4" border="1"
+                class="tablebody" >
+                <tr>
+                    <td><span>Foo</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>Bar</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>Baz</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>Blee</span></td>
+                </tr>
+            </table>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 03:11:49.700 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalAction.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalAction.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,383 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>GlobalAction</sessionName>
+  <tester>Daryl</tester>
+  <startDate>14 Nov 2002, 03:12:39.820 PM MST</startDate>
+  <description>Call an action defined in the Global.app.  This action is nested an the returns back to the previous page flow.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/globalAction/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Basic Global App</title>
+</head>
+<body>
+<h4>Basic Global App</h4>
+  <a href="/coreWeb/miniTests/globalAction/globalAction_action.do">Global Action</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/globalAction/globalAction_action.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/globalAction/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nest And Return</title>
+</head>
+<body>
+<h4>Nest And Return</h4>
+<a href="/coreWeb/globalJpfs/nestReturn/returnAction.do">Return</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/globalJpfs/nestReturn/returnAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/globalAction/globalAction_action.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Basic Global App</title>
+</head>
+<body>
+<h4>Basic Global App</h4>
+  <a href="/coreWeb/miniTests/globalAction/globalAction_action.do">Global Action</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/globalAction/globalAction_action.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/globalJpfs/nestReturn/returnAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nest And Return</title>
+</head>
+<body>
+<h4>Nest And Return</h4>
+<a href="/coreWeb/globalJpfs/nestReturn/returnAction.do">Return</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/globalJpfs/nestReturn/returnAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9UfN55IHFTh622LF4hcQFLHB2dkNetfsiAR6g0O9vY3ojSFqAK4n!-595730414</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/globalAction/globalAction_action.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Basic Global App</title>
+</head>
+<body>
+<h4>Basic Global App</h4>
+  <a href="/coreWeb/miniTests/globalAction/globalAction_action.do">Global Action</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>14 Nov 2002, 03:13:38.203 PM MST</endDate>
+  <testCount>5</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalAppNoJPFBinding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalAppNoJPFBinding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>GlobalAppNoJPFBinding</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>02 Dec 2003, 08:35:39.759 AM MST</startDate>
+  <description>Test binding an expression in a JSP to a public property of the Global.app without a JPF in the directory.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/globalApp/nojpf/index.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1Mvu9a92i7iD6kOb8eqQcrfGTd0BOpJ11yHVdPYA8LS2gz7OQrKH!2062288931</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1Mvu9a92i7iD6kOb8eqQcrfGTd0BOpJ11yHVdPYA8LS2gz7OQrKH!2062288931</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Global App Binding -- no JPF</title>
+  </head>
+
+  <body>
+    <b>Global App Binding -- no JPF</b>
+<br/>
+<br/>
+The Global.app says: <span>Hello World! -- the Global.app</span>
+<br/>
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>02 Dec 2003, 08:35:48.992 AM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalForwards.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/GlobalForwards.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>GlobalForwards</sessionName>
+  <tester>Daryl</tester>
+  <startDate>18 Nov 2002, 03:32:38.560 PM MST</startDate>
+  <description>Test to make sure that global forward annotations work.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/globalForwards/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9ZquDudcds1Kx76ObbgpXbNo4XgFHsMIe21uGE3M43kPWNikHw2n!-2082249393</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9ZquDudcds1Kx76ObbgpXbNo4XgFHsMIe21uGE3M43kPWNikHw2n!-2082249393</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Global Forwards</title>
+</head>
+<body>
+<h4>Global Forwards</h4>
+Last Action: <b><span>begin</span></b><br />
+<a href="/coreWeb/miniTests/globalForwards/next.do">Next</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/globalForwards/next.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9ZquDudcds1Kx76ObbgpXbNo4XgFHsMIe21uGE3M43kPWNikHw2n!-2082249393</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9ZquDudcds1Kx76ObbgpXbNo4XgFHsMIe21uGE3M43kPWNikHw2n!-2082249393</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/globalForwards/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Global Forwards Next Page</title>
+</head>
+<body>
+<h4>Global Forwards Next Page</h4>
+Last Action: <b><span>next</span></b><br />
+<a href="/coreWeb/miniTests/globalForwards/home.do">Home</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/globalForwards/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9ZquDudcds1Kx76ObbgpXbNo4XgFHsMIe21uGE3M43kPWNikHw2n!-2082249393</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9ZquDudcds1Kx76ObbgpXbNo4XgFHsMIe21uGE3M43kPWNikHw2n!-2082249393</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/globalForwards/next.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Global Forwards</title>
+</head>
+<body>
+<h4>Global Forwards</h4>
+Last Action: <b><span>home</span></b><br />
+<a href="/coreWeb/miniTests/globalForwards/next.do">Next</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>18 Nov 2002, 03:33:12.418 PM MST</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Hidden.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Hidden.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Hidden</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>06 Jul 2004, 10:26:34.928 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/hidden/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>A96101F02AE46795DC6D03AE43944104</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=A96101F02AE46795DC6D03AE43944104</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-74e3d916:fd97d6519b:-7c87</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Hidden Using dataInput</h4>
+        <p style="color:green">
+        This test will bind a value from the dataInput attribute which will be posted to the actionForm.
+        The value then is displayed in the hidden value below.  You should hit input to see the posted
+        value <b>Page Flow Hidden Value</b>.
+        </p>
+        <form name="hiddenForm" action="/coreWeb/tags/hidden/post.do" method="post">
+            <input type="hidden" name="{actionForm.hidden}" value="Page Flow Hidden Value">           
+            <input type="submit" value="post">
+        </form>
+        Hidden: <span>No Value Set</span> 
+        <hr/>
+     </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/hidden/post.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.hidden}</ses:name>
+                  <ses:value>Page Flow Hidden Value</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>A96101F02AE46795DC6D03AE43944104</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>46</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=A96101F02AE46795DC6D03AE43944104</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-74e3d916:fd97d6519b:-7c87</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Hidden Using dataInput</h4>
+        <p style="color:green">
+        This test will bind a value from the dataInput attribute which will be posted to the actionForm.
+        The value then is displayed in the hidden value below.  You should hit input to see the posted
+        value <b>Page Flow Hidden Value</b>.
+        </p>
+        <form name="hiddenForm" action="/coreWeb/tags/hidden/post.do" method="post">
+            <input type="hidden" name="{actionForm.hidden}" value="Page Flow Hidden Value">           
+            <input type="submit" value="post">
+        </form>
+        Hidden: <span>Page Flow Hidden Value</span> 
+        <hr/>
+     </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>06 Jul 2004, 10:26:35.749 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/HtmlExpression.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/HtmlExpression.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>HtmlExpression</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 09:39:28.907 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/errors/htmlExpression/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-35ead49b:fda1c948e7:-72e8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Collected Expression Errors</title>
+</head>
+<body>
+<h4>Collected Expression Errors</h4>
+<p style="color:green">
+This test verifies that report binding errors to all dataSource attributes.  The errors are reported
+at the bottom of the page. This is a replicated version of the Expression test which reports the
+errors in-line.  You only need to hit this page to see the errors.
+</p>
+<hr>
+<form id="Netui_Form_0" action="/coreWeb/errors/htmlExpression/postback.do" method="post">
+<table>
+<tr><td>Hidden</td><td><span style="color:red;background-color:white">
+ [<b>Expression Error:1</b>, Found in tag <b>Hidden</b>]</span></td></tr>
+<tr><td>TextBox</td><td><span style="color:red;background-color:white">
+ [<b>Expression Error:2</b>, Found in tag <b>TextBox</b>]</span></td></tr>
+<tr><td>TextArea</td><td><span style="color:red;background-color:white">
+ [<b>Expression Error:3</b>, Found in tag <b>TextArea</b>]</span></td></tr>
+<tr><td>Checkbox</td><td><span style="color:red;background-color:white">
+ [<b>Expression Error:4</b>, Found in tag <b>CheckBox</b>]</span></td></tr>
+<tr><td>Checkbox Group</td><td><span style="color:red;background-color:white">
+ [<b>Expression Error:5</b>, Found in tag <b>CheckBoxGroup</b>]</span><span style="color:red;background-color:white">
+ [<b>Expression Error:5</b>, Found in tag <b>CheckBoxGroup</b>]</span></td></tr>
+<tr><td>Radio Group</td><td><span style="color:red;background-color:white">
+ [<b>Expression Error:6</b>, Found in tag <b>RadioButtonGroup</b>]</span><span style="color:red;background-color:white">
+ [<b>Expression Error:6</b>, Found in tag <b>RadioButtonGroup</b>]</span></td></tr>
+<tr><td>Select</td><td><span style="color:red;background-color:white">
+ [<b>Expression Error:7</b>, Found in tag <b>Select</b>]</span></td></tr>
+</table>
+</form>
+<hr />
+<div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th rowspan="2">1</th><th rowspan="2">Hidden</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.hidden}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.hidden}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "hidden" on object of type "class errors.htmlExpression.Controller"</td></tr>
+<tr><th rowspan="2">2</th><th rowspan="2">TextBox</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.tbDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.tbDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "tbDataSource" on object of type "class errors.htmlExpression.Controller"</td></tr>
+<tr><th rowspan="2">3</th><th rowspan="2">TextArea</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.taDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.taDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "taDataSource" on object of type "class errors.htmlExpression.Controller"</td></tr>
+<tr><th rowspan="2">4</th><th rowspan="2">CheckBox</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.cbDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.cbDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "cbDataSource" on object of type "class errors.htmlExpression.Controller"</td></tr>
+<tr><th rowspan="2">5</th><th rowspan="2">CheckBoxGroup</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.cbgDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.cbgDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "cbgDataSource" on object of type "class errors.htmlExpression.Controller"</td></tr>
+<tr><th rowspan="2">6</th><th rowspan="2">RadioButtonGroup</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.rgDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.rgDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "rgDataSource" on object of type "class errors.htmlExpression.Controller"</td></tr>
+<tr><th rowspan="2">7</th><th rowspan="2">Select</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.sDataSource}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.sDataSource}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "sDataSource" on object of type "class errors.htmlExpression.Controller"</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 09:39:30.579 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ImageAnchorActions.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ImageAnchorActions.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,535 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>ImageAnchorActions</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>07 Jul 2004, 02:53:34.173 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/imageAnchorActions/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <h4>Databinding to ImageAnchor</h4>
+    <p style="color:green">
+    This tests demonstrates the ability to bind to an ImageAnchor.  The <b>action</b> and <b>source</b> are databound
+    (within a repeater).  When these links are pressed, we go back to this page and the last action should be set.
+    On the bottom of the page is a link to a set of errors.
+    </p>
+    <hr>
+    <h4>Image Repeater</h4>
+    <ul>
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionOne.do"><img src="/coreWeb/resources/images/back.gif"></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionTwo.do"><img src="/coreWeb/resources/images/cancel.gif"></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionThree.do"><img src="/coreWeb/resources/images/details.gif"></a>
+                </li>
+            </ul>
+    <b>Last Action:</b><span>begin</span><br>
+    <hr>
+    <a href="/coreWeb/tags/imageAnchorActions/goErrors.do">Errors</a><br>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/imageAnchorActions/ActionOne.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>59D839FB6206CCBBE07A1676BDC20B6C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=59D839FB6206CCBBE07A1676BDC20B6C; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <h4>Databinding to ImageAnchor</h4>
+    <p style="color:green">
+    This tests demonstrates the ability to bind to an ImageAnchor.  The <b>action</b> and <b>source</b> are databound
+    (within a repeater).  When these links are pressed, we go back to this page and the last action should be set.
+    On the bottom of the page is a link to a set of errors.
+    </p>
+    <hr>
+    <h4>Image Repeater</h4>
+    <ul>
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionOne.do"><img src="/coreWeb/resources/images/back.gif"></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionTwo.do"><img src="/coreWeb/resources/images/cancel.gif"></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionThree.do"><img src="/coreWeb/resources/images/details.gif"></a>
+                </li>
+            </ul>
+    <b>Last Action:</b><span>ActionOne</span><br>
+    <hr>
+    <a href="/coreWeb/tags/imageAnchorActions/goErrors.do">Errors</a><br>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/imageAnchorActions/ActionTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>59D839FB6206CCBBE07A1676BDC20B6C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=59D839FB6206CCBBE07A1676BDC20B6C; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <h4>Databinding to ImageAnchor</h4>
+    <p style="color:green">
+    This tests demonstrates the ability to bind to an ImageAnchor.  The <b>action</b> and <b>source</b> are databound
+    (within a repeater).  When these links are pressed, we go back to this page and the last action should be set.
+    On the bottom of the page is a link to a set of errors.
+    </p>
+    <hr>
+    <h4>Image Repeater</h4>
+    <ul>
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionOne.do"><img src="/coreWeb/resources/images/back.gif"></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionTwo.do"><img src="/coreWeb/resources/images/cancel.gif"></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionThree.do"><img src="/coreWeb/resources/images/details.gif"></a>
+                </li>
+            </ul>
+    <b>Last Action:</b><span>ActionTwo</span><br>
+    <hr>
+    <a href="/coreWeb/tags/imageAnchorActions/goErrors.do">Errors</a><br>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/imageAnchorActions/ActionThree.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>59D839FB6206CCBBE07A1676BDC20B6C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=59D839FB6206CCBBE07A1676BDC20B6C; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <h4>Databinding to ImageAnchor</h4>
+    <p style="color:green">
+    This tests demonstrates the ability to bind to an ImageAnchor.  The <b>action</b> and <b>source</b> are databound
+    (within a repeater).  When these links are pressed, we go back to this page and the last action should be set.
+    On the bottom of the page is a link to a set of errors.
+    </p>
+    <hr>
+    <h4>Image Repeater</h4>
+    <ul>
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionOne.do"><img src="/coreWeb/resources/images/back.gif"></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionTwo.do"><img src="/coreWeb/resources/images/cancel.gif"></a>
+                </li>
+            
+                <li>
+                <a href="/coreWeb/tags/imageAnchorActions/ActionThree.do"><img src="/coreWeb/resources/images/details.gif"></a>
+                </li>
+            </ul>
+    <b>Last Action:</b><span>ActionThree</span><br>
+    <hr>
+    <a href="/coreWeb/tags/imageAnchorActions/goErrors.do">Errors</a><br>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/imageAnchorActions/goErrors.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>59D839FB6206CCBBE07A1676BDC20B6C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=59D839FB6206CCBBE07A1676BDC20B6C; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <h4>Databinding Error in ImageAnchor</h4>
+    <p style="color:green">
+    The following two links contain errors.  These errors are for databinding to an invalid action and a
+    null object.  These should both report errors at the bottom of the page.  These errors will differ.
+    </p>
+    <hr>
+        Invalid Action:<span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>ImageAnchor</b>]</span><br>
+        Null Action:<span style="color:red;background-color:white">
+ [<b>Tag Error:2</b>, Found in tag <b>ImageAnchor</b>]</span><br>
+        <hr>
+        <a href="/coreWeb/tags/imageAnchorActions/ActionTwo.do">Home</a><br>
+        </p>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>ImageAnchor</th><th>Message</th><td>Action 'invalidAction' is not a valid action.</td></tr>
+<tr><th>2</th><th>ImageAnchor</th><th>Message</th><td>Action was resolved as "", this is probably the result of an expression bound to a null Object.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>07 Jul 2004, 02:53:36.016 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>5</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>5</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/IteratorTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/IteratorTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>IteratorTest</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:08:47.343 AM MST</startDate>
+  <description>Make sure that console Warning are issued.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/iteratorTests/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7e26</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Test of Iterators</title>
+</head>
+<body>
+<h4>Test of Iterators</h4>
+<form name="form" action="/coreWeb/tags/iteratorTests/postback.do" method="post">
+Select: 
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}"></select>
+<br />
+CheckBoxGroup:
+   <input type="hidden" name="wlw-checkbox_group_key:{pageFlow.checkGroup}OldValue" value="true">
+<br />
+RadioButtonGroup: 
+   <br />
+<br/>
+<input type="submit" value="Submit">
+</form>
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:08:49.185 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest49.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest49.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,627 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>JpfScopedFormsTest49</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:20:52.997 AM MST</startDate>
+  <description>This tests various aspects of Page Flow Scoped forms.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test49/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76b4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/jpfScopedForms/test49/action1.do" method="post">
+            <font color="blue">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <font color="green">
+               Do not change any value just press Continue...
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test49/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76b4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/jpfScopedForms/test49/action2.do" method="post">
+            <font color="blue">
+               String 1: <span>Jpf1 value 1</span>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <span>Jpf1 value 2</span>
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test49/action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76b4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/jpfScopedForms/test49/action3.do" method="post">
+            <font color="blue">
+               String 1: <input type="text" name="{actionForm.string1}" value="Jpf1 value 1">
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <input type="text" name="{actionForm.string2}" value="Jpf1 value 2">
+            </font>
+            <br/><br/>
+            <font color="green">
+               Do not change any value just press Continue...
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test49/action3.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>Jpf1 value 1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>Jpf1 value 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>75</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76b4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test49</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test49 - Jsp4.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/><br/>
+            <a href="/coreWeb/jpfScopedForms/test49/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test49/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76b4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:20:56.622 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest51.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest51.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>JpfScopedFormsTest51</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:20:56.893 AM MST</startDate>
+  <description>Tests the form= attribute and it's effect on what instance of a formbean an action will receive.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test51/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76ac</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test51</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test51 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/jpfScopedForms/test51/action1.do" method="post">
+            <font color="blue">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test51/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76ac</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test51</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test51 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/jpfScopedForms/test51/finish.do" method="post">
+            <font color="blue">
+               String 1: <span>String 1 value</span>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <span>String 2 value</span>
+            </font>
+            <br/><br/>
+            <input type="submit" value="Finish...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test51/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76ac</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:20:59.146 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest55.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest55.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,660 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>JpfScopedFormsTest55</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:20:59.436 AM MST</startDate>
+  <description>This test checks to see if the jpf:validation-error-forward anotation effects PageFlow scoped forms.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test55/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76a6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test55</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test55 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Page Flow Scoped Forms
+         </font></h3>
+         <br/>
+         <form name="formB" action="/coreWeb/jpfScopedForms/test55/action1.do" method="post">
+            String 1:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <font color="green">
+               First time you see this page just press return.  You will be
+               returned to this page with an error message.
+               <br/>
+               Then change the values of the two strings and press Continue.
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+
+         
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test55/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76a6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test55</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test55 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Page Flow Scoped Forms
+         </font></h3>
+         <br/>
+         <form name="formB" action="/coreWeb/jpfScopedForms/test55/action1.do" method="post">
+            String 1:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <font color="green">
+               First time you see this page just press return.  You will be
+               returned to this page with an error message.
+               <br/>
+               Then change the values of the two strings and press Continue.
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+
+         <br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+<li class="error">Please change the values of String 1 & String 2.</li>
+</ul></td></tr></table>
+
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test55/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>New Value 1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>New Value 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>73</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76a6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test55</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test55 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Page Flow Scoped Forms
+         </font></h3>
+         <br/>
+         <form name="formB" action="/coreWeb/jpfScopedForms/test55/action2.do" method="post">
+            String 1:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="New Value 1">
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="New Value 2">
+            </font>
+            <br/><br/>
+            <font color="green">
+               Do not change the values above, just press continue.
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+
+         
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test55/action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>New Value 1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>New Value 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>73</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76a6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test55</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test55 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <br/>
+            <a href="/coreWeb/jpfScopedForms/test55/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test55/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76a6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:21:02.551 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest59.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JpfScopedFormsTest59.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>JpfScopedFormsTest59</sessionName>
+  <tester>s</tester>
+  <startDate>25 Mar 2004, 12:21:02.831 AM MST</startDate>
+  <description>Test that forwarding directly from one action to another does not repost the form values from the current request.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test59/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-769e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test59</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test59 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/jpfScopedForms/test59/action1.do" method="post">
+            <font color="blue">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <font color="green">
+               Change the value of both of the fields above, then press
+               Continue.
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test59/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>New 1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>New 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>61</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-769e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>JpfScopedForms Test59</title>
+   </head>
+   <body>
+      <h3 align="center">JpfScopedForms Test59 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3>
+            Testing page flow scoped forms.
+         </h3>
+         <br/>
+         <form name="formA" action="/coreWeb/jpfScopedForms/test59/action1.do" method="post">
+            <font color="blue">
+               String 1: <span>New 1</span>
+            </font>
+            <br/>
+
+            <font color="blue">
+               String 2: <span>New 2</span>
+            </font>
+            <br/><br/>
+            <font color="green">
+               The values should be the values you entered on page 1.  If they
+               are not the test has failed.
+            </font>
+         </form>
+         <br/><br/>
+         <a href="/coreWeb/jpfScopedForms/test59/finish.do">Finish...</a>
+
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/jpfScopedForms/test59/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-769e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:21:04.904 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsAllScript.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsAllScript.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1694 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>JsAllScript</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 01:01:27.884 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScript/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScript/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScript/begin.do">&lt;img src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">&lt;/a>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/foobar.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Submit pageFlow.action("Foo")</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>105</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScript/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Submit pageFlow.action(&quot;Foo&quot;)</span> <br /><br />
+        LastName: <span>1</span><br />
+        FirstName: <span>1</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScript/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScript/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScript/begin.do">&lt;img src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">&lt;/a>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/baz.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Submit Baz</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>78</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScript/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Submit Baz</span> <br /><br />
+        LastName: <span>2</span><br />
+        FirstName: <span>2</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScript/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScript/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScript/begin.do">&lt;img src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">&lt;/a>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/submit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Default Form Submit</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>87</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScript/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Default Form Submit</span> <br /><br />
+        LastName: <span>3</span><br />
+        FirstName: <span>3</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScript/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScript/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScript/begin.do">&lt;img src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">&lt;/a>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/imageSubmit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Submit from ImageAnchor</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>91</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScript/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Submit from ImageAnchor</span> <br /><br />
+        LastName: <span>4</span><br />
+        FirstName: <span>4</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScript/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScript/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScript/begin.do">&lt;img src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">&lt;/a>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>10</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/submit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>x</ses:name>
+                  <ses:value>54</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>y</ses:name>
+                  <ses:value>70</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>66</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScript/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span></span> <br /><br />
+        LastName: <span>5</span><br />
+        FirstName: <span>5</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>11</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScript/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>9787EA87A6339800BB4D12DC51047908</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=9787EA87A6339800BB4D12DC51047908; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72c4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScript/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScript/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScript/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScript/begin.do">&lt;img src="/coreWeb/javascript/jsAllScript/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScript/../../images/godzillaRollover.gif')">&lt;/a>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 01:01:30.508 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>11</ses:testCount>
+   <ses:passedCount>5</ses:passedCount>
+   <ses:failedCount>6</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsAllScriptHtml.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsAllScriptHtml.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1744 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>JsAllScriptHtml</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 01:01:30.568 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;p>
+            &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScriptHtml/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScriptHtml/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">&lt;img src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">&lt;/a>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/foobar.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Submit pageFlow.action("Foo")</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>105</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Submit pageFlow.action(&quot;Foo&quot;)</span> <br /><br />
+        LastName: <span>1</span><br />
+        FirstName: <span>1</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;p>
+            &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScriptHtml/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScriptHtml/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">&lt;img src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">&lt;/a>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/baz.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Submit Baz</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>78</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Submit Baz</span> <br /><br />
+        LastName: <span>2</span><br />
+        FirstName: <span>2</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;p>
+            &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScriptHtml/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScriptHtml/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">&lt;img src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">&lt;/a>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/submit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Default Form Submit</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>87</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Default Form Submit</span> <br /><br />
+        LastName: <span>3</span><br />
+        FirstName: <span>3</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;p>
+            &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScriptHtml/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScriptHtml/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">&lt;img src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">&lt;/a>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Submit from ImageAnchor</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>91</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Submit from ImageAnchor</span> <br /><br />
+        LastName: <span>4</span><br />
+        FirstName: <span>4</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>9</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;p>
+            &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScriptHtml/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScriptHtml/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">&lt;img src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">&lt;/a>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>10</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/submit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>x</ses:name>
+                  <ses:value>41</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>y</ses:name>
+                  <ses:value>55</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>66</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>10</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span></span> <br /><br />
+        LastName: <span>5</span><br />
+        FirstName: <span>5</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>11</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsAllScriptHtml/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>8B26A460E0E70EBF7762B265843D63C4</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=8B26A460E0E70EBF7762B265843D63C4; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72b6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>11</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;p>
+            &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsAllScriptHtml/submit.do" method="post">
+                &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                
+                &lt;a href="/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsAllScriptHtml/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsAllScriptHtml/./../../resources/images/bar-background.gif">&lt;/a>
+            &amp;nbsp;
+            &lt;input type="image" src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;br/>
+        &lt;a href="/coreWeb/javascript/jsAllScriptHtml/begin.do">&lt;img src="/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsAllScriptHtml/../../images/godzillaRollover.gif')">&lt;/a>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 01:01:32.381 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>11</ses:testCount>
+   <ses:passedCount>5</ses:passedCount>
+   <ses:failedCount>6</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsFind.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsFind.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,673 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>JsFind</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>30 Jun 2004, 05:14:31.940 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsFind/JsFind.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-5db3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="typeBean" action="/coreWeb/javascript/jsFind/postForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td>Type:&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+&lt;select name="wlw-select_key:{actionForm.type}">
+&lt;option value="value1">Foo Value&lt;/option>
+&lt;option value="value2">Bar Value&lt;/option>
+&lt;option value="value3">Baz Value&lt;/option>&lt;/select>
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;br/>&amp;nbsp;
+            &lt;input type="submit" value="postForm">
+        &lt;/form>
+        &lt;hr />
+        Type: &lt;span>&lt;/span>
+    &lt;script language="JavaScript" type="text/JavaScript">
+        var name = getNetuiTagName("select");
+        document.writeln("&lt;br/>Select Name:" + name + "&lt;br/>");
+        var select = document.getElementById(name);
+        document.writeln("Select:" + select.selectedIndex);
+    &lt;/script>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.select="wlw-select_key:{actionForm.type}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsFind/postForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.type}</ses:name>
+                  <ses:value>value2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.type}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>97</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-5db3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="typeBean" action="/coreWeb/javascript/jsFind/postForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td>Type:&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+&lt;select name="wlw-select_key:{actionForm.type}">
+&lt;option value="value1">Foo Value&lt;/option>
+&lt;option value="value2" selected>Bar Value&lt;/option>
+&lt;option value="value3">Baz Value&lt;/option>&lt;/select>
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;br/>&amp;nbsp;
+            &lt;input type="submit" value="postForm">
+        &lt;/form>
+        &lt;hr />
+        Type: &lt;span>value2&lt;/span>
+    &lt;script language="JavaScript" type="text/JavaScript">
+        var name = getNetuiTagName("select");
+        document.writeln("&lt;br/>Select Name:" + name + "&lt;br/>");
+        var select = document.getElementById(name);
+        document.writeln("Select:" + select.selectedIndex);
+    &lt;/script>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.select="wlw-select_key:{actionForm.type}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsFind/postForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.type}</ses:name>
+                  <ses:value>value3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.type}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>97</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-5db3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="typeBean" action="/coreWeb/javascript/jsFind/postForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td>Type:&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+&lt;select name="wlw-select_key:{actionForm.type}">
+&lt;option value="value1">Foo Value&lt;/option>
+&lt;option value="value2">Bar Value&lt;/option>
+&lt;option value="value3" selected>Baz Value&lt;/option>&lt;/select>
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;br/>&amp;nbsp;
+            &lt;input type="submit" value="postForm">
+        &lt;/form>
+        &lt;hr />
+        Type: &lt;span>value3&lt;/span>
+    &lt;script language="JavaScript" type="text/JavaScript">
+        var name = getNetuiTagName("select");
+        document.writeln("&lt;br/>Select Name:" + name + "&lt;br/>");
+        var select = document.getElementById(name);
+        document.writeln("Select:" + select.selectedIndex);
+    &lt;/script>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.select="wlw-select_key:{actionForm.type}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsFind/postForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.type}</ses:name>
+                  <ses:value>value1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.type}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>97</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-5db3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="typeBean" action="/coreWeb/javascript/jsFind/postForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td>Type:&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+&lt;select name="wlw-select_key:{actionForm.type}">
+&lt;option value="value1" selected>Foo Value&lt;/option>
+&lt;option value="value2">Bar Value&lt;/option>
+&lt;option value="value3">Baz Value&lt;/option>&lt;/select>
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;br/>&amp;nbsp;
+            &lt;input type="submit" value="postForm">
+        &lt;/form>
+        &lt;hr />
+        Type: &lt;span>value1&lt;/span>
+    &lt;script language="JavaScript" type="text/JavaScript">
+        var name = getNetuiTagName("select");
+        document.writeln("&lt;br/>Select Name:" + name + "&lt;br/>");
+        var select = document.getElementById(name);
+        document.writeln("Select:" + select.selectedIndex);
+    &lt;/script>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.select="wlw-select_key:{actionForm.type}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 05:14:31.990 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsNoContainers.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/JsNoContainers.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>JsNoContainers</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 01:01:33.312 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsNoContainers/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-72a1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;html>
+    &lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+            &lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsNoContainers/submit.do" method="post">
+                &lt;h4>Form One&lt;/h4>
+                &lt;table class="tablebody">
+                        
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.lastName="{actionForm.lastName}"
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+
+-->
+&lt;/script>
+
+
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.firstName="{actionForm.firstName}"
+-->
+&lt;/script>
+
+
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsNoContainers/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsNoContainers/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+&lt;/script>
+
+
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsNoContainers/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsNoContainers/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsNoContainers/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsNoContainers/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                &lt;br />
+                &lt;a href="/coreWeb/javascript/jsNoContainers/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsNoContainers/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsNoContainers/./../../resources/images/bar-background.gif">&lt;/a>
+                &amp;nbsp;
+                
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+-->
+&lt;/script>
+
+&lt;input type="image" src="/coreWeb/javascript/jsNoContainers/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsNoContainers/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsNoContainers/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+
+           &lt;hr />
+
+        &lt;a href="/coreWeb/javascript/jsNoContainers/begin.do">&lt;img src="/coreWeb/javascript/jsNoContainers/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsNoContainers/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsNoContainers/../../images/godzillaRollover.gif')">&lt;/a>
+            &lt;script language="JavaScript" type="text/JavaScript">
+                document.writeln("&lt;br/>Get Name&lt;br/>");
+                var name = getNetuiTagName("firstName");
+                document.writeln("Name:" + name + "&lt;br/>");
+                name = getNetuiTagName("lastName");
+                document.writeln("Name:" + name + "&lt;br/>");
+            &lt;/script>
+    &lt;/body>
+&lt;html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 01:01:34.133 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Jsp20ElSmokeTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Jsp20ElSmokeTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Jsp20ElSmokeTest</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>14 Apr 2004, 01:25:54.514 PM MDT</startDate>
+  <description>Test the use of JSP 2.0 EL to round-trip data inside of a form for a POST.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/jsp20el/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>A9PrZLOH3E4D9RTCntIlQ11PbzOqplYdpBrF84whbmPFFmDC6aq5!672712777</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=A9PrZLOH3E4D9RTCntIlQ11PbzOqplYdpBrF84whbmPFFmDC6aq5!672712777</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+    <p>
+      New Web Application Page
+      <br/>
+      <br/>
+      <form name="postbackForm" action="/coreWeb/databinding/jsp20el/postback.do" method="post">
+          <input type="text" name="${actionForm.text}" value="">
+          <br/>
+          <br/>
+          <input type="submit" value="Submit">
+      </form>
+      <br/>
+      A page input: <span>Some Page Input</span><br/>
+      A request attr: <span></span><br/>
+      <br/>
+    </p>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/jsp20el/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>${actionForm.text}</name>
+          <value>this should work?!?</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>A9PrZLOH3E4D9RTCntIlQ11PbzOqplYdpBrF84whbmPFFmDC6aq5!672712777</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>50</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=A9PrZLOH3E4D9RTCntIlQ11PbzOqplYdpBrF84whbmPFFmDC6aq5!672712777</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/databinding/jsp20el/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+    <p>
+      New Web Application Page
+      <br/>
+      <br/>
+      <form name="postbackForm" action="/coreWeb/databinding/jsp20el/postback.do" method="post">
+          <input type="text" name="${actionForm.text}" value="this should work?!?">
+          <br/>
+          <br/>
+          <input type="submit" value="Submit">
+      </form>
+      <br/>
+      A page input: <span>Some Page Input</span><br/>
+      A request attr: <span>this should work?!?</span><br/>
+      <br/>
+    </p>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>14 Apr 2004, 01:26:31.147 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelDefaultValues.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelDefaultValues.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>LabelDefaultValues</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:24:10.867 PM MST</startDate>
+  <description>Test of Entities inside label.defaultValue</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/labelDefaultValues/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7dec</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    [nbsp]: '<span>&nbsp;</span>'<br />
+    amp: '<span>&amp;</span>'<br />
+    &amp;nbsp: '<span>&amp;nbsp;</span>'<br />
+    &amp;amp: '<span>&amp;amp</span>'<br />
+    foo[copy]: '<span>foo &copy;</span>'<br />
+    foo[nbsp nbsp]bar: '<span>foo&nbsp;&nbsp;bar</span>'<br />
+    [nbsp]: '<span>&#160;</span>'<br />
+    spacer: '<span>&nbsp;</span>'<br />
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:24:12.569 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelDefaults.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelDefaults.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>LabelDefaults</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>06 Jul 2004, 04:11:03.191 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/labelDefaults/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>974C06A2DB9A00BF6D5D75397C9FAEB8</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=974C06A2DB9A00BF6D5D75397C9FAEB8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-63135ed:fd967e87cd:-7c27</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Label Default Values
+        </title>
+    </head>
+    <body>
+    <h4>Label Default Values</h4>
+    <p style="color:green">
+    This test has a set of labels which bind to an object that has a value of null.  In each case we will then bind
+    to the default value, if it exists.  When nothing at all is found, the empty string is output.  This happens
+    in the first an last test of each group.  The first doesn't specify a defaultValue.  The last maps to a defaultValue
+    value bound to null.  The middle two, bind to a literal in the tag and a value in the page flow.
+    </p>
+    <hr>
+    <table cellspacing="0" border="1" cellpadding="3">
+
+    <tr><td>Null Object/No Default</td><td><span></span></td></tr>
+    <tr><td>Null Object/Default</td><td><span>[NULL]</span></td></tr>
+    <tr><td>Null Object/Bound Default</td><td><span>[NULL - In PageFlow]</span></td></tr>
+    <tr><td>Null Object/Bound Null Default</td><td><span></span></td></tr>
+
+    <tr><td>Null Object, Date Formatter/No Default</td><td><span></span></td></tr>
+    <tr><td>Null Object, Date Formatter/Default</td><td><span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Label</b>]</span></td></tr>
+    <tr><td>Null Object, Date Formatter/Bound Default</td><td><span>06/01/2003</span></td></tr>
+    <tr><td>Null Object, Date Formatter/Bound Null Default</td><td><span></span></td></tr>
+    </table>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Label</th><th>Message</th><td>The String "[NULL]" is not in an understood date format.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>06 Jul 2004, 04:11:04.313 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelLiteral.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelLiteral.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>LabelLiteral</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:24:13.200 PM MST</startDate>
+  <description>Test that the escapeWhiteSpaceForHtml attribute works on the label</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/labelLiteral/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7de8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>Default</h4>
+        <span>&lt;foo&gt;<br /> &nbsp;&lt;bar&gt;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content<br /> &nbsp;&nbsp;&lt;/bar&gt;<br />&lt;/foo&gt;</span>
+        <hr />
+        <h4>escapeWhiteSpaceForHtml=true</h4>
+        <span>&lt;foo&gt;<br /> &nbsp;&lt;bar&gt;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content<br /> &nbsp;&nbsp;&lt;/bar&gt;<br />&lt;/foo&gt;</span>
+        <hr />
+        <h4>escapeWhiteSpaceForHtml=false</h4>
+        <span>&lt;foo&gt;
+  &lt;bar&gt;
+      Content
+   &lt;/bar&gt;
+&lt;/foo&gt;</span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:24:14.812 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelStyles.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LabelStyles.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>LabelStyles</sessionName>
+  <tester>Daryl</tester>
+  <startDate>13 Dec 2002, 12:08:48.421 PM MST</startDate>
+  <description>Test of the Style and StyleClass attributes</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/labelStyles/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>96wndnwLtvwN0n3gL7rLDyagTqYb1Op5gDYCxZOKe9eO01Kfent2!-1126332125</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=96wndnwLtvwN0n3gL7rLDyagTqYb1Op5gDYCxZOKe9eO01Kfent2!-1126332125</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Content and Literal</title>
+<style>
+.blue {color: blue}
+.red {color: red}
+</style>
+</head>
+<body>
+<h4>Content And Literal</h4>
+<h4>Label With Style Attributes</h4>
+text [<span style="color:blue">Some Text</span>]<br />
+text 2 [<span style="color:red">Some Additional Text</span>]<br />
+html [<span style="color:blue">&lt;b&gt;Bold Text&lt;/b&gt;</span>]<br />
+<h4>Label With Styles</h4>
+text [<span class="red">Some Text</span>]<br />
+text 2 [<span class="blue">Some Additional Text</span>]<br />
+html [<span class="red">&lt;b&gt;Bold Text&lt;/b&gt;</span>]<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>13 Dec 2002, 12:09:11.574 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Lifecycle.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Lifecycle.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Lifecycle</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>03 Jul 2004, 04:30:15.265 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/lifecycle/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>3AE3C9E203F0C3C242285C31B3545AA6</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=3AE3C9E203F0C3C242285C31B3545AA6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-16471f64:fd871d6f4e:-7c3f</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Lifecycle</title>
+</head>
+<body>
+<h4>Lifecycle</h4>
+<p style="color:green">
+This test will create appends a value to a global variable stored in the globalApp for each lifecycle event.
+When you go to the results page, it will call an action in globalApp which will forward to the <b>results/Controller.jpf</b> which
+displays that global variable.
+</p>
+<a href="/coreWeb/miniTests/lifecycle/postback.do">Postback</a>
+<a href="/coreWeb/miniTests/lifecycle/globalAction_results.do">Results</a>
+<hr />
+onCreate<br />beforeAction<br />begin<br />afterAction<br />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/lifecycle/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>3AE3C9E203F0C3C242285C31B3545AA6</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=3AE3C9E203F0C3C242285C31B3545AA6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-16471f64:fd871d6f4e:-7c3f</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Lifecycle</title>
+</head>
+<body>
+<h4>Lifecycle</h4>
+<p style="color:green">
+This test will create appends a value to a global variable stored in the globalApp for each lifecycle event.
+When you go to the results page, it will call an action in globalApp which will forward to the <b>results/Controller.jpf</b> which
+displays that global variable.
+</p>
+<a href="/coreWeb/miniTests/lifecycle/postback.do">Postback</a>
+<a href="/coreWeb/miniTests/lifecycle/globalAction_results.do">Results</a>
+<hr />
+onCreate<br />beforeAction<br />begin<br />afterAction<br />beforeAction<br />postback<br />afterAction<br />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/lifecycle/globalAction_results.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>3AE3C9E203F0C3C242285C31B3545AA6</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=3AE3C9E203F0C3C242285C31B3545AA6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-16471f64:fd871d6f4e:-7c3f</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>results</title>
+</head>
+<body>
+<h2>results</h2>
+<p style="color:green">
+This displays the contents of the global property <b>globalApp.results</b>.  The Lifecycle test calls this PageFlow through
+the globalApp so that is can capture the onDestroy event within the lifecycle.
+</p>
+<hr />
+onCreate<br />beforeAction<br />begin<br />afterAction<br />beforeAction<br />postback<br />afterAction<br />onDestroy<br />onDestroy<br />
+<hr />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>03 Jul 2004, 04:30:16.707 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>3</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LifecycleExceptions.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LifecycleExceptions.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,851 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>LifecycleExceptions</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:24:21.782 PM MST</startDate>
+  <description>Test of exceptions in the page flow lifecycle methods.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/lifecycleExceptions/lifecycleExceptionsController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Exceptions in Lifecycle Methods
+        </title>
+    </head>
+    <body>
+        <h3>Exceptions in Lifecycle Methods</h3>
+        
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInBeforeAction.do">throw in beforeAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAction.do">throw in an action</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAfterAction.do">throw in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwEverywhere.do">throw in the action and in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/noThrow.do">don't throw anything</a>
+        <br>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>onCreate</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$OnCreateException</span>
+                        (<span>[onCreate]</span>)</li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/lifecycleExceptions/throwInBeforeAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Exceptions in Lifecycle Methods
+        </title>
+    </head>
+    <body>
+        <h3>Exceptions in Lifecycle Methods</h3>
+        
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInBeforeAction.do">throw in beforeAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAction.do">throw in an action</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAfterAction.do">throw in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwEverywhere.do">throw in the action and in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/noThrow.do">don't throw anything</a>
+        <br>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>onCreate</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$OnCreateException</span>
+                        (<span>[onCreate]</span>)</li>
+            
+                <li><span>beforeAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$BeforeActionException</span>
+                        (<span>throwInBeforeAction</span>)</li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/lifecycleExceptions/throwInAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Exceptions in Lifecycle Methods
+        </title>
+    </head>
+    <body>
+        <h3>Exceptions in Lifecycle Methods</h3>
+        
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInBeforeAction.do">throw in beforeAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAction.do">throw in an action</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAfterAction.do">throw in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwEverywhere.do">throw in the action and in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/noThrow.do">don't throw anything</a>
+        <br>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>onCreate</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$OnCreateException</span>
+                        (<span>[onCreate]</span>)</li>
+            
+                <li><span>beforeAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$BeforeActionException</span>
+                        (<span>throwInBeforeAction</span>)</li>
+            
+                <li><span>action method</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$ActionMethodException</span>
+                        (<span>throwInAction</span>)</li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/lifecycleExceptions/throwInAfterAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Exceptions in Lifecycle Methods
+        </title>
+    </head>
+    <body>
+        <h3>Exceptions in Lifecycle Methods</h3>
+        
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInBeforeAction.do">throw in beforeAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAction.do">throw in an action</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAfterAction.do">throw in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwEverywhere.do">throw in the action and in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/noThrow.do">don't throw anything</a>
+        <br>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>onCreate</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$OnCreateException</span>
+                        (<span>[onCreate]</span>)</li>
+            
+                <li><span>beforeAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$BeforeActionException</span>
+                        (<span>throwInBeforeAction</span>)</li>
+            
+                <li><span>action method</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$ActionMethodException</span>
+                        (<span>throwInAction</span>)</li>
+            
+                <li><span>afterAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$AfterActionException</span>
+                        (<span>throwInAfterAction</span>)</li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/lifecycleExceptions/throwEverywhere.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Exceptions in Lifecycle Methods
+        </title>
+    </head>
+    <body>
+        <h3>Exceptions in Lifecycle Methods</h3>
+        
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInBeforeAction.do">throw in beforeAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAction.do">throw in an action</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAfterAction.do">throw in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwEverywhere.do">throw in the action and in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/noThrow.do">don't throw anything</a>
+        <br>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>onCreate</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$OnCreateException</span>
+                        (<span>[onCreate]</span>)</li>
+            
+                <li><span>beforeAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$BeforeActionException</span>
+                        (<span>throwInBeforeAction</span>)</li>
+            
+                <li><span>action method</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$ActionMethodException</span>
+                        (<span>throwInAction</span>)</li>
+            
+                <li><span>afterAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$AfterActionException</span>
+                        (<span>throwInAfterAction</span>)</li>
+            
+                <li><span>action method</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$ActionMethodException</span>
+                        (<span>throwEverywhere</span>)</li>
+            
+                <li><span>afterAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$AfterActionException</span>
+                        (<span>throwEverywhere</span>)</li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/lifecycleExceptions/noThrow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7dda</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Exceptions in Lifecycle Methods
+        </title>
+    </head>
+    <body>
+        <h3>Exceptions in Lifecycle Methods</h3>
+        
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInBeforeAction.do">throw in beforeAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAction.do">throw in an action</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwInAfterAction.do">throw in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/throwEverywhere.do">throw in the action and in afterAction()</a><br>
+        <a href="/coreWeb/miniTests/lifecycleExceptions/noThrow.do">don't throw anything</a>
+        <br>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>onCreate</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$OnCreateException</span>
+                        (<span>[onCreate]</span>)</li>
+            
+                <li><span>beforeAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$BeforeActionException</span>
+                        (<span>throwInBeforeAction</span>)</li>
+            
+                <li><span>action method</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$ActionMethodException</span>
+                        (<span>throwInAction</span>)</li>
+            
+                <li><span>afterAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$AfterActionException</span>
+                        (<span>throwInAfterAction</span>)</li>
+            
+                <li><span>action method</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$ActionMethodException</span>
+                        (<span>throwEverywhere</span>)</li>
+            
+                <li><span>afterAction</span>
+                        threw a <span>miniTests.lifecycleExceptions.lifecycleExceptionsController$AfterActionException</span>
+                        (<span>throwEverywhere</span>)</li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:24:27.290 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>6</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>6</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LinkNav.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LinkNav.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>NavTest</sessionName>
+  <tester>Daryl</tester>
+  <startDate>08 Nov 2002, 10:11:26.780 AM MST</startDate>
+  <description>Navigation in page flows with anchors.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/linkNav/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9LwkCLT2s3Lg15G3ZQ1Jy6gi1rEmyoxqVFLb13jsZ4gdYJCBQjOb!2084941571</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9LwkCLT2s3Lg15G3ZQ1Jy6gi1rEmyoxqVFLb13jsZ4gdYJCBQjOb!2084941571</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Link Submit</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/linkNav/linkOne.do">Link One</a>
+<a href="/coreWeb/miniTests/linkNav/linkTwo.do">Link Two</a>
+<br />
+Last Action: <span>begin</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/linkNav/linkOne.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9LwkCLT2s3Lg15G3ZQ1Jy6gi1rEmyoxqVFLb13jsZ4gdYJCBQjOb!2084941571</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9LwkCLT2s3Lg15G3ZQ1Jy6gi1rEmyoxqVFLb13jsZ4gdYJCBQjOb!2084941571</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/linkNav/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Link Submit</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/linkNav/linkOne.do">Link One</a>
+<a href="/coreWeb/miniTests/linkNav/linkTwo.do">Link Two</a>
+<br />
+Last Action: <span>linkOne</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/linkNav/linkTwo.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9LwkCLT2s3Lg15G3ZQ1Jy6gi1rEmyoxqVFLb13jsZ4gdYJCBQjOb!2084941571</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9LwkCLT2s3Lg15G3ZQ1Jy6gi1rEmyoxqVFLb13jsZ4gdYJCBQjOb!2084941571</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/linkNav/linkOne.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Link Submit</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/linkNav/linkOne.do">Link One</a>
+<a href="/coreWeb/miniTests/linkNav/linkTwo.do">Link Two</a>
+<br />
+Last Action: <span>linkTwo</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/linkNav/linkOne.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9LwkCLT2s3Lg15G3ZQ1Jy6gi1rEmyoxqVFLb13jsZ4gdYJCBQjOb!2084941571</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9LwkCLT2s3Lg15G3ZQ1Jy6gi1rEmyoxqVFLb13jsZ4gdYJCBQjOb!2084941571</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/linkNav/linkTwo.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Link Submit</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/linkNav/linkOne.do">Link One</a>
+<a href="/coreWeb/miniTests/linkNav/linkTwo.do">Link Two</a>
+<br />
+Last Action: <span>linkOne</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>08 Nov 2002, 10:11:45.206 AM MST</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LocaleOverrideTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/LocaleOverrideTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>LocaleOverrideTest</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>11 Sep 2003, 10:08:27.529 AM MDT</startDate>
+  <description>Test an override of the Locale object.  This is done by setting a Struts attribute in the session and rendering a message based on this in the JSP.  Then, it is reset to the original value.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/i18n/localeOverride/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gdG5PfQkLjufy7IfI1xDYfg1cHzudNOvGVQLkN4nsKknvzwOgGH!-960229041</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gdG5PfQkLjufy7IfI1xDYfg1cHzudNOvGVQLkN4nsKknvzwOgGH!-960229041</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>i18n Override Test</title>
+  </head>
+  <body>
+    <b>i18n Override Test</b>
+<br/>
+<span>Ein message von Deutschland.</span>
+<br/>
+<a href="/coreWeb/i18n/localeOverride/resetLocale.do">Reset Locale</a>
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/i18n/localeOverride/resetLocale.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gdG5PfQkLjufy7IfI1xDYfg1cHzudNOvGVQLkN4nsKknvzwOgGH!-960229041</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gdG5PfQkLjufy7IfI1xDYfg1cHzudNOvGVQLkN4nsKknvzwOgGH!-960229041</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/i18n/localeOverride/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>i18n Override Test</title>
+  </head>
+  <body>
+    <b>i18n Override Test</b>
+<br/>
+<span>This is message 1 text from bundle1.properties.</span>
+<br/>
+<a href="/coreWeb/i18n/localeOverride/resetLocale.do">Reset Locale</a>
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>11 Sep 2003, 10:08:38.435 AM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Message.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Message.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Message</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 06:45:43.932 PM MST</startDate>
+  <description>Test of Message and MessageArg</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/message/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7d93</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Message Tags</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/tags/message/Begin.jsp">
+</head>
+<body>
+ 
+ 
+ 
+BAZ: <span>Bar of Foo</span><br>
+
+ 
+BAZ: <span>Foo of Bar</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 06:45:46.225 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MessageTagTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MessageTagTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>MessageTagTest</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>20 Mar 2004, 10:01:56.188 AM MST</startDate>
+  <description>Test the message and messageArg tags for creating parameterized messages in a JSP.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/message/message.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ac4SKuw9dNxtaEFFLMGKS3h2WKaiN1TnyeWGfN7Th6bD14FtBhaz!-1017168403</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ac4SKuw9dNxtaEFFLMGKS3h2WKaiN1TnyeWGfN7Th6bD14FtBhaz!-1017168403</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-189e36e1:fb692b5d8a:-7a01</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Message Test</title>
+  </head>
+  <body>
+    <b>Message Test</b>
+
+<!-- TEST 1 -->
+
+
+<br/>
+Test 1: <span>Start Message Arg1 Middle Message Arg2 End Message</span>
+
+<!-- TEST 2 -->
+
+
+<br/>
+Test 2: <span>No Substitution</span>
+
+<!-- TEST 3 -->
+
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Message</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Error formatting message "{-1} {1} {2}".  Cause: negative argument number -1</td></tr>
+</table></span>
+
+<br/>
+Test 3: <span>No Substitution</span>
+
+<!-- TEST 4 -->
+
+
+<br/>
+Test 4: <span>foo</span>
+
+<!-- TEST 5 -->
+
+
+<br/>
+Test 5: <span>start Arg1 middle Arg2 end</span>
+
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>20 Mar 2004, 10:01:57.590 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MiscJpfTest13.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MiscJpfTest13.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,873 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>MiscJpfTest13</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>16 Sep 2003, 06:55:27.421 PM MDT</startDate>
+  <description>Test a pure 100% struts app. running under the PageFlowActionServlet.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/test13/loadStruts.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/test13/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Test13</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Test13 - submit.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         
+      </center>
+
+      <form name="submitForm" method="post" action="/coreWeb/miscJpf/test13/submit.do">
+         <table align="center" width="50%" border="0" >
+            <tr align="center">
+               <td align="right">Last Name:</td>
+               <td align="left"><input type="text" name="lastName" value="John Doe"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Address:</td>
+               <td align="left"><textarea name="address"></textarea></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Sex:</td>
+               <td align="left">
+                  <input type="radio" name="sex" value="M">Male
+                  <input type="radio" name="sex" value="F">Female
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="right">Married:</td>
+               <td align="left"><input type="checkbox" name="married" value="on"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Age:</td>
+               <td align="left"><select name="age"><option value="a">0-19</option>
+                                <option value="b">20-49</option>
+                                <option value="c">50-</option></select>
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="center" colspan="2"><br/><br/><input type="submit" value="Submit"></td>
+            </tr>
+         </table>
+      </form>
+
+      <center>
+         
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/test13/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>address</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>age</name>
+          <value>a</value>
+        </parameter>
+        <parameter>
+          <name>lastName</name>
+          <value>John Doe</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>32</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/test13/loadStruts.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Test13</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Test13 - submit.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h4>Validation Error(s)</h4><ul>
+<li>Please enter your address.  It's required.
+<li>Please enter your sex.  It's required.
+</ul><hr>
+
+      </center>
+
+      <form name="submitForm" method="post" action="/coreWeb/miscJpf/test13/submit.do">
+         <table align="center" width="50%" border="0" >
+            <tr align="center">
+               <td align="right">Last Name:</td>
+               <td align="left"><input type="text" name="lastName" value="John Doe"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Address:</td>
+               <td align="left"><textarea name="address"></textarea></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Sex:</td>
+               <td align="left">
+                  <input type="radio" name="sex" value="M">Male
+                  <input type="radio" name="sex" value="F">Female
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="right">Married:</td>
+               <td align="left"><input type="checkbox" name="married" value="on"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Age:</td>
+               <td align="left"><select name="age"><option value="a" selected="selected">0-19</option>
+                                <option value="b">20-49</option>
+                                <option value="c">50-</option></select>
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="center" colspan="2"><br/><br/><input type="submit" value="Submit"></td>
+            </tr>
+         </table>
+      </form>
+
+      <center>
+         
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/test13/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>address</name>
+          <value>123 street</value>
+        </parameter>
+        <parameter>
+          <name>age</name>
+          <value>a</value>
+        </parameter>
+        <parameter>
+          <name>lastName</name>
+          <value>John Doe</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>42</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/test13/submit.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Test13</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Test13 - submit.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h4>Validation Error(s)</h4><ul>
+<li>Please enter your sex.  It's required.
+</ul><hr>
+
+      </center>
+
+      <form name="submitForm" method="post" action="/coreWeb/miscJpf/test13/submit.do">
+         <table align="center" width="50%" border="0" >
+            <tr align="center">
+               <td align="right">Last Name:</td>
+               <td align="left"><input type="text" name="lastName" value="John Doe"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Address:</td>
+               <td align="left"><textarea name="address">123 street</textarea></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Sex:</td>
+               <td align="left">
+                  <input type="radio" name="sex" value="M">Male
+                  <input type="radio" name="sex" value="F">Female
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="right">Married:</td>
+               <td align="left"><input type="checkbox" name="married" value="on"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Age:</td>
+               <td align="left"><select name="age"><option value="a" selected="selected">0-19</option>
+                                <option value="b">20-49</option>
+                                <option value="c">50-</option></select>
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="center" colspan="2"><br/><br/><input type="submit" value="Submit"></td>
+            </tr>
+         </table>
+      </form>
+
+      <center>
+         
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/test13/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>address</name>
+          <value>123 street</value>
+        </parameter>
+        <parameter>
+          <name>age</name>
+          <value>a</value>
+        </parameter>
+        <parameter>
+          <name>lastName</name>
+          <value>John Doe</value>
+        </parameter>
+        <parameter>
+          <name>sex</name>
+          <value>M</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>48</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/test13/submit.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Test13</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Test13 - submit.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         
+      </center>
+
+      <form name="submitForm" method="post" action="/coreWeb/miscJpf/test13/submit.do">
+         <table align="center" width="50%" border="0" >
+            <tr align="center">
+               <td align="right">Last Name:</td>
+               <td align="left"><input type="text" name="lastName" value="John Doe"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Address:</td>
+               <td align="left"><textarea name="address">123 street</textarea></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Sex:</td>
+               <td align="left">
+                  <input type="radio" name="sex" value="M" checked="checked">Male
+                  <input type="radio" name="sex" value="F">Female
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="right">Married:</td>
+               <td align="left"><input type="checkbox" name="married" value="on"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Age:</td>
+               <td align="left"><select name="age"><option value="a" selected="selected">0-19</option>
+                                <option value="b">20-49</option>
+                                <option value="c">50-</option></select>
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="center" colspan="2"><br/><br/><input type="submit" value="Submit"></td>
+            </tr>
+         </table>
+      </form>
+
+      <center>
+         
+            Hello
+            
+               young
+            
+            
+            JOHN DOE
+         
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/test13/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>address</name>
+          <value>123 street</value>
+        </parameter>
+        <parameter>
+          <name>age</name>
+          <value>a</value>
+        </parameter>
+        <parameter>
+          <name>lastName</name>
+          <value>John Doe</value>
+        </parameter>
+        <parameter>
+          <name>sex</name>
+          <value>F</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>48</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/test13/submit.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Test13</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Test13 - submit.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         
+      </center>
+
+      <form name="submitForm" method="post" action="/coreWeb/miscJpf/test13/submit.do">
+         <table align="center" width="50%" border="0" >
+            <tr align="center">
+               <td align="right">Last Name:</td>
+               <td align="left"><input type="text" name="lastName" value="John Doe"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Address:</td>
+               <td align="left"><textarea name="address">123 street</textarea></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Sex:</td>
+               <td align="left">
+                  <input type="radio" name="sex" value="M">Male
+                  <input type="radio" name="sex" value="F" checked="checked">Female
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="right">Married:</td>
+               <td align="left"><input type="checkbox" name="married" value="on"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Age:</td>
+               <td align="left"><select name="age"><option value="a" selected="selected">0-19</option>
+                                <option value="b">20-49</option>
+                                <option value="c">50-</option></select>
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="center" colspan="2"><br/><br/><input type="submit" value="Submit"></td>
+            </tr>
+         </table>
+      </form>
+
+      <center>
+         
+            Hello
+            
+               young
+            
+            
+            JOHN DOE
+         
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miscJpf/test13/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>address</name>
+          <value>123 street</value>
+        </parameter>
+        <parameter>
+          <name>age</name>
+          <value>c</value>
+        </parameter>
+        <parameter>
+          <name>lastName</name>
+          <value>John Doe</value>
+        </parameter>
+        <parameter>
+          <name>sex</name>
+          <value>F</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>48</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1nwW7qpIvMcEjOmR46JsUnoQl0oeKFvk40Xlgou5W0iuGsCJo9pP!-1959492689</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miscJpf/test13/submit.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>MiscJpf Test13</title>
+   </head>
+   <body>
+      <h3 align="center">MiscJpf Test13 - submit.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         
+      </center>
+
+      <form name="submitForm" method="post" action="/coreWeb/miscJpf/test13/submit.do">
+         <table align="center" width="50%" border="0" >
+            <tr align="center">
+               <td align="right">Last Name:</td>
+               <td align="left"><input type="text" name="lastName" value="John Doe"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Address:</td>
+               <td align="left"><textarea name="address">123 street</textarea></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Sex:</td>
+               <td align="left">
+                  <input type="radio" name="sex" value="M">Male
+                  <input type="radio" name="sex" value="F" checked="checked">Female
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="right">Married:</td>
+               <td align="left"><input type="checkbox" name="married" value="on"></td>
+            </tr>
+            <tr align="center">
+               <td align="right">Age:</td>
+               <td align="left"><select name="age"><option value="a">0-19</option>
+                                <option value="b">20-49</option>
+                                <option value="c" selected="selected">50-</option></select>
+               </td>
+            </tr>
+            <tr align="center">
+               <td align="center" colspan="2"><br/><br/><input type="submit" value="Submit"></td>
+            </tr>
+         </table>
+      </form>
+
+      <center>
+         
+            Hello
+            
+            
+               old
+            
+            JOHN DOE
+         
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>16 Sep 2003, 06:56:19.722 PM MDT</endDate>
+  <testCount>6</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MockPortal.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MockPortal.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1494 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>MockPortal</sessionName>
+  <tester>rich</tester>
+  <startDate>10 Sep 2003, 05:35:29.201 PM MDT</startDate>
+  <description>Tests basic link navigation, form submittal, nesting, return-to, and scoping in our simulated portal.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/MockPortal.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>265121:f78dd78901:-7e33</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal (/mockportal)</title>
+</head>
+
+<h3>Mock Portal (/mockportal)</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>begin</b></font><br>
+<font color="green">Action result URI: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="returnTo1Netui_Form_0" method="post" action="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=input&returnTo1_submit=true">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.foo}" value="init foo"/>
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.bar}" value="init bar"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPage&returnTo1_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideInputs&returnTo1_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideForm&returnTo1_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPage&returnTo1_submit=true">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideInputs&returnTo1_submit=true">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideForm&returnTo1_submit=true">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPage&returnTo1_submit=true">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideInputs&returnTo1_submit=true">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideForm&returnTo1_submit=true">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=goNested&returnTo1_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=begin&returnTo1_submit=true">start over</a>          
+
+        </form>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo2</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>begin</b></font><br>
+<font color="green">Action result URI: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="returnTo2Netui_Form_0" method="post" action="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=input&returnTo2_submit=true">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="returnTo2{actionForm.foo}" value="init foo"/>
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="returnTo2{actionForm.bar}" value="init bar"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPage&returnTo2_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageWithForm&returnTo2_submit=true");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageOverrideInputs&returnTo2_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageOverrideForm&returnTo2_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPage&returnTo2_submit=true">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageWithForm&returnTo2_submit=true");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageOverrideInputs&returnTo2_submit=true">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageOverrideForm&returnTo2_submit=true">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPage&returnTo2_submit=true">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageWithForm&returnTo2_submit=true");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageOverrideInputs&returnTo2_submit=true">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageOverrideForm&returnTo2_submit=true">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=goNested&returnTo2_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=begin&returnTo2_submit=true">start over</a>          
+
+        </form>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/MockPortal.jsp</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>returnTo1_submit</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>returnTo1altAction</name>
+          <value>input</value>
+        </parameter>
+        <parameter>
+          <name>returnTo1{actionForm.bar}</name>
+          <value>"foo" is blank</value>
+        </parameter>
+        <parameter>
+          <name>returnTo1{actionForm.foo}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>126</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>265121:f78dd78901:-7e33</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal (/mockportal)</title>
+</head>
+
+<h3>Mock Portal (/mockportal)</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>input</b></font><br>
+<font color="green">Action result URI: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="returnTo1Netui_Form_0" method="post" action="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=input&returnTo1_submit=true">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.foo}" value=""/>
+                        <font color="red">not null, ok?
+</font>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.bar}" value="&quot;foo&quot; is blank"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPage&returnTo1_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideInputs&returnTo1_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideForm&returnTo1_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPage&returnTo1_submit=true">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideInputs&returnTo1_submit=true">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideForm&returnTo1_submit=true">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPage&returnTo1_submit=true">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideInputs&returnTo1_submit=true">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideForm&returnTo1_submit=true">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=goNested&returnTo1_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=begin&returnTo1_submit=true">start over</a>          
+
+        </form>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo2</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="returnTo2Netui_Form_1" method="post" action="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=input&returnTo2_submit=true">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="returnTo2{actionForm.foo}" value="init foo"/>
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="returnTo2{actionForm.bar}" value="init bar"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPage&returnTo2_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_1","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageWithForm&returnTo2_submit=true");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageOverrideInputs&returnTo2_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageOverrideForm&returnTo2_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPage&returnTo2_submit=true">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_1","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageWithForm&returnTo2_submit=true");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageOverrideInputs&returnTo2_submit=true">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageOverrideForm&returnTo2_submit=true">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPage&returnTo2_submit=true">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_1","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageWithForm&returnTo2_submit=true");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageOverrideInputs&returnTo2_submit=true">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageOverrideForm&returnTo2_submit=true">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=goNested&returnTo2_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=begin&returnTo2_submit=true">start over</a>          
+
+        </form>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/MockPortal.jsp</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>returnTo2_submit</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>returnTo2altAction</name>
+          <value>input</value>
+        </parameter>
+        <parameter>
+          <name>returnTo2{actionForm.bar}</name>
+          <value>init bar</value>
+        </parameter>
+        <parameter>
+          <name>returnTo2{actionForm.foo}</name>
+          <value>init foo</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>124</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>265121:f78dd78901:-7e33</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal (/mockportal)</title>
+</head>
+
+<h3>Mock Portal (/mockportal)</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="returnTo1Netui_Form_1" method="post" action="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=input&returnTo1_submit=true">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.foo}" value=""/>
+                        <font color="red">not null, ok?
+</font>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.bar}" value="&quot;foo&quot; is blank"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPage&returnTo1_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_1","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideInputs&returnTo1_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideForm&returnTo1_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPage&returnTo1_submit=true">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_1","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideInputs&returnTo1_submit=true">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideForm&returnTo1_submit=true">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPage&returnTo1_submit=true">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_1","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideInputs&returnTo1_submit=true">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideForm&returnTo1_submit=true">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=goNested&returnTo1_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=begin&returnTo1_submit=true">start over</a>          
+
+        </form>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo2</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>input</b></font><br>
+<font color="green">Action result URI: <b>/pageFlowCore/returnToTest/nextPage.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/nextPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPreviousPage&returnTo2_submit=true">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPreviousPageOverrideForm&returnTo2_submit=true">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPreviousPageOverrideInputs&returnTo2_submit=true">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPreviousPage&returnTo2_submit=true">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPreviousPageOverrideForm&returnTo2_submit=true">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPreviousPageOverrideInputs&returnTo2_submit=true">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPage&returnTo2_submit=true">return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPageOverrideForm&returnTo2_submit=true">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPageOverrideInputs&returnTo2_submit=true">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=goNested&returnTo2_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=begin&returnTo2_submit=true">start over</a>
+        </p>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/MockPortal.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>returnTo2_submit</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>returnTo2altAction</name>
+          <value>goNested</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>265121:f78dd78901:-7e33</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal (/mockportal)</title>
+</head>
+
+<h3>Mock Portal (/mockportal)</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="returnTo1Netui_Form_2" method="post" action="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=input&returnTo1_submit=true">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.foo}" value=""/>
+                        <font color="red">not null, ok?
+</font>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.bar}" value="&quot;foo&quot; is blank"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPage&returnTo1_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_2","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideInputs&returnTo1_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideForm&returnTo1_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPage&returnTo1_submit=true">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_2","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideInputs&returnTo1_submit=true">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideForm&returnTo1_submit=true">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPage&returnTo1_submit=true">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_2","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideInputs&returnTo1_submit=true">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideForm&returnTo1_submit=true">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=goNested&returnTo1_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=begin&returnTo1_submit=true">start over</a>          
+
+        </form>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo2</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>goNested</b></font><br>
+<font color="green">Action result URI: <b>/pageFlowCore/returnToTest/nested/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.nested.nestedController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/nested/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPage&returnTo2_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageOverrideInputs&returnTo2_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageOverrideForm&returnTo2_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPreviousPage&returnTo2_submit=true">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPreviousPageOverrideForm&returnTo2_submit=true">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPreviousPageOverrideInputs&returnTo2_submit=true">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPage&returnTo2_submit=true">return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPageOverrideForm&returnTo2_submit=true">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToPageOverrideInputs&returnTo2_submit=true">return-to page (override page inputs)</a>  
+
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/MockPortal.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>returnTo2_submit</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>returnTo2altAction</name>
+          <value>returnToPreviousPage</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1f0GgUba2TCUGh2m4xzvq4V1SrgNj52RxG7Nn7Csy23y51bAZ1rE!996633948</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>265121:f78dd78901:-7e33</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal (/mockportal)</title>
+</head>
+
+<h3>Mock Portal (/mockportal)</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="returnTo1Netui_Form_3" method="post" action="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=input&returnTo1_submit=true">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.foo}" value=""/>
+                        <font color="red">not null, ok?
+</font>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="returnTo1{actionForm.bar}" value="&quot;foo&quot; is blank"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPage&returnTo1_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_3","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageWithForm&returnTo1_submit=true");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideInputs&returnTo1_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=returnToCurrentPageOverrideForm&returnTo1_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPage&returnTo1_submit=true">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_3","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageWithForm&returnTo1_submit=true");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideInputs&returnTo1_submit=true">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToCurrentPageOverrideForm&returnTo1_submit=true">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPage&returnTo1_submit=true">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true" onClick='anchor_submit_form("returnTo1Netui_Form_3","/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageWithForm&returnTo1_submit=true");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideInputs&returnTo1_submit=true">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=globalReturnToPageOverrideForm&returnTo1_submit=true">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=goNested&returnTo1_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo1altAction=begin&returnTo1_submit=true">start over</a>          
+
+        </form>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet returnTo2</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>returnToPreviousPage</b></font><br>
+<font color="green">Action result URI: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>pageFlowCore.returnToTest.returnToTestController</b></font><br>
+<font color="black">Current URL: <b>/pageFlowCore/returnToTest/inputPage.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="returnTo2Netui_Form_0" method="post" action="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=input&returnTo2_submit=true">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="returnTo2{actionForm.foo}" value="init foo"/>
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="returnTo2{actionForm.bar}" value="init bar"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPage&returnTo2_submit=true">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageWithForm&returnTo2_submit=true");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageOverrideInputs&returnTo2_submit=true">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=returnToCurrentPageOverrideForm&returnTo2_submit=true">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPage&returnTo2_submit=true">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageWithForm&returnTo2_submit=true");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageOverrideInputs&returnTo2_submit=true">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToCurrentPageOverrideForm&returnTo2_submit=true">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPage&returnTo2_submit=true">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageWithForm&returnTo2_submit=true" onClick='anchor_submit_form("returnTo2Netui_Form_0","/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageWithForm&returnTo2_submit=true");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageOverrideInputs&returnTo2_submit=true">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=globalReturnToPageOverrideForm&returnTo2_submit=true">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=goNested&returnTo2_submit=true">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/mockportal/MockPortal.jsp?returnTo2altAction=begin&returnTo2_submit=true">start over</a>          
+
+        </form>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>10 Sep 2003, 05:35:35.550 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>5</failedCount>
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MockPortalListenTo.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MockPortalListenTo.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,759 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>MockPortalListenTo</sessionName>
+  <tester>rich</tester>
+  <startDate>22 Aug 2003, 03:03:24.479 PM GMT-07:00</startDate>
+  <description>Tests 'listenTo' and exception handling under portal.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/listenTo/ListenToPortal.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal - listenTo</title>
+</head>
+
+<h3>Mock Portal - listenTo</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet a1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>begin</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToA.aController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            A
+        </title>
+    </head>
+    <body>
+        <h3>A</h3>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=bothHave&a1_submit=true">bothHave</a>
+        <br>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=onlyA&a1_submit=true">onlyA</a>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet b1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>begin</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToB/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToB.bController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToB/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            B
+        </title>
+    </head>
+    <body>
+        <h3>B</h3>
+        
+        <font color="blue"><span></span></font>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/listenTo/ListenToPortal.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>a1_submit</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>a1altAction</name>
+          <value>bothHave</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/mockportal/listenTo/ListenToPortal.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal - listenTo</title>
+</head>
+
+<h3>Mock Portal - listenTo</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet a1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>bothHave</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToA.aController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            A
+        </title>
+    </head>
+    <body>
+        <h3>A</h3>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=bothHave&a1_submit=true">bothHave</a>
+        <br>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=onlyA&a1_submit=true">onlyA</a>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet b1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>bothHave</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToB/handled.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToB.bController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToB/handled.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            handled bothHave
+        </title>
+    </head>
+    <body>
+        handled bothHave
+        <br>
+        <font color="blue"><span></span></font>
+        <br>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?b1altAction=begin&b1_submit=true">start over</a>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/listenTo/ListenToPortal.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>b1_submit</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>b1altAction</name>
+          <value>begin</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=bothHave&amp;a1_submit=true</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal - listenTo</title>
+</head>
+
+<h3>Mock Portal - listenTo</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet a1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToA.aController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            A
+        </title>
+    </head>
+    <body>
+        <h3>A</h3>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=bothHave&a1_submit=true">bothHave</a>
+        <br>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=onlyA&a1_submit=true">onlyA</a>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet b1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>begin</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToB/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToB.bController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToB/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            B
+        </title>
+    </head>
+    <body>
+        <h3>B</h3>
+        
+        <font color="blue"><span></span></font>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/listenTo/ListenToPortal.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>a1_submit</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>a1altAction</name>
+          <value>onlyA</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/mockportal/listenTo/ListenToPortal.jsp?b1altAction=begin&amp;b1_submit=true</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal - listenTo</title>
+</head>
+
+<h3>Mock Portal - listenTo</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet a1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>onlyA</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToA.aController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            A
+        </title>
+    </head>
+    <body>
+        <h3>A</h3>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=bothHave&a1_submit=true">bothHave</a>
+        <br>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=onlyA&a1_submit=true">onlyA</a>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet b1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>onlyA</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToB/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToB.bController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToB/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            B
+        </title>
+    </head>
+    <body>
+        <h3>B</h3>
+        
+        <font color="blue"><span>Note: doing nothing for action /onlyA.</span></font>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/mockportal/listenTo/ListenToPortal.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>a1_submit</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>a1altAction</name>
+          <value>onlyA</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1GSFAb3104OusJUh7VrpN2rPAod8k0202GCC7WBE88H5nlDybBED!1757504539</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=onlyA&amp;a1_submit=true</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Mock Portal - listenTo</title>
+</head>
+
+<h3>Mock Portal - listenTo</h3>
+<body>
+
+    
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet a1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>onlyA</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToA.aController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToA/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            A
+        </title>
+    </head>
+    <body>
+        <h3>A</h3>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=bothHave&a1_submit=true">bothHave</a>
+        <br>
+        <a href="/coreWeb/mockportal/listenTo/ListenToPortal.jsp?a1altAction=onlyA&a1_submit=true">onlyA</a>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+        <table border="1" cellspacing="1" cellpadding="5" width="100%">
+<tr bordercolor="White"><td bgcolor="#EEEEFF">
+<b>Portlet b1</b></td></tr><tr bordercolor="White"><td bgcolor="#EEEEFF">
+<font color="green">Action was: <b>onlyA</b></font><br>
+<font color="green">Action result URI: <b>/mockportal/listenTo/listenToB/index.jsp</b></font><br>
+<font color="green">Action result isRedirect: <b>false</b></font><br>
+<font color="black">PageFlow/StrutsModule type: <b>mockportal.listenTo.listenToB.bController</b></font><br>
+<font color="black">Current URL: <b>/mockportal/listenTo/listenToB/index.jsp</b></font><br>
+</td></tr>
+<tr><td>
+<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            B
+        </title>
+    </head>
+    <body>
+        <h3>B</h3>
+        
+        <font color="blue"><span>Note: doing nothing for action /onlyA.</span></font>
+    </body></html>
+</td></tr>
+</table><br><br>
+
+    
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>22 Aug 2003, 03:04:59.265 PM GMT-07:00</endDate>
+  <testCount>5</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ModuleConfigLocator.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ModuleConfigLocator.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ModuleConfigLocator</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:25:16.850 PM MST</startDate>
+  <description>Test DynamicSubappActionServlet.ModuleConfigLocators, which allow the user to specify alternate locations for auto-registered Struts config files.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/moduleConfigLocator/index.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d88</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            ModuleConfigLocator
+        </title>
+    </head>
+    <body>
+        <h3>ModuleConfigLocator</h3>
+        
+        <i>moduleConfigLocator.Locator1 and moduleConfigLocator.Locator2 are registered in web.xml</i>
+        <br>
+        <br>
+        <a href="/coreWeb/foo/begin.do">test Locator1</a>
+        <br>
+        <a href="/coreWeb/bar/begin.do">test Locator2</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/foo/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d88</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            ModuleConfigLocator - Locator1
+        </title>
+    </head>
+    <body>
+        <h3>ModuleConfigLocator - Locator1</h3>
+        
+        <i>Got here through moduleConfigLocator.Locator1</i>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/moduleConfigLocator/index.jsp">go back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/moduleConfigLocator/index.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d88</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            ModuleConfigLocator
+        </title>
+    </head>
+    <body>
+        <h3>ModuleConfigLocator</h3>
+        
+        <i>moduleConfigLocator.Locator1 and moduleConfigLocator.Locator2 are registered in web.xml</i>
+        <br>
+        <br>
+        <a href="/coreWeb/foo/begin.do">test Locator1</a>
+        <br>
+        <a href="/coreWeb/bar/begin.do">test Locator2</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bar/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d88</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            ModuleConfigLocator - Locator2
+        </title>
+    </head>
+    <body>
+        <h3>ModuleConfigLocator - Locator2</h3>
+        
+        <i>Got here through moduleConfigLocator.Locator2</i>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/moduleConfigLocator/index.jsp">go back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:25:21.167 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultiForms.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultiForms.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,408 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>MultiForms</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 05:36:29.743 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/multiForms/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-1fafffd5:fda0f58f87:-7bcd</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/multiForms/buttonOne.do" method="post">
+<input type="text" name="{actionForm.name}" value=""><br />
+Input Value:<span></span><br />
+<input type="submit" name="actionOverride:buttonOne" value="Button One">
+<input type="submit" name="actionOverride:buttonTwo" value="Button Two">
+</form>
+<br />
+Last Action: <span>begin</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/multiForms/buttonOne.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>actionOverride:/buttonOne</ses:name>
+                  <ses:value>Button One</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>currentURI</ses:name>
+                  <ses:value>/coreWeb/miniTests/multiForms/Begin.jsp</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>name</ses:name>
+                  <ses:value>Button One</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>0E47620F1AA38ABCBC17620485305D5C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>115</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=0E47620F1AA38ABCBC17620485305D5C; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-1fafffd5:fda0f58f87:-7bcd</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/multiForms/buttonOne.do" method="post">
+<input type="text" name="{actionForm.name}" value="Button One"><br />
+Input Value:<span>Button One</span><br />
+<input type="submit" name="actionOverride:buttonOne" value="Button One">
+<input type="submit" name="actionOverride:buttonTwo" value="Button Two">
+</form>
+<br />
+Last Action: <span>buttonOne</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/multiForms/buttonOne.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>actionOverride:/buttonTwo</ses:name>
+                  <ses:value>Button Two</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>currentURI</ses:name>
+                  <ses:value>/coreWeb/miniTests/multiForms/Begin.jsp</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>name</ses:name>
+                  <ses:value>Button Two</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>0E47620F1AA38ABCBC17620485305D5C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>115</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=0E47620F1AA38ABCBC17620485305D5C; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-1fafffd5:fda0f58f87:-7bcd</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/multiForms/buttonOne.do" method="post">
+<input type="text" name="{actionForm.name}" value="Button Two"><br />
+Input Value:<span>Button Two</span><br />
+<input type="submit" name="actionOverride:buttonOne" value="Button One">
+<input type="submit" name="actionOverride:buttonTwo" value="Button Two">
+</form>
+<br />
+Last Action: <span>buttonTwo</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/multiForms/buttonOne.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>actionOverride:/buttonOne</ses:name>
+                  <ses:value>Button One</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>currentURI</ses:name>
+                  <ses:value>/coreWeb/miniTests/multiForms/Begin.jsp</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>name</ses:name>
+                  <ses:value>Button Two</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>0E47620F1AA38ABCBC17620485305D5C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>115</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=0E47620F1AA38ABCBC17620485305D5C; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-1fafffd5:fda0f58f87:-7bcd</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/multiForms/buttonOne.do" method="post">
+<input type="text" name="{actionForm.name}" value="Button Two"><br />
+Input Value:<span>Button Two</span><br />
+<input type="submit" name="actionOverride:buttonOne" value="Button One">
+<input type="submit" name="actionOverride:buttonTwo" value="Button Two">
+</form>
+<br />
+Last Action: <span>buttonOne</span>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 05:36:31.416 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultiSelect.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultiSelect.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,867 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>MultiSelect</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:10:42.846 AM MST</startDate>
+  <description>Databinding test to a multi select tag.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/multiSelect/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7d62</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/tags/multiSelect/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple size="6">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option>
+<option value="Option 5">Option 5</option>
+<option value="Option 6" selected>Option 6</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b> size = <span>-1</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/multiSelect/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/multiSelect/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 4</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 6</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>121</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7d62</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/tags/multiSelect/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple size="6">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option>
+<option value="Option 5">Option 5</option>
+<option value="Option 6" selected>Option 6</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b> size = <span>2</span><br />
+
+  <span>Option 4</span><br />
+
+  <span>Option 6</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/multiSelect/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/multiSelect/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 1</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>88</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7d62</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/tags/multiSelect/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple size="6">
+<option value="Option 1" selected>Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4">Option 4</option>
+<option value="Option 5">Option 5</option>
+<option value="Option 6">Option 6</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b> size = <span>1</span><br />
+
+  <span>Option 1</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/multiSelect/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/multiSelect/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 3</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 6</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>187</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7d62</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/tags/multiSelect/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple size="6">
+<option value="Option 1" selected>Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3" selected>Option 3</option>
+<option value="Option 4">Option 4</option>
+<option value="Option 5">Option 5</option>
+<option value="Option 6" selected>Option 6</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b> size = <span>4</span><br />
+
+  <span>Option 1</span><br />
+
+  <span>Option 2</span><br />
+
+  <span>Option 3</span><br />
+
+  <span>Option 6</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/multiSelect/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/multiSelect/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 1</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 3</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 4</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 5</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 6</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>253</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7d62</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/tags/multiSelect/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple size="6">
+<option value="Option 1" selected>Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3" selected>Option 3</option>
+<option value="Option 4" selected>Option 4</option>
+<option value="Option 5" selected>Option 5</option>
+<option value="Option 6" selected>Option 6</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b> size = <span>6</span><br />
+
+  <span>Option 1</span><br />
+
+  <span>Option 2</span><br />
+
+  <span>Option 3</span><br />
+
+  <span>Option 4</span><br />
+
+  <span>Option 5</span><br />
+
+  <span>Option 6</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/multiSelect/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/multiSelect/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>88</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7d62</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Select Tests</title>
+</head>
+<body>
+<h4>Multi Select</h4>
+<form name="form" action="/coreWeb/tags/multiSelect/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}" multiple size="6">
+<option value="Option 1">Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4">Option 4</option>
+<option value="Option 5">Option 5</option>
+<option value="Option 6">Option 6</option></select>
+  </td></tr>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+<b>Select 1:</b> size = <span>1</span><br />
+
+  <span>Option 2</span><br />
+
+<br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:10:47.493 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>6</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>6</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultipleDatasource.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultipleDatasource.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>MultipleDatasource</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 08:53:56.949 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/errors/multipleDatasource/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-35ead49b:fda1c948e7:-7bc5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Illegal Compound Expressions</title>
+</head>
+<body>
+<h4>Illegal Compound Expression</h4>
+<form id="Netui_Form_0" action="/coreWeb/errors/multipleDatasource/postback.do" method="post">
+Hidden: <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Hidden</b>]</span><br />
+TextBox: <span style="color:red;background-color:white">
+ [<b>Tag Error:2</b>, Found in tag <b>TextBox</b>]</span><br/>
+TextArea: <span style="color:red;background-color:white">
+ [<b>Tag Error:3</b>, Found in tag <b>TextArea</b>]</span><br/>
+Select: <span style="color:red;background-color:white">
+ [<b>Tag Error:4</b>, Found in tag <b>Select</b>]</span><br/>
+Checkbox: <span style="color:red;background-color:white">
+ [<b>Tag Error:5</b>, Found in tag <b>CheckBox</b>]</span><br/>
+CheckBoxGroup: <span style="color:red;background-color:white">
+ [<b>Tag Error:6</b>, Found in tag <b>CheckBoxGroup</b>]</span><span style="color:red;background-color:white">
+ [<b>Tag Error:6</b>, Found in tag <b>CheckBoxGroup</b>]</span><br/>
+<input type="submit" value="Submit">
+</form>
+<div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Hidden</th><th>Message</th><td>The expression "<b>{pageFlow.lastName, {pageFlow.firstName}}</b>" is an invalid expression for a <b>dataSource</b>.  Expressions in a dataSource must bind to a single property.</td></tr>
+<tr><th>2</th><th>TextBox</th><th>Message</th><td>The expression "<b>{pageFlow.lastName, {pageFlow.firstName}}</b>" is an invalid expression for a <b>dataSource</b>.  Expressions in a dataSource must bind to a single property.</td></tr>
+<tr><th>3</th><th>TextArea</th><th>Message</th><td>The expression "<b>{pageFlow.lastName, {pageFlow.firstName}}</b>" is an invalid expression for a <b>dataSource</b>.  Expressions in a dataSource must bind to a single property.</td></tr>
+<tr><th>4</th><th>Select</th><th>Message</th><td>The expression "<b>{pageFlow.lastName, {pageFlow.firstName}}</b>" is an invalid expression for a <b>dataSource</b>.  Expressions in a dataSource must bind to a single property.</td></tr>
+<tr><th>5</th><th>CheckBox</th><th>Message</th><td>The expression "<b>{pageFlow.lastName, {pageFlow.firstName}}</b>" is an invalid expression for a <b>dataSource</b>.  Expressions in a dataSource must bind to a single property.</td></tr>
+<tr><th>6</th><th>CheckBoxGroup</th><th>Message</th><td>The expression "<b>{pageFlow.lastName, {pageFlow.firstName}}</b>" is an invalid expression for a <b>dataSource</b>.  Expressions in a dataSource must bind to a single property.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 08:54:01.385 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultipleForms.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/MultipleForms.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,619 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>MultipleForms</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 11:55:33.021 PM MST</startDate>
+  <description>Test multiple forms on the same page</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/multipleForms/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7d6e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="formOne" action="/coreWeb/miniTests/multipleForms/formOne.do" method="post">
+<input type="text" name="{actionForm.name}" value="Name from Begin"><br />
+<input type="submit" value="Submit">
+</form>
+<hr />
+<form name="formTwo" action="/coreWeb/miniTests/multipleForms/formTwo.do" method="post">
+<input type="text" name="{actionForm.stuff}" value="Stuff from Begin"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Last Action: <span>begin</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/multipleForms/formOne.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/multipleForms/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Button One</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>78</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7d6e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="formOne" action="/coreWeb/miniTests/multipleForms/formOne.do" method="post">
+<input type="text" name="{actionForm.name}" value="Button One"><br />
+<input type="submit" value="Submit">
+</form>
+<hr />
+<form name="formTwo" action="/coreWeb/miniTests/multipleForms/formTwo.do" method="post">
+<input type="text" name="{actionForm.stuff}" value="Stuff from Begin"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Last Action: <span>formOne</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/multipleForms/formTwo.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/multipleForms/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>stuff</name>
+          <value>Button Two</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7d6e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="formOne" action="/coreWeb/miniTests/multipleForms/formOne.do" method="post">
+<input type="text" name="{actionForm.name}" value="Button One"><br />
+<input type="submit" value="Submit">
+</form>
+<hr />
+<form name="formTwo" action="/coreWeb/miniTests/multipleForms/formTwo.do" method="post">
+<input type="text" name="{actionForm.stuff}" value="Button Two"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Last Action: <span>formTwo</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/multipleForms/formOne.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/multipleForms/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Button One</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>78</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7d6e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="formOne" action="/coreWeb/miniTests/multipleForms/formOne.do" method="post">
+<input type="text" name="{actionForm.name}" value="Button One"><br />
+<input type="submit" value="Submit">
+</form>
+<hr />
+<form name="formTwo" action="/coreWeb/miniTests/multipleForms/formTwo.do" method="post">
+<input type="text" name="{actionForm.stuff}" value="Button Two"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Last Action: <span>formOne</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/multipleForms/formTwo.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/miniTests/multipleForms/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>stuff</name>
+          <value>Button Two</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7d6e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Multi Form Test</title>
+</head>
+<body>
+<form name="formOne" action="/coreWeb/miniTests/multipleForms/formOne.do" method="post">
+<input type="text" name="{actionForm.name}" value="Button One"><br />
+<input type="submit" value="Submit">
+</form>
+<hr />
+<form name="formTwo" action="/coreWeb/miniTests/multipleForms/formTwo.do" method="post">
+<input type="text" name="{actionForm.stuff}" value="Button Two"><br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Last Action: <span>formTwo</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 11:55:37.348 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>5</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestedFormReturn.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestedFormReturn.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,794 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>NestedFormReturn</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 11:54:39.925 PM MST</startDate>
+  <description>Verify that nested page flows can return the same action and a different form.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestedFormReturn/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7dc4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested Form Return</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nestedFormReturn/nest1.do">Nest One</a><br />
+<a href="/coreWeb/miniTests/nestedFormReturn/nest2.do">Nest Two</a>
+<br />
+<form name="miniTests_nestedFormReturn_Controller_Form" action="/coreWeb/miniTests/nestedFormReturn/done.do" method="post">
+Value <input type="text" name="{actionForm.val}" value=""></br>
+<input type="submit" value="Submit">
+</form>
+<br />
+Return Information: <span></span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestedFormReturn/done.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>val</name>
+          <value>val</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>7</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7dc4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested Form Return</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nestedFormReturn/nest1.do">Nest One</a><br />
+<a href="/coreWeb/miniTests/nestedFormReturn/nest2.do">Nest Two</a>
+<br />
+<form name="miniTests_nestedFormReturn_Controller_Form" action="/coreWeb/miniTests/nestedFormReturn/done.do" method="post">
+Value <input type="text" name="{actionForm.val}" value="val"></br>
+<input type="submit" value="Submit">
+</form>
+<br />
+Return Information: <span>Value: val</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestedFormReturn/nest1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7dc4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nest One</title>
+</head>
+<body>
+<h4>Nest One</h4>
+<form name="form" action="/coreWeb/miniTests/nestedFormReturn/nest1/submit.do" method="post">
+First Name <input type="text" name="{actionForm.firstName}" value=""></br>
+Last Name <input type="text" name="{actionForm.lastName}" value=""></br>
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestedFormReturn/nest1/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>firstName</name>
+          <value>first</value>
+        </parameter>
+        <parameter>
+          <name>lastName</name>
+          <value>last</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>29</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7dc4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested Form Return</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nestedFormReturn/nest1.do">Nest One</a><br />
+<a href="/coreWeb/miniTests/nestedFormReturn/nest2.do">Nest Two</a>
+<br />
+<form name="miniTests_nestedFormReturn_Controller_Form" action="/coreWeb/miniTests/nestedFormReturn/done.do" method="post">
+Value <input type="text" name="{actionForm.val}" value=""></br>
+<input type="submit" value="Submit">
+</form>
+<br />
+Return Information: <span>Name: last, first</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestedFormReturn/nest2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7dc4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nest Two</title>
+</head>
+<body>
+<h4>Nest Two</h4>
+<form name="form" action="/coreWeb/miniTests/nestedFormReturn/nest2/submit.do" method="post">
+Type <input type="text" name="{actionForm.type}" value=""></br>
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestedFormReturn/nest2/submit.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>type</name>
+          <value>type</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>9</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7dc4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested Form Return</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nestedFormReturn/nest1.do">Nest One</a><br />
+<a href="/coreWeb/miniTests/nestedFormReturn/nest2.do">Nest Two</a>
+<br />
+<form name="miniTests_nestedFormReturn_Controller_Form" action="/coreWeb/miniTests/nestedFormReturn/done.do" method="post">
+Value <input type="text" name="{actionForm.val}" value=""></br>
+<input type="submit" value="Submit">
+</form>
+<br />
+Return Information: <span>Type: type</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestedFormReturn/done.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>val</name>
+          <value>val</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>7</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7dc4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested Form Return</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nestedFormReturn/nest1.do">Nest One</a><br />
+<a href="/coreWeb/miniTests/nestedFormReturn/nest2.do">Nest Two</a>
+<br />
+<form name="miniTests_nestedFormReturn_Controller_Form" action="/coreWeb/miniTests/nestedFormReturn/done.do" method="post">
+Value <input type="text" name="{actionForm.val}" value="val"></br>
+<input type="submit" value="Submit">
+</form>
+<br />
+Return Information: <span>Value: val</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 11:54:46.364 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>7</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>7</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Nesting.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Nesting.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,534 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+  <sessionName>Nesting</sessionName>
+  <tester>Daryl</tester>
+  <startDate>08 Nov 2002, 12:50:01.772 PM MST</startDate>
+  <description>Simple Nesting Example</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nesting/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nesting/nest.do">Nest Page Flow</a>
+<br />
+Last Action: <span>begin</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nesting/nest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nesting/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested </title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nesting/nested/nestOne.do">Nest Return to Page</a><br />
+<a href="/coreWeb/miniTests/nesting/nested/nestTwo.do">Nest Return to Action</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nesting/nested/nestOne.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nesting/nest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nesting/nest.do">Nest Page Flow</a>
+<br />
+Last Action: <span>returnToPage</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nesting/nest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nesting/nested/nestOne.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested </title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nesting/nested/nestOne.do">Nest Return to Page</a><br />
+<a href="/coreWeb/miniTests/nesting/nested/nestTwo.do">Nest Return to Action</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nesting/nested/nestTwo.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nesting/nest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nesting/nest.do">Nest Page Flow</a>
+<br />
+Last Action: <span>returnToAction</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nesting/nest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nesting/nested/nestTwo.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested </title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nesting/nested/nestOne.do">Nest Return to Page</a><br />
+<a href="/coreWeb/miniTests/nesting/nested/nestTwo.do">Nest Return to Action</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nesting/nested/nestTwo.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9MVYLmpfAoFmOkbxWsIebkpSMpSooAm6EIBewa9YttLBYxNyZGh4!1407661799</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nesting/nest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ButtonSubmit</title>
+</head>
+<body>
+<a href="/coreWeb/miniTests/nesting/nest.do">Nest Page Flow</a>
+<br />
+Last Action: <span>returnToAction</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>08 Nov 2002, 12:51:06.094 PM MST</endDate>
+  <testCount>7</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestingRepeater.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestingRepeater.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>NestingRepeater</sessionName>
+  <tester>Daryl</tester>
+  <startDate>19 Dec 2002, 02:21:06.737 PM MST</startDate>
+  <description>Test of nested repeater tags</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingRepeater/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2C39g21lFfAwV1nnWHyYbxfF4GVTWkcyD9IdoXRwT0drXii8mxAb!1990770404</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2C39g21lFfAwV1nnWHyYbxfF4GVTWkcyD9IdoXRwT0drXii8mxAb!1990770404</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testNumber</name>
+          <value>1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>6f0962:f238a9697b:-7f36</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nesting Repeater</title>
+</head>
+<body>
+<h4>Nesting Repeater</h4>
+<table><tr>
+
+    <tr>
+    <td><b><span>foo</span></b></td>
+    
+         <td><span>2</span></td>
+       
+         <td><span>4</span></td>
+       
+         <td><span>5</span></td>
+       
+    <td><b><span>end</span></b></td>
+    </tr>
+  
+    <tr>
+    <td><b><span>bar</span></b></td>
+    
+         <td><span>12</span></td>
+       
+         <td><span>14</span></td>
+       
+         <td><span>15</span></td>
+       
+    <td><b><span>end</span></b></td>
+    </tr>
+  
+</tr></table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>19 Dec 2002, 02:21:09.431 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestingScope.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NestingScope.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1069 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>NestingScope</sessionName>
+  <tester>Daryl</tester>
+  <startDate>12 Nov 2002, 12:41:07.083 PM MST</startDate>
+  <description>Verify that page flow state stays around during nesting.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>1</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>2</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>3</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nestPageFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope Sub</title>
+</head>
+<body>
+<h4>Scope Sub</h4>
+<a href="/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do">Return</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nestPageFlow.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>3</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>4</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nestPageFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope Sub</title>
+</head>
+<body>
+<h4>Scope Sub</h4>
+<a href="/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do">Return</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nestPageFlow.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>4</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nestPageFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope Sub</title>
+</head>
+<body>
+<h4>Scope Sub</h4>
+<a href="/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do">Return</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nestPageFlow.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>4</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>5</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>6</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/nestPageFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope Sub</title>
+</head>
+<body>
+<h4>Scope Sub</h4>
+<a href="/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do">Return</a><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nestingScope/scopeSub/returnAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RZ2seyfmTEJyyd27v3CKadzSQ642TijU1uJJABH8ZEGkQbygufF!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/nestingScope/nestPageFlow.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/nestingScope/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/nestingScope/nestPageFlow.do">Nest Page Flow</a><br />
+Count: <span>6</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>12 Nov 2002, 12:42:16.963 PM MST</endDate>
+  <testCount>14</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NonNormalizedPath.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NonNormalizedPath.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,562 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>NonNormalizedPath</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:25:09.069 PM MST</startDate>
+  <description>Tests forwarding to paths that contain '.' and '..'</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nonNormalizedPath/NonNormalizedPathController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d94</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-normalized Paths
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/begin.do">index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/ok1.do">./index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/ok2.do">../nonNormalizedPath/index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/bad1.do">../../index.jsp (bad)</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nonNormalizedPath/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d94</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-normalized Paths
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/begin.do">index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/ok1.do">./index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/ok2.do">../nonNormalizedPath/index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/bad1.do">../../index.jsp (bad)</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nonNormalizedPath/ok1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d94</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-normalized Paths
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/begin.do">index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/ok1.do">./index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/ok2.do">../nonNormalizedPath/index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/bad1.do">../../index.jsp (bad)</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nonNormalizedPath/ok2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d94</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-normalized Paths
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/begin.do">index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/ok1.do">./index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/ok2.do">../nonNormalizedPath/index.jsp</a>
+        <br>
+        <a href="/coreWeb/miniTests/nonNormalizedPath/bad1.do">../../index.jsp (bad)</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/nonNormalizedPath/bad1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d94</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>404</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:25:13.696 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NullableSelect.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/NullableSelect.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,789 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>NullableSelect</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 03:14:17.345 PM MST</startDate>
+  <description>Verify that nullable and nullableOptionText work on the Select tag.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/nullableSelect/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7342</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo">foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option>
+<option value="netui_null" selected></option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Form Two:
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo">foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option>
+<option value="netui_null" selected>[NULL]</option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Type: <span>No Type Selected</span> 
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/nullableSelect/postType.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}</name>
+          <value>foo</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>94</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7342</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo" selected>foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option>
+<option value="netui_null"></option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Form Two:
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo" selected>foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option>
+<option value="netui_null">[NULL]</option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Type: <span>foo</span> 
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/nullableSelect/postType.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}</name>
+          <value>netui_null</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>101</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7342</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo">foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option>
+<option value="netui_null" selected></option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Form Two:
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo">foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option>
+<option value="netui_null" selected>[NULL]</option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Type: <span>The form.type value was null</span> 
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/nullableSelect/postType.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}</name>
+          <value>bar</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>94</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7342</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo">foo</option>
+<option value="bar" selected>bar</option>
+<option value="baz">baz</option>
+<option value="netui_null"></option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Form Two:
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo">foo</option>
+<option value="bar" selected>bar</option>
+<option value="baz">baz</option>
+<option value="netui_null">[NULL]</option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Type: <span>bar</span> 
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/nullableSelect/postType.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}</name>
+          <value>netui_null</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:{actionForm.type}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>101</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7342</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo">foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option>
+<option value="netui_null" selected></option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Form Two:
+        <form name="typeBean" action="/coreWeb/tags/nullableSelect/postType.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>Type:</td>
+                    <td>
+                    <input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.type}">
+<option value="foo">foo</option>
+<option value="bar">bar</option>
+<option value="baz">baz</option>
+<option value="netui_null" selected>[NULL]</option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="postType">
+        </form><br>
+        Type: <span>The form.type value was null</span> 
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 03:14:21.201 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>5</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/OnTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/OnTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>OnTest</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 10:52:23.510 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/onTest/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-a9431aa:fd9f6fce18:-71f5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;html>
+&lt;head>
+&lt;script language="JavaScript">
+
+var opCount = 0;
+var textId = "text";
+var textAreaId = "textArea";
+var buttonId = "button";
+var formId = "formOut";
+var anchorId = "anchor";
+var checkboxId = "checkbox";
+var checkboxGroupId = "checkboxGroup";
+var radioId = "radio";
+var selectId = "select";
+var selectOptionId = "selectOption";
+var labelId = "label";
+var hiddenId = "hidden";
+var imageId = "image";
+var imageButtonId = "imageButton";
+var imageAnchorId = "imageAnchor";
+
+
+function print_blur(txtId) {
+   print_to_doc(txtId," blur");
+}
+
+function print_operation(txtId) {
+  var t = document.getElementById(txtId + "_operation");
+  var text = txtId + " operations:" + ++opCount;
+  t.firstChild.data = text;
+}
+
+function print_reset(txtId) {
+   print_to_doc(txtId," reset");
+}
+
+function print_submit(txtId) {
+   print_to_doc(txtId," submit");
+}
+
+function print_change(txtId) {
+   print_to_doc(txtId," change");
+}
+
+function print_click(txtId) {
+   print_to_doc(txtId," click");
+}
+
+function print_dblClick(txtId) {
+   print_to_doc(txtId," dblClick");
+}
+
+function print_focus(txtId) {
+   print_to_doc(txtId," focus");
+}
+
+function print_keyDown(txtId) {
+   print_to_doc(txtId," keyDown");
+}
+
+function print_keyPress(txtId) {
+   print_to_doc(txtId," keyPress");
+}
+
+function print_keyUp(txtId) {
+   print_to_doc(txtId," keyUp");
+}
+
+function print_mouseDown(txtId) {
+   print_to_doc(txtId," mouseDown");
+}
+
+function print_mouseMove(txtId) {
+   print_to_doc(txtId,".");
+}
+
+function print_mouseOver(txtId) {
+   print_to_doc(txtId," over");
+}
+
+function print_mouseOut(txtId) {
+   print_to_doc(txtId," out");
+}
+
+function print_mouseUp(txtId) {
+   print_to_doc(txtId," mouseUp");
+}
+
+function print_select(txtId) {
+   print_to_doc(txtId," select");
+}
+
+function print_to_doc(txtId,txt) {
+  var t = document.getElementById(txtId);
+  var text = t.firstChild.data;
+  text += " " + txt;
+  t.firstChild.data = text;
+}
+&lt;/script>
+&lt;title>On Test&lt;/title>
+&lt;!-- target -->
+&lt;base href="http://localhost:8080/coreWeb/tags/onTest/Begin.jsp">
+&lt;/head>
+&lt;body>
+&lt;h4>On Test&lt;/h4>
+&lt;table border="1" cellspacing="1" cellpadding="1" width="100%">
+&lt;tr>&lt;td width="200pt" valign="top">
+&lt;!-- FORM: enctype, focus, location, method, name, scope, style, styleClass,
+        tabindex, type
+-->
+&lt;form name="form" action="/coreWeb/tags/onTest/postback.do" method="post" onkeyup="print_operation(formId);" onkeypress="print_operation(formId);" onreset="print_reset(formId);" onsubmit="print_submit(formId);" onmouseup="print_operation(formId);" onclick="print_operation(formId);" onmouseout="print_mouseOut(formId);" onmousemove="print_operation(formId);" onkeydown="print_operation(formId);" onmouseover="print_mouseOver(formId);" onmousedown="print_operation(formId);">
+&lt;!-- TEXTBOX: defaultValue, readonly, style, styleClass, tabindex
+-->
+&lt;input type="text" name="{actionForm.text}" value="" maxlength="30" onkeyup="print_keyUp(textId);" onclick="print_click(textId);" onmouseout="print_mouseOut(textId);" onkeydown="print_keyDown(textId);" onchange="print_change(textId);" onmousedown="print_mouseDown(textId);" onkeypress="print_keyPress(textId);" onselect="print_select(textId);" ondblclick="print_dblClick(textId);" onfocus="print_focus(textId);" onmouseup="print_mouseUp(textId);" onmousemove="print_mouseMove(textId);" onblur="print_blur(textId);" onmouseover="print_mouseOver(textId);">&lt;br />
+&lt;!-- TEXTAREA: defaultValue, disabled, readonly, style, styleClass,
+        tabindex
+-->
+&lt;textarea name="{actionForm.textArea}" rows="5" cols="20" onkeyup="print_keyUp(textAreaId);" onclick="print_click(textAreaId);" onmouseout="print_mouseOut(textAreaId);" onkeydown="print_keyDown(textAreaId);" onchange="print_change(textAreaId);" onmousedown="print_mouseDown(textAreaId);" onkeypress="print_keyPress(textAreaId);" onselect="print_select(textAreaId);" ondblclick="print_dblClick(textAreaId);" onfocus="print_focus(textAreaId);" onmouseup="print_mouseUp(textAreaId);" onmousemove="print_mouseMove(textAreaId);" onblur="print_blur(textAreaId);" onmouseover="print_mouseOver(textAreaId);">&lt;/textarea>&lt;br />
+&lt;!-- CHECKBOXGROUP: defaultValue, optionsDataSource,style, styleClass
+-->
+&lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}OldValue" value="true">
+&lt;!-- CHECKBOXOPTION: style, styleClass, tabindex
+-->
+&lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}" value="foo" onkeyup="print_keyUp(checkboxGroupId);" onclick="print_click(checkboxGroupId);" onmouseout="print_mouseOut(checkboxGroupId);" onkeydown="print_keyDown(checkboxGroupId);" onchange="print_change(checkboxGroupId);" onmousedown="print_mouseDown(checkboxGroupId);" onkeypress="print_keyPress(checkboxGroupId);" onselect="print_select(checkboxGroupId);" ondblclick="print_dblClick(checkboxGroupId);" onfocus="print_focus(checkboxGroupId);" onmouseup="print_mouseUp(checkboxGroupId);" onmousemove="print_mouseMove(checkboxGroupId);" onblur="print_blur(checkboxGroupId);" onmouseover="print_mouseOver(checkboxGroupId);">&lt;span>foo&lt;/span>
+&lt;br />
+&lt;!-- LABEL: dataSource, dataformatas, style, styleClass, tabindex
+-->
+&lt;span onkeyup="print_keyUp(labelId);" onkeypress="print_keyPress(labelId);" onmouseup="print_mouseUp(labelId);" onclick="print_click(labelId);" onmouseout="print_mouseOut(labelId);" onmousemove="print_mouseMove(labelId);" onkeydown="print_keyDown(labelId);" onmouseover="print_mouseOver(labelId);" onmousedown="print_mouseDown(labelId);">Checkbox 1&lt;/span>
+&lt;!-- CHECKBOX: defaultValue, style, styleClass, tabindex
+-->
+&lt;input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false">&lt;input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" onkeyup="print_keyUp(checkboxId);" onclick="print_click(checkboxId);" onmouseout="print_mouseOut(checkboxId);" onkeydown="print_keyDown(checkboxId);" onchange="print_change(checkboxId);" onmousedown="print_mouseDown(checkboxId);" onkeypress="print_keyPress(checkboxId);" onselect="print_select(checkboxId);" ondblclick="print_dblClick(checkboxId);" onfocus="print_focus(checkboxId);" onmouseup="print_mouseUp(checkboxId);" onmousemove="print_mouseMove(checkboxId);" onblur="print_blur(checkboxId);" onmouseover="print_mouseOver(checkboxId);">&lt;br />
+&lt;!-- RADIOBUTTONGROUP: defaultValue, optionsDataSource, style, styleClass
+-->
+
+&lt;!-- RADIOBUTTONOPTION: style, styleClass, tabindex
+-->
+&lt;input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="1" onkeyup="print_keyUp(radioId);" onclick="print_click(radioId);" onmouseout="print_mouseOut(radioId);" onkeydown="print_keyDown(radioId);" onchange="print_change(radioId);" onmousedown="print_mouseDown(radioId);" onkeypress="print_keyPress(radioId);" onselect="print_select(radioId);" onfocus="print_focus(radioId);" onmouseup="print_mouseUp(radioId);" onmousemove="print_mouseMove(radioId);" onblur="print_blur(radioId);" onmouseover="print_mouseOver(radioId);">&lt;span>Choice 1&lt;/span>&lt;br>
+   &lt;input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="2" checked>&lt;span>Choice 2&lt;/span>&lt;br>
+&lt;br />
+&lt;!-- SELECT: defaultValue, multiple, optionsDataSource, style, styleClass
+-->
+&lt;input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+&lt;select name="wlw-select_key:{actionForm.select}" size="3" onkeyup="print_keyUp(selectId);" onkeypress="print_keyPress(selectId);" onfocus="print_focus(selectId);" onmouseup="print_mouseUp(selectId);" onclick="print_click(selectId);" onmouseout="print_mouseOut(selectId);" onmousemove="print_mouseMove(selectId);" onkeydown="print_keyDown(selectId);" onmouseover="print_mouseOver(selectId);" onmousedown="print_mouseDown(selectId);" onchange="print_change(selectId);" onblur="print_blur(selectId);">&lt;!-- SELECTOPTION, locale, style, styleClass, tabindex
+-->
+&lt;option value="Choice 1" onkeyup="print_keyUp(selectOptionId);" onkeypress="print_keyPress(selectOptionId);" onmouseup="print_mouseUp(selectOptionId);" onclick="print_click(selectOptionId);" onmouseout="print_mouseOut(selectOptionId);" onmousemove="print_mouseMove(selectOptionId);" onkeydown="print_keyDown(selectOptionId);" onmouseover="print_mouseOver(selectOptionId);" onmousedown="print_mouseDown(selectOptionId);">Choice 1&lt;/option>
+&lt;option value="2" selected>Choice 2&lt;/option>
+&lt;option value="3" disabled>Choice 3&lt;/option>&lt;/select>&lt;br />
+&lt;!-- HIDDEN: style, styleClass, tabindex
+-->
+&lt;input type="hidden" name="{actionForm.hidden}" value="hidden">
+&lt;hr />
+&lt;input type="reset" value="Reset">
+&lt;!-- BUTTON: action, style, styleClass, tabindex, type, value
+-->
+&lt;input type="submit" value="submit" onkeyup="print_keyUp(buttonId);" onkeypress="print_keyPress(buttonId);" onselect="print_select(buttonId);" onfocus="print_focus(buttonId);" onmouseup="print_mouseUp(buttonId);" onclick="print_click(buttonId);" onmousemove="print_mouseOver(buttonId);" onkeydown="print_keyDown(buttonId);" onmousedown="print_mouseDown(buttonId);" onchange="print_change(buttonId);" onblur="print_blur(buttonId);">
+&lt;br />
+&lt;!-- IMAGEBUTTON: page, style, styleClass, tabIndex, value
+        (Internally the roll over stuff uses mouse over and mouse out)
+-->
+
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+-->
+&lt;/script>
+
+&lt;input type="image" src="/coreWeb/images/godzilla.gif" align="top" onkeyup="print_keyUp(imageButtonId);" onkeypress="print_keyPress(imageButtonId);" onselect="print_select(imageButtonId);" onmouseup="print_mouseUp(imageButtonId);" onclick="print_click(imageButtonId);" onmouseout="swapImage(this,'/coreWeb/images/godzilla.gif')" onmousemove="print_mouseMove(imageButtonId);" onkeydown="print_keyDown(imageButtonId);" onmouseover="swapImage(this,'/coreWeb/images/godzillaRollover.gif')" onmousedown="print_mouseDown(imageButtonId);" onchange="print_change(imageButtonId);" onblur="print_blur(imageButtonId);">
+&lt;/form>
+&lt;hr />
+&lt;!-- ANCHOR: formSubmit, forward, href, linkName, location, page, styleClass,
+        tabindex, target
+-->
+&lt;a href="/coreWeb/tags/onTest/postback.do" onkeyup="print_keyUp(anchorId);" onkeypress="print_keyPress(anchorId);" onfocus="print_focus(anchorId);" onmouseup="print_mouseUp(anchorId);" onmouseout="print_mouseOut(anchorId);" onmousemove="print_mouseMove(anchorId);" onkeydown="print_keyDown(anchorId);" onmouseover="print_mouseOver(anchorId);" onmousedown="print_mouseDown(anchorId);" onblur="print_blur(anchorId);" onclick='print_click(anchorId);'>Post Back&lt;/a>&lt;br />
+&lt;!-- IMAGE: isMap, location, lowsrc, page, scope, style, styleClass, tabIndex
+        usemap
+-->
+&lt;img src="/coreWeb/images/godzilla.gif" id="Godzilla" width="48" height="66" hspace="10" align="center" vspace="10" border="2" onkeyup="print_keyUp(imageId);" onkeypress="print_keyPress(imageId);" onmouseup="print_mouseUp(imageId);" onclick="print_click(imageId);" onmousemove="print_mouseMove(imageId);" onkeydown="print_keyDown(imageId);" onmouseover="print_mouseOver(imageId);" onmousedown="print_mouseDown(imageId);">
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.Godzilla="Godzilla"
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+
+-->
+&lt;/script>
+
+&lt;br />
+&lt;!-- IMAGEANCHOR: formSubmit, forward, href, ismap, linkName, location,
+        lowsrc, page, scope, style, styleClass, tabindex,
+        target, usemap
+
+        (Internally the roll over stuff uses mouse over and mouse out)
+-->
+&lt;a id="Godzilla" href="/coreWeb/tags/onTest/postback.do" onkeyup="print_keyUp(imageAnchorId);" onkeypress="print_keyPress(imageAnchorId);" onmouseup="print_mouseUp(imageAnchorId);" onmousemove="print_mouseMove(imageAnchorId);" onkeydown="print_keyDown(imageAnchorId);" onmousedown="print_mouseDown(imageAnchorId);" onblur="print_blur(anchorAnchorId);" onclick='print_click(imageAnchorId);'>&lt;img src="/coreWeb/images/godzilla.gif" width="48" height="66" hspace="10" align="center" vspace="10" border="6" onmouseout="swapImage(this,'/coreWeb/images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/images/godzillaRollover.gif')">&lt;/a>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.Godzilla="Godzilla"
+-->
+&lt;/script>
+
+
+&lt;/td>&lt;td>
+&lt;p id="formOut_operation">Operation:&lt;/p>
+&lt;p id="formOut">Form:&lt;/p>
+&lt;p id="text">Text:&lt;/p>
+&lt;p id="textArea">TextArea:&lt;/p>
+&lt;p id="checkboxGroup">Checkbox Group:&lt;/p>
+&lt;p id="label">Label:&lt;/p>
+&lt;p id="checkbox">Checkbox:&lt;/p>
+&lt;p id="radio">Radio:&lt;/p>
+&lt;p id="select">Select:&lt;/p>
+&lt;p id="selectOption">Select Option:&lt;/p>
+&lt;p id="hidden">Hidden:&lt;/p>
+&lt;p id="button">Button:&lt;/p>
+&lt;p id="imageButton">ImageButton:&lt;/p>
+&lt;p id="anchor">Anchor:&lt;/p>
+&lt;p id="image">Image:&lt;/p>
+&lt;p id="imageAnchor">ImageAnchor:&lt;/p>
+&lt;/td>&lt;/tr>&lt;/table>
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 10:52:25.313 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/OverloadedActions.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/OverloadedActions.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,999 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>OverloadedActions</sessionName>
+  <tester>rich</tester>
+  <startDate>12 May 2004, 03:37:01.110 PM MDT</startDate>
+  <description>Tests returning to overloaded actions from a nested page flow, with and without forms.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/overloadedActions/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2375904:fc7b22da6b:-7e8d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>getActions test</title>
+</head>
+<body bgcolor="white">
+
+<h3>getActions test</h3>
+
+<font color="Blue"><span></span></font><br><br>
+
+Actions in this pageflow:
+<ul>
+
+        <li><span>normalReturnWithForm</span>
+    
+        <li><span>nestReturnForm1</span>
+    
+        <li><span>nestReturnUnknownForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form1</span>
+    
+        <li><span>nestReturnNormalWithoutForm</span>
+    
+        <li><span>normalReturnWithoutForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form2</span>
+    
+        <li><span>nestReturnNormalWithForm</span>
+    
+        <li><span>overloaded_</span>
+    
+        <li><span>nestReturnForm2</span>
+    
+        <li><span>conflictsWithNonAction</span>
+    
+        <li><span>nestReturnNoForm</span>
+    
+        <li><span>begin</span>
+    
+        <li><span>overloaded</span>
+    
+</ul>
+
+<br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNoForm.do">nest, and return to overloaded action with no form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm1.do">nest, and return to overloaded action with Form1</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm2.do">nest, and return to overloaded action with Form2</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnUnknownForm.do">nest, and return to overloaded action with unknown form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithForm.do">nest, and return with a form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithoutForm.do">nest, and return with no form</a><br>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/overloadedActions/nestReturnNoForm.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2375904:fc7b22da6b:-7e8d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>getActions test</title>
+</head>
+<body bgcolor="white">
+
+<h3>getActions test</h3>
+
+<font color="Blue"><span>overloaded()</span></font><br><br>
+
+Actions in this pageflow:
+<ul>
+
+        <li><span>normalReturnWithForm</span>
+    
+        <li><span>nestReturnForm1</span>
+    
+        <li><span>nestReturnUnknownForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form1</span>
+    
+        <li><span>nestReturnNormalWithoutForm</span>
+    
+        <li><span>normalReturnWithoutForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form2</span>
+    
+        <li><span>nestReturnNormalWithForm</span>
+    
+        <li><span>overloaded_</span>
+    
+        <li><span>nestReturnForm2</span>
+    
+        <li><span>conflictsWithNonAction</span>
+    
+        <li><span>nestReturnNoForm</span>
+    
+        <li><span>begin</span>
+    
+        <li><span>overloaded</span>
+    
+</ul>
+
+<br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNoForm.do">nest, and return to overloaded action with no form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm1.do">nest, and return to overloaded action with Form1</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm2.do">nest, and return to overloaded action with Form2</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnUnknownForm.do">nest, and return to overloaded action with unknown form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithForm.do">nest, and return with a form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithoutForm.do">nest, and return with no form</a><br>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/overloadedActions/nestReturnForm1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2375904:fc7b22da6b:-7e8d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>getActions test</title>
+</head>
+<body bgcolor="white">
+
+<h3>getActions test</h3>
+
+<font color="Blue"><span>overloaded( Form1 )</span></font><br><br>
+
+Actions in this pageflow:
+<ul>
+
+        <li><span>normalReturnWithForm</span>
+    
+        <li><span>nestReturnForm1</span>
+    
+        <li><span>nestReturnUnknownForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form1</span>
+    
+        <li><span>nestReturnNormalWithoutForm</span>
+    
+        <li><span>normalReturnWithoutForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form2</span>
+    
+        <li><span>nestReturnNormalWithForm</span>
+    
+        <li><span>overloaded_</span>
+    
+        <li><span>nestReturnForm2</span>
+    
+        <li><span>conflictsWithNonAction</span>
+    
+        <li><span>nestReturnNoForm</span>
+    
+        <li><span>begin</span>
+    
+        <li><span>overloaded</span>
+    
+</ul>
+
+<br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNoForm.do">nest, and return to overloaded action with no form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm1.do">nest, and return to overloaded action with Form1</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm2.do">nest, and return to overloaded action with Form2</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnUnknownForm.do">nest, and return to overloaded action with unknown form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithForm.do">nest, and return with a form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithoutForm.do">nest, and return with no form</a><br>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/overloadedActions/nestReturnForm2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2375904:fc7b22da6b:-7e8d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>getActions test</title>
+</head>
+<body bgcolor="white">
+
+<h3>getActions test</h3>
+
+<font color="Blue"><span>overloaded( Form2 )</span></font><br><br>
+
+Actions in this pageflow:
+<ul>
+
+        <li><span>normalReturnWithForm</span>
+    
+        <li><span>nestReturnForm1</span>
+    
+        <li><span>nestReturnUnknownForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form1</span>
+    
+        <li><span>nestReturnNormalWithoutForm</span>
+    
+        <li><span>normalReturnWithoutForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form2</span>
+    
+        <li><span>nestReturnNormalWithForm</span>
+    
+        <li><span>overloaded_</span>
+    
+        <li><span>nestReturnForm2</span>
+    
+        <li><span>conflictsWithNonAction</span>
+    
+        <li><span>nestReturnNoForm</span>
+    
+        <li><span>begin</span>
+    
+        <li><span>overloaded</span>
+    
+</ul>
+
+<br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNoForm.do">nest, and return to overloaded action with no form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm1.do">nest, and return to overloaded action with Form1</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm2.do">nest, and return to overloaded action with Form2</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnUnknownForm.do">nest, and return to overloaded action with unknown form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithForm.do">nest, and return with a form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithoutForm.do">nest, and return with no form</a><br>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/overloadedActions/nestReturnNormalWithForm.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2375904:fc7b22da6b:-7e8d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>getActions test</title>
+</head>
+<body bgcolor="white">
+
+<h3>getActions test</h3>
+
+<font color="Blue"><span>normalReturnWithForm( Form1 )</span></font><br><br>
+
+Actions in this pageflow:
+<ul>
+
+        <li><span>normalReturnWithForm</span>
+    
+        <li><span>nestReturnForm1</span>
+    
+        <li><span>nestReturnUnknownForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form1</span>
+    
+        <li><span>nestReturnNormalWithoutForm</span>
+    
+        <li><span>normalReturnWithoutForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form2</span>
+    
+        <li><span>nestReturnNormalWithForm</span>
+    
+        <li><span>overloaded_</span>
+    
+        <li><span>nestReturnForm2</span>
+    
+        <li><span>conflictsWithNonAction</span>
+    
+        <li><span>nestReturnNoForm</span>
+    
+        <li><span>begin</span>
+    
+        <li><span>overloaded</span>
+    
+</ul>
+
+<br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNoForm.do">nest, and return to overloaded action with no form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm1.do">nest, and return to overloaded action with Form1</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm2.do">nest, and return to overloaded action with Form2</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnUnknownForm.do">nest, and return to overloaded action with unknown form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithForm.do">nest, and return with a form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithoutForm.do">nest, and return with no form</a><br>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/overloadedActions/nestReturnNormalWithoutForm.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2375904:fc7b22da6b:-7e8d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>getActions test</title>
+</head>
+<body bgcolor="white">
+
+<h3>getActions test</h3>
+
+<font color="Blue"><span>normalReturnWithoutForm()</span></font><br><br>
+
+Actions in this pageflow:
+<ul>
+
+        <li><span>normalReturnWithForm</span>
+    
+        <li><span>nestReturnForm1</span>
+    
+        <li><span>nestReturnUnknownForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form1</span>
+    
+        <li><span>nestReturnNormalWithoutForm</span>
+    
+        <li><span>normalReturnWithoutForm</span>
+    
+        <li><span>overloaded_miniTests_overloadedActions_Controller_Form2</span>
+    
+        <li><span>nestReturnNormalWithForm</span>
+    
+        <li><span>overloaded_</span>
+    
+        <li><span>nestReturnForm2</span>
+    
+        <li><span>conflictsWithNonAction</span>
+    
+        <li><span>nestReturnNoForm</span>
+    
+        <li><span>begin</span>
+    
+        <li><span>overloaded</span>
+    
+</ul>
+
+<br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNoForm.do">nest, and return to overloaded action with no form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm1.do">nest, and return to overloaded action with Form1</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnForm2.do">nest, and return to overloaded action with Form2</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnUnknownForm.do">nest, and return to overloaded action with unknown form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithForm.do">nest, and return with a form</a><br>
+<a href="/coreWeb/miniTests/overloadedActions/nestReturnNormalWithoutForm.do">nest, and return with no form</a><br>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/overloadedActions/nestReturnUnknownForm.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiYKjB24nHvQH3iGmlCgICg8fkug5Mj4gtg3gvmeTZGCXeH8FKvE!-2067573207</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2375904:fc7b22da6b:-7e8d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - Action Not Found</title></head>
+ <body>
+ <h1>Page Flow Error - Action Not Found</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/miniTests/overloadedActions/Controller.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>overloaded</td></tr>
+ <tr><td><b>Form:</b></td><td>miniTests.overloadedActions.nested.Controller$UnknownForm</td></tr>
+ </table><br />
+ <span style="color:red">Unable to find matching action <b>overloaded</b>.</span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>12 May 2004, 03:37:03.579 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>7</testCount>
+  <passedCount>6</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PadRepeater.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PadRepeater.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PadRepeater</sessionName>
+  <tester>daryl</tester>
+  <startDate>14 Jan 2003, 08:27:42.509 PM MST</startDate>
+  <description>Test of the repeater Pad tag.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/padRepeater/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2kVZzDVbfpJI8ixM2P4Y2HKcNsb0ifhyXyKPkbkBkUAtJ42yDLRX!59368131</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2kVZzDVbfpJI8ixM2P4Y2HKcNsb0ifhyXyKPkbkBkUAtJ42yDLRX!59368131</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Padding Repeater</title>
+</head>
+<body>
+<h4>Padding Repeater</h4>
+<b>Repeater to Six</b>
+<table border="1" cellpadding="0" cellspacing="0"><tr><td width="100pt"><span>String 1</span></td>
+     <td width="100pt"><span>String 2</span></td>
+     <td width="100pt"><span>String 3</span></td>
+     <td width="100pt"><span>String 4</span></td>
+     <td width="100pt">&nbsp</td><td width="100pt">&nbsp</td></tr></table>
+<hr />
+<b>Max to three</b>
+<table border="1" cellpadding="0" cellspacing="0"><tr><td width="100pt"><span>String 1</span></td>
+     <td width="100pt"><span>String 2</span></td>
+     <td width="100pt"><span>String 3</span></td>
+     </tr></table>
+<hr />
+<b>Min to three</b>
+<table border="1" cellpadding="0" cellspacing="0"><tr><td width="100pt"><span>String 1</span></td>
+     <td width="100pt"><span>String 2</span></td>
+     <td width="100pt"><span>String 3</span></td>
+     <td width="100pt"><span>String 4</span></td>
+     </tr></table>
+<hr />
+<b>Min to six</b>
+<table border="1" cellpadding="0" cellspacing="0"><tr><td width="100pt"><span>String 1</span></td>
+     <td width="100pt"><span>String 2</span></td>
+     <td width="100pt"><span>String 3</span></td>
+     <td width="100pt"><span>String 4</span></td>
+     <td width="100pt">&nbsp</td><td width="100pt">&nbsp</td></tr></table>
+<hr />
+<b>Use the padText Attribute</b>
+<table border="1" cellpadding="0" cellspacing="0"><tr><td width="100pt"><span>String 1</span></td>
+     <td width="100pt"><span>String 2</span></td>
+     <td width="100pt"><span>String 3</span></td>
+     <td width="100pt"><span>String 4</span></td>
+     <td width="100pt">&nbsp;</td><td width="100pt">&nbsp;</td></tr></table>
+<hr />
+<b>Databind Min and Text</b>
+<table border="1" cellpadding="0" cellspacing="0"><tr><td width="100pt"><span>String 1</span></td>
+     <td width="100pt"><span>String 2</span></td>
+     <td width="100pt"><span>String 3</span></td>
+     <td width="100pt"><span>String 4</span></td>
+     <td width="100pt">missing</td><td width="100pt">missing</td></tr></table>
+<hr />
+<b>Databind Max and Text</b>
+<table border="1" cellpadding="0" cellspacing="0"><tr><td width="100pt"><span>String 1</span></td>
+     <td width="100pt"><span>String 2</span></td>
+     <td width="100pt"><span>String 3</span></td>
+     </tr></table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>14 Jan 2003, 08:28:59.654 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageFlowUtils.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageFlowUtils.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageFlowUtils</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:26:11.488 PM MST</startDate>
+  <description>Tests of utility methods in PageFlowUtils</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d3c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+ 
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            PageFlowUtils
+        </title>
+    </head>
+    <body>
+        <h3>PageFlowUtils</h3>
+        
+        
+        
+        
+        
+        <code>getCurrentPageFlow( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getModulePath( request )</code>:
+            /miniTests/pageFlowUtils<br>
+
+        <code>getModulePath( request, "/coreWeb/foo/bar/baz.jpf" )</code>:
+            /foo/bar<br>
+
+        <code>getModulePathForRelativeURI( request, "/foo/bar/baz.jpf" )</code>:
+            /foo/bar<br>
+            
+        <code>getRelativeURI( request, curJPF )</code>:
+            /index.jsp<br>
+            
+        <code>getRelativeURI( request, "/coreWeb/foo/bar/baz.jsp", curJPF )</code>:
+            /coreWeb/foo/bar/baz.jsp<br>
+            
+        <code>getRelativeURI( request, "/coreWeb/miniTests/pageFlowUtils/foo.jsp", curJPF )</code>:
+            /foo.jsp<br>
+            
+        <code>getBeginActionURI( "/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf" )</code>:
+            /coreWeb/miniTests/pageFlowUtils/begin.do<br>
+
+        <code>ensureCurrentPageFlow( request, response )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>ensureCurrentPageFlow( request, response, servletContext )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getCurrentPageFlow( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getCurrentActionResolver( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>ensureGlobalApp( request, response )</code>:
+            global.Global<br>
+
+        <code>ensureGlobalApp( request, response, cxt )</code>:
+            global.Global<br>
+
+        <code>getGlobalApp( request )</code>:
+            global.Global<br>
+
+        <code>getFormBeanName( new TestForm(), request )</code>:
+            testForm<br>
+
+        <code>getFormBeanName( TestForm.class, request )</code>:
+            testForm<br>
+
+        <code>getFormBeanName( ActionForm.class, request )</code>:
+            actionForm<br>
+
+        <code>getJpfClassName( "/foo/bar/barController.jpf" )</code>:
+            foo.bar.barController<br>
+
+        <code>getPageFlowURI( "foo.bar.barController" )</code>:
+            /foo/bar/barController.jpf<br>
+
+        <code>getModuleConfPath( "/foo/bar" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config-foo-bar.xml<br>
+
+        <code>getModuleConfPath( "/" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml<br>
+
+        <code>getModuleConfPath( "" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml<br>
+
+        <code>getActionURI( request )</code>:
+            /coreWeb/miniTests/pageFlowUtils/begin.do<br>
+
+        <code>getGlobalAppConfig( servletContext ).getPrefix()</code>:
+            /-global<br>
+
+        <code>ensureModuleConfig( "/miniTests/pageFlowUtils/another", request, servletContext ).getPrefix()</code>:
+            /miniTests/pageFlowUtils/another<br>
+
+        <code>getModuleConfig( "/miniTests/pageFlowUtils/another", servletContext )</code>:
+            org.apache.struts.config.impl.ModuleConfigImpl<br>
+
+        <code>isAbsoluteURI( "foo" )</code>:
+            false<br>
+
+        <code>isAbsoluteURI( "/foo" )</code>:
+            false<br>
+
+        <code>isAbsoluteURI( "http://www.foo.com" )</code>:
+            true<br>
+
+        <code>getFileExtension( "foo.txt" )</code>:
+            txt<br>
+
+        <code>getFileExtension( "foo" )</code>:
+            <br>
+
+        <br>
+        <br>
+
+        <a href="/coreWeb/miniTests/pageFlowUtils/goNested.do">go to nested/nestedController.jpf</a>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/security.do">tests of isSecureResource()</a>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/validation.do">tests of addValidationError()</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageFlowUtils/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d3c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested (PageFlowUtils Tests)
+        </title>
+    </head>
+    <body>
+        <h3>Nested (PageFlowUtils Tests)</h3>
+        
+        
+        <code>getPageFlowStack( request )</code>:
+            java.util.Stack<br>
+
+        <code>getNestingPageFlow( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/nested/done.do">Exit nested</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageFlowUtils/nested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d3c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+ 
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            PageFlowUtils
+        </title>
+    </head>
+    <body>
+        <h3>PageFlowUtils</h3>
+        
+        
+        
+        
+        
+        <code>getCurrentPageFlow( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getModulePath( request )</code>:
+            /miniTests/pageFlowUtils<br>
+
+        <code>getModulePath( request, "/coreWeb/foo/bar/baz.jpf" )</code>:
+            /foo/bar<br>
+
+        <code>getModulePathForRelativeURI( request, "/foo/bar/baz.jpf" )</code>:
+            /foo/bar<br>
+            
+        <code>getRelativeURI( request, curJPF )</code>:
+            /index.jsp<br>
+            
+        <code>getRelativeURI( request, "/coreWeb/foo/bar/baz.jsp", curJPF )</code>:
+            /coreWeb/foo/bar/baz.jsp<br>
+            
+        <code>getRelativeURI( request, "/coreWeb/miniTests/pageFlowUtils/foo.jsp", curJPF )</code>:
+            /foo.jsp<br>
+            
+        <code>getBeginActionURI( "/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf" )</code>:
+            /coreWeb/miniTests/pageFlowUtils/begin.do<br>
+
+        <code>ensureCurrentPageFlow( request, response )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>ensureCurrentPageFlow( request, response, servletContext )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getCurrentPageFlow( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getCurrentActionResolver( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>ensureGlobalApp( request, response )</code>:
+            global.Global<br>
+
+        <code>ensureGlobalApp( request, response, cxt )</code>:
+            global.Global<br>
+
+        <code>getGlobalApp( request )</code>:
+            global.Global<br>
+
+        <code>getFormBeanName( new TestForm(), request )</code>:
+            testForm<br>
+
+        <code>getFormBeanName( TestForm.class, request )</code>:
+            testForm<br>
+
+        <code>getFormBeanName( ActionForm.class, request )</code>:
+            actionForm<br>
+
+        <code>getJpfClassName( "/foo/bar/barController.jpf" )</code>:
+            foo.bar.barController<br>
+
+        <code>getPageFlowURI( "foo.bar.barController" )</code>:
+            /foo/bar/barController.jpf<br>
+
+        <code>getModuleConfPath( "/foo/bar" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config-foo-bar.xml<br>
+
+        <code>getModuleConfPath( "/" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml<br>
+
+        <code>getModuleConfPath( "" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml<br>
+
+        <code>getActionURI( request )</code>:
+            /coreWeb/miniTests/pageFlowUtils/nestedDone.do<br>
+
+        <code>getGlobalAppConfig( servletContext ).getPrefix()</code>:
+            /-global<br>
+
+        <code>ensureModuleConfig( "/miniTests/pageFlowUtils/another", request, servletContext ).getPrefix()</code>:
+            /miniTests/pageFlowUtils/another<br>
+
+        <code>getModuleConfig( "/miniTests/pageFlowUtils/another", servletContext )</code>:
+            org.apache.struts.config.impl.ModuleConfigImpl<br>
+
+        <code>isAbsoluteURI( "foo" )</code>:
+            false<br>
+
+        <code>isAbsoluteURI( "/foo" )</code>:
+            false<br>
+
+        <code>isAbsoluteURI( "http://www.foo.com" )</code>:
+            true<br>
+
+        <code>getFileExtension( "foo.txt" )</code>:
+            txt<br>
+
+        <code>getFileExtension( "foo" )</code>:
+            <br>
+
+        <br>
+        <br>
+
+        <a href="/coreWeb/miniTests/pageFlowUtils/goNested.do">go to nested/nestedController.jpf</a>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/security.do">tests of isSecureResource()</a>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/validation.do">tests of addValidationError()</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageFlowUtils/security.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d3c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            PageFlowUtils - isSecureResource
+        </title>
+    </head>
+    <body>
+        
+        
+        <code>isSecureResource( "/miniTests/pageFlowUtils/secure/foo.jsp", servletContext )</code>:
+            true<br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/secureFoo.do", servletContext )</code>:
+            true<br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsSecure", servletContext )</code>:
+            true<br>
+        
+        <br>
+        
+        <code>isSecureResource( "/miniTests/pageFlowUtils/unsecure/foo.jsp", servletContext )</code>:
+            false<br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/unsecureFoo.do", servletContext )</code>:
+            false<br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsUnsecure", servletContext )</code>:
+            false<br>
+        
+        <br>
+        
+        <code>isSecureResource( "/miniTests/pageFlowUtils/nothing/foo.jsp", servletContext )</code>:
+            null<br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/nothingFoo.do", servletContext )</code>:
+            null<br>
+
+        <code>isSecureResource( "/miniTests/pageFlowUtils/foo.pageFlowUtilsNothing", servletContext )</code>:
+            null<br>
+        
+        
+                
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/begin.do">go back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageFlowUtils/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d3c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+ 
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            PageFlowUtils
+        </title>
+    </head>
+    <body>
+        <h3>PageFlowUtils</h3>
+        
+        
+        
+        
+        
+        <code>getCurrentPageFlow( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getModulePath( request )</code>:
+            /miniTests/pageFlowUtils<br>
+
+        <code>getModulePath( request, "/coreWeb/foo/bar/baz.jpf" )</code>:
+            /foo/bar<br>
+
+        <code>getModulePathForRelativeURI( request, "/foo/bar/baz.jpf" )</code>:
+            /foo/bar<br>
+            
+        <code>getRelativeURI( request, curJPF )</code>:
+            /index.jsp<br>
+            
+        <code>getRelativeURI( request, "/coreWeb/foo/bar/baz.jsp", curJPF )</code>:
+            /coreWeb/foo/bar/baz.jsp<br>
+            
+        <code>getRelativeURI( request, "/coreWeb/miniTests/pageFlowUtils/foo.jsp", curJPF )</code>:
+            /foo.jsp<br>
+            
+        <code>getBeginActionURI( "/coreWeb/miniTests/pageFlowUtils/pageFlowUtilsController.jpf" )</code>:
+            /coreWeb/miniTests/pageFlowUtils/begin.do<br>
+
+        <code>ensureCurrentPageFlow( request, response )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>ensureCurrentPageFlow( request, response, servletContext )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getCurrentPageFlow( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>getCurrentActionResolver( request )</code>:
+            miniTests.pageFlowUtils.pageFlowUtilsController<br>
+
+        <code>ensureGlobalApp( request, response )</code>:
+            global.Global<br>
+
+        <code>ensureGlobalApp( request, response, cxt )</code>:
+            global.Global<br>
+
+        <code>getGlobalApp( request )</code>:
+            global.Global<br>
+
+        <code>getFormBeanName( new TestForm(), request )</code>:
+            testForm<br>
+
+        <code>getFormBeanName( TestForm.class, request )</code>:
+            testForm<br>
+
+        <code>getFormBeanName( ActionForm.class, request )</code>:
+            actionForm<br>
+
+        <code>getJpfClassName( "/foo/bar/barController.jpf" )</code>:
+            foo.bar.barController<br>
+
+        <code>getPageFlowURI( "foo.bar.barController" )</code>:
+            /foo/bar/barController.jpf<br>
+
+        <code>getModuleConfPath( "/foo/bar" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config-foo-bar.xml<br>
+
+        <code>getModuleConfPath( "/" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml<br>
+
+        <code>getModuleConfPath( "" )</code>:
+            /WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml<br>
+
+        <code>getActionURI( request )</code>:
+            /coreWeb/miniTests/pageFlowUtils/begin.do<br>
+
+        <code>getGlobalAppConfig( servletContext ).getPrefix()</code>:
+            /-global<br>
+
+        <code>ensureModuleConfig( "/miniTests/pageFlowUtils/another", request, servletContext ).getPrefix()</code>:
+            /miniTests/pageFlowUtils/another<br>
+
+        <code>getModuleConfig( "/miniTests/pageFlowUtils/another", servletContext )</code>:
+            org.apache.struts.config.impl.ModuleConfigImpl<br>
+
+        <code>isAbsoluteURI( "foo" )</code>:
+            false<br>
+
+        <code>isAbsoluteURI( "/foo" )</code>:
+            false<br>
+
+        <code>isAbsoluteURI( "http://www.foo.com" )</code>:
+            true<br>
+
+        <code>getFileExtension( "foo.txt" )</code>:
+            txt<br>
+
+        <code>getFileExtension( "foo" )</code>:
+            <br>
+
+        <br>
+        <br>
+
+        <a href="/coreWeb/miniTests/pageFlowUtils/goNested.do">go to nested/nestedController.jpf</a>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/security.do">tests of isSecureResource()</a>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/validation.do">tests of addValidationError()</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageFlowUtils/validation.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d3c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            PageFlowUtils - validation errors
+        </title>
+    </head>
+    <body>
+        <h3>PageFlowUtils - validation errors</h3>
+        
+        <code>&lt;netui:error&gt</code>:
+        <blockquote>
+            <font color="red">This message has no arguments.
+</font>
+            <br>
+            <font color="red">This message has a single argument: <b>arg1</b>.
+</font>
+            <br>
+            <font color="red">This message has three arguments: <b>arg1</b>, <b>arg2</b>, and <b>arg3</b>.
+</font>
+            <br>
+        </blockquote>
+
+        <code>&lt;netui:errors&gt</code>:
+        <blockquote>
+            <font color="red"><ul>
+<li>This message has no arguments.
+</li><li>This message has a single argument: <b>arg1</b>.
+</li><li>This message has three arguments: <b>arg1</b>, <b>arg2</b>, and <b>arg3</b>.
+</li></ul></font>
+
+        </blockquote>
+        
+                       
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/pageFlowUtils/begin.do">go back</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:26:20.190 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>6</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>6</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest1</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>16 Sep 2003, 05:59:21.853 PM MDT</startDate>
+  <description>Test the new Forward constructor that supports pageInput.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1njjQfBbui5cXahM2qUwYykdOh73YsRrvORpFrJY6ONX1uPCwg69!-1749197039</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1njjQfBbui5cXahM2qUwYykdOh73YsRrvORpFrJY6ONX1uPCwg69!-1749197039</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test1/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test1</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test1 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            
+
+            PageInput value1: <span>PageValue 1</span>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test1/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test1/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1njjQfBbui5cXahM2qUwYykdOh73YsRrvORpFrJY6ONX1uPCwg69!-1749197039</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1njjQfBbui5cXahM2qUwYykdOh73YsRrvORpFrJY6ONX1uPCwg69!-1749197039</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test1/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test1</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test1 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            
+
+            PageInput value2: <span>PageValue 2</span>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test1/action2.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test1/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1njjQfBbui5cXahM2qUwYykdOh73YsRrvORpFrJY6ONX1uPCwg69!-1749197039</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1njjQfBbui5cXahM2qUwYykdOh73YsRrvORpFrJY6ONX1uPCwg69!-1749197039</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test1/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test1</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test1 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            
+
+            PageInput value2: <span>PageValue 1</span>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test1/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test1/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1njjQfBbui5cXahM2qUwYykdOh73YsRrvORpFrJY6ONX1uPCwg69!-1749197039</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1njjQfBbui5cXahM2qUwYykdOh73YsRrvORpFrJY6ONX1uPCwg69!-1749197039</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test1/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>16 Sep 2003, 05:59:40.546 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest10.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest10.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,379 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest10</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>18 Aug 2003, 03:23:01.686 PM MDT</startDate>
+  <description>Test passing a formBean to a nested pageflow that displays it as pageInput.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test10/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1BDTfJTdDzW3bn0fkBYVMtDyb2Lf41J6wq2u1spox3uCojToyLZl!504443277</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1BDTfJTdDzW3bn0fkBYVMtDyb2Lf41J6wq2u1spox3uCojToyLZl!504443277</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test10/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test10</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test10 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>Field one value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>Field two value</span>"
+            </font>
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <a href="/coreWeb/pageInput/test10/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test10/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1BDTfJTdDzW3bn0fkBYVMtDyb2Lf41J6wq2u1spox3uCojToyLZl!504443277</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1BDTfJTdDzW3bn0fkBYVMtDyb2Lf41J6wq2u1spox3uCojToyLZl!504443277</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test10/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test10</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test10 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>New - Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>New - Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <a href="/coreWeb/pageInput/test10/sub1/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test10/sub1/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1BDTfJTdDzW3bn0fkBYVMtDyb2Lf41J6wq2u1spox3uCojToyLZl!504443277</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1BDTfJTdDzW3bn0fkBYVMtDyb2Lf41J6wq2u1spox3uCojToyLZl!504443277</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test10/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test10</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test10 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>New - Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>New - Page Input form field 2 value</span>"
+            </font>
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <a href="/coreWeb/pageInput/test10/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test10/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1BDTfJTdDzW3bn0fkBYVMtDyb2Lf41J6wq2u1spox3uCojToyLZl!504443277</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1BDTfJTdDzW3bn0fkBYVMtDyb2Lf41J6wq2u1spox3uCojToyLZl!504443277</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test10/sub1/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>18 Aug 2003, 03:23:24.907 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest12.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest12.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,460 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest12</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:13:16.491 AM MST</startDate>
+  <description>Test having the formBean "validate' method change the pageInput values then return errors.  What pageInput values get restored when you return to the page.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test12/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7788</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test12</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test12 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         
+         
+
+         {pageInput.pgInput1}:
+         <font color="blue">
+            "<span>Page Input field 1 value</span>"
+         </font>
+         <br/>
+         {pageInput.pgInput2}:
+         <font color="blue">
+            "<span>Page Input field 2 value</span>"
+         </font>
+
+         <br/><br/>
+         <hr width="95%"/>
+         <br/>
+         <form name="formOne" action="/coreWeb/pageInput/test12/action1.do" method="post">
+            {actionForm.fld1}:
+               <input type="text" name="{actionForm.fld1}" value="Field one value">
+               
+             <br/>
+             {actionForm.fld2}:
+                <input type="text" name="{actionForm.fld2}" value="Field two value">
+                
+             <br/><br/>
+             <input type="submit" name="actionOverride:action1" value="Continue...">
+         </form>
+
+         
+         <br/>
+         <font color="green">
+            <b>
+               You will visit this page twice.  Just press "continue" each time.
+            </b>
+            <br/>
+            <p align="left">
+            - The first time the form fields and the pageInput fields will
+              display.  Note their values.<br/>
+            - The second time the same form and pageInput fields will display
+             along with some error messages.  Make sure the pageInput fields
+             data is present and has the same value as the first time. The form
+             data will change.  That's expected.
+            </p>
+         </font>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test12/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:action1</name>
+          <value>Continue...</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.fld1}</name>
+          <value>Field one value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.fld2}</name>
+          <value>Field two value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>112</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7788</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test12</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test12 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         
+         
+
+         {pageInput.pgInput1}:
+         <font color="blue">
+            "<span>Page Input field 1 value</span>"
+         </font>
+         <br/>
+         {pageInput.pgInput2}:
+         <font color="blue">
+            "<span>Page Input field 2 value</span>"
+         </font>
+
+         <br/><br/>
+         <hr width="95%"/>
+         <br/>
+         <form name="formOne" action="/coreWeb/pageInput/test12/action1.do" method="post">
+            {actionForm.fld1}:
+               <input type="text" name="{actionForm.fld1}" value="Field 1 value - pass">
+               <li class="error">Field1 had an invalid value.</li>
+
+             <br/>
+             {actionForm.fld2}:
+                <input type="text" name="{actionForm.fld2}" value="Field 2 value - pass">
+                <li class="error">Field2 had an invalid value.</li>
+
+             <br/><br/>
+             <input type="submit" name="actionOverride:action1" value="Continue...">
+         </form>
+
+         <br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Correction(s) required:</span><ul>
+<li class="error">Field1 had an invalid value.</li>
+<li class="error">Field2 had an invalid value.</li>
+</ul></td></tr></table>
+
+         <br/>
+         <font color="green">
+            <b>
+               You will visit this page twice.  Just press "continue" each time.
+            </b>
+            <br/>
+            <p align="left">
+            - The first time the form fields and the pageInput fields will
+              display.  Note their values.<br/>
+            - The second time the same form and pageInput fields will display
+             along with some error messages.  Make sure the pageInput fields
+             data is present and has the same value as the first time. The form
+             data will change.  That's expected.
+            </p>
+         </font>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test12/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:action1</name>
+          <value>Continue...</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.fld1}</name>
+          <value>Field 1 value - pass</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.fld2}</name>
+          <value>Field 2 value - pass</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>122</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7788</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:13:18.393 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest14.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest14.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest14</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>04 Sep 2003, 10:32:47.166 AM MDT</startDate>
+  <description>Test the new
+netui-data:declarePageInput tag accepting special characters for the name attribute.  Bug 39549 when fixed may brake this test.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test14/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1Xo1uGQDuHaLVcSA0QowUjdXIRBi3bLnw28tZrLou3tHizfVJheY!892773457</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1Xo1uGQDuHaLVcSA0QowUjdXIRBi3bLnw28tZrLou3tHizfVJheY!892773457</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test14/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test14</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test14 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            
+            
+            
+
+            PageInput value1: <font color="blue">"<span>{pageInput.XYZ&amp;%#}</span>"</font>
+            <br/>
+            PageInput value2: <font color="blue">"<span>PageValue 2</span>"</font>
+            <br/>
+            PageInput value3: <font color="blue">"<span></span>"</font>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test14/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test14/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1Xo1uGQDuHaLVcSA0QowUjdXIRBi3bLnw28tZrLou3tHizfVJheY!892773457</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1Xo1uGQDuHaLVcSA0QowUjdXIRBi3bLnw28tZrLou3tHizfVJheY!892773457</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test14/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>04 Sep 2003, 10:33:03.074 AM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest18.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest18.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,471 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest18</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>05 Sep 2003, 05:00:51.823 PM MDT</startDate>
+  <description>Test the pageInput data-binding context with the netui:reapeater tags.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test18/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ZV0rEzFP9x4lp0qJua3sbWOWQa1TPFcZPJ1eUMhTciut56y0emt!1593380382</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ZV0rEzFP9x4lp0qJua3sbWOWQa1TPFcZPJ1eUMhTciut56y0emt!1593380382</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test18/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test18</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test18 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with PageInput</font></h2>
+         <br/><br/>
+         
+
+         
+                  <li>Repeater string: 0</li>
+               
+                  <li>Repeater string: 1</li>
+               
+                  <li>Repeater string: 2</li>
+               
+                  <li>Repeater string: 3</li>
+               
+                  <li>Repeater string: 4</li>
+               
+                  <li>Repeater string: 5</li>
+               
+                  <li>Repeater string: 6</li>
+               
+                  <li>Repeater string: 7</li>
+               
+                  <li>Repeater string: 8</li>
+               
+                  <li>Repeater string: 9</li>
+               
+                  <li>Repeater string: 10</li>
+               
+                  <li>Repeater string: 11</li>
+               
+                  <li>Repeater string: 12</li>
+               
+                  <li>Repeater string: 13</li>
+               
+                  <li>Repeater string: 14</li>
+               
+                  <li>Repeater string: 15</li>
+               
+                  <li>Repeater string: 16</li>
+               
+                  <li>Repeater string: 17</li>
+               
+                  <li>Repeater string: 18</li>
+               
+                  <li>Repeater string: 19</li>
+               
+                  <li>Repeater string: 20</li>
+               
+                  <li>Repeater string: 21</li>
+               
+                  <li>Repeater string: 22</li>
+               
+                  <li>Repeater string: 23</li>
+               
+                  <li>Repeater string: 24</li>
+               
+                  <li>Repeater string: 25</li>
+               
+                  <li>Repeater string: 26</li>
+               
+                  <li>Repeater string: 27</li>
+               
+                  <li>Repeater string: 28</li>
+               
+                  <li>Repeater string: 29</li>
+               
+                  <li>Repeater string: 30</li>
+               
+                  <li>Repeater string: 31</li>
+               
+                  <li>Repeater string: 32</li>
+               
+                  <li>Repeater string: 33</li>
+               
+                  <li>Repeater string: 34</li>
+               
+                  <li>Repeater string: 35</li>
+               
+                  <li>Repeater string: 36</li>
+               
+                  <li>Repeater string: 37</li>
+               
+                  <li>Repeater string: 38</li>
+               
+                  <li>Repeater string: 39</li>
+               
+                  <li>Repeater string: 40</li>
+               
+                  <li>Repeater string: 41</li>
+               
+                  <li>Repeater string: 42</li>
+               
+                  <li>Repeater string: 43</li>
+               
+                  <li>Repeater string: 44</li>
+               
+                  <li>Repeater string: 45</li>
+               
+                  <li>Repeater string: 46</li>
+               
+                  <li>Repeater string: 47</li>
+               
+                  <li>Repeater string: 48</li>
+               
+                  <li>Repeater string: 49</li>
+               
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test18/action1.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test18/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ZV0rEzFP9x4lp0qJua3sbWOWQa1TPFcZPJ1eUMhTciut56y0emt!1593380382</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ZV0rEzFP9x4lp0qJua3sbWOWQa1TPFcZPJ1eUMhTciut56y0emt!1593380382</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test18/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test18</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test18 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with PageInput</font></h2>
+         <br/><br/>
+         
+
+         
+                  <li>Repeater string: 0</li>
+               
+                  <li>Repeater string: 1</li>
+               
+                  <li>Repeater string: 2</li>
+               
+                  <li>Repeater string: 3</li>
+               
+                  <li>Repeater string: 4</li>
+               
+                  <li>Repeater string: 5</li>
+               
+                  <li>Repeater string: 6</li>
+               
+                  <li>Repeater string: 7</li>
+               
+                  <li>Repeater string: 8</li>
+               
+                  <li>Repeater string: 9</li>
+               
+                  <li>Repeater string: 10</li>
+               
+                  <li>Repeater string: 11</li>
+               
+                  <li>Repeater string: 12</li>
+               
+                  <li>Repeater string: 13</li>
+               
+                  <li>Repeater string: 14</li>
+               
+                  <li>Repeater string: 15</li>
+               
+                  <li>Repeater string: 16</li>
+               
+                  <li>Repeater string: 17</li>
+               
+                  <li>Repeater string: 18</li>
+               
+                  <li>Repeater string: 19</li>
+               
+                  <li>Repeater string: 20</li>
+               
+                  <li>Repeater string: 21</li>
+               
+                  <li>Repeater string: 22</li>
+               
+                  <li>Repeater string: 23</li>
+               
+                  <li>Repeater string: 24</li>
+               
+                  <li>Repeater string: 25</li>
+               
+                  <li>Repeater string: 26</li>
+               
+                  <li>Repeater string: 27</li>
+               
+                  <li>Repeater string: 28</li>
+               
+                  <li>Repeater string: 29</li>
+               
+                  <li>Repeater string: 30</li>
+               
+                  <li>Repeater string: 31</li>
+               
+                  <li>Repeater string: 32</li>
+               
+                  <li>Repeater string: 33</li>
+               
+                  <li>Repeater string: 34</li>
+               
+                  <li>Repeater string: 35</li>
+               
+                  <li>Repeater string: 36</li>
+               
+                  <li>Repeater string: 37</li>
+               
+                  <li>Repeater string: 38</li>
+               
+                  <li>Repeater string: 39</li>
+               
+                  <li>Repeater string: 40</li>
+               
+                  <li>Repeater string: 41</li>
+               
+                  <li>Repeater string: 42</li>
+               
+                  <li>Repeater string: 43</li>
+               
+                  <li>Repeater string: 44</li>
+               
+                  <li>Repeater string: 45</li>
+               
+                  <li>Repeater string: 46</li>
+               
+                  <li>Repeater string: 47</li>
+               
+                  <li>Repeater string: 48</li>
+               
+                  <li>Repeater string: 49</li>
+               
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test18/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test18/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ZV0rEzFP9x4lp0qJua3sbWOWQa1TPFcZPJ1eUMhTciut56y0emt!1593380382</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ZV0rEzFP9x4lp0qJua3sbWOWQa1TPFcZPJ1eUMhTciut56y0emt!1593380382</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test18/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>05 Sep 2003, 05:01:14.765 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest19.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest19.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,471 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest19</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>08 Sep 2003, 02:15:56.044 PM MDT</startDate>
+  <description>Test the pageInput data-binding context with the netui:reapeater tag and an "int" primative as the pageInput.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test19/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1cjvZqrPgBrvclBmjiVbCDVZljpHzYLwP0mH1PMtc9H5JDb6b7ON!-1913708353</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1cjvZqrPgBrvclBmjiVbCDVZljpHzYLwP0mH1PMtc9H5JDb6b7ON!-1913708353</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test19/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test19</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test19 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with PageInput</font></h2>
+         <br/><br/>
+         
+
+         
+                  <li>0</li>
+               
+                  <li>1</li>
+               
+                  <li>2</li>
+               
+                  <li>3</li>
+               
+                  <li>4</li>
+               
+                  <li>5</li>
+               
+                  <li>6</li>
+               
+                  <li>7</li>
+               
+                  <li>8</li>
+               
+                  <li>9</li>
+               
+                  <li>10</li>
+               
+                  <li>11</li>
+               
+                  <li>12</li>
+               
+                  <li>13</li>
+               
+                  <li>14</li>
+               
+                  <li>15</li>
+               
+                  <li>16</li>
+               
+                  <li>17</li>
+               
+                  <li>18</li>
+               
+                  <li>19</li>
+               
+                  <li>20</li>
+               
+                  <li>21</li>
+               
+                  <li>22</li>
+               
+                  <li>23</li>
+               
+                  <li>24</li>
+               
+                  <li>25</li>
+               
+                  <li>26</li>
+               
+                  <li>27</li>
+               
+                  <li>28</li>
+               
+                  <li>29</li>
+               
+                  <li>30</li>
+               
+                  <li>31</li>
+               
+                  <li>32</li>
+               
+                  <li>33</li>
+               
+                  <li>34</li>
+               
+                  <li>35</li>
+               
+                  <li>36</li>
+               
+                  <li>37</li>
+               
+                  <li>38</li>
+               
+                  <li>39</li>
+               
+                  <li>40</li>
+               
+                  <li>41</li>
+               
+                  <li>42</li>
+               
+                  <li>43</li>
+               
+                  <li>44</li>
+               
+                  <li>45</li>
+               
+                  <li>46</li>
+               
+                  <li>47</li>
+               
+                  <li>48</li>
+               
+                  <li>49</li>
+               
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test19/action1.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test19/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1cjvZqrPgBrvclBmjiVbCDVZljpHzYLwP0mH1PMtc9H5JDb6b7ON!-1913708353</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1cjvZqrPgBrvclBmjiVbCDVZljpHzYLwP0mH1PMtc9H5JDb6b7ON!-1913708353</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test19/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test19</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test19 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with PageInput</font></h2>
+         <br/><br/>
+         
+
+         
+                  <li>0</li>
+               
+                  <li>1</li>
+               
+                  <li>2</li>
+               
+                  <li>3</li>
+               
+                  <li>4</li>
+               
+                  <li>5</li>
+               
+                  <li>6</li>
+               
+                  <li>7</li>
+               
+                  <li>8</li>
+               
+                  <li>9</li>
+               
+                  <li>10</li>
+               
+                  <li>11</li>
+               
+                  <li>12</li>
+               
+                  <li>13</li>
+               
+                  <li>14</li>
+               
+                  <li>15</li>
+               
+                  <li>16</li>
+               
+                  <li>17</li>
+               
+                  <li>18</li>
+               
+                  <li>19</li>
+               
+                  <li>20</li>
+               
+                  <li>21</li>
+               
+                  <li>22</li>
+               
+                  <li>23</li>
+               
+                  <li>24</li>
+               
+                  <li>25</li>
+               
+                  <li>26</li>
+               
+                  <li>27</li>
+               
+                  <li>28</li>
+               
+                  <li>29</li>
+               
+                  <li>30</li>
+               
+                  <li>31</li>
+               
+                  <li>32</li>
+               
+                  <li>33</li>
+               
+                  <li>34</li>
+               
+                  <li>35</li>
+               
+                  <li>36</li>
+               
+                  <li>37</li>
+               
+                  <li>38</li>
+               
+                  <li>39</li>
+               
+                  <li>40</li>
+               
+                  <li>41</li>
+               
+                  <li>42</li>
+               
+                  <li>43</li>
+               
+                  <li>44</li>
+               
+                  <li>45</li>
+               
+                  <li>46</li>
+               
+                  <li>47</li>
+               
+                  <li>48</li>
+               
+                  <li>49</li>
+               
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test19/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test19/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1cjvZqrPgBrvclBmjiVbCDVZljpHzYLwP0mH1PMtc9H5JDb6b7ON!-1913708353</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1cjvZqrPgBrvclBmjiVbCDVZljpHzYLwP0mH1PMtc9H5JDb6b7ON!-1913708353</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test19/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>08 Sep 2003, 02:16:28.668 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest20.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest20.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10468 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest20</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>15 Sep 2003, 11:47:36.846 AM MDT</startDate>
+  <description>Test the pageInput data-binding context with several different kinds of list/array type objects. (String[], int[], boolean[], ArrayList, float[], Hashtable, Vector, Integer, Float, Boolean, StringBuffer)</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with String PageInput</font></h2>
+         <br/><br/>
+         
+         
+               Str: 0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 1
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 2
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 3
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 4
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 5
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 6
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 7
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 8
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 9
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 10
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 11
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 12
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 13
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 14
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 15
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 16
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 17
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 18
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 19
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 20
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 21
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 22
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 23
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 24
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 25
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 26
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 27
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 28
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 29
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 30
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 31
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 32
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 33
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 34
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 35
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 36
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 37
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 38
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 39
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 40
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 41
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 42
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 43
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 44
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 45
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 46
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 47
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 48
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 49
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action1.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with int PageInput</font></h2>
+         <br/><br/>
+         
+         
+               0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               1
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               2
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               3
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               4
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               5
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               6
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               7
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               8
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               9
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               10
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               11
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               12
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               13
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               14
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               15
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               16
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               17
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               18
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               19
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               20
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               21
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               22
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               23
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               24
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               25
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               26
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               27
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               28
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               29
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               30
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               31
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               32
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               33
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               34
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               35
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               36
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               37
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               38
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               39
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               40
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               41
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               42
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               43
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               44
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               45
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               46
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               47
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               48
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               49
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action2.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with boolean PageInput</font></h2>
+         <br/><br/>
+         
+         
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action3.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp4.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with ArrayList PageInput</font></h2>
+         <br/><br/>
+         
+         
+               Str: 0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 1
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 2
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 3
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 4
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 5
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 6
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 7
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 8
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 9
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 10
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 11
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 12
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 13
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 14
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 15
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 16
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 17
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 18
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 19
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 20
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 21
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 22
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 23
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 24
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 25
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 26
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 27
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 28
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 29
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 30
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 31
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 32
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 33
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 34
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 35
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 36
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 37
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 38
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 39
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 40
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 41
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 42
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 43
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 44
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 45
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 46
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 47
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 48
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 49
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action4.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action4.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action3.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp5.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with float PageInput</font></h2>
+         <br/><br/>
+         
+         
+               0.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               1.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               2.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               3.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               4.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               5.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               6.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               7.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               8.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               9.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               10.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               11.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               12.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               13.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               14.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               15.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               16.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               17.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               18.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               19.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               20.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               21.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               22.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               23.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               24.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               25.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               26.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               27.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               28.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               29.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               30.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               31.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               32.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               33.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               34.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               35.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               36.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               37.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               38.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               39.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               40.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               41.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               42.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               43.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               44.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               45.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               46.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               47.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               48.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               49.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action5.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action5.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action4.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp6.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Hashtable PageInput</font></h2>
+         <br/><br/>
+         
+         
+               Str: 49
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 48
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 47
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 46
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 45
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 44
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 43
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 42
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 41
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 40
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 39
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 38
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 37
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 36
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 35
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 34
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 33
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 32
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 31
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 30
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 29
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 28
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 27
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 26
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 25
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 24
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 23
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 22
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 21
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 20
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 19
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 18
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 17
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 16
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 15
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 14
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 13
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 12
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 11
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 10
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 9
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 8
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 7
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 6
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 5
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 4
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 3
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 2
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 1
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action6.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action6.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action5.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp7.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Vector PageInput</font></h2>
+         <br/><br/>
+         
+         
+               Str: 49
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 48
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 47
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 46
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 45
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 44
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 43
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 42
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 41
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 40
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 39
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 38
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 37
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 36
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 35
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 34
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 33
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 32
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 31
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 30
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 29
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 28
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 27
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 26
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 25
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 24
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 23
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 22
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 21
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 20
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 19
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 18
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 17
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 16
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 15
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 14
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 13
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 12
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 11
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 10
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 9
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 8
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 7
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 6
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 5
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 4
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 3
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 2
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 1
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action7.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action7.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action6.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp8.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Float PageInput</font></h2>
+         <br/><br/>
+         
+         
+               0.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               1.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               2.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               3.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               4.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               5.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               6.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               7.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               8.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               9.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               10.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               11.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               12.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               13.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               14.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               15.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               16.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               17.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               18.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               19.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               20.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               21.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               22.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               23.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               24.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               25.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               26.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               27.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               28.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               29.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               30.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               31.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               32.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               33.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               34.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               35.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               36.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               37.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               38.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               39.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               40.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               41.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               42.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               43.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               44.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               45.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               46.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               47.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               48.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               49.0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action8.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action8.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action7.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp9.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Integer PageInput</font></h2>
+         <br/><br/>
+         
+         
+               0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               1
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               2
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               3
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               4
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               5
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               6
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               7
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               8
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               9
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               10
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               11
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               12
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               13
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               14
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               15
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               16
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               17
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               18
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               19
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               20
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               21
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               22
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               23
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               24
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               25
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               26
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               27
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               28
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               29
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               30
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               31
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               32
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               33
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               34
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               35
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               36
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               37
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               38
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               39
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               40
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               41
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               42
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               43
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               44
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               45
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               46
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               47
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               48
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               49
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action9.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action9.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action8.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp10.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with Boolean PageInput</font></h2>
+         <br/><br/>
+         
+         
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               true
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               false
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action10.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action10.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action9.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp11.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with StringBuffer PageInput</font></h2>
+         <br/><br/>
+         
+         
+               Str: 0
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 1
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 2
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 3
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 4
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 5
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 6
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 7
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 8
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 9
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 10
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 11
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 12
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 13
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 14
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 15
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 16
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 17
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 18
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 19
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 20
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 21
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 22
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 23
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 24
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 25
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 26
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 27
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 28
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 29
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 30
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 31
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 32
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 33
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 34
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 35
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 36
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 37
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 38
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 39
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 40
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 41
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 42
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 43
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 44
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 45
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 46
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 47
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 48
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+               Str: 49
+               &nbsp;&nbsp;--&nbsp;&nbsp;
+            
+
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/action11.do">Continue...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/action11.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action10.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test20</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test20 - Jsp12.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing repeater with a multidimensional String array</font></h2>
+         <br/><br/>
+         
+
+         
+
+               
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 0
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 1
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 2
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 3
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 4
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 5
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 6
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 7
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 8
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 9
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 10
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 11
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 12
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 13
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 14
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 15
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 16
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 17
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 18
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 19
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 20
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 21
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 22
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 23
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 24
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 25
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 26
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 27
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 28
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 29
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 30
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 31
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 32
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 33
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 34
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 35
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 36
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 37
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 38
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 39
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 40
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 41
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 42
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 43
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 44
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 45
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 46
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 47
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 48
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+
+               
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+                     Str: 49
+                           &nbsp;&nbsp;--&nbsp;&nbsp;
+                  
+
+            
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test20/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test20/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1l6pILHPUTZbm47lctLC2fwMaqcLMyRHWSnVgjZ1SqriLXE39C21!593056647</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test20/action11.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>15 Sep 2003, 11:48:17.682 AM MDT</endDate>
+  <testCount>13</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest21.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest21.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>PageInputTest21</ses:sessionName>
+   <ses:tester>Spencer Keller</ses:tester>
+   <ses:startDate>30 Jun 2004, 03:43:41.706 PM MDT</ses:startDate>
+   <ses:description>Spencer Keller</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageInput/test21/Jpf1.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BA8095D68181E9A66077904209C3C5CF</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=BA8095D68181E9A66077904209C3C5CF</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-66c3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test21</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test21 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing nonExistant value</font></h2>
+         <br/><br/>
+         
+
+         Class A string value. <font color="blue">"<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Label</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{pageInput.ObjectA.nonExistString}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageInput.ObjectA.nonExistString}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "nonExistString" on object of type "class shared.ClassA"</td></tr>
+</table></span>
+"</font>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test21/finish.do">Finish...</a>
+         </font>
+         <br/><br/>
+         Note the expected behavior is an empty string.
+      </center>
+   </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageInput/test21/finish.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BA8095D68181E9A66077904209C3C5CF</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=BA8095D68181E9A66077904209C3C5CF</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-66c3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 03:43:41.766 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>1</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest22.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest22.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest22</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:19:50.848 AM MST</startDate>
+  <description>Test the pageInput data-binding context being used with a textBox.  Can the value be changed?</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test22/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-775c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test22</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test22 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         
+
+         PageInput value1:
+         <font color="blue">
+            <input type="text" name="{pageInput.pgInput1}" value="PageValue 1">
+         </font>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test22/finish.do">Finish...</a>
+         <br/><br/>
+         <font color="green">
+            Try to change the value in the textBox then press Finish.
+         </font>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test22/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-775c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:19:52.099 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest23.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest23.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,517 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest23</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:19:52.390 AM MST</startDate>
+  <description>Test a formBean as both a form and as page and modify a field on form.  Cause validation error.  What are the resulting values?</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test23/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7757</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test23</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test23 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         
+         <h3>
+            All fields being displayed below are from the same formBean just
+            using different data-binding contexts.
+         </h3>
+         <b>These values are from the {actionForm} context.</b>
+         <br/>
+         <form name="myForm" action="/coreWeb/pageInput/test23/action1.do" method="post">
+
+            {actionForm.String1}:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            {actionForm.String2}:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/>
+
+            {actionForm.Int1}:
+            <font color="blue">
+               <input type="text" name="{actionForm.int1}" value="1">
+            </font>
+            <br/>
+
+            {actionForm.Int2}:
+            <font color="blue">
+               <input type="text" name="{actionForm.int2}" value="2">
+            </font>
+            <br/><br/>
+            <input type="submit" name="actionOverride:action1" value="Submit changes">
+         </form>
+         
+         <hr width="95%"/>
+
+         <br/>
+         <b>These values are from the {pageInput} context.</b>
+         <br/><br/>
+
+         {pageInput.theForm.String1}:
+         <font color="blue">
+            <span>String 1 value</span>
+         </font>
+         <br/>
+
+         {pageInput.theForm.String2}:
+         <font color="blue">
+            <span>String 2 value</span>
+         </font>
+         <br/>
+
+         {pageInput.theForm.Int1}:
+         <font color="blue">
+            <span>1</span>
+         </font>
+         <br/>
+
+         {pageInput.theForm.Int2}:
+         <font color="blue">
+            <span>2</span>
+         </font>
+         <br/><br/>
+         <hr width="95%"/>
+
+         <br/>
+         <font color="green">
+            <b>
+               You will see this page twice.
+               <br/>
+               - The first time please change the values in all the textBoxes then
+               press the submit button.
+               <br/>
+               - The second time check the values of the checkBoxes and the
+               PageInputs.  The textBoxs should have your modified values and
+               the pageInput fields should have their original values.  If this
+               in not the case the test have failed.  Then press Finish.
+            </b>
+         </font>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test23/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test23/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:action1</name>
+          <value>Submit changes</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.int1}</name>
+          <value>99</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.int2}</name>
+          <value>99</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>Blah Blah</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>Blah Blah</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>159</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7757</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test23</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test23 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         
+         <h3>
+            All fields being displayed below are from the same formBean just
+            using different data-binding contexts.
+         </h3>
+         <b>These values are from the {actionForm} context.</b>
+         <br/>
+         <form name="myForm" action="/coreWeb/pageInput/test23/action1.do" method="post">
+
+            {actionForm.String1}:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="Blah Blah">
+            </font>
+            <br/>
+
+            {actionForm.String2}:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="Blah Blah">
+            </font>
+            <br/>
+
+            {actionForm.Int1}:
+            <font color="blue">
+               <input type="text" name="{actionForm.int1}" value="99">
+            </font>
+            <br/>
+
+            {actionForm.Int2}:
+            <font color="blue">
+               <input type="text" name="{actionForm.int2}" value="99">
+            </font>
+            <br/><br/>
+            <input type="submit" name="actionOverride:action1" value="Submit changes">
+         </form>
+         <br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+<li class="error">Forced an error.</li>
+</ul></td></tr></table>
+
+         <hr width="95%"/>
+
+         <br/>
+         <b>These values are from the {pageInput} context.</b>
+         <br/><br/>
+
+         {pageInput.theForm.String1}:
+         <font color="blue">
+            <span>String 1 value</span>
+         </font>
+         <br/>
+
+         {pageInput.theForm.String2}:
+         <font color="blue">
+            <span>String 2 value</span>
+         </font>
+         <br/>
+
+         {pageInput.theForm.Int1}:
+         <font color="blue">
+            <span>1</span>
+         </font>
+         <br/>
+
+         {pageInput.theForm.Int2}:
+         <font color="blue">
+            <span>2</span>
+         </font>
+         <br/><br/>
+         <hr width="95%"/>
+
+         <br/>
+         <font color="green">
+            <b>
+               You will see this page twice.
+               <br/>
+               - The first time please change the values in all the textBoxes then
+               press the submit button.
+               <br/>
+               - The second time check the values of the checkBoxes and the
+               PageInputs.  The textBoxs should have your modified values and
+               the pageInput fields should have their original values.  If this
+               in not the case the test have failed.  Then press Finish.
+            </b>
+         </font>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test23/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test23/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7757</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:19:54.333 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest24.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest24.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest24</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:19:54.613 AM MST</startDate>
+  <description>Test to make sure the different binding context act as they should.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test24/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7751</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test24</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test24 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         
+
+         PageInput context value:
+         <font color="blue">
+            <span>Sting value</span>
+         </font>
+         <br/><br/>
+         PageFlow context value:
+         <form id="Netui_Form_0" action="/coreWeb/pageInput/test24/action1.do" method="post">
+            <font color="blue">
+               <input type="text" name="{pageFlow.string}" value="Sting value">
+               <br/><br/>
+               <input type="submit" name="actionOverride:action1" value="Continue">
+            </font>
+         </form>
+         <br/><br/>
+         <font color="green">
+            Change the value in the textBox and press continue.
+         </font>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test24/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:action1</name>
+          <value>Continue</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.string}</name>
+          <value>Sting value blah</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>72</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7751</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test24</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test24 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         
+
+         PageInput context value:
+         <font color="blue">
+            <span>Sting value blah</span>
+         </font>
+         <br/><br/>
+         PageFlow context value:
+         <font color="blue">
+            <span>Sting value blah</span>
+         </font>
+         <br/><br/>
+
+         <a href="/coreWeb/pageInput/test24/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test24/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7751</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:19:56.666 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest25.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest25.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest25</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>11 Sep 2003, 02:43:08.774 PM MDT</startDate>
+  <description>Test that a template can access pageInput data thru the tags.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test25/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test25/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+
+
+
+<html>
+   <head>
+      <title>PageInput Test25</title>
+   </head>
+      <body>
+      <h3 align="center">PageInput Test25 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      
+      <center>
+         PageInput context value in the template:
+         <font color="blue">
+            <span>String value</span>
+         </font>
+         <br/><br/>
+      </center>
+      
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         PageInput context value in the main page:
+         <font color="blue">
+            <span>String value</span>
+         </font>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test25/finish.do">Finish...</a>
+      </center>
+   
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test25/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test25/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>11 Sep 2003, 02:43:23.649 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest26.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest26.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest26</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>11 Sep 2003, 04:54:19.643 PM MDT</startDate>
+  <description>Test the two different jsp include tags: &lt;jsp:include&gt; and &lt;@% include&gt; and how it effects data-binding on pageInput values.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test26/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1g81fvu9UMao3sPauXdisVLmh1TYe78s8y2dwYE5YS2UQWy2df84!1587635690</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1g81fvu9UMao3sPauXdisVLmh1TYe78s8y2dwYE5YS2UQWy2df84!1587635690</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test26/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test26</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test26 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput data-binding</font></h2>
+         <br/><br/>
+         
+
+         
+<html>
+   <body>
+      <center>
+         <font color="tomato">
+            PageInput value from [%@ include]:
+            <span>String value</span>
+         </font>
+         <br/><br/>
+      </center>
+   </body>
+</html>
+
+
+         <font color="brown">
+   PageInput value from [jsp:include]:
+   <span>String value</span>
+</font>
+<br/><br/>
+
+
+         <font color="deeppink">
+            PageInput from this jsp: <span>String value</span>
+         </font>
+         <br/><br/>
+
+         <a href="/coreWeb/pageInput/test26/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test26/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1g81fvu9UMao3sPauXdisVLmh1TYe78s8y2dwYE5YS2UQWy2df84!1587635690</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1g81fvu9UMao3sPauXdisVLmh1TYe78s8y2dwYE5YS2UQWy2df84!1587635690</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test26/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>11 Sep 2003, 04:54:31.097 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest29.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest29.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest29</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>19 Sep 2003, 09:48:48.335 AM MDT</startDate>
+  <description>Test that the declarePageInput tag is really optional.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test29/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1rl390GI4PF0qQ2v42VSmLF3GWHOKf6kD2uGM1g1gUAKN18lxqnZ!-1855774958</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1rl390GI4PF0qQ2v42VSmLF3GWHOKf6kD2uGM1g1gUAKN18lxqnZ!-1855774958</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test29/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>PageInput Test29</title>
+   </head>
+   <body>
+      <h3 align="center">PageInput Test29 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            This page has no delcarePageInput yet displays pageInput values.
+         </font></h3>
+         <br/><br/>
+
+         PageInput value1: <span>Test String Value.</span>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test29/finish.do">Finish...</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test29/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1rl390GI4PF0qQ2v42VSmLF3GWHOKf6kD2uGM1g1gUAKN18lxqnZ!-1855774958</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1rl390GI4PF0qQ2v42VSmLF3GWHOKf6kD2uGM1g1gUAKN18lxqnZ!-1855774958</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test29/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>19 Sep 2003, 09:48:58.729 AM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest3.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest3.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest3</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>17 Sep 2003, 02:35:24.211 PM MDT</startDate>
+  <description>Test the new "Forward" constructor that supports pageInput and the "addPageInput" methods by passing null's, empty strings and other bad stuff.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action2.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action3.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp4.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action4.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action4.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action3.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp5.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action5.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action5.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action4.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp6.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action6.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action6.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action5.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp7.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            <br/>
+            PageInput field: "<span></span>"
+            <br/>
+            <font color="blue">
+                <b>
+                    Note: The above string is supposed to be an empty string.
+                </b>
+            </font>
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <a href="/coreWeb/pageInput/test3/action7.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action7.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action6.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp8.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action8.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action8.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action7.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp9.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action9.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action9.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action8.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp10.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/pageInput/test3/action10.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action10.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action9.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp11.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            <br/>
+            PageInput field: "<span></span>"
+            <br/>
+            <font color="blue">
+                <b>
+                    Note: The above string is supposed to be an empty string.
+                </b>
+            </font>
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <a href="/coreWeb/pageInput/test3/action11.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action11.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action10.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp12.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            <br/>
+            PageInput field: "<span>PageValue 2</span>"
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <a href="/coreWeb/pageInput/test3/action12.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/action12.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action11.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test3</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test3 - Jsp13.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            
+            <br/>
+            PageInput field1: "<span>PageValue 1</span>"
+            <br/>
+            PageInput field2: "<span>PageValue 2</span>"
+            <br/>
+            <hr width="95%"/>
+            <br/>
+            <a href="/coreWeb/pageInput/test3/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test3/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1oFc1VcSQE7ooXfPla9KXnJxVRVmhGC6YMQIGwVfq6xz0UGdq7fR!-2100074344</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test3/action12.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>17 Sep 2003, 02:36:04.559 PM MDT</endDate>
+  <testCount>14</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest5.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest5.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest5</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>30 Jul 2003, 10:16:23.978 AM MDT</startDate>
+  <description>Instantiate a Forward with a formBean then add several pageInput fields.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test5/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1nvsukEyZJ9eGlJBOgWNQJlB4DK0gRuVau7hFqCUoFfW0hk5ln9d!568524292</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1nvsukEyZJ9eGlJBOgWNQJlB4DK0gRuVau7hFqCUoFfW0hk5ln9d!568524292</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test5/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test5</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test5 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            
+            
+
+            PageInput value1: <font color="blue">"<span>PageValue 1</span>"</font>
+            <br/>
+            PageInput value2: <font color="blue">"<span>PageValue 2</span>"</font>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test5/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test5/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1nvsukEyZJ9eGlJBOgWNQJlB4DK0gRuVau7hFqCUoFfW0hk5ln9d!568524292</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1nvsukEyZJ9eGlJBOgWNQJlB4DK0gRuVau7hFqCUoFfW0hk5ln9d!568524292</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test5/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>30 Jul 2003, 10:16:38.086 AM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest6.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest6.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest6</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:13:02.090 AM MST</startDate>
+  <description>Instantiate a Forward with the pageInput constructor then add a formBean and access the form fields in the page.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test6/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77ac</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test6</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test6 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            <br/>
+            <form name="formOne" action="/coreWeb/pageInput/test6/finish.do" method="post">
+                {actionForm.fld1}: <font color="blue">"<span>Field one value</span>"</font>
+                <br/>
+                {actionForm.fld2}: <font color="blue">"<span>Field two value</span>"</font>
+                <br/>
+            </form>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test6/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test6/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77ac</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:13:03.432 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest7.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest7.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest7</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>30 Jul 2003, 03:54:17.750 PM MDT</startDate>
+  <description>Test adding a formBean to the Forward as pageInput.  Then access it's fields in a page using pageInput data-binding.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test7/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1o2jTXTMkjSzOpT9L91m5FBXxt7QN5r4VjoTZW95mlyCah8TKPkz!-1740127950</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1o2jTXTMkjSzOpT9L91m5FBXxt7QN5r4VjoTZW95mlyCah8TKPkz!-1740127950</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test7/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test7</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test7 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <!--
+                I learned that the "type" attribute is required but is totaly
+                ignored at run-time.  Note the garbage I've put in the first
+                delarePageInput tag.
+            -->
+            
+            
+            
+            
+            <br/>
+            {pageInput.pgInputVal_1}:
+            <font color="blue">
+                "<span>PageValue 1</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputVal_2}:
+            <font color="blue">"
+                <span>PageValue 2</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>Field one value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>Field two value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputFormInner.fld1}:
+            <font color="blue">
+                "<span>form2 Field one value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputFormInner.fld2}:
+            <font color="blue">
+                "<span>form2 Field two value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld3.fld1}:
+            <font color="blue">
+                "<span>form2 Field one value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld3.fld2}:
+            <font color="blue">
+                "<span>form2 Field two value</span>"
+            </font>
+
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test7/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test7/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1o2jTXTMkjSzOpT9L91m5FBXxt7QN5r4VjoTZW95mlyCah8TKPkz!-1740127950</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1o2jTXTMkjSzOpT9L91m5FBXxt7QN5r4VjoTZW95mlyCah8TKPkz!-1740127950</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test7/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>30 Jul 2003, 03:54:33.577 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest8.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest8.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1068 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest8</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>04 Aug 2003, 10:36:02.827 AM MDT</startDate>
+  <description>Test that pageInput values are properly restored when returning to a page via a "return-to="previousPage" operation.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test8/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test8/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            
+            
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 1st time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 2nd time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 3rd time you see this page, all the values should begin with the
+            word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Forth time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/finish.do">Press here</a>
+            <br/>
+            The 4th time you see this page, only the {pageInput.pgInput2} value
+            should begin with the word "New".
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test8/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test8/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            
+            
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>New - Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>New - Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>New - Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>New - Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action2.do">Press here</a>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action3.do">Press here</a>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action4.do">Press here</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test8/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test8/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            
+            
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 1st time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 2nd time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 3rd time you see this page, all the values should begin with the
+            word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Forth time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/finish.do">Press here</a>
+            <br/>
+            The 4th time you see this page, only the {pageInput.pgInput2} value
+            should begin with the word "New".
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test8/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test8/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            
+            
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>New - Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>New - Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>New - Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>New - Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action2.do">Press here</a>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action3.do">Press here</a>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action4.do">Press here</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test8/action3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test8/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            
+            
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>New - Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>New - Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>New - Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>New - Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 1st time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 2nd time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 3rd time you see this page, all the values should begin with the
+            word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Forth time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/finish.do">Press here</a>
+            <br/>
+            The 4th time you see this page, only the {pageInput.pgInput2} value
+            should begin with the word "New".
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test8/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test8/action3.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            
+            
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>New - Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>New - Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>New - Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>New - Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action2.do">Press here</a>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action3.do">Press here</a>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action4.do">Press here</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test8/action4.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test8/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test8</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test8 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            
+            
+            
+            <br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>New - Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                First time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 1st time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Second time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 2nd time you see this page, none of the values above should
+            begin with the word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Third time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/action1.do">Press here</a>
+            <br/>
+            The 3rd time you see this page, all the values should begin with the
+            word "New".
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green"><b>
+                Forth time you see this page:&nbsp;&nbsp;
+            </b></font>
+            <a href="/coreWeb/pageInput/test8/finish.do">Press here</a>
+            <br/>
+            The 4th time you see this page, only the {pageInput.pgInput2} value
+            should begin with the word "New".
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test8/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1uLCQc5Naihf0ewLYX1vcvwFyCYiriubSaZI6dqYL9KW9zhlq12O!1460749045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test8/action4.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>04 Aug 2003, 10:36:25.076 AM MDT</endDate>
+  <testCount>8</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest9.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageInputTest9.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,531 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest9</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>05 Aug 2003, 04:57:17.961 PM MDT</startDate>
+  <description>Test that a "return-to="previousAction" operation that adds pageInputs to the Forward does not alter the destination actions pageInput fields.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test9/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test9/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test10</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test10 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green">
+                This page is here because I don't want the "begin" action method
+                to be the action "returned-to", so just click thru the page.
+            </font>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test9/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test9/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test9/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test9</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test9 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><b>
+                PageInput values.
+            <b/></font>
+            
+            
+            
+            <br/><br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green">
+                If any of the values above begin with the word "New" then the
+                test has failed.
+            </font>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test9/action2.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test9/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test9/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test9</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test9 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><b>
+                PageInput values.
+            <b/></font>
+            
+            
+            
+            <br/><br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green">
+                If any of the values above begin with the word "New" then the
+                test has failed.
+            </font>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test9/action3.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test9/action3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test9/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PageInput Test9</title>
+    </head>
+    <body>
+        <h3 align="center">PageInput Test9 - Jsp4.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><b>
+                PageInput values.
+            <b/></font>
+            
+            
+            
+            <br/><br/>
+            {pageInput.pgInput1}:
+            <font color="blue">
+                "<span>Page Input field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInput2}:
+            <font color="blue">"
+                <span>Page Input field 2 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld1}:
+            <font color="blue">
+                "<span>Page Input form field 1 value</span>"
+            </font>
+
+            <br/>
+            {pageInput.pgInputForm.fld2}:
+            <font color="blue">
+                "<span>Page Input form field 2 value</span>"
+            </font>
+
+            <br/><br/>
+            <hr width="95%"/>
+            <br/>
+            <font color="green">
+                If any of the values above begin with the word "New" then the
+                test has failed.
+            </font>
+            <br/><br/>
+            <a href="/coreWeb/pageInput/test9/finish.do">Finish...</a>
+
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test9/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1w22mT2ihJWfo80gt6eZ9ze9zT1sCubcowaCoHTYLXQYqY2tiuYt!1534098019</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test9/action3.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>05 Aug 2003, 04:57:36.109 PM MDT</endDate>
+  <testCount>5</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageScope.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PageScope.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageScope</sessionName>
+  <tester>Daryl</tester>
+  <startDate>12 Nov 2002, 12:44:42.311 PM MST</startDate>
+  <description>Verify that page flow state is cleaned up when navigating between page flows.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeOne/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeOne/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>1</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeOne/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeOne/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeOne/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>2</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeOne/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeOne/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeOne/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>3</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeOne/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope Two</title>
+</head>
+<body>
+<h4>Scope Two</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeTwo/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeTwo/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>1</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeTwo/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope Two</title>
+</head>
+<body>
+<h4>Scope Two</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeTwo/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeTwo/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>2</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeTwo/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeTwo/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope Two</title>
+</head>
+<body>
+<h4>Scope Two</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeTwo/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeTwo/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>3</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeTwo/changePageFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeTwo/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeOne/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>1</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeOne/nav.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeTwo/changePageFlow.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeOne/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>2</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeOne/nav.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope Two</title>
+</head>
+<body>
+<h4>Scope Two</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeTwo/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeTwo/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>1</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/pageScope/scopeTwo/changePageFlow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9RaBYMyt2B42CknPD5q9iEOMi1RhPXRScPcGvRMJ4QTbjG3z6rxY!-957859573</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Scope One</title>
+</head>
+<body>
+<h4>Scope One</h4>
+<a href="/coreWeb/miniTests/pageScope/scopeOne/nav.do">Navigate</a><br />
+<a href="/coreWeb/miniTests/pageScope/scopeOne/changePageFlow.do">Change Page Flow</a><br />
+Count: <span>1</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>12 Nov 2002, 12:45:48.415 PM MST</endDate>
+  <testCount>10</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ParamEncoding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ParamEncoding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ParamEncoding</sessionName>
+  <tester>Daryl</tester>
+  <startDate>02 Apr 2003, 10:26:38.838 AM MST</startDate>
+  <description>Test that the parameter tag does URL encoding.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramEncoding/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7ec4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Encoding Parameter Binding</title>
+</head>
+<body>
+<a href="/coreWeb/tags/paramEncoding/postback.do?foo=value+with%3Fbad%26stuff%2Bhere">Value in parameter
+<br /></a><br />
+<a href="/coreWeb/tags/paramEncoding/postback.do?foo=String+With%2Ba%26lot%3Fof+stuff">Value is databound
+<br /></a>
+<hr />
+Foo Value: <span></span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramEncoding/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/paramEncoding/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>value with?bad&amp;stuff+here</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7ec4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Encoding Parameter Binding</title>
+</head>
+<body>
+<a href="/coreWeb/tags/paramEncoding/postback.do?foo=value+with%3Fbad%26stuff%2Bhere">Value in parameter
+<br /></a><br />
+<a href="/coreWeb/tags/paramEncoding/postback.do?foo=String+With%2Ba%26lot%3Fof+stuff">Value is databound
+<br /></a>
+<hr />
+Foo Value: <span>value with?bad&amp;stuff+here</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramEncoding/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/paramEncoding/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>String With+a&amp;lot?of stuff</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2Lc41B6KIdbpgn31KMvu60SHjSSS6KftVHFvVpksQSH2fJ0NynVI!1101013018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>3f0b70:f44f67ac90:-7ec4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Encoding Parameter Binding</title>
+</head>
+<body>
+<a href="/coreWeb/tags/paramEncoding/postback.do?foo=value+with%3Fbad%26stuff%2Bhere">Value in parameter
+<br /></a><br />
+<a href="/coreWeb/tags/paramEncoding/postback.do?foo=String+With%2Ba%26lot%3Fof+stuff">Value is databound
+<br /></a>
+<hr />
+Foo Value: <span>String With+a&amp;lot?of stuff</span><br />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>02 Apr 2003, 10:26:40.494 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ParamMulti.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ParamMulti.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,3059 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ParamMulti</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:26:33.159 PM MST</startDate>
+  <description>Multi parameters with the same name</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>bar</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>baz</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>List 1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>List 2</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>List 3</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>String 1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>String 2</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>3</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>5</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>7</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Form One</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>112</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Form One</span></h4>
+    <ul>
+    
+        <li><span>bar</span></li>
+    
+        <li><span>baz</span></li>
+    
+        <li><span>List 1</span></li>
+    
+        <li><span>List 2</span></li>
+    
+        <li><span>List 3</span></li>
+    
+        <li><span>String 1</span></li>
+    
+        <li><span>String 2</span></li>
+    
+        <li><span>1</span></li>
+    
+        <li><span>3</span></li>
+    
+        <li><span>5</span></li>
+    
+        <li><span>7</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>bar</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>baz</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>List 1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>List 2</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>List 3</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>String 1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>String 2</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>3</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>5</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>7</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Anchor</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Anchor</span></h4>
+    <ul>
+    
+        <li><span>bar</span></li>
+    
+        <li><span>baz</span></li>
+    
+        <li><span>List 1</span></li>
+    
+        <li><span>List 2</span></li>
+    
+        <li><span>List 3</span></li>
+    
+        <li><span>String 1</span></li>
+    
+        <li><span>String 2</span></li>
+    
+        <li><span>1</span></li>
+    
+        <li><span>3</span></li>
+    
+        <li><span>5</span></li>
+    
+        <li><span>7</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Null List/Null Strings</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Null List/Null Strings</span></h4>
+    <ul>
+    
+        <li><span></span></li>
+    
+        <li><span></span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>name</name>
+          <value>Empty List/Empty Strings</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Empty List/Empty Strings</span></h4>
+    <ul>
+    
+        <li><span>Foo was not found as a paramter</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>value</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Single Param</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Single Param</span></h4>
+    <ul>
+    
+        <li><span>value</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Null Param</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>12</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Null Param</span></h4>
+    <ul>
+    
+        <li><span></span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>13</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>List 1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>List 2</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>List 3</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Just List</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>14</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Just List</span></h4>
+    <ul>
+    
+        <li><span>List 1</span></li>
+    
+        <li><span>List 2</span></li>
+    
+        <li><span>List 3</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>15</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>15</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>16</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>String 1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>String 2</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Just String</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>16</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Just String</span></h4>
+    <ul>
+    
+        <li><span>String 1</span></li>
+    
+        <li><span>String 2</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>17</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>17</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>18</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>3</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>5</value>
+        </parameter>
+        <parameter>
+          <name>foo</name>
+          <value>7</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Int Values</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>18</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Int Values</span></h4>
+    <ul>
+    
+        <li><span>1</span></li>
+    
+        <li><span>3</span></li>
+    
+        <li><span>5</span></li>
+    
+        <li><span>7</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>19</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>19</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>20</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>Single String</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Single String Array</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>20</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Single String Array</span></h4>
+    <ul>
+    
+        <li><span>Single String</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>21</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>21</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>22</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/link.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>Single List</value>
+        </parameter>
+        <parameter>
+          <name>name</name>
+          <value>Single List</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>22</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Multiple Paramaters
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/paramMulti/home.do">Home</a>
+    <hr />
+    <h4><span>Single List</span></h4>
+    <ul>
+    
+        <li><span>Single List</span></li>
+    
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>23</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/paramMulti/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7d20</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>23</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <form name="nameBean" action="/coreWeb/tags/paramMulti/postback.do" method="post">
+<input type="hidden" name="foo" value="bar">
+<input type="hidden" name="foo" value="baz">
+<input type="hidden" name="foo" value="List 1">
+<input type="hidden" name="foo" value="List 2">
+<input type="hidden" name="foo" value="List 3">
+<input type="hidden" name="foo" value="String 1">
+<input type="hidden" name="foo" value="String 2">
+<input type="hidden" name="foo" value="1">
+<input type="hidden" name="foo" value="3">
+<input type="hidden" name="foo" value="5">
+<input type="hidden" name="foo" value="7">
+<input type="hidden" name="name" value="Form One">
+            
+            
+            
+            
+            
+            
+            <input type="submit" value="Form One">
+        </form>
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=bar&foo=baz&foo=List+1&foo=List+2&foo=List+3&foo=String+1&foo=String+2&foo=1&foo=3&foo=5&foo=7&name=Anchor">Anchor One</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&foo=&name=Null+List%2FNull+Strings">Null List/Null Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?name=Empty+List%2FEmpty+Strings">Empty List/Empty Strings</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=value&name=Single+Param">Single Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=&name=Null+Param">Null Param</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=List+1&foo=List+2&foo=List+3&name=Just+List">Just List</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=String+1&foo=String+2&name=Just+String">Just String</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=1&foo=3&foo=5&foo=7&name=Int+Values">Int Values</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+String&name=Single+String+Array">Single String Array</a><br />
+        <a href="/coreWeb/tags/paramMulti/link.do?foo=Single+List&name=Single+List">Single List</a><br />
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:26:51.094 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>23</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>23</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfErrors.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfErrors.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfErrors</sessionName>
+  <tester>daryl</tester>
+  <startDate>18 Jan 2003, 11:48:21.646 AM MST</startDate>
+  <description>Make sure illegalStateExceptions are thrown</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfErrors/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2phdgUHBDE03Q4LjcxthtedGT4XWO5wKOzXqPMUJOJUi8M93Jksj!-1469043045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2phdgUHBDE03Q4LjcxthtedGT4XWO5wKOzXqPMUJOJUi8M93Jksj!-1469043045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>PageFlow Errors</title>
+</head>
+<body>
+<h4>PageFlow Errors</h4>
+<table border='1' cellspacing='0'cellpaddinig='2'><tr><td>GetMapping Error</td><td>getMapping was called outside of a valid context.</td></tr></table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>18 Jan 2003, 11:48:44.869 AM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfExceptions.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfExceptions.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfExceptions</sessionName>
+  <tester>rich</tester>
+  <startDate>07 May 2004, 03:32:02.312 PM MDT</startDate>
+  <description>Tests various page flow exception-handling capabilities.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ExceptionTest - Start Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>ExceptionTest - Start Page</h3>
+
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToMethod.do">handle a local action-method exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToPage.do">handle a local action-method exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToMethod.do">handle a global exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToPage.do">handle a global exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/throwUnhandled.do">Generate an unhandled exception</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/failRoles.do">Try and raise an action that requires a role you don't fulfill.</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/catchLocalToMethod.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Error Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>Error Page</h3>
+
+<form name="emptyForm" action="/coreWeb/pageFlowCore/exceptions/goBack.do" method="post">
+
+    Message from method: <b><span>caught pageFlowCore.exceptions.Controller$LocalCatchToMethodException: this is a LocalCatchToMethodException in localHandler</span></b>
+    <br>
+    <br>
+    Exception message: <b>pageFlowCore.exceptions.Controller$LocalCatchToMethodException: this is a LocalCatchToMethodException</b>
+    <br>
+    <br>
+    <input type="submit" value="Go Back">
+
+</form>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/goBack.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ExceptionTest - Start Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>ExceptionTest - Start Page</h3>
+
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToMethod.do">handle a local action-method exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToPage.do">handle a local action-method exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToMethod.do">handle a global exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToPage.do">handle a global exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/throwUnhandled.do">Generate an unhandled exception</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/failRoles.do">Try and raise an action that requires a role you don't fulfill.</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/catchLocalToPage.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Error Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>Error Page</h3>
+
+<form name="emptyForm" action="/coreWeb/pageFlowCore/exceptions/goBack.do" method="post">
+
+    Message from method: <b><span></span></b>
+    <br>
+    <br>
+    Exception message: <b>pageFlowCore.exceptions.Controller$LocalCatchToPageException: this is a LocalCatchToPageException</b>
+    <br>
+    <br>
+    <input type="submit" value="Go Back">
+
+</form>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/goBack.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ExceptionTest - Start Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>ExceptionTest - Start Page</h3>
+
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToMethod.do">handle a local action-method exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToPage.do">handle a local action-method exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToMethod.do">handle a global exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToPage.do">handle a global exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/throwUnhandled.do">Generate an unhandled exception</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/failRoles.do">Try and raise an action that requires a role you don't fulfill.</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/catchGlobalToMethod.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Error Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>Error Page</h3>
+
+<form name="emptyForm" action="/coreWeb/pageFlowCore/exceptions/goBack.do" method="post">
+
+    Message from method: <b><span>caught pageFlowCore.exceptions.Controller$GlobalCatchToMethodException: this is a GlobalCatchToMethodException in globalHandler; message = This message came from exceptions.Messages.</span></b>
+    <br>
+    <br>
+    Exception message: <b>pageFlowCore.exceptions.Controller$GlobalCatchToMethodException: this is a GlobalCatchToMethodException</b>
+    <br>
+    <br>
+    <input type="submit" value="Go Back">
+
+</form>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/goBack.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ExceptionTest - Start Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>ExceptionTest - Start Page</h3>
+
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToMethod.do">handle a local action-method exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToPage.do">handle a local action-method exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToMethod.do">handle a global exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToPage.do">handle a global exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/throwUnhandled.do">Generate an unhandled exception</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/failRoles.do">Try and raise an action that requires a role you don't fulfill.</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/catchGlobalToPage.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Error Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>Error Page</h3>
+
+<form name="emptyForm" action="/coreWeb/pageFlowCore/exceptions/goBack.do" method="post">
+
+    Message from method: <b><span></span></b>
+    <br>
+    <br>
+    Exception message: <b>pageFlowCore.exceptions.Controller$GlobalCatchToPageException: this is a GlobalCatchToPageException</b>
+    <br>
+    <br>
+    <input type="submit" value="Go Back">
+
+</form>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/goBack.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>ExceptionTest - Start Page</title>
+</head>
+<body bgcolor="white">
+
+<h3>ExceptionTest - Start Page</h3>
+
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToMethod.do">handle a local action-method exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchLocalToPage.do">handle a local action-method exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToMethod.do">handle a global exception with a method</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/catchGlobalToPage.do">handle a global exception by forwarding to a page</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/throwUnhandled.do">Generate an unhandled exception</a>
+<br>
+<a href="/coreWeb/pageFlowCore/exceptions/failRoles.do">Try and raise an action that requires a role you don't fulfill.</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/throwUnhandled.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Unhandled Exception</title></head>
+ <body>
+ <h1>Page Flow Unhandled Exception</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Exception:</b></td><td>pageFlowCore.exceptions.Controller$UnhandledException</td></tr>
+ <tr><td><b>Message:</b></td><td>this is an UnhandledException</td></tr>
+ </table><br />
+ <span style="color:red">A <b>pageFlowCore.exceptions.Controller$UnhandledException</b> exception was thrown and not handled by any page flow. See the log for the exception stack trace.</span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/exceptions/failRoles.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7d3e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - Not Logged In</title></head>
+ <body>
+ <h1>Page Flow Error - Not Logged In</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/pageFlowCore/exceptions/Controller.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>failRoles</td></tr>
+ </table><br />
+ <span style="color:red">Action <b>failRoles</b> requires a current user, but there is no logged-in user.</span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>07 May 2004, 03:32:07.359 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>11</testCount>
+  <passedCount>7</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfForwards.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfForwards.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2478 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfForwards</sessionName>
+  <tester>rich</tester>
+  <startDate>23 Jul 2003, 03:35:09.140 PM MDT</startDate>
+  <description>Tests of all the ways to forward (relative, webapp-relative, URI, etc.), including redirects.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/redirect.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Fake Redirect</title></head><body>
+Fake redirect to: <b>/coreWeb/pageFlowCore/forwards/index.jsp</b><br><br>
+<a href="begin.do">go back</a>
+</body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/redirect.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/withQueryParams.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Fake Redirect</title></head><body>
+Fake redirect to: <b>/coreWeb/pageFlowCore/forwards/index.jsp?foo&bar=baz</b><br><br>
+<a href="begin.do">go back</a>
+</body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/withQueryParams.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/randomURI.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Fake Redirect</title></head><body>
+Fake redirect to: <b>http://www.google.com/search?q=xmlbeans</b><br><br>
+<a href="begin.do">go back</a>
+</body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/randomURI.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/uriRedirect.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Fake Redirect</title></head><body>
+Fake redirect to: <b>/netui/index.jsp</b><br><br>
+<a href="begin.do">go back</a>
+</body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/uriRedirect.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/uriWebappForward.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/uriRelativeForward.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/uriWebappForward.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/uriRelativeForward.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Fake Redirect</title></head><body>
+Fake redirect to: <b>/coreWeb/pageFlowCore/forwards/Controller.jpf</b><br><br>
+<a href="begin.do">go back</a>
+</body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>15</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/forwards/setPath.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1e1iNtfZVVpnF24YWB1mewvHwcRnsG7kgs620CjfMNoHYB73KI10!371667101</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/forwards/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Index Page for /pageFlowCore/forwards/Controller.jpf</title>
+</head>
+<body bgcolor="white">
+
+<h3>Index Page for /pageFlowCore/forwards/Controller.jpf</h3>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/begin.do">forward to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+    protected Forward begin()
+    {
+        return new Forward( "index" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/redirect.do">redirect to this page</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward redirect()
+    {
+        return new Forward( "indexRedirect" );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/withQueryParams.do">redirect to this page, with query params</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="indexRedirect" path="index.jsp" redirect="true"
+     */
+    protected Forward withQueryParams()
+    {
+        Forward fw = new Forward( "indexRedirect" );
+        fw.addQueryParam( "foo" );
+        fw.addQueryParam( "bar", "baz" );
+        return fw;
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/randomURI.do">redirect to google</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward randomURI()
+        throws Exception
+    {
+        return new Forward( new URI( "http://www.google.com/search?q=xmlbeans" ) );
+    }
+</pre>
+
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRedirect.do">redirect to the netui webapp</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "/netui/index.jsp", true ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriWebappForward.do">forward to this page, using a webapp-relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriWebappForward()
+        throws Exception
+    {
+        return new Forward( new URI( "/forwardTest/Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeForward.do">forward to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeForward()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ) );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/uriRelativeRedirect.do">redirect to this page, using a relative URI</a>
+<pre>
+    /**
+     * @jpf:action
+     */
+    protected Forward uriRelativeRedirect()
+        throws Exception
+    {
+        return new Forward( new URI( "Controller.jpf" ), true );
+    }
+</pre>
+
+<br><a href="/coreWeb/pageFlowCore/forwards/setPath.do">forward to this page using Forward.setPath()</a>
+<pre>
+    /**
+     * @jpf:action
+     * @jpf:forward name="unused" path=""
+     */
+    protected Forward setPath()
+        throws Exception
+    {
+        //
+        // Note that setPath() works differently than the URI/URL constructors.
+        // It acts just like setPath() on the base class -- sets a path that
+        // eventually gets the current context path prepended, and respects the
+        // redirect and context-sensitive flags.
+        //
+        Forward fwd = new Forward( "unused" );
+        fwd.setPath( "/forwardTest/index.jsp" );
+        fwd.setContextRelative( true );
+        return fwd;
+    }
+</pre>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>23 Jul 2003, 03:36:47.484 PM MDT</endDate>
+  <testCount>15</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfGlobalApp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfGlobalApp.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>PfGlobalApp</ses:sessionName>
+   <ses:tester>daryl</ses:tester>
+   <ses:startDate>30 Jun 2004, 08:28:06.666 PM MDT</ses:startDate>
+   <ses:description>daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/pfGlobalApp/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a56</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>PageFlow Global Info</title>
+</head>
+<body>
+<h4>PageFlow Global Info</h4>
+<a href="/coreWeb/pageFlowCore/pfGlobalApp/globalAction_getInfo.do">Get Global Info</a>
+<hr />
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/pfGlobalApp/globalAction_getInfo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a56</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>PageFlow Global Info</title>
+</head>
+<body>
+<h4>PageFlow Global Info</h4>
+<a href="/coreWeb/pageFlowCore/pfGlobalApp/globalAction_getInfo.do">Get Global Info</a>
+<hr />
+<table border='1' cellspacing='0'cellpaddinig='2'><tr><td>Request</td><td>/coreWeb/-global/globalAction_getInfo.do</td></tr><tr><td>Response</td><td>Committed:false</td></tr><tr><td>Session</td><td>In active interval:3600</td></tr><tr><td>Nestable</td><td>false</td></tr><tr><td>PageFlow</td><td>false</td></tr><tr><td>Actions</td><td>gblJpfTest10<br />globalAction<br />globalAction_action<br />globalAction_form<br />globalAction_getInfo<br />globalAction_results<br />globalReturnToAction<br />globalReturnToCurrentPage<br />globalReturnToCurrentPageOverrideForm<br />globalReturnToCurrentPageOverrideInputs<br />globalReturnToCurrentPageWithForm<br />globalReturnToPage<br />globalReturnToPageOverrideForm<br />globalReturnToPageOverrideInputs<br />globalReturnToPageWithForm<br />globalReturnToPreviousAction<br />globalReturnToPreviousPage<br />globalReturnToPreviousPageOverrideForm<br />globalReturnToPreviousPageOverrideInputs<br />jpf1Begin<br />jpf1GoNested<br />jpf2Begin<br />jpf2GoNested<br />jpfReturn1<br />test35GlobalAction<br />test36GlobalAction<br />test39GlobalAction<br />test40GlobalAction<br />test40GlobalAction_B<br />test45GlobalAction<br />test46GlobalAction<br />test48GlobalAction<br />toLegacy<br />unHandledAction<br />unKnown<br /></td></tr><tr><td>ActionMapping</td><td>ActionConfig[path=/globalAction_getInfo,name=globalForm,scope=request,type=global.Global</td></tr><tr><td>URI</td><td>/</td></tr><tr><td>parentDir</td><td>/-global</td></tr></table>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 08:28:07.788 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>1</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfLifecycle.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfLifecycle.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2037 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfLifecycle</sessionName>
+  <tester>rich</tester>
+  <startDate>13 Jan 2004, 11:11:58.843 PM GMT-07:00</startDate>
+  <description>Tests all the pageflow lifecycle methods.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/lifecycle/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<a href="/coreWeb/pageFlowCore/lifecycle/doNothing.do">run an empty action</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/nest.do">create a nesting stack</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/leave.do">leave this pageflow</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/clear.do">clear the history</a>
+
+
+
+
+
+
+<br>
+<br>
+<table border="1">
+        <tr>
+            <td><i>request #</i></td>
+            <td><i>description</i></td>
+            <td><i>message from control</i></td>
+            <td><i>request</i></td>
+            <td><i>response</i></td>
+            <td><i>session</i></td>
+            <td><i>mapping</i></td>
+            <td><i>servlet</i></td>
+        </tr>
+
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+</table>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/lifecycle/doNothing.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/lifecycle/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<a href="/coreWeb/pageFlowCore/lifecycle/doNothing.do">run an empty action</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/nest.do">create a nesting stack</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/leave.do">leave this pageflow</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/clear.do">clear the history</a>
+
+
+
+
+
+
+<br>
+<br>
+<table border="1">
+        <tr>
+            <td><i>request #</i></td>
+            <td><i>description</i></td>
+            <td><i>message from control</i></td>
+            <td><i>request</i></td>
+            <td><i>response</i></td>
+            <td><i>session</i></td>
+            <td><i>mapping</i></td>
+            <td><i>servlet</i></td>
+        </tr>
+
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+</table>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/lifecycle/leave.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/lifecycle/doNothing.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<a href="/coreWeb/pageFlowCore/lifecycle/doNothing.do">run an empty action</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/nest.do">create a nesting stack</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/leave.do">leave this pageflow</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/clear.do">clear the history</a>
+
+
+
+
+
+
+<br>
+<br>
+<table border="1">
+        <tr>
+            <td><i>request #</i></td>
+            <td><i>description</i></td>
+            <td><i>message from control</i></td>
+            <td><i>request</i></td>
+            <td><i>response</i></td>
+            <td><i>session</i></td>
+            <td><i>mapping</i></td>
+            <td><i>servlet</i></td>
+        </tr>
+
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+</table>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/lifecycle/nest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/lifecycle/leave.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<a href="/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/done.do">done</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/escapeNesting.do">escapeNesting</a>
+
+
+
+
+
+
+<br>
+<br>
+<table border="1">
+        <tr>
+            <td><i>request #</i></td>
+            <td><i>description</i></td>
+            <td><i>message from control</i></td>
+            <td><i>request</i></td>
+            <td><i>response</i></td>
+            <td><i>session</i></td>
+            <td><i>mapping</i></td>
+            <td><i>servlet</i></td>
+        </tr>
+
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+</table>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/lifecycle/nest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<a href="/coreWeb/pageFlowCore/lifecycle/doNothing.do">run an empty action</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/nest.do">create a nesting stack</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/leave.do">leave this pageflow</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/clear.do">clear the history</a>
+
+
+
+
+
+
+<br>
+<br>
+<table border="1">
+        <tr>
+            <td><i>request #</i></td>
+            <td><i>description</i></td>
+            <td><i>message from control</i></td>
+            <td><i>request</i></td>
+            <td><i>response</i></td>
+            <td><i>session</i></td>
+            <td><i>mapping</i></td>
+            <td><i>servlet</i></td>
+        </tr>
+
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>5</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>5</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+</table>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/lifecycle/nest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/done.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<a href="/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/done.do">done</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/escapeNesting.do">escapeNesting</a>
+
+
+
+
+
+
+<br>
+<br>
+<table border="1">
+        <tr>
+            <td><i>request #</i></td>
+            <td><i>description</i></td>
+            <td><i>message from control</i></td>
+            <td><i>request</i></td>
+            <td><i>response</i></td>
+            <td><i>session</i></td>
+            <td><i>mapping</i></td>
+            <td><i>servlet</i></td>
+        </tr>
+
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>5</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>5</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>onCreate() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>onCreate() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>onCreate() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+</table>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/lifecycle/nested1/nested2/nested3/escapeNesting.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AEcQLnTVptcOdyesSIKbAEJkbIuZU51hXa9tdb1SnZkErbKx2242!-1795682959</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/lifecycle/nest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Page 1</title>
+</head>
+<body bgcolor="white">
+
+<h3>Page 1</h3>
+
+<a href="/coreWeb/pageFlowCore/lifecycle/doNothing.do">run an empty action</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/nest.do">create a nesting stack</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/leave.do">leave this pageflow</a>
+<br>
+<a href="/coreWeb/pageFlowCore/lifecycle/clear.do">clear the history</a>
+
+
+
+
+
+
+<br>
+<br>
+<table border="1">
+        <tr>
+            <td><i>request #</i></td>
+            <td><i>description</i></td>
+            <td><i>message from control</i></td>
+            <td><i>request</i></td>
+            <td><i>response</i></td>
+            <td><i>session</i></td>
+            <td><i>mapping</i></td>
+            <td><i>servlet</i></td>
+        </tr>
+
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>1</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>2</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>onCreate</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>3</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>4</span></td>
+            <td><b><span>onCreate() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>5</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>5</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>onCreate() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>onCreate() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>6</span></td>
+            <td><b><span>onCreate() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested2</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested1</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>-1</span></td>
+            <td><b><span>onDestroy() in nested3</span></b></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[null]</span></td>
+            <td><span>[null]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>7</span></td>
+            <td><b><span>beforeAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+        <tr>
+            <td><span>7</span></td>
+            <td><b><span>afterAction</span></b></td>
+            <td><span>hello there</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+            <td><span>[present]</span></td>
+        </tr>
+    
+</table>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>13 Jan 2004, 11:15:08.687 PM GMT-07:00</endDate>
+  <testCount>7</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfPageFlow.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfPageFlow.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfPageFlow</sessionName>
+  <tester>daryl</tester>
+  <startDate>18 Jan 2003, 11:50:20.096 AM MST</startDate>
+  <description>Test calling method on the PageFlow</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageFlow/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2phWr1JmfcD5vTGrL2BpIUqIoHgtaXhqrdc80WmvNfq5PqkNoftq!-1469043045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2phWr1JmfcD5vTGrL2BpIUqIoHgtaXhqrdc80WmvNfq5PqkNoftq!-1469043045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>PageFlow Errors</title>
+</head>
+<body>
+<h4>PageFlow Errors</h4>
+<a href="/coreWeb/pageFlowCore/pfPageFlow/getInfo.do">Generate Page Flow Calls</a><br />
+<a href="/coreWeb/pageFlowCore/pfPageFlow/sendError.do">Generate An Error Page</a>
+<hr />
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageFlow/getInfo.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2phWr1JmfcD5vTGrL2BpIUqIoHgtaXhqrdc80WmvNfq5PqkNoftq!-1469043045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2phWr1JmfcD5vTGrL2BpIUqIoHgtaXhqrdc80WmvNfq5PqkNoftq!-1469043045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/pfPageFlow/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>PageFlow Errors</title>
+</head>
+<body>
+<h4>PageFlow Errors</h4>
+<a href="/coreWeb/pageFlowCore/pfPageFlow/getInfo.do">Generate Page Flow Calls</a><br />
+<a href="/coreWeb/pageFlowCore/pfPageFlow/sendError.do">Generate An Error Page</a>
+<hr />
+<table border='1' cellspacing='0'cellpaddinig='2'><tr><td>Request</td><td>http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/pfPageFlow/getInfo.do</td></tr><tr><td>Response</td><td>Committed:false</td></tr><tr><td>Session</td><td>In active interval:3600</td></tr><tr><td>Nestable</td><td>false</td></tr><tr><td>PageFlow</td><td>true</td></tr><tr><td>Actions</td><td>begin<br />getInfo<br />sendError<br /></td></tr><tr><td>ActionMapping</td><td>ActionConfig[path=/getInfo,scope=request,type=pageFlowCore.pfPageFlow.Controller</td></tr><tr><td>Taxonomy</td><td>coreWeb.pageFlowCore.pfPageFlow.Controller</td></tr></table>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageFlow/sendError.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2phWr1JmfcD5vTGrL2BpIUqIoHgtaXhqrdc80WmvNfq5PqkNoftq!-1469043045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2phWr1JmfcD5vTGrL2BpIUqIoHgtaXhqrdc80WmvNfq5PqkNoftq!-1469043045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/pfPageFlow/getInfo.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><title>PageFlow Error</title><body>PageFlow <b>/pageFlowCore/pfPageFlow/Controller.jpf</b>: Error raised from the Page Flow Test<br /><a href='Controller.jpf'>Return</a></body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageFlow/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2phWr1JmfcD5vTGrL2BpIUqIoHgtaXhqrdc80WmvNfq5PqkNoftq!-1469043045</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2phWr1JmfcD5vTGrL2BpIUqIoHgtaXhqrdc80WmvNfq5PqkNoftq!-1469043045</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/pfPageFlow/sendError.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>PageFlow Errors</title>
+</head>
+<body>
+<h4>PageFlow Errors</h4>
+<a href="/coreWeb/pageFlowCore/pfPageFlow/getInfo.do">Generate Page Flow Calls</a><br />
+<a href="/coreWeb/pageFlowCore/pfPageFlow/sendError.do">Generate An Error Page</a>
+<hr />
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>18 Jan 2003, 11:50:49.228 AM MST</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfPrevious.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfPrevious.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,899 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfPrevious</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 11:57:31.982 PM MST</startDate>
+  <description>Test of getting the previous stuff from a Page Flow</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPrevious/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7cb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<table border='1' cellspacing='0' cellpadding='5pt'><tr><td>Previous Form</td><td><b>No Form Data</b></td></tr><tr><td>Previous Action URI</td><td>/pageFlowCore/pfPrevious/begin.do</td></tr><tr><td>Previous Forward Path</td><td>/Begin.jsp</td></tr></table>
+Error: 
+<hr />
+<form name="form" action="/coreWeb/pageFlowCore/pfPrevious/form.do" method="post">
+<input type="text" name="{actionForm.name}" value=""> <br/>
+<input type="submit" value="Submit">
+</form>
+<a href="/coreWeb/pageFlowCore/pfPrevious/postback.do">Postback</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPrevious/form.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7cb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<table border='1' cellspacing='0' cellpadding='5pt'><tr><td>Previous Form</td><td>pageFlowCore.pfPrevious.Controller$Form</td></tr><tr><td>Previous Action URI</td><td>/pageFlowCore/pfPrevious/form.do</td></tr><tr><td>Previous Forward Path</td><td>/Begin.jsp</td></tr></table>
+Error: 
+<hr />
+<form name="form" action="/coreWeb/pageFlowCore/pfPrevious/form.do" method="post">
+<input type="text" name="{actionForm.name}" value=""> <br/>
+<input type="submit" value="Submit">
+</form>
+<a href="/coreWeb/pageFlowCore/pfPrevious/postback.do">Postback</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPrevious/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7cb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<table border='1' cellspacing='0' cellpadding='5pt'><tr><td>Previous Form</td><td><b>No Form Data</b></td></tr><tr><td>Previous Action URI</td><td>/pageFlowCore/pfPrevious/postback.do</td></tr><tr><td>Previous Forward Path</td><td>/Begin.jsp</td></tr></table>
+Error: 
+<hr />
+<form name="form" action="/coreWeb/pageFlowCore/pfPrevious/form.do" method="post">
+<input type="text" name="{actionForm.name}" value=""> <br/>
+<input type="submit" value="Submit">
+</form>
+<a href="/coreWeb/pageFlowCore/pfPrevious/postback.do">Postback</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPrevious/form.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7cb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<table border='1' cellspacing='0' cellpadding='5pt'><tr><td>Previous Form</td><td>pageFlowCore.pfPrevious.Controller$Form</td></tr><tr><td>Previous Action URI</td><td>/pageFlowCore/pfPrevious/form.do</td></tr><tr><td>Previous Forward Path</td><td>/Begin.jsp</td></tr></table>
+Error: 
+<hr />
+<form name="form" action="/coreWeb/pageFlowCore/pfPrevious/form.do" method="post">
+<input type="text" name="{actionForm.name}" value=""> <br/>
+<input type="submit" value="Submit">
+</form>
+<a href="/coreWeb/pageFlowCore/pfPrevious/postback.do">Postback</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPrevious/form.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7cb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<table border='1' cellspacing='0' cellpadding='5pt'><tr><td>Previous Form</td><td>pageFlowCore.pfPrevious.Controller$Form</td></tr><tr><td>Previous Action URI</td><td>/pageFlowCore/pfPrevious/form.do</td></tr><tr><td>Previous Forward Path</td><td>/Begin.jsp</td></tr></table>
+Error: 
+<hr />
+<form name="form" action="/coreWeb/pageFlowCore/pfPrevious/form.do" method="post">
+<input type="text" name="{actionForm.name}" value=""> <br/>
+<input type="submit" value="Submit">
+</form>
+<a href="/coreWeb/pageFlowCore/pfPrevious/postback.do">Postback</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPrevious/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7cb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<table border='1' cellspacing='0' cellpadding='5pt'><tr><td>Previous Form</td><td><b>No Form Data</b></td></tr><tr><td>Previous Action URI</td><td>/pageFlowCore/pfPrevious/postback.do</td></tr><tr><td>Previous Forward Path</td><td>/Begin.jsp</td></tr></table>
+Error: 
+<hr />
+<form name="form" action="/coreWeb/pageFlowCore/pfPrevious/form.do" method="post">
+<input type="text" name="{actionForm.name}" value=""> <br/>
+<input type="submit" value="Submit">
+</form>
+<a href="/coreWeb/pageFlowCore/pfPrevious/postback.do">Postback</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPrevious/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7cb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<table border='1' cellspacing='0' cellpadding='5pt'><tr><td>Previous Form</td><td><b>No Form Data</b></td></tr><tr><td>Previous Action URI</td><td>/pageFlowCore/pfPrevious/postback.do</td></tr><tr><td>Previous Forward Path</td><td>/Begin.jsp</td></tr></table>
+Error: 
+<hr />
+<form name="form" action="/coreWeb/pageFlowCore/pfPrevious/form.do" method="post">
+<input type="text" name="{actionForm.name}" value=""> <br/>
+<input type="submit" value="Submit">
+</form>
+<a href="/coreWeb/pageFlowCore/pfPrevious/postback.do">Postback</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPrevious/form.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7cb2</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Previous Page Info</title>
+</head>
+<body>
+<h4>Previous Page Info</h4>
+<table border='1' cellspacing='0' cellpadding='5pt'><tr><td>Previous Form</td><td>pageFlowCore.pfPrevious.Controller$Form</td></tr><tr><td>Previous Action URI</td><td>/pageFlowCore/pfPrevious/form.do</td></tr><tr><td>Previous Forward Path</td><td>/Begin.jsp</td></tr></table>
+Error: 
+<hr />
+<form name="form" action="/coreWeb/pageFlowCore/pfPrevious/form.do" method="post">
+<input type="text" name="{actionForm.name}" value=""> <br/>
+<input type="submit" value="Submit">
+</form>
+<a href="/coreWeb/pageFlowCore/pfPrevious/postback.do">Postback</a>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 11:57:37.901 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>8</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>8</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfReturnTo.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfReturnTo.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12570 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>PfReturnTo</ses:sessionName>
+   <ses:tester>rich</ses:tester>
+   <ses:startDate>30 Jun 2004, 08:28:13.616 PM MDT</ses:startDate>
+   <ses:description>rich</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToTestController.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>bbb</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>aaa</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>49</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="aaa">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="bbb">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">overridden #1</font>
+        <br>
+        input2: <font color="blue">overridden #2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>bbb</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>aaa</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>49</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="aaa">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="bbb">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">overridden #1</font>
+        <br>
+        input2: <font color="blue">overridden #2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>9</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>10</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>10</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>11</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>bbb</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>aaa</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>49</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>11</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="aaa">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="bbb">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>12</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>12</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">overridden #1</font>
+        <br>
+        input2: <font color="blue">overridden #2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>13</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>13</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>14</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>override bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>override foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>14</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>15</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>15</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>16</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>16</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>17</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>17</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>18</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>18</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>19</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>19</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>20</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>20</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>21</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>21</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">overridden #1</font>
+        <br>
+        input2: <font color="blue">overridden #2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>22</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>23</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>23</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>24</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>24</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>25</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>25</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>26</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>26</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>27</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>27</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>28</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>29</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>29</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>30</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>30</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">overridden #1</font>
+        <br>
+        input2: <font color="blue">overridden #2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>31</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>31</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>32</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>32</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>33</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>33</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>34</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>34</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>35</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>35</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>36</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>36</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>37</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>37</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>38</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>38</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>39</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>39</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">overridden #1</font>
+        <br>
+        input2: <font color="blue">overridden #2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>40</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>40</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>41</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>41</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>42</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>42</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>43</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>43</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>44</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>44</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">override input #1 from nested pageflow</font>
+        <br>
+        input2: <font color="blue">override input #2 from nested pageflow</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>45</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>45</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>46</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>46</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo from nested">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar from nested">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>47</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>47</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>48</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>48</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>49</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>49</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>50</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>50</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo from nested">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar from nested">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>51</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>51</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>52</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>52</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">override input #1 from nested pageflow</font>
+        <br>
+        input2: <font color="blue">override input #2 from nested pageflow</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>53</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>54</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>54</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>55</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>55</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>56</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>56</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>57</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>57</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>58</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>58</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>59</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>60</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>60</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="override foo from nested">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="override bar from nested">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>61</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>61</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">page input 1</font>
+        <br>
+        input2: <font color="blue">page input 2</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>62</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/input.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.bar}</ses:name>
+                  <ses:value>init bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>init foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>59</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>62</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPage.do">global-action return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideForm.do">global-action return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPreviousPageOverrideInputs.do">global-action return-to previousPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>
+        </p>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>63</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/goNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>63</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested Flow
+        </title>
+    </head>
+    <body>
+        <h3> Nested Flow </h3>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPage.do">return-to previousPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideForm.do">return-to previousPage (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do">return-to previousPage (override page inputs)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPage.do">return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideForm.do">return-to page (override form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/nested/returnToPageOverrideInputs.do">return-to page (override page inputs)</a>  
+
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>64</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/nested/returnToPreviousPageOverrideInputs.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>64</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>return-to test</title>
+    </head>
+
+    <body>
+        <h3>return-to test</h3>
+        <br/>
+        input1: <font color="blue">override input #1 from nested pageflow</font>
+        <br>
+        input2: <font color="blue">override input #2 from nested pageflow</font>
+        <br>
+        <br>
+        Leaving "foo" blank will make validation fail.
+        
+        <form name="inputForm" id="Netui_Form_0" action="/coreWeb/pageFlowCore/returnToTest/input.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                        
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPage.do">return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageWithForm.do");return false;'>return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideInputs.do">return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToCurrentPageOverrideForm.do">return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPage.do">global-action return-to currentPage</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageWithForm.do");return false;'>global-action return-to currentPage (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideInputs.do">global-action return-to currentPage (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToCurrentPageOverrideForm.do">global-action return-to currentPage (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPage.do">global-action return-to page</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/pageFlowCore/returnToTest/globalReturnToPageWithForm.do");return false;'>global-action return-to page (keep form)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideInputs.do">global-action return-to page (override page inputs)</a>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/globalReturnToPageOverrideForm.do">global-action return-to page (override form)</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/goNested.do">go to nested page flow</a>          
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf">test returnTo="previousAction" and returnTo="action"</a>
+            <br>
+            <br>
+            <a href="/coreWeb/pageFlowCore/returnToTest/begin.do">start over</a>          
+
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>65</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionController.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>65</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>0</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="init val">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>66</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>hello</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>26</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>66</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>1</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>67</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>2</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>68</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>68</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>3</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>69</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>4</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>70</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>70</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>5</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>71</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>71</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>6</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="overridden2">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>72</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>72</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>7</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="overridden1">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>73</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.foo}</ses:name>
+                  <ses:value>hello</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>26</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>73</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>8</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>74</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>74</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action - nested
+        </title>
+    </head>
+    <body>
+        <h3>Return To Action - nested</h3>
+        
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToPreviousAction.do">returnTo="previousAction" on nesting page flow</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToAction.do">returnTo="action" on nesting page flow</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>75</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToPreviousAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>75</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>9</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>76</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>76</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action - nested
+        </title>
+    </head>
+    <body>
+        <h3>Return To Action - nested</h3>
+        
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToPreviousAction.do">returnTo="previousAction" on nesting page flow</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToAction.do">returnTo="action" on nesting page flow</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>77</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>77</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>10</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>78</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>78</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action - nested
+        </title>
+    </head>
+    <body>
+        <h3>Return To Action - nested</h3>
+        
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToPreviousAction.do">returnTo="previousAction" on nesting page flow</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToAction.do">returnTo="action" on nesting page flow</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>79</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/returnToPreviousAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=E9967A9B093572036C9D36769613ED69</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>460803ea:fd7882b5a5:-7a28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>79</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return To Action
+        </title>
+    </head>
+    <body>
+        <h3>
+            Return To Action
+        </h3>
+        
+        <font color="Green">Number of times testAction called:
+            <span>11</span></font>
+        
+        <br>
+        <br>
+        <form name="testActionForm" action="/coreWeb/pageFlowCore/returnToTest/returnToAction/testAction.do" method="post">
+            <input type="text" name="{actionForm.foo}" value="hello">
+            <br>
+            <input type="submit" value="testAction">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousAction.do">returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToAction.do">returnTo="action"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToPreviousActionOverrideForm.do">returnTo="previousAction", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/returnToActionOverrideForm.do">returnTo="action", override form</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToPreviousAction.do">Global.app returnTo="previousAction"</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/globalReturnToAction.do">Global.app returnTo="action"</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/nested/nestedController.jpf">go to nested</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/returnToTest/returnToAction/done.do">Exit returnToAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 08:28:18.934 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>79</ses:testCount>
+   <ses:passedCount>36</ses:passedCount>
+   <ses:failedCount>43</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfScopeForm.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfScopeForm.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1726 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfScopeForm</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:28:56.482 PM MST</startDate>
+  <description>Test page flow scoping of forms.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/pfScopeFormController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow Scoped Forms
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow Scoped Forms</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/action1a.do">page flow scoped form -- initialized in page flow constructor</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/action2a.do">page flow scoped form -- not initialized</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionA.do">Struts session-scoped form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/action1a.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="form1" action="/coreWeb/pageFlowCore/pfScopeForm/action1b.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <span>init foo</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Bar:</td>
+                    <td>
+                        <span>init bar</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="init foo">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="init bar">
+                    </td>
+                </tr>
+            </table>
+            
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/action1b.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.bar}</name>
+          <value>bb</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.foo}</name>
+          <value>aa</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>47</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+
+        <form name="form1" action="/coreWeb/pageFlowCore/pfScopeForm/action1a.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <span>aa</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Bar:</td>
+                    <td>
+                        <span>bb</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="aa">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/action1a.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.foo}</name>
+          <value>cc</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>23</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="form1" action="/coreWeb/pageFlowCore/pfScopeForm/action1b.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <span>cc</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Bar:</td>
+                    <td>
+                        <span>bb</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value="cc">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Bar:</td>
+                    <td>
+                        <input type="text" name="{actionForm.bar}" value="bb">
+                    </td>
+                </tr>
+            </table>
+            
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow Scoped Forms
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow Scoped Forms</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/action1a.do">page flow scoped form -- initialized in page flow constructor</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/action2a.do">page flow scoped form -- not initialized</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionA.do">Struts session-scoped form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/action2a.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="form2" action="/coreWeb/pageFlowCore/pfScopeForm/action2b.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <span>0.0</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <span>0</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <input type="text" name="{actionForm.a}" value="0.0">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <input type="text" name="{actionForm.b}" value="0">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/action2b.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.a}</name>
+          <value>1.1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.b}</name>
+          <value>2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>43</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="form2" action="/coreWeb/pageFlowCore/pfScopeForm/action2a.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <span>1.1</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <span>2</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <input type="text" name="{actionForm.a}" value="1.1">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/action2a.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.a}</name>
+          <value>3.3</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="form2" action="/coreWeb/pageFlowCore/pfScopeForm/action2b.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <span>3.3</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <span>2</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <input type="text" name="{actionForm.a}" value="3.3">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <input type="text" name="{actionForm.b}" value="2">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow Scoped Forms
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow Scoped Forms</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/action1a.do">page flow scoped form -- initialized in page flow constructor</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/action2a.do">page flow scoped form -- not initialized</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionA.do">Struts session-scoped form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionA.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="sessionScopeForm" action="/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionB.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <span>0</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <span>0.0</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <input type="text" name="{actionForm.a}" value="0">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <input type="text" name="{actionForm.b}" value="0.0">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionB.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.a}</name>
+          <value>1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.b}</name>
+          <value>2.2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>43</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="sessionScopeForm" action="/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionA.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <span>1</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <span>2.2</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <input type="text" name="{actionForm.a}" value="1">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionA.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.a}</name>
+          <value>3</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>20</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c4e</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>12</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="sessionScopeForm" action="/coreWeb/pageFlowCore/pfScopeForm/sessionScopeActionB.do" method="post">
+            Current values:
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <span>3</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <span>2.2</span>
+                    </td>
+                </tr>
+            </table>
+            <br>
+            <br>
+
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>A:</td>
+                    <td>
+                        <input type="text" name="{actionForm.a}" value="3">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>B:</td>
+                    <td>
+                        <input type="text" name="{actionForm.b}" value="2.2">
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScopeForm/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:29:10.662 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>12</testCount>
+  <passedCount>9</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfScoping.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfScoping.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1930 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfScoping</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:29:11.303 PM MST</startDate>
+  <description>Test launching of page flows into different (independent) scopes.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/pfScopingController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow Scoping
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow Scoping</h3>
+        
+        <a href="frames.jsp">frames</a>
+        <br>
+        <a href="a/FlowA.jpf?jpfScopeID=a">go to FlowA.jpf, in scope A</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/FlowA.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow A
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow A</h3>
+        scope <b><span>a</span></b>
+        <br>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a">refresh</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/goNested.do?jpfScopeID=a">show nested page flow</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/begin.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.foo}</name>
+          <value>aaa</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>35</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow A
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow A</h3>
+        scope <b><span>a</span></b>
+        <br>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="aaa">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a">refresh</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/goNested.do?jpfScopeID=a">show nested page flow</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/b/FlowB.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>b</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow B
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow B</h3>
+        scope <b><span>b</span></b>
+        <br>
+                
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b">refresh</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../a/FlowA.jpf?jpfScopeID=a">go to scope A</a>
+        </span>
+        <br>
+        <span style="color: red">
+            <a href="../a/nested/NestedController.jpf?jpfScopeID=a">go back into nested A</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/b/begin.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>b</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.foo}</name>
+          <value>bbb</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>35</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow B
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow B</h3>
+        scope <b><span>b</span></b>
+        <br>
+                
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="bbb">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b">refresh</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../a/FlowA.jpf?jpfScopeID=a">go to scope A</a>
+        </span>
+        <br>
+        <span style="color: red">
+            <a href="../a/nested/NestedController.jpf?jpfScopeID=a">go back into nested A</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/FlowA.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow A
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow A</h3>
+        scope <b><span>a</span></b>
+        <br>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="aaa">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a">refresh</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/goNested.do?jpfScopeID=a">show nested page flow</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/nested/begin.do?jpfScopeID=a">do nothing</a>
+        
+        <br>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/nested/done.do?jpfScopeID=a">Exit nested</a>
+        
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/nested/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/nested/begin.do?jpfScopeID=a">do nothing</a>
+        
+        <br>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/nested/done.do?jpfScopeID=a">Exit nested</a>
+        
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/b/FlowB.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>b</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow B
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow B</h3>
+        scope <b><span>b</span></b>
+        <br>
+                
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="bbb">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b">refresh</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../a/FlowA.jpf?jpfScopeID=a">go to scope A</a>
+        </span>
+        <br>
+        <span style="color: red">
+            <a href="../a/nested/NestedController.jpf?jpfScopeID=a">go back into nested A</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/b/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>b</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow B
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow B</h3>
+        scope <b><span>b</span></b>
+        <br>
+                
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="bbb">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b">refresh</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../a/FlowA.jpf?jpfScopeID=a">go to scope A</a>
+        </span>
+        <br>
+        <span style="color: red">
+            <a href="../a/nested/NestedController.jpf?jpfScopeID=a">go back into nested A</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/nested/NestedController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/nested/begin.do?jpfScopeID=a">do nothing</a>
+        
+        <br>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/nested/done.do?jpfScopeID=a">Exit nested</a>
+        
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/nested/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>12</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Nested
+        </title>
+    </head>
+    <body>
+        <h3>Nested</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/nested/begin.do?jpfScopeID=a">do nothing</a>
+        
+        <br>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/nested/done.do?jpfScopeID=a">Exit nested</a>
+        
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/nested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>13</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow A
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow A</h3>
+        scope <b><span>a</span></b>
+        <br>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="aaa">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a">refresh</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/goNested.do?jpfScopeID=a">show nested page flow</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/a/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>a</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>14</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow A
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow A</h3>
+        scope <b><span>a</span></b>
+        <br>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="aaa">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/begin.do?jpfScopeID=a">refresh</a>
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfScoping/a/goNested.do?jpfScopeID=a">show nested page flow</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../b/FlowB.jpf?jpfScopeID=b">go to scope B</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>15</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfScoping/b/FlowB.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>b</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c3f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>15</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Page Flow B
+        </title>
+    </head>
+    <body>
+        <h3>Page Flow B</h3>
+        scope <b><span>b</span></b>
+        <br>
+                
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b" method="post">
+            foo: <input type="text" name="{pageFlow.foo}" value="bbb">
+            <br>
+            <input type="submit" value="update">
+        </form>
+        
+        <a href="/coreWeb/pageFlowCore/pfScoping/b/begin.do?jpfScopeID=b">refresh</a>
+        <br>
+        <br>
+        <span style="color: red">
+            <a href="../a/FlowA.jpf?jpfScopeID=a">go to scope A</a>
+        </span>
+        <br>
+        <span style="color: red">
+            <a href="../a/nested/NestedController.jpf?jpfScopeID=a">go back into nested A</a>
+        </span>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:29:24.462 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>15</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>15</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfSingleton.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PfSingleton.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2684 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PfSingleton</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:29:25.032 PM MST</startDate>
+  <description>Tests singleton page flows and frames support.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/pfSingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flows
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flows</h3>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/goNoFrames.do">without frames</a><br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/goFrames.do">with frames</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/goFrames.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<frameset cols="20%,80%">
+    <frame src="nav/NavController.jpf" name="navFrame">
+    <frame src="nonSingleton/NonSingletonController.jpf" name="contentFrame">
+</frameset>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nav/NavController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <h3>Navigation</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nav/doNothing.do">no-op action</a>
+        <br>
+        <a href="../nonSingleton/NonSingletonController.jpf" target="contentFrame">non-singleton 1</a>
+        <br>
+        <a href="../anotherNonSingleton/AnotherNonSingletonController.jpf" target="contentFrame">non-singleton 2</a>
+        <br>
+        <a href="../singleton/SingletonController.jpf" target="contentFrame">singleton</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>       
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do">go to singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do">delete me</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.val}</name>
+          <value>aaa</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="aaa">
+            <input type="submit" value="edit">
+        </form>
+        <br>       
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do">go to singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do">delete me</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.val}</name>
+          <value>bbb</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="bbb">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/singleton/go.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>       
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do">go to singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do">delete me</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>       
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do">go to singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do">delete me</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="bbb">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>12</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>       
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do">go to singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do">delete me</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.val}</name>
+          <value>ccc</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>13</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="ccc">
+            <input type="submit" value="edit">
+        </form>
+        <br>       
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do">go to singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do">delete me</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nav/doNothing.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>14</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <h3>Navigation</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nav/doNothing.do">no-op action</a>
+        <br>
+        <a href="../nonSingleton/NonSingletonController.jpf" target="contentFrame">non-singleton 1</a>
+        <br>
+        <a href="../anotherNonSingleton/AnotherNonSingletonController.jpf" target="contentFrame">non-singleton 2</a>
+        <br>
+        <a href="../singleton/SingletonController.jpf" target="contentFrame">singleton</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>15</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/singleton/SingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>15</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>16</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{pageFlow.val}</name>
+          <value>ddd</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>16</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="ddd">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>17</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nav/doNothing.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>17</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <h3>Navigation</h3>
+        
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nav/doNothing.do">no-op action</a>
+        <br>
+        <a href="../nonSingleton/NonSingletonController.jpf" target="contentFrame">non-singleton 1</a>
+        <br>
+        <a href="../anotherNonSingleton/AnotherNonSingletonController.jpf" target="contentFrame">non-singleton 2</a>
+        <br>
+        <a href="../singleton/SingletonController.jpf" target="contentFrame">singleton</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>18</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>18</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>       
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do">go to singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do">delete me</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>19</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/AnotherNonSingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>19</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Another Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Another Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/anotherNonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>20</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/singleton/SingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>20</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="ddd">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>21</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/nonSingleton/NonSingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>21</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Non-singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Non-singleton Page Flow</h3>
+         
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>       
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/go.do">go to singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/nonSingleton/deleteMe.do">delete me</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>22</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/singleton/SingletonController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>22</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="ddd">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>23</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c2d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>23</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Singleton Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Singleton Page Flow</h3>
+        
+        <form id="Netui_Form_0" action="/coreWeb/pageFlowCore/pfSingleton/singleton/begin.do" method="post">
+            page flow val: <input type="text" name="{pageFlow.val}" value="">
+            <input type="submit" value="edit">
+        </form>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/go.do">go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndGo.do">delete me, and go to non-singleton</a>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfSingleton/singleton/deleteAndStay.do">delete me, and stay here</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:29:44.710 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>23</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>22</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PostOnForward.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PostOnForward.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,909 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PostOnForward</sessionName>
+  <tester>rich</tester>
+  <startDate>29 Jul 2003, 09:57:36.483 AM GMT-07:00</startDate>
+  <description>Test post-on-forward=false, to stop processPopulate when forwarding to an action</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/postOnForwardController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            Stop processPopulate!
+        </title>
+    </head>
+    <body>
+        <h3>Stop processPopulate!</h3>
+        
+        <a href="/coreWeb/miniTests/postOnForward/actionFormTest.do">test overriding processPopulate when posting an ActionForm</a>
+        <br>
+        <a href="/coreWeb/miniTests/postOnForward/pageFlowTest.do">test overriding processPopulate when posting to a pageflow</a>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/actionFormTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/postOnForward/postOnForwardController.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <i>The action will modify the posted value, and will send the modified form to the next action.
+           This works even without post-on-forward="false".</i>
+        <br>
+        <form name="testForm" method="post" action="/coreWeb/miniTests/postOnForward/a1.do">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>{actionForm.foo}:</td>
+                    <td>
+                        <input type="text" name="{actionForm.foo}" value=""/>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit"/>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/a1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.foo}</name>
+          <value>aaa</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>24</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/postOnForward/actionFormTest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <form name="testForm" method="post" action="/coreWeb/miniTests/postOnForward/a1.do">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Foo:</td>
+                    <td>
+                        <span>modified in a1</span>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+        </form>
+        
+        <a href="/coreWeb/miniTests/postOnForward/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/postOnForward/a1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            Stop processPopulate!
+        </title>
+    </head>
+    <body>
+        <h3>Stop processPopulate!</h3>
+        
+        <a href="/coreWeb/miniTests/postOnForward/actionFormTest.do">test overriding processPopulate when posting an ActionForm</a>
+        <br>
+        <a href="/coreWeb/miniTests/postOnForward/pageFlowTest.do">test overriding processPopulate when posting to a pageflow</a>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/pageFlowTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/postOnForward/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <i>The action modifies the pageflow member variable that was posted to, then forwards to another action.
+           This works only with post-on-forward="false".</i>
+        <br>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/miniTests/postOnForward/b1.do">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>{pageFlow.someProperty}:</td>
+                    <td>
+                        <input type="text" name="{pageFlow.someProperty}" size="50" value="init val"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            <input type="submit" name="actionOverride:b1" value="submit, and allow post-on-forward"/>
+            <br>
+            <input type="submit" name="actionOverride:b1_noPostOnForward" value="submit, and disallow post-on-forward"/>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/b1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:b1</name>
+          <value>submit, and allow post-on-forward</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.someProperty}</name>
+          <value>init val</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>92</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/postOnForward/pageFlowTest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <table class="tablebody">
+            <tr class="tablebody">
+                <td>{pageFlow.someProperty}:</td>
+                <td>
+                    <span>init val</span>
+                </td>
+            </tr>
+        </table>
+        <br/>&nbsp;
+        
+        <a href="/coreWeb/miniTests/postOnForward/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/postOnForward/b1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>
+            Stop processPopulate!
+        </title>
+    </head>
+    <body>
+        <h3>Stop processPopulate!</h3>
+        
+        <a href="/coreWeb/miniTests/postOnForward/actionFormTest.do">test overriding processPopulate when posting an ActionForm</a>
+        <br>
+        <a href="/coreWeb/miniTests/postOnForward/pageFlowTest.do">test overriding processPopulate when posting to a pageflow</a>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/pageFlowTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/postOnForward/begin.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <i>The action modifies the pageflow member variable that was posted to, then forwards to another action.
+           This works only with post-on-forward="false".</i>
+        <br>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/miniTests/postOnForward/b1.do">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>{pageFlow.someProperty}:</td>
+                    <td>
+                        <input type="text" name="{pageFlow.someProperty}" size="50" value="init val"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            <input type="submit" name="actionOverride:b1" value="submit, and allow post-on-forward"/>
+            <br>
+            <input type="submit" name="actionOverride:b1_noPostOnForward" value="submit, and disallow post-on-forward"/>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/postOnForward/b1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:b1_noPostOnForward</name>
+          <value>submit, and disallow post-on-forward</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.someProperty}</name>
+          <value>init val</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>111</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1mmWtU70BHp3NDuAmuSqMUxLcjWoKSdk6czcrp3PuaNC20512Rih!1813583818</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/miniTests/postOnForward/pageFlowTest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<html>
+    <body>
+        <br/>
+        <table class="tablebody">
+            <tr class="tablebody">
+                <td>{pageFlow.someProperty}:</td>
+                <td>
+                    <span>received &quot;init val&quot;, but modified in the action method.</span>
+                </td>
+            </tr>
+        </table>
+        <br/>&nbsp;
+        
+        <a href="/coreWeb/miniTests/postOnForward/begin.do">start over</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>29 Jul 2003, 09:58:20.372 AM GMT-07:00</endDate>
+  <testCount>9</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PrimitiveOptionsDS.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/PrimitiveOptionsDS.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,269 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PrimitiveOptionsDS</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:29:45.331 PM MST</startDate>
+  <description>Test of optionsDataSource with primitive wrappers</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/primitiveOptionsDS/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+        <p>
+        <form name="testActionForm" action="/coreWeb/tags/primitiveOptionsDS/testAction.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>
+                    <input type="hidden" name="wlw-checkbox_group_key:{pageFlow.boxes}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.boxes}" value="56" checked><span>56</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.boxes}" value="27"><span>27</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.boxes}" value="32" checked><span>32</span><br>
+
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="testAction">
+        </form>
+        
+        
+        </p>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/primitiveOptionsDS/testAction.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.boxes}</name>
+          <value>56</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.boxes}</name>
+          <value>32</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.boxes}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>156</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7c13</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        <table class="tablebody" border="1">
+                <tr>
+                    <td><span>56</span></td>
+                </tr>
+            
+                <tr>
+                    <td><span>32</span></td>
+                </tr>
+            </table>
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:29:48.596 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RadioButtonError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RadioButtonError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RadioButtonError</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 11:59:22.071 PM MST</startDate>
+  <description>Errors in Radio Buttons</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/errors/radioButtonError/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7c15</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Radio Tests</title>
+</head>
+<body>
+<h4>Radio</h4>
+<form id="Netui_Form_0" action="/coreWeb/errors/radioButtonError/postback.do" method="post">
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RadioButtonOption</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find the RadioButtonGroup parent tag for the RadioButtonOption.</td></tr>
+</table></span>
+<br />
+<input type="submit" value="Submit">
+</form>
+<br />
+Selected: <span></span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 11:59:23.753 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReadonlyAction.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReadonlyAction.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1093 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReadonlyAction</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 03:17:22.027 PM MST</startDate>
+  <description>Test read-only actions, which do not cause a page flow to be replicated.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/readonlyAction/readonlyActionController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Readonly Actions
+        </title>
+    </head>
+    <body>
+        <h3>Readonly Actions</h3>
+        
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyAction.do">readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyAction.do">non-readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyExceptionHandler.do">readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyExceptionHandler.do">non-readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/goNested.do">see a fully-readonly page flow</a>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>calling action begin</span></li>
+            
+                <li><span>ensureFailover called from begin</span></li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/readonlyAction/readonlyAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Readonly Actions
+        </title>
+    </head>
+    <body>
+        <h3>Readonly Actions</h3>
+        
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyAction.do">readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyAction.do">non-readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyExceptionHandler.do">readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyExceptionHandler.do">non-readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/goNested.do">see a fully-readonly page flow</a>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>calling action begin</span></li>
+            
+                <li><span>ensureFailover called from begin</span></li>
+            
+                <li><span>calling action readonlyAction</span></li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/readonlyAction/nonReadonlyAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Readonly Actions
+        </title>
+    </head>
+    <body>
+        <h3>Readonly Actions</h3>
+        
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyAction.do">readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyAction.do">non-readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyExceptionHandler.do">readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyExceptionHandler.do">non-readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/goNested.do">see a fully-readonly page flow</a>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>calling action begin</span></li>
+            
+                <li><span>ensureFailover called from begin</span></li>
+            
+                <li><span>calling action readonlyAction</span></li>
+            
+                <li><span>calling action nonReadonlyAction</span></li>
+            
+                <li><span>ensureFailover called from nonReadonlyAction</span></li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/readonlyAction/readonlyExceptionHandler.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Readonly Actions
+        </title>
+    </head>
+    <body>
+        <h3>Readonly Actions</h3>
+        
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyAction.do">readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyAction.do">non-readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyExceptionHandler.do">readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyExceptionHandler.do">non-readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/goNested.do">see a fully-readonly page flow</a>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>calling action begin</span></li>
+            
+                <li><span>ensureFailover called from begin</span></li>
+            
+                <li><span>calling action readonlyAction</span></li>
+            
+                <li><span>calling action nonReadonlyAction</span></li>
+            
+                <li><span>ensureFailover called from nonReadonlyAction</span></li>
+            
+                <li><span>calling action readonlyExceptionHandler</span></li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/readonlyAction/nonReadonlyExceptionHandler.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Readonly Actions
+        </title>
+    </head>
+    <body>
+        <h3>Readonly Actions</h3>
+        
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyAction.do">readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyAction.do">non-readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyExceptionHandler.do">readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyExceptionHandler.do">non-readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/goNested.do">see a fully-readonly page flow</a>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>calling action begin</span></li>
+            
+                <li><span>ensureFailover called from begin</span></li>
+            
+                <li><span>calling action readonlyAction</span></li>
+            
+                <li><span>calling action nonReadonlyAction</span></li>
+            
+                <li><span>ensureFailover called from nonReadonlyAction</span></li>
+            
+                <li><span>calling action readonlyExceptionHandler</span></li>
+            
+                <li><span>calling action nonReadonlyExceptionHandler</span></li>
+            
+                <li><span>ensureFailover called from exception-handler handleException</span></li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/readonlyAction/goNested.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Fully-Readonly Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Fully-Readonly Page Flow</h3>
+        
+        <i>This page flow will blow up if ensureFailover is ever called.</i>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nested/someAction.do">some action</a>
+        <br>
+        <br>
+        
+        <a href="/coreWeb/miniTests/readonlyAction/nested/done.do">Exit nested</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/readonlyAction/nested/someAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Fully-Readonly Page Flow
+        </title>
+    </head>
+    <body>
+        <h3>Fully-Readonly Page Flow</h3>
+        
+        <i>This page flow will blow up if ensureFailover is ever called.</i>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nested/someAction.do">some action</a>
+        <br>
+        <br>
+        
+        <a href="/coreWeb/miniTests/readonlyAction/nested/done.do">Exit nested</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/readonlyAction/nested/done.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71f6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Readonly Actions
+        </title>
+    </head>
+    <body>
+        <h3>Readonly Actions</h3>
+        
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyAction.do">readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyAction.do">non-readonly action</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/readonlyExceptionHandler.do">readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/nonReadonlyExceptionHandler.do">non-readonly exception-handler</a>
+        <br>
+        <a href="/coreWeb/miniTests/readonlyAction/goNested.do">see a fully-readonly page flow</a>
+        <br>
+        <hr>
+        History:
+        <ul>
+        
+                <li><span>calling action begin</span></li>
+            
+                <li><span>ensureFailover called from begin</span></li>
+            
+                <li><span>calling action readonlyAction</span></li>
+            
+                <li><span>calling action nonReadonlyAction</span></li>
+            
+                <li><span>ensureFailover called from nonReadonlyAction</span></li>
+            
+                <li><span>calling action readonlyExceptionHandler</span></li>
+            
+                <li><span>calling action nonReadonlyExceptionHandler</span></li>
+            
+                <li><span>ensureFailover called from exception-handler handleException</span></li>
+            
+                <li><span>calling action goNested</span></li>
+            
+                <li><span>ensureFailover called from goNested</span></li>
+            
+                <li><span>calling action nestedDone</span></li>
+            
+                <li><span>ensureFailover called from nestedDone</span></li>
+            
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 03:17:27.385 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>8</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>8</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatCheck.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatCheck.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,737 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RepeatCheck</sessionName>
+  <tester>Daryl</tester>
+  <startDate>27 Mar 2004, 09:19:37.291 AM MST</startDate>
+  <description>Basic test of the repeating checkbox group</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatCheck/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>31a79d57:fb8d13c03d:-7bf6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Checkbox Group</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Checkbox Group</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/RepeatCheck/post.do" method="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">CheckBox Group</caption>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-1"><input type="hidden" name="wlw-checkbox_group_key:{pageFlow.resultsOne}OldValue" value="true"></td>
+                    <td align="left"><span class="normal">Option One</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-2"></td>
+                    <td align="left"><span class="normal2">Option Two</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-3"></td>
+                    <td align="left"><span class="normal3">Option Three</span>
+                </td></tr>
+            
+            </table>
+        </td></tr>
+        <tr><td>
+            <table>
+            <caption class="normalAttr">CheckBox Group Two</caption>
+            <tr><td>
+            
+                 <span class="normal">Option One</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-1"><input type="hidden" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}OldValue" value="true">&nbsp;                
+            
+                 <span class="normal2">Option Two</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-2">&nbsp;                
+            
+                 <span class="normal3">Option Three</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-3">&nbsp;                
+            
+            </td></tr>
+            </table>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        </table>
+        </form>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatCheck/post.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsOne}</name>
+          <value>opt-1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsOne}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsTwo}</name>
+          <value>opt-2</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsTwo}</name>
+          <value>opt-3</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsTwo}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>298</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>31a79d57:fb8d13c03d:-7bf6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+    </head>
+    <body>
+        <h4>Results One</h4>
+        <a href="/coreWeb/tags/RepeatCheck/begin.do">Home</a>
+        <ul>
+        
+            <li><span>opt-1</span></li>
+        
+        </ul>
+        <br/>
+        <h4>Results Two:</h4>
+        <ul>
+        
+            <li><span>opt-2</span></li>
+        
+            <li><span>opt-3</span></li>
+        
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatCheck/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>31a79d57:fb8d13c03d:-7bf6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Checkbox Group</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Checkbox Group</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/RepeatCheck/post.do" method="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">CheckBox Group</caption>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-1" checked><input type="hidden" name="wlw-checkbox_group_key:{pageFlow.resultsOne}OldValue" value="true"></td>
+                    <td align="left"><span class="normal">Option One</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-2"></td>
+                    <td align="left"><span class="normal2">Option Two</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-3"></td>
+                    <td align="left"><span class="normal3">Option Three</span>
+                </td></tr>
+            
+            </table>
+        </td></tr>
+        <tr><td>
+            <table>
+            <caption class="normalAttr">CheckBox Group Two</caption>
+            <tr><td>
+            
+                 <span class="normal">Option One</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-1"><input type="hidden" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}OldValue" value="true">&nbsp;                
+            
+                 <span class="normal2">Option Two</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-2" checked>&nbsp;                
+            
+                 <span class="normal3">Option Three</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-3" checked>&nbsp;                
+            
+            </td></tr>
+            </table>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        </table>
+        </form>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatCheck/post.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsOne}</name>
+          <value>opt-2</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsOne}</name>
+          <value>opt-3</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsOne}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsTwo}</name>
+          <value>opt-1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsTwo}</name>
+          <value>opt-2</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsTwo}</name>
+          <value>opt-3</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_group_key:{pageFlow.resultsTwo}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>412</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>31a79d57:fb8d13c03d:-7bf6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+    </head>
+    <body>
+        <h4>Results One</h4>
+        <a href="/coreWeb/tags/RepeatCheck/begin.do">Home</a>
+        <ul>
+        
+            <li><span>opt-2</span></li>
+        
+            <li><span>opt-3</span></li>
+        
+        </ul>
+        <br/>
+        <h4>Results Two:</h4>
+        <ul>
+        
+            <li><span>opt-1</span></li>
+        
+            <li><span>opt-2</span></li>
+        
+            <li><span>opt-3</span></li>
+        
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatCheck/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Alnt70SGBF2mrnTjqqch2YkviUvjePVUmyyR22oB2nntPvqcrxCD!825857005</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>31a79d57:fb8d13c03d:-7bf6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Checkbox Group</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Checkbox Group</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/RepeatCheck/post.do" method="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">CheckBox Group</caption>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-1"><input type="hidden" name="wlw-checkbox_group_key:{pageFlow.resultsOne}OldValue" value="true"></td>
+                    <td align="left"><span class="normal">Option One</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-2" checked></td>
+                    <td align="left"><span class="normal2">Option Two</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsOne}" value="opt-3" checked></td>
+                    <td align="left"><span class="normal3">Option Three</span>
+                </td></tr>
+            
+            </table>
+        </td></tr>
+        <tr><td>
+            <table>
+            <caption class="normalAttr">CheckBox Group Two</caption>
+            <tr><td>
+            
+                 <span class="normal">Option One</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-1" checked><input type="hidden" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}OldValue" value="true">&nbsp;                
+            
+                 <span class="normal2">Option Two</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-2" checked>&nbsp;                
+            
+                 <span class="normal3">Option Three</span>
+                 <input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.resultsTwo}" value="opt-3" checked>&nbsp;                
+            
+            </td></tr>
+            </table>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        </table>
+        </form>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>27 Mar 2004, 09:19:42.459 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatCheckOptionError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatCheckOptionError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RepeatCheckOptionError</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 09:56:39.833 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/RepeatCheckOptionError/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-a9431aa:fd9f6fce18:-79aa</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Repeating Checkbox Group Error</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Repeating Checkbox Group Error</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/RepeatCheckOptionError/post.do" method="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">CheckBox Group</caption>
+            <input type="hidden" name="wlw-checkbox_group_key:{pageFlow.resultsOne}OldValue" value="true"><span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>CheckBoxGroup</b>]</span>
+            </table>
+        </td></tr>
+      <tr><td><input type="submit" value="Post"></td></tr>
+        </table>
+        </form>
+  <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>CheckBoxGroup</th><th>Message</th><td>The CheckBoxGroup cannot both have CheckBoxOptions and an OptionsDataSource.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 09:56:41.425 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatRadio.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatRadio.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,677 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RepeatRadio</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 03:17:40.333 PM MST</startDate>
+  <description>Basic test of the Repeating RadioButtonGroup</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatRadio/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71cf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Checkbox Group</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Checkbox Group</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/RepeatRadio/post.do" method="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">RadioButton Group</caption>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-1"></td>
+                    <td align="left"><span class="normal">Option One</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-2"></td>
+                    <td align="left"><span class="normal2">Option Two</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-3"></td>
+                    <td align="left"><span class="normal3">Option Three</span>
+                </td></tr>
+            
+            </table>
+        </td></tr>
+        <tr><td>
+            <table>
+            <caption class="normalAttr">RadioButton Group Two</caption>
+            <tr><td>
+            
+                 <span class="normal">Option One</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-1">&nbsp;                
+            
+                 <span class="normal2">Option Two</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-2">&nbsp;                
+            
+                 <span class="normal3">Option Three</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-3">&nbsp;                
+            
+            </td></tr>
+            </table>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        </table>
+        </form>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatRadio/post.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-radio_button_group_key:{pageFlow.resultsOne}</name>
+          <value>opt-1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{pageFlow.resultsTwo}</name>
+          <value>opt-3</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>121</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71cf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+    </head>
+    <body>
+        <a href="/coreWeb/tags/RepeatRadio/begin.do">Home</a>
+        <h4>Results One: <span>opt-1</span></h4>
+        <h4>Results Two: <span>opt-3</span></h4>
+        <br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatRadio/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71cf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Checkbox Group</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Checkbox Group</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/RepeatRadio/post.do" method="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">RadioButton Group</caption>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-1" checked></td>
+                    <td align="left"><span class="normal">Option One</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-2"></td>
+                    <td align="left"><span class="normal2">Option Two</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-3"></td>
+                    <td align="left"><span class="normal3">Option Three</span>
+                </td></tr>
+            
+            </table>
+        </td></tr>
+        <tr><td>
+            <table>
+            <caption class="normalAttr">RadioButton Group Two</caption>
+            <tr><td>
+            
+                 <span class="normal">Option One</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-1">&nbsp;                
+            
+                 <span class="normal2">Option Two</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-2">&nbsp;                
+            
+                 <span class="normal3">Option Three</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-3" checked>&nbsp;                
+            
+            </td></tr>
+            </table>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        </table>
+        </form>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatRadio/post.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-radio_button_group_key:{pageFlow.resultsOne}</name>
+          <value>opt-2</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{pageFlow.resultsTwo}</name>
+          <value>opt-1</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>121</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71cf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+    </head>
+    <body>
+        <a href="/coreWeb/tags/RepeatRadio/begin.do">Home</a>
+        <h4>Results One: <span>opt-2</span></h4>
+        <h4>Results Two: <span>opt-1</span></h4>
+        <br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/RepeatRadio/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-71cf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Checkbox Group</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Checkbox Group</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/RepeatRadio/post.do" method="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">RadioButton Group</caption>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-1"></td>
+                    <td align="left"><span class="normal">Option One</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-2" checked></td>
+                    <td align="left"><span class="normal2">Option Two</span>
+                </td></tr>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}" value="opt-3"></td>
+                    <td align="left"><span class="normal3">Option Three</span>
+                </td></tr>
+            
+            </table>
+        </td></tr>
+        <tr><td>
+            <table>
+            <caption class="normalAttr">RadioButton Group Two</caption>
+            <tr><td>
+            
+                 <span class="normal">Option One</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-1" checked>&nbsp;                
+            
+                 <span class="normal2">Option Two</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-2">&nbsp;                
+            
+                 <span class="normal3">Option Three</span>
+                 <input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsTwo}" value="opt-3">&nbsp;                
+            
+            </td></tr>
+            </table>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        </table>
+        </form>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 03:17:43.778 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatRadioOptionError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatRadioOptionError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RepeatRadioOptionError</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 09:56:56.957 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/RepeatRadioOptionError/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-a9431aa:fd9f6fce18:-797b</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Repeating RadioButton Group Error</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal {color: #cc9999;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #99cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Repeating RadioButton Group Error</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/RepeatRadioOptionError/post.do" method="post">
+        <table>
+        <tr><td>
+            <table width="200pt">
+            <caption class="normalAttr">CheckBox Group</caption>
+            
+                <tr align="center"><td align="right" width="25%"><input type="radio" name="wlw-radio_button_group_key:{pageFlow.resultsOne}"><span>null</span></td>
+                    <td align="left"><span class=""></span>
+                </td></tr>
+            <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>RadioButtonGroup</b>]</span>
+            </table>
+        </td></tr>
+      <tr><td><input type="submit" value="Post"></td></tr>
+        </table>
+        </form>
+  <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>RadioButtonGroup</th><th>Message</th><td>The RadioButtonGroup cannot both have RadioButtonOptions and an OptionsDataSource.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 09:56:58.429 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatSelect.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatSelect.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,590 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RepeatSelect</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 10:54:53.483 AM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/repeatSelect/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-a9431aa:fd9f6fce18:-6ff2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Select Test</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Select Test</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/repeatSelect/post.do" method="post">
+        <table>
+        <tr><td>
+        <input type="hidden" name="wlw-select_key:{pageFlow.resultsOne}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.resultsOne}" multiple size="3"><option class="normalAttr" value="opt-1"><span>Option One</span></option>
+            
+        
+            <option class="normalAttr" value="opt-2"><span>Option Two</span></option>
+            
+        
+            <option class="normalAttr" value="opt-3"><span>Option Three</span></option></select>
+        </td></tr>
+        <tr><td>
+        <input type="hidden" name="wlw-select_key:{pageFlow.resultsTwo}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.resultsTwo}"><option class="normalAttr" value="opt-1"><span>Option One</span></option>
+            
+            
+            
+            
+                <option class="normalAttr" value="opt-2"><span>Option Two</span></option>
+            
+            
+            
+            
+                <option class="normalAttr" value="opt-3"><span>Option Three</span></option>
+            
+            
+            
+            
+            
+            
+            
+            
+                <option class="normalAttr" value="null-opt"><span>[Nothing]</span></option></select>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        <table>
+        </form>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/repeatSelect/post.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsOne}</ses:name>
+                  <ses:value>opt-1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsOne}</ses:name>
+                  <ses:value>opt-2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsOne}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsTwo}</ses:name>
+                  <ses:value>null-opt</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsTwo}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4CC062A66A0AC01FB5A16AF2C8BFA72F</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>261</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=4CC062A66A0AC01FB5A16AF2C8BFA72F; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-a9431aa:fd9f6fce18:-6ff2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+    <head>
+    </head>
+    <body>
+        <h4>Results One</h4>
+        <a href="/coreWeb/tags/repeatSelect/begin.do">Home</a>
+        <ul>
+        
+            <li><span>opt-1</span></li>
+        
+            <li><span>opt-2</span></li>
+        
+        </ul>
+        <br/>
+        Results Two: <span>null-opt</span>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/repeatSelect/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4CC062A66A0AC01FB5A16AF2C8BFA72F</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=4CC062A66A0AC01FB5A16AF2C8BFA72F; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-a9431aa:fd9f6fce18:-6ff2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Select Test</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Select Test</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/repeatSelect/post.do" method="post">
+        <table>
+        <tr><td>
+        <input type="hidden" name="wlw-select_key:{pageFlow.resultsOne}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.resultsOne}" multiple size="3"><option class="normalAttr" value="opt-1" selected><span>Option One</span></option>
+            
+        
+            <option class="normalAttr" value="opt-2" selected><span>Option Two</span></option>
+            
+        
+            <option class="normalAttr" value="opt-3"><span>Option Three</span></option></select>
+        </td></tr>
+        <tr><td>
+        <input type="hidden" name="wlw-select_key:{pageFlow.resultsTwo}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.resultsTwo}"><option class="normalAttr" value="opt-1"><span>Option One</span></option>
+            
+            
+            
+            
+                <option class="normalAttr" value="opt-2"><span>Option Two</span></option>
+            
+            
+            
+            
+                <option class="normalAttr" value="opt-3"><span>Option Three</span></option>
+            
+            
+            
+            
+            
+            
+            
+            
+                <option class="normalAttr" value="null-opt" selected><span>[Nothing]</span></option></select>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        <table>
+        </form>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/repeatSelect/post.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsOne}</ses:name>
+                  <ses:value>opt-1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsOne}</ses:name>
+                  <ses:value>opt-3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsOne}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsTwo}</ses:name>
+                  <ses:value>opt-1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{pageFlow.resultsTwo}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4CC062A66A0AC01FB5A16AF2C8BFA72F</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>258</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=4CC062A66A0AC01FB5A16AF2C8BFA72F; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-a9431aa:fd9f6fce18:-6ff2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+    <head>
+    </head>
+    <body>
+        <h4>Results One</h4>
+        <a href="/coreWeb/tags/repeatSelect/begin.do">Home</a>
+        <ul>
+        
+            <li><span>opt-1</span></li>
+        
+            <li><span>opt-3</span></li>
+        
+        </ul>
+        <br/>
+        Results Two: <span>opt-1</span>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/repeatSelect/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4CC062A66A0AC01FB5A16AF2C8BFA72F</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=4CC062A66A0AC01FB5A16AF2C8BFA72F; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-a9431aa:fd9f6fce18:-6ff2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Basic Repeating Select Test</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>Basic Repeating Select Test</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/repeatSelect/post.do" method="post">
+        <table>
+        <tr><td>
+        <input type="hidden" name="wlw-select_key:{pageFlow.resultsOne}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.resultsOne}" multiple size="3"><option class="normalAttr" value="opt-1" selected><span>Option One</span></option>
+            
+        
+            <option class="normalAttr" value="opt-2"><span>Option Two</span></option>
+            
+        
+            <option class="normalAttr" value="opt-3" selected><span>Option Three</span></option></select>
+        </td></tr>
+        <tr><td>
+        <input type="hidden" name="wlw-select_key:{pageFlow.resultsTwo}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.resultsTwo}"><option class="normalAttr" value="opt-1" selected><span>Option One</span></option>
+            
+            
+            
+            
+                <option class="normalAttr" value="opt-2"><span>Option Two</span></option>
+            
+            
+            
+            
+                <option class="normalAttr" value="opt-3"><span>Option Three</span></option>
+            
+            
+            
+            
+            
+                <option class="normalAttr" value="null-opt"><span>[Nothing]</span></option></select>
+        </td></tr>
+        <tr><td><input type="submit" value="Post"></td></tr>
+        <table>
+        </form>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 10:54:55.436 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>5</ses:testCount>
+   <ses:passedCount>2</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatSelectTypeError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeatSelectTypeError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RepeatSelectTypeError</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:30:38.757 PM MST</startDate>
+  <description>Verify that errors in Select Options are reported</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/repeatSelectTypeError/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7bcf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>SelectOption without Repeater Type</title>
+        <style type="text/css">
+        .normalAttr {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        </style>
+  </head>
+  <body>
+    <h4>SelectOption without Repeater Type</h4>
+        <form id="Netui_Form_0" action="/coreWeb/tags/repeatSelectTypeError/post.do" method="post">
+        <table>
+        <tr><td>
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Select</b>]</span>
+        </td></tr>
+      <tr><td><input type="submit" value="Post"></td></tr>
+        <table>
+        </form>
+  <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Select</th><th>Message</th><td>A SelectOption must set the repeatingType property when appearing in the body of a repeating Select.</td></tr>
+</table></div>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:30:41.100 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterChoiceMethod.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterChoiceMethod.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,940 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RepeaterChoiceMethod</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>29 Jun 2004, 11:26:09.792 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/callMethod/choiceMethod/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>*/*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-4b73</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Choice Method Tests</title>
+  </head>
+
+  <body>
+<b>Repeater Choice tests</b><br/>
+<a href="/coreWeb/databinding/callMethod/choiceMethod/ShipTest.do">ShipTest</a><br/>
+<a href="/coreWeb/databinding/callMethod/choiceMethod/DataboundChoiceValue.do">Databound Choice Value</a><br/>
+<a href="/coreWeb/databinding/callMethod/choiceMethod/errors.jsp">Error Tests</a><br/>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/callMethod/choiceMethod/ShipTest.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-4b73</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Shipping</title>
+    <link rel="stylesheet" href="../default.css" type="text/css"/>
+  </head>
+
+  <body>
+    <h1>Shipping</h1>
+<b>Product Ship Status</b><br/>
+<br/>
+
+        <table class="table" border=true>
+        <tr class="tablehead"><td>Name</td><td>Shipped Date</td><td>Arrival Date (est)</td></tr>
+    
+            <tr class="row">
+                <td><span>Product A</span></td>
+                <td colspan=2><span>Not Yet Shipped</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product C</span></td>
+                <td><span>12/29/2002</span></td>
+                <td><span>1/8/2003</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product B</span></td>
+                <td colspan=2><span>Arrived</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product D</span></td>
+                <td class="rowerror" colspan=2><span>Error; status unknown. &nbsp;Call customer service at 1-800-555-1212</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product E</span></td>
+                <td colspan=2><span>Arrived</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product F</span></td>
+                <td><span>12/29/2002</span></td>
+                <td><span>1/8/2003</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product G</span></td>
+                <td><span>12/29/2002</span></td>
+                <td><span>1/8/2003</span></td>
+            </tr>
+        
+        </table>
+    
+
+
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Wed Jan 01 17:08:25 Mountain Standard Time 2003 -->
+<!-- hhmts start -->
+Last modified: Tue Sep 02 10:13:55 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/callMethod/choiceMethod/DataboundChoiceValue.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-4b73</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Shipping</title>
+    <link rel="stylesheet" href="/integration/default.css" type="text/css"/>
+<style type="text/css">
+.row
+{
+color: #
+}
+</style>
+  </head>
+
+  <body>
+    <h1>Shipping</h1>
+<b>Databound Choice Value Test</b><br/>
+<br/>
+<br/>
+
+        <table class="table" border=true>
+        <tr class="tablehead"><td>Name</td></tr>
+    
+            <tr class="row">
+                <td><span>Product A</span></td>
+            </tr>
+    
+            <tr class="row">
+                <td><span>Product C</span></td>
+            </tr>
+    
+            <tr class="row">
+                <td><span>Product B</span></td>
+            </tr>
+    
+            <tr class="row">
+                <td><span>Product D</span></td>
+            </tr>
+    
+            <tr class="row">
+                <td><span>Product E</span></td>
+            </tr>
+    
+            <tr class="row">
+                <td><span>Product F</span></td>
+            </tr>
+    
+            <tr class="row">
+                <td><span>Product G</span></td>
+            </tr>
+    
+        </table>
+    
+<br/>
+<br/>
+<b>Test 1</b><br/>
+
+        <table class="table" border=true>
+        <tr class="tablehead"><td>Name</td><td>Shipped Date</td><td>Arrival Date (est)</td></tr>
+    
+            <tr class="row">
+                <td><span>Product A</span></td>
+                <td colspan=2><span>Not Yet Shipped</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product C</span></td>
+                <td colspan=2><span>Not Yet Shipped</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product B</span></td>
+                <td colspan=2><span>Not Yet Shipped</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product D</span></td>
+                <td colspan=2><span>Not Yet Shipped</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product E</span></td>
+                <td colspan=2><span>Not Yet Shipped</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product F</span></td>
+                <td colspan=2><span>Not Yet Shipped</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product G</span></td>
+                <td colspan=2><span>Not Yet Shipped</span></td>
+            </tr>
+        
+        </table>
+    
+
+<br/>
+<br/>
+<b>Test 2</b><br/>
+
+        <table class="table" border=true><tr class="tablehead"><td>Name</td></tr>
+    
+            <tr class="row">
+                <td><span>Product A</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product C</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product B</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><b><span>Product D</span></b></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product E</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product F</span></td>
+            </tr>
+        
+            <tr class="row">
+                <td><span>Product G</span></td>
+            </tr>
+        
+        </table>
+    
+
+<br/>
+<br/>
+
+
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Wed Jan 01 17:08:25 Mountain Standard Time 2003 -->
+<!-- hhmts start -->
+Last modified: Tue Sep 02 11:48:47 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/callMethod/choiceMethod/errors.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiOGRqbs2Aj2miPsWsIyM1l2D5GvMFK6rS3G8UceECuEsZ6cXV47!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-4b73</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Choice Method Error Tests</title>
+  </head>
+
+  <body>
+    <h1>Choice Method Error Tests</h1>
+
+<br/>
+<br/>
+<b>Test 1 -- invalid databinding expression in a choice tag's value attribute</b><br/>
+
+        <table class="table" border=true>
+        <tr class="tablehead"><td>Name</td></tr>
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+
+        </table>
+    
+
+<br/>
+<br/>
+<b>Test 2 -- invalid choiceMethod method name</b><br/>
+
+        <table class="table" border=true>
+        <tr class="tablehead"><td>Name</td></tr>
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>ChoiceMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "missingMethod" with 0 parameter(s) on object named "{pageFlow}"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>ChoiceMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "missingMethod" with 0 parameter(s) on object named "{pageFlow}"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>ChoiceMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "missingMethod" with 0 parameter(s) on object named "{pageFlow}"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>ChoiceMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "missingMethod" with 0 parameter(s) on object named "{pageFlow}"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>ChoiceMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "missingMethod" with 0 parameter(s) on object named "{pageFlow}"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>ChoiceMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "missingMethod" with 0 parameter(s) on object named "{pageFlow}"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>ChoiceMethod</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Could not find operation "missingMethod" with 0 parameter(s) on object named "{pageFlow}"</td></tr>
+</table></span>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Choice</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{container.item.noname}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{container.item.noname}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "noname" on object of type "class databinding.callMethod.choiceMethod.Controller$LineItem"</td></tr>
+</table></span>
+
+        </table>
+    
+
+<br/>
+<br/>
+<b>Test 3 -- no choice tags</b><br/>
+
+        <table class="table" border=true>
+        <tr class="tablehead"><td>Name</td></tr>
+    
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        </table>
+    
+
+<br/>
+<br/>
+<b>Test 4 -- no choiceMethod tag</b><br/>
+
+        <table class="table" border=true>
+        <tr class="tablehead"><td>Name</td></tr>
+    
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItems body.</td></tr>
+</table></span>
+
+        </table>
+    
+
+<br/>
+<br/>
+<b>Test 5 -- two choiceMethod tags</b><br/>
+
+        <table class="table" border=true>
+        <tr class="tablehead"><td>Name</td></tr>
+    
+        
+        
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.</td></tr>
+</table></span>
+
+        
+        
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.</td></tr>
+</table></span>
+
+        
+        
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.</td></tr>
+</table></span>
+
+        
+        
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.</td></tr>
+</table></span>
+
+        
+        
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.</td></tr>
+</table></span>
+
+        
+        
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.</td></tr>
+</table></span>
+
+        
+        
+        
+        
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.</td></tr>
+</table></span>
+
+        </table>
+    
+
+
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Wed Jun 04 17:14:11 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Tue Sep 02 10:13:46 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 11:26:09.982 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>3</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterChoiceMethodBooleanTypes.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterChoiceMethodBooleanTypes.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RepeaterChoiceMethodBooleanTypes</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>26 Mar 2004, 02:36:09.114 PM MST</startDate>
+  <description>Test the repeater's choiceMethod tag when comparing non-String types and null values.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/repeater/booleanChoice/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Akh34xggMr3ZO6Loh9JgBX1WjGPv2rnIbnglp22JSaaTqCWPQ8NZ!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Akh34xggMr3ZO6Loh9JgBX1WjGPv2rnIbnglp22JSaaTqCWPQ8NZ!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-79fc</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Web Application Page</title>
+  </head>
+  <body>
+    <p>
+      New Web Application Page
+      <br/>
+      <br/>
+      <ul>
+                <li><span>false</span></li>
+          
+                <li><span>true</span></li>
+          
+                <li><span>false</span></li>
+          
+                <li><span></span></li>
+          </ul>
+      <br/>
+      <br/>
+      <ul>
+              <li>this is the false section</li>
+            
+              <li>this is the true section</li>
+            
+              <li>this is the false section</li>
+            
+              <li>this is the default section</li>
+            </ul>
+    </p>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:36:11.116 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterDataStructures.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterDataStructures.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RepeaterDataStructures</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>29 Jun 2004, 09:32:58.359 AM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/repeater/dataStructures/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>*/*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>5d28493a:fd7109906d:-7fff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Repeater Data Structure Tests</title>
+  </head>
+
+  <body>
+    <b>Repeater Data Structure Tests</b>
+<br/>
+<br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/arrayRepeater.jsp">Array Repeater</a><br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/listRepeater.jsp">List Repeater</a><br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/vectorRepeater.jsp">Vector Repeater</a><br/>
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Thu Aug 14 14:24:33 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Thu Aug 14 14:25:26 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/repeater/dataStructures/arrayRepeater.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>5d28493a:fd7109906d:-7fff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>Array Repeater Tests</title>
+</head>
+<body>
+
+
+<!-- 
+A generic page that will consume data from some data source 
+This page expects the following data structures:
+
+- multiItemDataSource
+- singleItemDataSource
+- zeroItemDataSource
+- nullItemDataSource
+
+ -->
+<hr/>
+<b>Data Structures</b><br/>
+request.getAttribute("multiItemDataSource"): not null.  type: [Ldatabinding.SimpleJavaBean;<br/>request.getAttribute("singleItemDataSource"): not null.  type: [Ldatabinding.SimpleJavaBean;<br/>request.getAttribute("zeroItemDataSource"): not null.  type: [Ldatabinding.SimpleJavaBean;<br/>request.getAttribute("nullItemDataSource"): null
+<hr/>    
+<p><b>Repeater Test</b>
+<table><tr><td><a href="index.jsp">Data Structures Home</a></td></tr></table>
+<br>
+<h3>Body Content Tests</h3>
+<br/><br/><h2>Data Set: multiItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<br/><br/><h2>Data Set: singleItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<br/><br/><h2>Data Set: zeroItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+</table>
+<br/><br/><h2>Data Set: nullItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+</table>
+
+
+
+<address><a href="mailto:ekoneil@bea.com">Report Problems</a></address>
+<!-- Created: Wed Aug 07 10:07:00 Mountain Daylight Time 2002 -->
+<!-- hhmts start -->
+Last modified: Sun Jun 27 21:02:24 Mountain Standard Time 2004
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/repeater/dataStructures/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>5d28493a:fd7109906d:-7fff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Repeater Data Structure Tests</title>
+  </head>
+
+  <body>
+    <b>Repeater Data Structure Tests</b>
+<br/>
+<br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/arrayRepeater.jsp">Array Repeater</a><br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/listRepeater.jsp">List Repeater</a><br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/vectorRepeater.jsp">Vector Repeater</a><br/>
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Thu Aug 14 14:24:33 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Thu Aug 14 14:25:26 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/repeater/dataStructures/listRepeater.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>5d28493a:fd7109906d:-7fff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>List Repeater Tests</title>
+</head>
+<body>
+
+
+<!-- 
+A generic page that will consume data from some data source 
+This page expects the following data structures:
+
+- multiItemDataSource
+- singleItemDataSource
+- zeroItemDataSource
+- nullItemDataSource
+
+ -->
+<hr/>
+<b>Data Structures</b><br/>
+request.getAttribute("multiItemDataSource"): not null.  type: java.util.ArrayList<br/>request.getAttribute("singleItemDataSource"): not null.  type: java.util.ArrayList<br/>request.getAttribute("zeroItemDataSource"): not null.  type: java.util.ArrayList<br/>request.getAttribute("nullItemDataSource"): null
+<hr/>    
+<p><b>Repeater Test</b>
+<table><tr><td><a href="index.jsp">Data Structures Home</a></td></tr></table>
+<br>
+<h3>Body Content Tests</h3>
+<br/><br/><h2>Data Set: multiItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<br/><br/><h2>Data Set: singleItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<br/><br/><h2>Data Set: zeroItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+</table>
+<br/><br/><h2>Data Set: nullItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+</table>
+
+
+
+<address><a href="mailto:ekoneil@bea.com">Report Problems</a></address>
+<!-- Created: Wed Aug 07 10:07:00 Mountain Daylight Time 2002 -->
+<!-- hhmts start -->
+Last modified: Sun Jun 27 21:02:41 Mountain Standard Time 2004
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/repeater/dataStructures/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>5d28493a:fd7109906d:-7fff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Repeater Data Structure Tests</title>
+  </head>
+
+  <body>
+    <b>Repeater Data Structure Tests</b>
+<br/>
+<br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/arrayRepeater.jsp">Array Repeater</a><br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/listRepeater.jsp">List Repeater</a><br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/vectorRepeater.jsp">Vector Repeater</a><br/>
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Thu Aug 14 14:24:33 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Thu Aug 14 14:25:26 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/repeater/dataStructures/vectorRepeater.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>5d28493a:fd7109906d:-7fff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>List Repeater Tests</title>
+</head>
+<body>
+
+
+<!-- 
+A generic page that will consume data from some data source 
+This page expects the following data structures:
+
+- multiItemDataSource
+- singleItemDataSource
+- zeroItemDataSource
+- nullItemDataSource
+
+ -->
+<hr/>
+<b>Data Structures</b><br/>
+request.getAttribute("multiItemDataSource"): not null.  type: java.util.Vector<br/>request.getAttribute("singleItemDataSource"): not null.  type: java.util.Vector<br/>request.getAttribute("zeroItemDataSource"): not null.  type: java.util.Vector<br/>request.getAttribute("nullItemDataSource"): null
+<hr/>    
+<p><b>Repeater Test</b>
+<table><tr><td><a href="index.jsp">Data Structures Home</a></td></tr></table>
+<br>
+<h3>Body Content Tests</h3>
+<br/><br/><h2>Data Set: multiItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 1</span></td>
+            <td><center><span>1</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[1].index}" value="1" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 2</span></td>
+            <td><center><span>2</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[2].index}" value="2" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 3</span></td>
+            <td><center><span>3</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[3].index}" value="3" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 4</span></td>
+            <td><center><span>4</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[4].index}" value="4" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 5</span></td>
+            <td><center><span>5</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[5].index}" value="5" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 6</span></td>
+            <td><center><span>6</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[6].index}" value="6" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 7</span></td>
+            <td><center><span>7</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[7].index}" value="7" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 8</span></td>
+            <td><center><span>8</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[8].index}" value="8" size="7"></td>
+        </tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 9</span></td>
+            <td><center><span>9</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[9].index}" value="9" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<br/><br/><h2>Data Set: singleItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr>
+            <td><span>message from SimpleJavaBean: 0</span></td>
+            <td><center><span>0</span></center></td>
+            <td><input type="text" name="{pageContext.currentSource[0].index}" value="0" size="7"></td>
+        </tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+        <table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+    
+        <tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+        </table>
+    
+</table>
+<br/><br/><h2>Data Set: zeroItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+</table>
+<br/><br/><h2>Data Set: nullItemDataSource</h2><br/><br/>
+<h3>Body Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<hr/>
+<h3>Item Contet Tests</h3>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- items, no header, no footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+<!-- ====================================================================== -->
+<br/><b>Basic Data Source Test -- items, header, footer</b><br/>
+
+<hr/>    
+<h3>ErrorTests</h3></br>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, no footer</b><br/>
+
+<tr><td colspan=3><center>This space intentionally left blank.</center></td></tr>
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, no header, footer</b><br/>
+<table border=1><tr><td><center>Column 1</center></td><td><center>Column 2</center></td><td><center>Column 3</center></td></tr>
+
+</table>
+<!-- ====================================================================== -->
+<b>Basic Data Source Test -- body content, header, footer</b><br/>
+
+</table>
+
+
+
+<address><a href="mailto:ekoneil@bea.com">Report Problems</a></address>
+<!-- Created: Wed Aug 07 10:07:00 Mountain Daylight Time 2002 -->
+<!-- hhmts start -->
+Last modified: Sun Jun 27 21:02:55 Mountain Standard Time 2004
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/repeater/dataStructures/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AhL0Ht6rKR4WWKUInIGt2Z6TwPh1bsROwGbcYVHPPz4Wh81rxmw6!-600750929</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>5d28493a:fd7109906d:-7fff</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>7</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Repeater Data Structure Tests</title>
+  </head>
+
+  <body>
+    <b>Repeater Data Structure Tests</b>
+<br/>
+<br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/arrayRepeater.jsp">Array Repeater</a><br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/listRepeater.jsp">List Repeater</a><br/>
+<a href="/coreWeb/databinding/repeater/dataStructures/vectorRepeater.jsp">Vector Repeater</a><br/>
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Thu Aug 14 14:24:33 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Thu Aug 14 14:25:26 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 09:33:36.078 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>7</ses:testCount>
+   <ses:passedCount>4</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterDefaultText.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterDefaultText.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RepeaterDefaultText</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>30 Oct 2003, 11:25:32.703 AM MST</startDate>
+  <description>Test of setting the defaultText attribute of the repeater.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/repeater/simple/defaultText.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1hVOMrKnM0CuC8GH61BuTIPI4UrfmXYuKyCbKGVsy5Q21glE7360!362237642</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1hVOMrKnM0CuC8GH61BuTIPI4UrfmXYuKyCbKGVsy5Q21glE7360!362237642</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/databindingTests.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Default Text Test</title>
+  </head>
+  <body>
+    <h1>Default Text Test</h1>
+<br/>
+<b>defaultText attribute; null dataSource</b><br/>
+<b>No Data To Display</b>
+<br/>
+<br/>
+<b>defaultText attribute; emptyArray (zero length) dataSource</b><br/>
+<b>No Data To Display</b>
+<br/>
+<br/>
+<b>defaultText attribute; tenArrayAllNull (10 length all null) dataSource</b><br/>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+  <li><span></span></li>
+
+<br/>
+<br/>
+<b>defaultText attribute; tenArrayAllNull (10 length all null) dataSource, ignoreNulls</b><br/>
+<b>No Data To Display</b>
+<br/>
+<br/>
+<b>defaultText attribute; header; item; footer; non-null, empty dataSource</b><br/>
+<b>No Data To Display</b>
+<br/>
+<br/>
+<b>defaultText attribute; non-null (5 length String[]) dataSource</b><br/>
+
+  <li><span>This is String [0]</span></li>
+
+  <li><span>This is String [1]</span></li>
+
+  <li><span>This is String [2]</span></li>
+
+  <li><span>This is String [3]</span></li>
+
+  <li><span>This is String [4]</span></li>
+
+<br/>
+<br/>
+<b>defaultText attribute; emptyArray (zero length) dataSource, header/item/footer</b><br/>
+<b>No Data To Display</b>
+<br/>
+<br/>
+<b>defaultText attribute; tenArrayAllNull (10 length all null) dataSource, header/item/footer</b><br/>
+HEADER<br/><ul><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li></ul>FOOTER<br/>
+<br/>
+<br/>
+<b>defaultText attribute; tenArrayAllNull (10 length all null) dataSource, ignoreNulls</b><br/>
+<b>No Data To Display</b>
+<br/>
+<br/>
+</body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>30 Oct 2003, 11:25:53.253 AM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterErrors.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterErrors.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RepeaterErrors</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 06:41:08.896 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/errors/repeaterErrors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7861</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Repeater Errors</title>
+</head>
+<body>
+<h4>Repeater Errors</h4>
+<br />
+<b>standalone repeaterItem</b></br>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterItem</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">A tag of type "org.apache.beehive.netui.tags.databinding.repeater.RepeaterItem" must be nested within a tag of type "org.apache.beehive.netui.tags.databinding.repeater.Repeater"</td></tr>
+</table></span>
+
+
+<b>standalone repeaterHeader</b></br>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterHeader</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">A tag of type "org.apache.beehive.netui.tags.databinding.repeater.RepeaterHeader" must be nested within a tag of type "org.apache.beehive.netui.tags.databinding.repeater.Repeater"</td></tr>
+</table></span>
+
+
+<b>standalone repeaterFooter</b></br>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>RepeaterFooter</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">A tag of type "org.apache.beehive.netui.tags.databinding.repeater.RepeaterFooter" must be nested within a tag of type "org.apache.beehive.netui.tags.databinding.repeater.Repeater"</td></tr>
+</table></span>
+
+
+<b>Expression Error</b></br>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Repeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Expression Error</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.foo}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="4">Caught exception when evaluating expression "{pageFlow.foo}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "foo" on object of type "class errors.repeaterErrors.Controller"</td></tr>
+</table></span>
+
+<br />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 06:41:10.958 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterIgnoreNulls.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterIgnoreNulls.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RepeaterIgnoreNulls</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>13 Aug 2003, 04:58:57.933 PM MDT</startDate>
+  <description>Simple test of the ignoreNulls attribute of the repeater.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/repeater/simple/ignoreNulls.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>16C6K2LBs1Kpq6KcPKg1o1VeZKBRumG8wlxevv8eq6eV431B3E1n!520007625</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=16C6K2LBs1Kpq6KcPKg1o1VeZKBRumG8wlxevv8eq6eV431B3E1n!520007625</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Ignore Nulls Test</title>
+  </head>
+
+  <body>
+    <h1>Ignore Nulls Test</h1>
+<br/>
+<br/>
+
+
+<!-- dense array -->
+<br/>
+<b>denseArray, ignoreNulls=true</b><br/>
+<ul>
+
+    <li><span>one</span></li>
+
+    <li><span>two</span></li>
+
+    <li><span>three</span></li>
+
+</ul>
+<br/>
+<br/>
+<b>denseArray, ignoreNulls=false</b><br/>
+<ul>
+
+    <li><span>one</span></li>
+
+    <li><span>two</span></li>
+
+    <li><span>three</span></li>
+
+</ul>
+<br/>
+
+<!-- sparse array -->
+<br/>
+<b>sparseArray, ignoreNulls=true</b><br/>
+<ul>
+
+    <li><span>one</span></li>
+
+    <li><span>two</span></li>
+
+    <li><span>three</span></li>
+
+</ul>
+<br/>
+<br/>
+<b>sparseArray, ignoreNulls=false</b><br/>
+<ul>
+
+    <li><span>one</span></li>
+
+    <li><span></span></li>
+
+    <li><span>two</span></li>
+
+    <li><span></span></li>
+
+    <li><span>three</span></li>
+
+    <li><span></span></li>
+
+    <li><span></span></li>
+
+</ul>
+<br/>
+
+
+    <hr>
+    <address><a href="mailto:ekoneil@bea.com"></a></address>
+<!-- Created: Thu Jul 24 13:35:16 Mountain Daylight Time 2003 -->
+<!-- hhmts start -->
+Last modified: Thu Jul 24 15:12:12 Mountain Daylight Time 2003
+<!-- hhmts end -->
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>13 Aug 2003, 04:59:21.006 PM MDT</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterNested.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterNested.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RepeaterNested</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>17 Feb 2004, 07:37:14.907 PM MST</startDate>
+  <description>Test rendering nested repeaters.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/repeater/nested/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyPF0L4LB3wgSTEsuQnsh21pZlYcO6CMsJkezlVCDTc9Qah59cJS!-1749379131</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyPF0L4LB3wgSTEsuQnsh21pZlYcO6CMsJkezlVCDTc9Qah59cJS!-1749379131</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+  <head>
+    <title>Nested Repeaters</title>
+  </head>
+
+  <body>
+    <b>Nested Repeaters</b>
+<table>
+
+    <tr><td><span>Name: 0</span></td></tr>
+    <tr>
+        <td>
+        <table>
+        
+            <tr><td><span>0</span></td></tr>
+        
+            <tr><td><span>0</span></td></tr>
+        
+            <tr><td><span>0</span></td></tr>
+        
+            <tr><td><span>0</span></td></tr>
+        
+            <tr><td><span>0</span></td></tr>
+        
+        </table> 
+        </td>
+    </tr>
+
+    <tr><td><span>Name: 1</span></td></tr>
+    <tr>
+        <td>
+        <table>
+        
+            <tr><td><span>11</span></td></tr>
+        
+            <tr><td><span>11</span></td></tr>
+        
+            <tr><td><span>11</span></td></tr>
+        
+            <tr><td><span>11</span></td></tr>
+        
+            <tr><td><span>11</span></td></tr>
+        
+        </table> 
+        </td>
+    </tr>
+
+    <tr><td><span>Name: 2</span></td></tr>
+    <tr>
+        <td>
+        <table>
+        
+            <tr><td><span>22</span></td></tr>
+        
+            <tr><td><span>22</span></td></tr>
+        
+            <tr><td><span>22</span></td></tr>
+        
+            <tr><td><span>22</span></td></tr>
+        
+            <tr><td><span>22</span></td></tr>
+        
+        </table> 
+        </td>
+    </tr>
+
+    <tr><td><span>Name: 3</span></td></tr>
+    <tr>
+        <td>
+        <table>
+        
+            <tr><td><span>33</span></td></tr>
+        
+            <tr><td><span>33</span></td></tr>
+        
+            <tr><td><span>33</span></td></tr>
+        
+            <tr><td><span>33</span></td></tr>
+        
+            <tr><td><span>33</span></td></tr>
+        
+        </table> 
+        </td>
+    </tr>
+
+    <tr><td><span>Name: 4</span></td></tr>
+    <tr>
+        <td>
+        <table>
+        
+            <tr><td><span>44</span></td></tr>
+        
+            <tr><td><span>44</span></td></tr>
+        
+            <tr><td><span>44</span></td></tr>
+        
+            <tr><td><span>44</span></td></tr>
+        
+            <tr><td><span>44</span></td></tr>
+        
+        </table> 
+        </td>
+    </tr>
+
+</table>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>17 Feb 2004, 07:37:48.906 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterPad.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterPad.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RepeaterPad</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 08:46:01.049 PM MDT</ses:startDate>
+   <ses:description>Tests of the repeater pad tag.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/repeater/pad/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>107517DE00CEF1804959CAF207D1B2C1</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=107517DE00CEF1804959CAF207D1B2C1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Simple Pad Test</title>
+  </head>
+  <body>
+<br/>Note, this data set is a 10 item, non-null dataset.<br/>
+<b>max=10</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    
+<br/>
+<b>max=10, min=10</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    
+<br/>
+<b>max=11, min=10</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    
+<br/>
+<b>max=22, min=10</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    
+<br/>
+<b>min=11</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    FOO<br/>
+<br/>
+<b>min=15</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    FOO<br/>FOO<br/>FOO<br/>FOO<br/>FOO<br/>
+<br/>
+<b>min=15, bodyContent pad</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    FOO<br/>FOO<br/>FOO<br/>FOO<br/>FOO<br/>
+<br/>
+<b>min=15, empty pad</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    
+<br/>
+<b>max=8, min=5</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+<br/>
+<b>max=5, min=5</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+<br/>
+<b>max=2, min=2</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+<br/>
+<b>max=2, min=1</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+<br/>
+<b>max=1, min=1</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+<br/>
+<b>min=1</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+        <b>array[<span>1</span>] = <span>message from SimpleJavaBean: 1</span></b><br/>
+    
+        <b>array[<span>2</span>] = <span>message from SimpleJavaBean: 2</span></b><br/>
+    
+        <b>array[<span>3</span>] = <span>message from SimpleJavaBean: 3</span></b><br/>
+    
+        <b>array[<span>4</span>] = <span>message from SimpleJavaBean: 4</span></b><br/>
+    
+        <b>array[<span>5</span>] = <span>message from SimpleJavaBean: 5</span></b><br/>
+    
+        <b>array[<span>6</span>] = <span>message from SimpleJavaBean: 6</span></b><br/>
+    
+        <b>array[<span>7</span>] = <span>message from SimpleJavaBean: 7</span></b><br/>
+    
+        <b>array[<span>8</span>] = <span>message from SimpleJavaBean: 8</span></b><br/>
+    
+        <b>array[<span>9</span>] = <span>message from SimpleJavaBean: 9</span></b><br/>
+    
+<br/>
+<b>max=1</b><br/>
+
+        <b>array[<span>0</span>] = <span>message from SimpleJavaBean: 0</span></b><br/>
+    
+<br/>
+<b>min=0, max=5</b><br/>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Repeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Can not use a value of "0" for the field "minRepeat"; the value must be greater than or equal to zero.</td></tr>
+</table></span>
+
+<br/>
+<hr/>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 08:46:06.507 PM MDT</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterPadError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RepeaterPadError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RepeaterPadError</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 08:44:01.196 PM MDT</ses:startDate>
+   <ses:description>Test that invalid attribute values to the &lt;repeaterPad> tag are reported as errors.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/errors/repeaterPadError/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>107517DE00CEF1804959CAF207D1B2C1</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=107517DE00CEF1804959CAF207D1B2C1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Padding Repeater Errors</title>
+</head>
+<body>
+<h4>Padding Repeater Errors</h4>
+<b>Max and min = -1</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Repeater</td>
+ <th>Errors</th><td colspan="2">2</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Can not use a value of "-1" for the field "maxRepeat"; the value must be greater than zero.</td></tr>
+<tr><th>Tag Error</th><th>Message</th><td colspan="3">Can not use a value of "-1" for the field "minRepeat"; the value must be greater than or equal to zero.</td></tr>
+</table></span>
+
+<hr />
+<b>max > min</b>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Repeater</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">The value of maxRepeat (10) must be greater than the value of minRepeat (16).</td></tr>
+</table></span>
+
+<hr />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 08:44:07.015 PM MDT</ses:endDate>
+   <ses:testCount>1</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RestoreQueryString.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RestoreQueryString.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RestoreQueryString</sessionName>
+  <tester>rich</tester>
+  <startDate>12 May 2004, 11:32:37.155 PM MDT</startDate>
+  <description>Test of the restoreQueryString attribute, which restores the query string on a navigateTo=previousAction.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/RestoreQueryStringController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>null</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/someAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>hi</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/RestoreQueryStringController.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>hi</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>null</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/someAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>hi</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>hi</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>hi</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/someAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>hi</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>hi</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>bar</name>
+          <value>there</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>null</b>
+        <br/>
+        bar: <b>there</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/someAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>hi</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>hi</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>bar</name>
+          <value>there</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>hi</b>
+        <br/>
+        bar: <b>there</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/someAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>hi</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>hi</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>foo</name>
+          <value>overridden</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067</value>
+        </cookie>
+        <cookie>
+          <name>ADMINCONSOLESESSION</name>
+          <value>AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AjIYCSlFA8TBdjeC69kPKyI5wcWLdKYvKDg377hxTI8X52N1rGvg!1429232067; ADMINCONSOLESESSION=AiJkRxprE8skLPMGQZx5imjtZKZR5C16cHip4iP9bM2t1FlKSp8v!-1962349795</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/pageFlowCore/restoreQueryString/index.jsp">
+        <title>restoreQueryString Test</title>
+    </head>
+    <body>
+        <h3>restoreQueryString Test</h3>
+
+        foo: <b>hi</b>
+        <br/>
+        bar: <b>null</b>
+
+        <br/>
+        <br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/someAction.do?foo=hi">someAction.do?foo=hi</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do">rerunWithoutPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do">rerunWithPreviousQueryString</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithoutPreviousQueryString.do?bar=there">rerunWithoutPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?bar=there">rerunWithPreviousQueryString.do?bar=there</a><br/>
+        <a href="/coreWeb/pageFlowCore/restoreQueryString/rerunWithPreviousQueryString.do?foo=overridden">rerunWithPreviousQueryString.do?foo=overridden</a><br/>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>12 May 2004, 11:33:55.318 PM MDT</endDate>
+  <testCount>11</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToExceptions.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToExceptions.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,422 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>ReturnToExceptions</ses:sessionName>
+   <ses:tester>rich</ses:tester>
+   <ses:startDate>30 Jun 2004, 05:14:56.815 PM MDT</ses:startDate>
+   <ses:description>rich</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/returnToExceptions/ReturnToExceptionsController.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-5ac1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return-to Exceptions
+        </title>
+    </head>
+    <body>
+        <h3>Return-to Exceptions</h3>
+        
+        <font color="red">
+            
+        </font>
+        <br>
+
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToPreviousPage.do">doReturnToPreviousPage</a>
+        <br>
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToCurrentPage.do">doReturnToCurrentPage</a>
+        <br>
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToPreviousAction.do">doReturnToPreviousAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/returnToExceptions/doReturnToPreviousPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-5ac1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return-to Exceptions
+        </title>
+    </head>
+    <body>
+        <h3>Return-to Exceptions</h3>
+        
+        <font color="red">
+            org.apache.beehive.netui.pageflow.NoPreviousPageException: No previous page for return-to="previousPage" on action begin in page flow /miniTests/returnToExceptions/delegate/DelegateController.jpf.
+        </font>
+        <br>
+
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToPreviousPage.do">doReturnToPreviousPage</a>
+        <br>
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToCurrentPage.do">doReturnToCurrentPage</a>
+        <br>
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToPreviousAction.do">doReturnToPreviousAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/returnToExceptions/doReturnToCurrentPage.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-5ac1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return-to Exceptions
+        </title>
+    </head>
+    <body>
+        <h3>Return-to Exceptions</h3>
+        
+        <font color="red">
+            org.apache.beehive.netui.pageflow.NoPreviousPageException: No previous page for return-to="currentPage" on action begin in page flow /miniTests/returnToExceptions/delegate/DelegateController.jpf.
+        </font>
+        <br>
+
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToPreviousPage.do">doReturnToPreviousPage</a>
+        <br>
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToCurrentPage.do">doReturnToCurrentPage</a>
+        <br>
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToPreviousAction.do">doReturnToPreviousAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/returnToExceptions/doReturnToPreviousAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=4D7960D9AEF903AB88A76C63329B843C</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5b1a0f2d:fd77517589:-5ac1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Return-to Exceptions
+        </title>
+    </head>
+    <body>
+        <h3>Return-to Exceptions</h3>
+        
+        <font color="red">
+            org.apache.beehive.netui.pageflow.NoPreviousActionException: No previous action for return-to="previousAction" on action begin in page flow /miniTests/returnToExceptions/delegate/DelegateController.jpf.
+        </font>
+        <br>
+
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToPreviousPage.do">doReturnToPreviousPage</a>
+        <br>
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToCurrentPage.do">doReturnToCurrentPage</a>
+        <br>
+        <a href="/coreWeb/miniTests/returnToExceptions/doReturnToPreviousAction.do">doReturnToPreviousAction</a>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 05:14:56.845 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>1</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest28.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest28.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest28</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:23:57.455 PM MDT</startDate>
+  <description>Test return-to="previousPage".</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test28/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test28/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test28</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test28 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage"
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test28/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test28/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test28/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test28/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test28</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test28 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <a href="/coreWeb/returnTo/test28/action2.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test28/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test28/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test28</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test28 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage"
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test28/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test28/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test28/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test28/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:24:18.308 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest30.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest30.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest30</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:25:04.560 PM MDT</startDate>
+  <description>Test return-to="page".</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test30/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test30/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test30</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test30 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage"
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test30/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test30/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test30/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test30/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test30</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test30 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <a href="/coreWeb/returnTo/test30/action2.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test30/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test30/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test30</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test30 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage"
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test30/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test30/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test30/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test30/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:25:18.368 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest31.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest31.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest31</sessionName>
+  <tester>skeller</tester>
+  <startDate>26 Sep 2003, 05:26:10.008 PM MDT</startDate>
+  <description>Test return-to="currentPage".</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test31/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test31/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test31</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test31 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+            Test return-to="currentPage"
+            </font></h2>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <a href="/coreWeb/returnTo/test31/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test31/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test31/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test31</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test31 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>1</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test31/action2.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test31/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test31/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test31/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test31</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test31 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>2</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test31/action2.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test31/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test31/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test31/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:26:24.175 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest32.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest32.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,635 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest32</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:27:24.250 PM MDT</startDate>
+  <description>Test return-to="previousPage" from within a nested PageFlow and whether it effects the parent return-to.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test32/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test32/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+            Test return-to="currentPage"
+            </font></h2>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <a href="/coreWeb/returnTo/test32/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test32/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test32/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>1</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test32/action2.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test32/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test32/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test32/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>1</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test32/sub1/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select return:
+            <a href="/coreWeb/returnTo/test32/sub1/finish.do">Return...</a>
+            <br/><br/>
+            <font color="green">
+            The first visit is kind of a negative test.  It tests that if you do
+            a return-to="previousPage" and there is no previous page for the
+            pageFlow that you go back to the current page in the pageFlow.
+            </font>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test32/sub1/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test32/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>2</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test32/sub1/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select return:
+            <a href="/coreWeb/returnTo/test32/sub1/finish.do">Return...</a>
+            <br/><br/>
+            <font color="green">
+            The first visit is kind of a negative test.  It tests that if you do
+            a return-to="previousPage" and there is no previous page for the
+            pageFlow that you go back to the current page in the pageFlow.
+            </font>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test32/sub1/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test32/sub1/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/><br/>
+            <a href="/coreWeb/returnTo/test32/action4.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test32/action4.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test32/sub1/finish.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test32</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test32 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>2</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test32/action2.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test32/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test32/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10JHsYp1er21yWxCFHKEXXe5NWJ3ZD4CapKpQ6qXeshCM0vfbqvV!1436267973</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test32/action4.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:27:50.648 PM MDT</endDate>
+  <testCount>7</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest33.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest33.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest33</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:39:59.024 PM MDT</startDate>
+  <description>Test return-to="previousPage" when there is no previous page.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test33/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10O5sxrW7svH95vLpFdUL3Ik7jY12kVmEUrJvgA09EXqIO99kOFb!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10O5sxrW7svH95vLpFdUL3Ik7jY12kVmEUrJvgA09EXqIO99kOFb!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test33/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:40:12.988 PM MDT</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest34.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest34.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest34</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:42:10.435 PM MDT</startDate>
+  <description>Test return-to="previousPage" when there is only one page.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test34/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test34/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test34</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test34 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>1</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test34/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test34/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test34/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test34/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test34</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test34 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>2</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test34/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test34/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test34/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test34/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:42:23.056 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest35.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest35.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest35</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:44:26.813 PM MDT</startDate>
+  <description>Test return-to="previousPage" from the Global.app.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test35/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test35/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test35</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test35 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage" from the Global.app.
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test35/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test35/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test35/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test35/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test35</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test35 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <!--
+            test35GlobalAction is not handled by the Jpf2.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <a href="/coreWeb/returnTo/test35/test35GlobalAction.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test35/test35GlobalAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test35/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test35</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test35 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage" from the Global.app.
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test35/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test35/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test35/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test35/test35GlobalAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:44:42.699 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest36.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest36.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,447 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest36</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>07 Oct 2003, 04:24:16.872 PM MDT</startDate>
+  <description>Test return-to="previousPage" just after returning from the Global.app.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test36/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test36/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test36</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test36 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <!--
+            test36GlobalAction is not handled by the Jpf1.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <a href="/coreWeb/returnTo/test36/test36GlobalAction.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test36/test36GlobalAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test36/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test36</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test36 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage" just after returning from the
+            Global.app.
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test36/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test36/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test36/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test36/test36GlobalAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test36</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test36 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <a href="/coreWeb/returnTo/test36/action2.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test36/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test36/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test36</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test36 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h2><font color="blue">
+            Test return-to="previousPage" just after returning from the
+            Global.app.
+            </font></h2>
+
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test36/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test36/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test36/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1D8bnj21jCv6hWFnz7aC4zjd0w61wGGbALYddujSbzPG54Eov2rh!667594384</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test36/action2.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>07 Oct 2003, 04:24:34.231 PM MDT</endDate>
+  <testCount>5</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest37.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest37.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest37</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:46:20.417 PM MDT</startDate>
+  <description>Test return-to="currentPage".</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test37/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test37/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test37</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test37 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>1</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test37/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test37/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test37/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test37/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test37</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test37 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            <br/><br/>
+            Page visit: <span>2</span>
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <a href="/coreWeb/returnTo/test37/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test37/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test37/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test37/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:46:33.569 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest39.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest39.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest39</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:49:00.163 PM MDT</startDate>
+  <description>Test return-to="currentPage" from the Global.app.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test39/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test39/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test39</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test39 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <!--
+            test39GlobalAction is not handled by the Jpf1.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <a href="/coreWeb/returnTo/test39/test39GlobalAction.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test39/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test39/test39GlobalAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test39/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test39</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test39 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select continue:
+            <!--
+            test39GlobalAction is not handled by the Jpf1.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <a href="/coreWeb/returnTo/test39/test39GlobalAction.do">Continue...</a>
+            <br/><br/>
+            Second time select finish:
+            <a href="/coreWeb/returnTo/test39/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test39/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test39/test39GlobalAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:49:12.456 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest40.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest40.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,466 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest40</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>13 Oct 2003, 11:09:52.802 AM MDT</startDate>
+  <description>Test return-to="currentPage" from the Global.app that returns to a page raised by the Global.app.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test40/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test40/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test40</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test40 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <!--
+            test40GlobalAction is not handled by the Jpf1.jpf pageflow
+            instead it is handled by the Global.app.  This is by design.
+            -->
+            <a href="/coreWeb/returnTo/test40/test40GlobalAction.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test40/test40GlobalAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test40/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test40</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test40 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page three times.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <!--
+            test40GlobalAction_B is not handled by the Jpf1.jpf pageflow instead\
+            it is handled by the Global.app.  This is by design.
+            -->
+            First time select here:
+            <a href="/coreWeb/returnTo/test40/test40GlobalAction_B.do">Continue...</a>
+            <br/><br/>
+            Second time select here:
+            <a href="/coreWeb/returnTo/test40/action1.do">Continue...</a>
+            <br/><br/>
+            Third time select here:
+            <a href="/coreWeb/returnTo/test40/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test40/test40GlobalAction_B.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test40/test40GlobalAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test40</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test40 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page three times.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <!--
+            test40GlobalAction_B is not handled by the Jpf1.jpf pageflow instead\
+            it is handled by the Global.app.  This is by design.
+            -->
+            First time select here:
+            <a href="/coreWeb/returnTo/test40/test40GlobalAction_B.do">Continue...</a>
+            <br/><br/>
+            Second time select here:
+            <a href="/coreWeb/returnTo/test40/action1.do">Continue...</a>
+            <br/><br/>
+            Third time select here:
+            <a href="/coreWeb/returnTo/test40/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test40/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test40/test40GlobalAction_B.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test40</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test40 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <h3><font color="blue">
+            We will visit this page three times.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            <!--
+            test40GlobalAction_B is not handled by the Jpf1.jpf pageflow instead\
+            it is handled by the Global.app.  This is by design.
+            -->
+            First time select here:
+            <a href="/coreWeb/returnTo/test40/test40GlobalAction_B.do">Continue...</a>
+            <br/><br/>
+            Second time select here:
+            <a href="/coreWeb/returnTo/test40/action1.do">Continue...</a>
+            <br/><br/>
+            Third time select here:
+            <a href="/coreWeb/returnTo/test40/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test40/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1KchabYNusWoiQIKdLrDiUwWKIJMK4hsiqlyvbPN1wwVqKyfiAp0!-1176427035</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test40/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>13 Oct 2003, 11:10:07.381 AM MDT</endDate>
+  <testCount>5</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest41.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest41.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest41</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:51:08.794 PM MDT</startDate>
+  <description>Test return-to="currentPage" after returning from a nested pageflow.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test41/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test41/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test41</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test41 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+            Test return-to="currentPage" with a nested pageflow.
+            </font></h2>
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select here:
+            <a href="/coreWeb/returnTo/test41/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select here:
+            <a href="/coreWeb/returnTo/test41/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test41/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test41/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test41</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test41 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test41/sub1/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test41/sub1/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test41/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test41</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test41 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+            Test return-to="currentPage" with a nested pageflow.
+            </font></h2>
+            <h3><font color="blue">
+            We will visit this page twice.
+            </font></h3>
+             <br/><br/>
+            <hr width="95%"/>
+            <br/><br/>
+            First time select here:
+            <a href="/coreWeb/returnTo/test41/action1.do">Continue...</a>
+            <br/><br/>
+            Second time select here:
+            <a href="/coreWeb/returnTo/test41/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test41/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test41/sub1/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:51:25.960 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest42.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest42.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest42</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:52:31.018 PM MDT</startDate>
+  <description>Test a simple
+return-to="previousAction".</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test42/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test42/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test42</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test42 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test42/action1.do">Continue...</a>
+         </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test42/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test42/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test42</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test42 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test42/action2.do">Continue...</a>
+         </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test42/action2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test42/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:52:42.295 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest44.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest44.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest44</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:53:39.183 PM MDT</startDate>
+  <description>Test return-to="currentPage" from within a nested pageflow and just after returning from a nested pageFlow.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test44/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test44/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test44</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test44 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <h2><font color="blue">
+             Test return-to="currentPage" from within a nested pageflow and just
+             after returning from a nested pageFlow.
+            </font></h2>
+            <br/>
+            <a href="/coreWeb/returnTo/test44/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test44/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test44/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test44</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test44 - SubJsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test44/sub1/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test44/sub1/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test44/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test44</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test44 - SubJsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test44/sub1/finish.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test44/sub1/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test44/sub1/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test44</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test44 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <br/>
+            <a href="/coreWeb/returnTo/test44/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test44/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test44/sub1/finish.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:53:54.506 PM MDT</endDate>
+  <testCount>5</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest45.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest45.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest45</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:54:38.961 PM MDT</startDate>
+  <description>Test return-to="previousAction" from the Global.app.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test45/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test45/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test45</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test45 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test45/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test45/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test45/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test45</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test45 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <!--
+            test45GlobalAction is not handled by the Jpf1.jpf pageflow instead
+            it is handled by the Global.app.  This is by design.
+            -->
+            <a href="/coreWeb/returnTo/test45/test45GlobalAction.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test45/test45GlobalAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test45/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test45</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test45 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test45/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test45/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test45/test45GlobalAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:54:52.910 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest46.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest46.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest46</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>26 Sep 2003, 05:55:44.268 PM MDT</startDate>
+  <description>Test return-to="previousAction" from pageFlow back to the Global.app.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test46/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test46/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test46</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test46 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test46/action1.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test46/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test46/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test46</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test46 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+           <!--
+            test46GlobalAction is not handled by the Jpf1.jpf pageflow instead
+            it is handled by the Global.app.  This is by design.
+            -->
+            <a href="/coreWeb/returnTo/test46/test46GlobalAction.do">Continue...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test46/test46GlobalAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test46/action1.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test46</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test46 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/returnTo/test46/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test46/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=10OuTAxAj9jovFFnv9sD7uiOdbuVt5sqW30T5NMbrruVX518Q5ux!491341297</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/returnTo/test46/test46GlobalAction.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 Sep 2003, 05:55:56.827 PM MDT</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest47.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest47.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,494 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest47</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:20:43.083 AM MST</startDate>
+  <description>Test return-to="previousAction" to see if original formbean is replaced.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test47/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76cd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test47</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test47 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="formA" action="/coreWeb/returnTo/test47/action1.do" method="post">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+               <br/>
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+               <br/><br/>
+               <h3><font color="green">
+                  Change the values in the above textboxes.
+               </font></h3>
+               <br/>
+               <input type="submit" value="Continue...">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test47/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>string1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>string2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>65</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76cd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ReturnTo Test47</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test47 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <form name="formA" action="/coreWeb/returnTo/test47/action2.do" method="post">
+               String 1: <span>string1</span>
+               <br/>
+               String 2: <span>string2</span>
+               <br/><br/>
+               <input type="submit" value="Continue...">
+            </form>
+        </center>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test47/action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76cd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test47</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test47 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="formA" action="/coreWeb/returnTo/test47/action3.do" method="post">
+               String 1: <input type="text" name="{actionForm.string1}" value="string1">
+               <br/>
+               String 2: <input type="text" name="{actionForm.string2}" value="string2">
+               <br/><br/>
+               <input type="submit" value="Finish...">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test47/action3.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>string1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>string2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>65</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76cd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:20:45.857 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest48.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest48.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,495 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest48</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:20:46.127 AM MST</startDate>
+  <description>Test return-to="previousAction" from the Global.app and see if original formbean is replaced.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test48/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76c6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test48</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test48 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="formA" action="/coreWeb/returnTo/test48/action1.do" method="post">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+               <br/>
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+               <br/><br/>
+               <h3><font color="green">
+                  Change the values in the above textboxes.
+               </font></h3>
+               <br/>
+               <input type="submit" value="Continue...">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test48/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>string1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>string2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>65</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76c6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ReturnTo Test48</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test48 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+         <form name="formA" action="/coreWeb/returnTo/test48/test48GlobalAction.do" method="post">
+            String 1: <span>string1</span>
+            <br/>
+            String 2: <span>string2</span>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+         <br/><br/>
+  <!--       <a href="/coreWeb/returnTo/test48/test48GlobalAction.do">Continue...</a> -->
+        </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test48/test48GlobalAction.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76c6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test48</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test48 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="formA" action="/coreWeb/returnTo/test48/action3.do" method="post">
+               String 1: <input type="text" name="{actionForm.string1}" value="string1">
+               <br/>
+               String 2: <input type="text" name="{actionForm.string2}" value="string2">
+               <br/><br/>
+               <input type="submit" value="Finish...">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test48/action3.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>string1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>string2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>65</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76c6</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:20:48.951 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest63.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ReturnToTest63.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,996 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ReturnToTest63</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:20:49.232 AM MST</startDate>
+  <description>Test return-to="previousAction" after a return-to="currentPage" and a failed form validation.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test63/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ReturnTo Test63</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test63 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+         <a href="/coreWeb/returnTo/test63/action1.do">First visit...</a>
+         <br/><br/>
+         <a href="/coreWeb/returnTo/test63/action3.do">Second visit...</a>
+         <br/><br/>
+         <a href="/coreWeb/returnTo/test63/finish.do">Third visit...</a>
+        </center>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test63/action1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test63</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test63 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="formB" action="/coreWeb/returnTo/test63/action2.do" method="post">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+               <br/>
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+               <br/><br/>
+               <font color="green">
+                  We will visit this page several times.
+                  <br/>
+                  1st visit just press continue.
+                  <br/>
+                  2nd visit, change both values then press continue.
+                  <br/>
+                  3nd visit, just press continue.
+                  <br/>
+                  4th visit, change both values then press continue.
+               </font>
+               <br/><br/>
+                  
+               <br/><br/>
+               <input type="submit" value="Continue...">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test63/action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test63</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test63 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="formB" action="/coreWeb/returnTo/test63/action2.do" method="post">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+               <br/>
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+               <br/><br/>
+               <font color="green">
+                  We will visit this page several times.
+                  <br/>
+                  1st visit just press continue.
+                  <br/>
+                  2nd visit, change both values then press continue.
+                  <br/>
+                  3nd visit, just press continue.
+                  <br/>
+                  4th visit, change both values then press continue.
+               </font>
+               <br/><br/>
+                  <br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+<li class="error">Please change the values of String 1 & String 2.</li>
+</ul></td></tr></table>
+
+               <br/><br/>
+               <input type="submit" value="Continue...">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test63/action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>New value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>New value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>69</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ReturnTo Test63</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test63 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+         <a href="/coreWeb/returnTo/test63/action1.do">First visit...</a>
+         <br/><br/>
+         <a href="/coreWeb/returnTo/test63/action3.do">Second visit...</a>
+         <br/><br/>
+         <a href="/coreWeb/returnTo/test63/finish.do">Third visit...</a>
+        </center>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test63/action3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test63</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test63 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="formB" action="/coreWeb/returnTo/test63/action2.do" method="post">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+               <br/>
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+               <br/><br/>
+               <font color="green">
+                  We will visit this page several times.
+                  <br/>
+                  1st visit just press continue.
+                  <br/>
+                  2nd visit, change both values then press continue.
+                  <br/>
+                  3nd visit, just press continue.
+                  <br/>
+                  4th visit, change both values then press continue.
+               </font>
+               <br/><br/>
+                  
+               <br/><br/>
+               <input type="submit" value="Continue...">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test63/action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>ReturnTo Test63</title>
+    </head>
+    <body>
+        <h3 align="center">ReturnTo Test63 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="formB" action="/coreWeb/returnTo/test63/action2.do" method="post">
+               String 1: <input type="text" name="{actionForm.string1}" value="String 1 value">
+               <br/>
+               String 2: <input type="text" name="{actionForm.string2}" value="String 2 value">
+               <br/><br/>
+               <font color="green">
+                  We will visit this page several times.
+                  <br/>
+                  1st visit just press continue.
+                  <br/>
+                  2nd visit, change both values then press continue.
+                  <br/>
+                  3nd visit, just press continue.
+                  <br/>
+                  4th visit, change both values then press continue.
+               </font>
+               <br/><br/>
+                  <br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+<li class="error">Please change the values of String 1 & String 2.</li>
+</ul></td></tr></table>
+
+               <br/><br/>
+               <input type="submit" value="Continue...">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test63/action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>New value again</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>New value again</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>81</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ReturnTo Test63</title>
+   </head>
+   <body>
+      <h3 align="center">ReturnTo Test63 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+         <a href="/coreWeb/returnTo/test63/action1.do">First visit...</a>
+         <br/><br/>
+         <a href="/coreWeb/returnTo/test63/action3.do">Second visit...</a>
+         <br/><br/>
+         <a href="/coreWeb/returnTo/test63/finish.do">Third visit...</a>
+        </center>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/returnTo/test63/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-76bf</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:20:52.737 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>8</testCount>
+  <passedCount>4</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RewriteNameVar.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RewriteNameVar.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RewriteNameVar</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 10:30:03.986 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/rewriteNameVar/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Ai5M7uA6hOQKXLeSIsIwBS3FMdc9yJJkuUHXZmQ2P7i1TqyPI0KR!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Ai5M7uA6hOQKXLeSIsIwBS3FMdc9yJJkuUHXZmQ2P7i1TqyPI0KR!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-776a</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+    &lt;script type="text/javascript"> 
+    &lt;!-- 
+    function someFunction(anchor) 
+    { 
+        anchor.style.color = "red"; 
+    } 
+    function someFunctionOut(anchor) 
+    { 
+        anchor.style.color = "blue"; 
+    } 
+    --> 
+    &lt;/script> 
+    &lt;a href="/coreWeb/tags/rewriteNameVar/begin.do" onmouseout="someFunctionOut(this);" onmouseover="someFunction(this);">Some Link&lt;/a> 
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.someFunction="someFunction"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 10:30:07.982 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RewriteTags.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RewriteTags.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RewriteTags</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 10:30:08.022 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/rewriteTags/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Ai5M7uA6hOQKXLeSIsIwBS3FMdc9yJJkuUHXZmQ2P7i1TqyPI0KR!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Ai5M7uA6hOQKXLeSIsIwBS3FMdc9yJJkuUHXZmQ2P7i1TqyPI0KR!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-7766</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        
+        &lt;span id="foo" style="color:red">
+            text inside a span
+        &lt;/span>
+        &lt;br/>
+        &lt;img src="/coreWeb/resources/images/bar-background.gif"/>&lt;br />
+        &lt;img src="../../resources/images/bar-background.gif"/>&lt;br />
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.foo="foo"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 10:30:11.997 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeBindingError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeBindingError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>RichTreeBindingError</sessionName>
+  <tester>Daryl</tester>
+  <startDate>10 Jun 2004, 11:31:31.209 AM MDT</startDate>
+  <description>Binding Error in a RichTree.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/richTree/goTreeBinding.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AIab5VYK3eWPwRPvqYIEqPgAR1YXOxiTIB3bxxatnslGA9bpmZV9!-687615693</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AIab5VYK3eWPwRPvqYIEqPgAR1YXOxiTIB3bxxatnslGA9bpmZV9!-687615693</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2e3b48bc:fd0f9bb2aa:-7f81</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeBinding.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/richTree/treeBinding.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeBinding.jsp [goTreeBinding.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Binding Error</td></tr>
+        <tr><th>tree</th><td>{pageFlow.badPageFlowTree}</td></tr>
+        </table>
+        </div>
+        This binds to a Page Flow variable that doesn't exist. The result is an expression error.
+        <hr style="clear:left">
+        <div class="content">
+        <span style="color:red;background-color:white">
+ [<b>Expression Error:1</b>, Found in tag <b>RichTree</b>]</span>
+        </div>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th rowspan="2">1</th><th rowspan="2">RichTree</th><th>Attribute</th><td>dataSource</td>
+ <th>Expression</th><td>{pageFlow.badPageFlowTree}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.badPageFlowTree}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "badPageFlowTree" on object of type "class richTree.Controller"</td></tr>
+</table></div>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>10 Jun 2004, 11:31:33.931 AM MDT</endDate>
+  <sessionStatus>pass</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>0</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeClientContent.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeClientContent.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1029 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeClientContent</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:56:51.088 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goClientContent.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 170pt;
+        }
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContent.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContent.jsp [goClientContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree13}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This samples demonstrates the use of both the &lt;treeItem> and &lt;treeContent>
+        tags.  The tree is also expanded and collapsed on the Client.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+      <span class='alien'><img src="omg.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 170pt;
+        }
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContent.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContent.jsp [goClientContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree13}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.0</td></tr>
+        </table>
+        </div>
+        This samples demonstrates the use of both the &lt;treeItem> and &lt;treeContent>
+        tags.  The tree is also expanded and collapsed on the Client.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+      <span class='alien'><img src="omg.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 170pt;
+        }
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContent.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContent.jsp [goClientContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree13}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.1</td></tr>
+        </table>
+        </div>
+        This samples demonstrates the use of both the &lt;treeItem> and &lt;treeContent>
+        tags.  The tree is also expanded and collapsed on the Client.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+      <span class='alien'><img src="omg.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f7d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 170pt;
+        }
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContent.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContent.jsp [goClientContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree13}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.1</td></tr>
+        </table>
+        </div>
+        This samples demonstrates the use of both the &lt;treeItem> and &lt;treeContent>
+        tags.  The tree is also expanded and collapsed on the Client.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+      <span class='alien'><img src="omg.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:56:55.324 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeClientContentAnchor.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeClientContentAnchor.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeClientContentAnchor</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:56:55.404 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goClientContentAnchor.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f76</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>clientContentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContentAnchor.jsp [goClientContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree15}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.  In addition, because this is expanded
+        on the client, the state of the tree must be written on the anchors.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack]</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack Two]</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/contentPostback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>status</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f76</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>clientContentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContentAnchor.jsp [goClientContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree15}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>content: 0.0</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.  In addition, because this is expanded
+        on the client, the state of the tree must be written on the anchors.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack]</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack Two]</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/contentPostback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>status</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f76</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>clientContentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContentAnchor.jsp [goClientContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree15}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>content: 0.0</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.  In addition, because this is expanded
+        on the client, the state of the tree must be written on the anchors.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack]</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack Two]</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f76</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>clientContentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContentAnchor.jsp [goClientContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree15}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.  In addition, because this is expanded
+        on the client, the state of the tree must be written on the anchors.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack]</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack Two]</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/contentPostbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>status</ses:name>
+                  <ses:value>0.0.0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f76</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>clientContentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/clientContentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>clientContentAnchor.jsp [goClientContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree15}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>contentTwo: 0.0.0.0</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.  In addition, because this is expanded
+        on the client, the state of the tree must be written on the anchors.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack]</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor" onclick='NetUIAnchorRewriter(this);'>[Content PostBack Two]</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:01.022 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>5</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>5</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeContent.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeContent.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,651 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeContent</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:01.213 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goContent.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f6e</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/content.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>content.jsp [goContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree12}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of both the &lt;treeLabel> and the
+        &lt;treeContent> tags.  The tree content in this case is the absolutely
+        positioned images.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+      <span class='alien'><img src="omg.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+      <span class='alien'><img src="ninja.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f6e</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/content.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>content.jsp [goContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree12}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of both the &lt;treeLabel> and the
+        &lt;treeContent> tags.  The tree content in this case is the absolutely
+        positioned images.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+      <span class='alien'><img src="omg.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f6e</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/content.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>content.jsp [goContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree12}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of both the &lt;treeLabel> and the
+        &lt;treeContent> tags.  The tree content in this case is the absolutely
+        positioned images.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+      <span class='alien'><img src="omg.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f6e</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>content.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .alien {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/content.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>content.jsp [goContent.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree12}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of both the &lt;treeLabel> and the
+        &lt;treeContent> tags.  The tree content in this case is the absolutely
+        positioned images.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+      <span class='alien'><img src="omg.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+      <span class='alien'><img src="cool.gif" border="0"></span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+      <span class='alien'><img src="alien.gif" border="0"></span>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:06.410 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeContentAnchor.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeContentAnchor.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,969 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeContentAnchor</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:06.490 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goContentAnchor.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>contentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/contentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>contentAnchor.jsp [goContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree14}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor">[Content PostBack]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor">[Content PostBack Two]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>contentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/contentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>contentAnchor.jsp [goContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree14}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor">[Content PostBack]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/contentPostback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>status</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>contentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/contentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>contentAnchor.jsp [goContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree14}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>content: 0.0</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor">[Content PostBack]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>contentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/contentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>contentAnchor.jsp [goContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree14}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor">[Content PostBack]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor">[Content PostBack Two]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>contentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/contentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>contentAnchor.jsp [goContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree14}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor">[Content PostBack]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor">[Content PostBack Two]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/contentPostbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>status</ses:name>
+                  <ses:value>0.0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f67</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>contentAnchor.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .anchor {
+            position: absolute;
+            left: 150pt;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/contentAnchor.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>contentAnchor.jsp [goContentAnchor.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree14}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Status:</th><td>contentTwo: 0.0.0.0</td></tr>
+        </table>
+        </div>
+        This sample demonstrates the use of anchors in the &lt;treeContent>
+        tag.  The anchors will navigate cause a postback to the same page.  
+        When the anchors are pressed, the Status will be set in the
+        Tree Postback Information box.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostback.do?status=0.0" class="anchor">[Content PostBack]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+      <a href="/coreWeb/richTree/contentPostbackTwo.do?status=0.0.0.0" class="anchor">[Content PostBack Two]</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:10.646 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>6</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>6</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeDisabled.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeDisabled.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1392 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeDisabled</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>27 Jun 2004, 03:11:37.850 PM MDT</ses:startDate>
+   <ses:description>Verification of the disabled attribute</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goDisabled.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/disabled.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/goDisabled.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/disabled.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/disabled.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.2</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treenode=0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/disabled.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.2</td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.2&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/disabled.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.0</td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/disabled.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treenode=0.1&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/disabled.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af307gnWz3GtR6skDU9YNHc1drRw0VvD9wE0oXmqj1e89PRhagMa!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treenode=0.1&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/disabled.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>disabled.jsp [goDisabled.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree16}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.1</td></tr>
+        </table>
+        </div>
+        Disabling a <b>treeItem</b> means that it is not selectable.  You may still expand it to see children.  Children may be
+        expanded and selected.  There is a set of styles that allow a tree to be disabled.  In this case the gray nodes are disabled and 
+        may not be selected.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>27 Jun 2004, 03:12:00.673 PM MDT</ses:endDate>
+   <ses:testCount>8</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeDynamicBaseTree.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeDynamicBaseTree.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeDynamicBaseTree</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>28 Jun 2004, 07:49:30.117 PM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goBaseTree.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goBaseTree.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.1.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.1.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>7</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.2</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f53</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTree.jsp [goBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree1}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.2</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node: 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>28 Jun 2004, 07:49:34.153 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>8</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>8</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeEmptyTree.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeEmptyTree.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeEmptyTree</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 02:18:24.804 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/richTree/goEmptyTree.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-4d326ae7:fda04f0262:-6f08</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>emptyTree.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:8080/coreWeb/richTree/emptyTree.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>emptyTree.jsp [goEmptyTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Null TreeNode Root</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree9}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        This binds to a Page Flow variable that is never initialized.  In addition, the JSP page does
+        not define &lt;node> elements.  The result is a &lt;tree> that doesn't bind to a data Structure.
+        <hr style="clear:left">
+        <div class="content">
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>RichTree</b>]</span>
+        </div>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>RichTree</th><th>Message</th><td>The variable referenced by 'pageFlow.tree9' was <b>null</b>.  No TreeNode was found.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 02:18:26.346 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeHref.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeHref.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeHref</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>27 Jun 2004, 03:15:16.094 PM MDT</ses:startDate>
+   <ses:description>Verification of the href and target attributes on selection and expansion attributes.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goHref.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af41K1UDH11VEVe6I8ZRG6Wcya2qsEXXba5s0u6uETNM9NiXwW2d!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af41K1UDH11VEVe6I8ZRG6Wcya2qsEXXba5s0u6uETNM9NiXwW2d!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<frameset cols="20%,80%">
+<frame name="treeFrame" src="treeFrame.jsp">
+<frame name="contentFrame" src="emptyFrame.jsp">
+</frameset>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/emptyFrame.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af41K1UDH11VEVe6I8ZRG6Wcya2qsEXXba5s0u6uETNM9NiXwW2d!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af41K1UDH11VEVe6I8ZRG6Wcya2qsEXXba5s0u6uETNM9NiXwW2d!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/goHref.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+    <head>
+    </head>
+    <body>
+    This example uses a frameset and a couple of frames.  In the left frame is a <b>Tree</b> where a selection event will 
+    populate the right frame.  The tree can be expanded an collapsed.  The way this works is that the target of the 
+    The <b>treeItems</b> set an href and a target of the other frame.  The tree must set a different action and a target of the
+    containing frame for the expansion target.
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/treeFrame.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af41K1UDH11VEVe6I8ZRG6Wcya2qsEXXba5s0u6uETNM9NiXwW2d!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af41K1UDH11VEVe6I8ZRG6Wcya2qsEXXba5s0u6uETNM9NiXwW2d!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/goHref.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeFrame.jsp</title>
+    </head>
+    <body style="border: 20pt 5%;background-color:#ccffcc;">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/goTreeFrame.do?netui_treenode=0&netui_treeid=tree" target="treeFrame"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <span class="treeDisabled">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;HREF Test Tree&nbsp;</span>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/begin.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected" target="_top">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Home&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="PageOne.html" class="treeUnselected" target="contentFrame">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Page One&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="PageTwo.html" class="treeUnselected" target="contentFrame">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Page Two&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="PageThree.html" class="treeUnselected" target="contentFrame">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Page Three&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>27 Jun 2004, 03:15:28.963 PM MDT</ses:endDate>
+   <ses:testCount>3</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeInvalidLayout.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeInvalidLayout.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,588 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeInvalidLayout</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:17.977 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goCr180331.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f4f</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>cr180331.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/cr180331.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>cr180331.jsp [goCr180331.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree5}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This was a layout issue in the old tree.  The error here was that the colspan was not calculated correctly resulting
+        in an error in the layout when the dynamic tree was built.  This is not an issue in the new the RichTree because
+        it doesn't use tables for layout.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug3&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug4&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goCr180331.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f4f</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>cr180331.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/cr180331.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>cr180331.jsp [goCr180331.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree5}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This was a layout issue in the old tree.  The error here was that the colspan was not calculated correctly resulting
+        in an error in the layout when the dynamic tree was built.  This is not an issue in the new the RichTree because
+        it doesn't use tables for layout.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug3&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug4&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f4f</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>cr180331.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/cr180331.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>cr180331.jsp [goCr180331.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree5}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0</td></tr>
+        </table>
+        </div>
+        This was a layout issue in the old tree.  The error here was that the colspan was not calculated correctly resulting
+        in an error in the layout when the dynamic tree was built.  This is not an issue in the new the RichTree because
+        it doesn't use tables for layout.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug3&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug4&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f4f</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>cr180331.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/cr180331.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>cr180331.jsp [goCr180331.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Dynamic</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree5}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        </table>
+        </div>
+        This was a layout issue in the old tree.  The error here was that the colspan was not calculated correctly resulting
+        in an error in the layout when the dynamic tree was built.  This is not an issue in the new the RichTree because
+        it doesn't use tables for layout.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Tree 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug3&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;bug4&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:21.502 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeLongLabels.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeLongLabels.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,398 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeLongLabels</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:21.572 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goCr182056.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f48</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>cr182056.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/cr182056.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>cr182056.jsp [goCr182056.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree6}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This layout issue occurs when there is a very large label inside the tree.  In the table based layout the
+        problem was that cells were proportionally spaced below the very large label causing them to space out instead
+        of being placed to the right.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 Very Long Very Long Very Long Very Long 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1  Very Long Very Long Very Long Very Long 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1.3&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1.3&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goCr182056.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f48</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>cr182056.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/cr182056.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>cr182056.jsp [goCr182056.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree6}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This layout issue occurs when there is a very large label inside the tree.  In the table based layout the
+        problem was that cells were proportionally spaced below the very large label causing them to space out instead
+        of being placed to the right.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 Very Long Very Long Very Long Very Long 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1  Very Long Very Long Very Long Very Long 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1.3&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1.3&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:26.890 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeOverride.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeOverride.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1612 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeOverride</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>27 Jun 2004, 03:12:40.771 PM MDT</ses:startDate>
+   <ses:description>Verification of the treePropertyOverride overridding actions</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goOverride.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/goOverride.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postback</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treeselected=0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackTwo</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackTwo</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackThree.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackThree</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postback</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treenode=0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postback</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treeselected=0.1&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postback</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.2</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4uTSW6hvFem0SmN191KmUrP1fgz8UJCyggwCcyrSxIz38ML92J!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treenode=0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>override.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/override.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>override.jsp [goOverride.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree17}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.2</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackTwo</td></tr>
+        </table>
+        </div>
+        This example uses the <b>treePropertyOverride</b> tag to override the action.  By default, the action set on the
+        root of the tree is used for both expansion and selection.  In addition, a <b>treeItem</b> may set it's own action
+        that will be called for selection on that element.  The <b>treePropertyOverride</b> tag is used to apply new images and actions to the
+        subtree.  In this example, we override the selection action which is visible in the Tree Postback Information.  The 
+        labels of the node reflect the expected action to be called on selection.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>27 Jun 2004, 03:13:03.634 PM MDT</ses:endDate>
+   <ses:testCount>9</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeOverrideTwo.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeOverrideTwo.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1404 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeOverrideTwo</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>27 Jun 2004, 03:13:53.395 PM MDT</ses:startDate>
+   <ses:description>Using a treePropertyOverride to create both a selection and expansion action</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goOverrideTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/overrideTwo.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/goOverrideTwo.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/overrideTwo.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackTwo</td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/overrideTwo.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postback</td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treenode=0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/overrideTwo.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackTwo</td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/overrideTwo.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postback</td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postback.do?netui_treenode=0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/overrideTwo.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackTwo</td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackThree.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/overrideTwo.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackThree</td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postbackTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.2</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Af4nuEpLUNvULZQpc1qC1Wa4p7JZjtoQk2KOZJhH6PF2KOXPMFgl!653102422</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Referer</ses:name>
+                  <ses:value>http://localhost:7001/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&amp;netui_treeid=tree</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>overrideTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/overrideTwo.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>overrideTwo.jsp [goOverrideTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree18}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>disabledClass</th><td>treeDisabled</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.2</td></tr>
+        <tr><th style="text-align:right" width="100pt">Action:</th><td>postbackTwo</td></tr>
+        </table>
+        </div>
+        In this example, we use the <b>treePropertyOverride</b> on the root <b>treeItem</b> to set a different selection action than the
+        expansion action set on the <b>tree</b> tag.  This is how you can create two actions, one for expansion and one for selection on a tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0[2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackThree.do?netui_treeselected=0.0.0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [3]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.0.0.2&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.2&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.0 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.2.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2.1 [2]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postbackTwo.do?netui_treeselected=0.3&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2 [2]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>27 Jun 2004, 03:14:12.513 PM MDT</ses:endDate>
+   <ses:testCount>8</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeRunAtClient.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeRunAtClient.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,681 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeRunAtClient</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:26.950 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goBaseClient.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f43</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseClient.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <base href="http://localhost:7001/coreWeb/richTree/baseClient.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>baseClient.jsp [goBaseClient.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree8}</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f43</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseClient.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <base href="http://localhost:7001/coreWeb/richTree/baseClient.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>baseClient.jsp [goBaseClient.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree8}</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.2</td></tr>
+        </table>
+        </div>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>tree-state</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f43</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseClient.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+        <base href="http://localhost:7001/coreWeb/richTree/baseClient.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor" onclick='NetUIAnchorRewriter(this);'>Home</a>baseClient.jsp [goBaseClient.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree8}</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>true</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.1</td></tr>
+        </table>
+        </div>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div netui-tree-level="0">
+      <a href="" netui-tree-id="0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.0.0" netui-tree-anchor="expand"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="3">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="" netui-tree-id="0.1" netui-tree-anchor="collapse"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div netui-tree-level="2">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div netui-tree-level="1">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" onclick="NetUIAnchorRewriter(this);">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUITree object and initialize it.
+     this.netUITree = new NetUITree();
+     this.netUITree.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUITree object and initialize it.
+     netUI.netUITree.rewriteAnchor(node);
+
+
+}
+
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:31.706 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>3</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeSelectionStyle.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeSelectionStyle.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1694 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeSelectionStyle</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:31.797 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goSelectStyles.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goSelectStyles.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.0</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>7</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.1</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>10</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>10</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.0</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>11</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f3d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>11</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>selectStyles.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/selectStyles.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>selectStyles.jsp [goSelectStyles.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree3}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>unselectClass</th><td>treeUnselected</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates how setting the selected and unselected classes on a tree can be used to 
+        indicate the currently selected element within the tree.            
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree" class="treeUnselected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:35.963 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>11</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>11</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeStaticBaseTree.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeStaticBaseTree.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,657 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeStaticBaseTree</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>28 Jun 2004, 07:51:03.751 PM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goStaticBaseTree.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTreeTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTreeTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTreeTwo.jsp [goStaticBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree2}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set. The tree is defined in the JSP page.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTreeTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTreeTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTreeTwo.jsp [goStaticBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree2}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set. The tree is defined in the JSP page.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTreeTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTreeTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTreeTwo.jsp [goStaticBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree2}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set. The tree is defined in the JSP page.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AgKSMk4Emb5Rwg1ltkG5M41FjO8FUStCAw162xMhE8BU3AFRltuq!2087985446</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-32eecf14:fd6e151247:-7f07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>baseTreeTwo.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/baseTreeTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>baseTreeTwo.jsp [goStaticBaseTree.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree2}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.0</td></tr>
+        </table>
+        </div>
+        Core test of the RichTree tag set. The tree is defined in the JSP page.  It sets the as few attributes as possible.  The Tree, selectionAction and 
+        TagId are required attributes.  <i>Action</i> must be set so that there can be a postback to the tree.  
+        This tree will auto expand/contract in the calling action.  <i>TagId</i> is used to uniquely identify 
+        the tree on a page contain other trees.  <i>Tree</i> is used to bind to the tree variable.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>28 Jun 2004, 07:51:08.378 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>4</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>4</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeHtml.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeHtml.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,506 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeTreeHtml</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:40.269 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goTreeHtml.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtml.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtml.jsp [goTreeHtml.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree10}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This example shows the new feature allowing the user to specify the label content either through
+        body content in the &lt;treeItem> tag or using the &lt;treeLabel> tag.  The most common usage pattern
+        is that leaf nodes will specify their labels as body content of the &lt;treeItem> tag.  Interior 
+        nodes must specify their label either through the label attribute or through the &lt;treeLabel> tag.<br>
+        In addition, the action is only specified on the &lt;table> tag.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtml.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtml.jsp [goTreeHtml.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree10}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This example shows the new feature allowing the user to specify the label content either through
+        body content in the &lt;treeItem> tag or using the &lt;treeLabel> tag.  The most common usage pattern
+        is that leaf nodes will specify their labels as body content of the &lt;treeItem> tag.  Interior 
+        nodes must specify their label either through the label attribute or through the &lt;treeLabel> tag.<br>
+        In addition, the action is only specified on the &lt;table> tag.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f28</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtml.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtml.jsp [goTreeHtml.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree10}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.0</td></tr>
+        </table>
+        </div>
+        This example shows the new feature allowing the user to specify the label content either through
+        body content in the &lt;treeItem> tag or using the &lt;treeLabel> tag.  The most common usage pattern
+        is that leaf nodes will specify their labels as body content of the &lt;treeItem> tag.  Interior 
+        nodes must specify their label either through the label attribute or through the &lt;treeLabel> tag.<br>
+        In addition, the action is only specified on the &lt;table> tag.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:44.114 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>3</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeHtmlTwo.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeHtmlTwo.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1071 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeTreeHtmlTwo</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:44.184 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goTreeHtmlTwo.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtmlTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtmlTwo.jsp [goTreeHtmlTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree11}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This is an additional test of specifying the label content through the body content of the &lt;treeItem>
+        and &lt;treeLabel> tags.  In this case, there is HTML markup and other netui tags inside the body content.  All expressions will
+        only be evaluated when the tree is created, which happens the first time when the tree variable is null.  Otherwise the tree
+        is generated from the TreeNodes.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtmlTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtmlTwo.jsp [goTreeHtmlTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree11}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.1</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This is an additional test of specifying the label content through the body content of the &lt;treeItem>
+        and &lt;treeLabel> tags.  In this case, there is HTML markup and other netui tags inside the body content.  All expressions will
+        only be evaluated when the tree is created, which happens the first time when the tree variable is null.  Otherwise the tree
+        is generated from the TreeNodes.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtmlTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtmlTwo.jsp [goTreeHtmlTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree11}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.0</td></tr>
+        </table>
+        </div>
+        This is an additional test of specifying the label content through the body content of the &lt;treeItem>
+        and &lt;treeLabel> tags.  In this case, there is HTML markup and other netui tags inside the body content.  All expressions will
+        only be evaluated when the tree is created, which happens the first time when the tree variable is null.  Otherwise the tree
+        is generated from the TreeNodes.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.1</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtmlTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtmlTwo.jsp [goTreeHtmlTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree11}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.1</td></tr>
+        </table>
+        </div>
+        This is an additional test of specifying the label content through the body content of the &lt;treeItem>
+        and &lt;treeLabel> tags.  In this case, there is HTML markup and other netui tags inside the body content.  All expressions will
+        only be evaluated when the tree is created, which happens the first time when the tree variable is null.  Otherwise the tree
+        is generated from the TreeNodes.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtmlTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtmlTwo.jsp [goTreeHtmlTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree11}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0.0</td></tr>
+        </table>
+        </div>
+        This is an additional test of specifying the label content through the body content of the &lt;treeItem>
+        and &lt;treeLabel> tags.  In this case, there is HTML markup and other netui tags inside the body content.  All expressions will
+        only be evaluated when the tree is created, which happens the first time when the tree variable is null.  Otherwise the tree
+        is generated from the TreeNodes.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.0.0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeHtml.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <style type="text/css">
+        .leaf {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 10pt;
+            color: #c90000;
+        }
+        .container {
+            font-family: "new century schoolbook", serif ; 
+            font-size: 12pt;
+            color: #990000;
+        }
+        </style>
+        <base href="http://localhost:7001/coreWeb/richTree/treeHtmlTwo.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeHtmlTwo.jsp [goTreeHtmlTwo.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree11}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This is an additional test of specifying the label content through the body content of the &lt;treeItem>
+        and &lt;treeLabel> tags.  In this case, there is HTML markup and other netui tags inside the body content.  All expressions will
+        only be evaluated when the tree is created, which happens the first time when the tree variable is null.  Otherwise the tree
+        is generated from the TreeNodes.
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.0.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.0</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="leaf">Leaf:&nbsp;<b>0.1.1</b></span>&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;<span class="container">Container:&nbsp;<b>0.2</b></span>&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:48.070 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>6</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>6</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeStyle.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeTreeStyle.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1083 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeTreeStyle</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:48.160 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goTreeStyle.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f19</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeStyle.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeStyle.jsp [goTreeStyle.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree4}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates using the <i>treeClass</i> to set the overall style around the tree.  In this case
+        we are setting a border and the height and width of the &lt;div> containing the table.  In addition,
+        the overall font is set for the tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/goTreeStyle.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f19</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeStyle.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeStyle.jsp [goTreeStyle.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree4}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates using the <i>treeClass</i> to set the overall style around the tree.  In this case
+        we are setting a border and the height and width of the &lt;div> containing the table.  In addition,
+        the overall font is set for the tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f19</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeStyle.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeStyle.jsp [goTreeStyle.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree4}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0</td></tr>
+        </table>
+        </div>
+        This test demonstrates using the <i>treeClass</i> to set the overall style around the tree.  In this case
+        we are setting a border and the height and width of the &lt;div> containing the table.  In addition,
+        the overall font is set for the tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f19</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeStyle.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeStyle.jsp [goTreeStyle.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree4}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.0.0</td></tr>
+        </table>
+        </div>
+        This test demonstrates using the <i>treeClass</i> to set the overall style around the tree.  In this case
+        we are setting a border and the height and width of the &lt;div> containing the table.  In addition,
+        the overall font is set for the tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f19</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeStyle.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeStyle.jsp [goTreeStyle.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree4}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates using the <i>treeClass</i> to set the overall style around the tree.  In this case
+        we are setting a border and the height and width of the &lt;div> containing the table.  In addition,
+        the overall font is set for the tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treeselected</ses:name>
+                  <ses:value>0.1.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f19</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeStyle.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeStyle.jsp [goTreeStyle.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree4}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>&nbsp;</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>0.1.0</td></tr>
+        </table>
+        </div>
+        This test demonstrates using the <i>treeClass</i> to set the overall style around the tree.  In this case
+        we are setting a border and the height and width of the &lt;div> containing the table.  In addition,
+        the overall font is set for the tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/richTree/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_treeid</ses:name>
+                  <ses:value>tree</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_treenode</ses:name>
+                  <ses:value>0.0</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f19</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>7</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>treeStyle.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/richTree/treeStyle.jsp">
+    </head>
+    <body style="border: 20pt 5%">
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>treeStyle.jsp [goTreeStyle.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree4}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        <tr><th>selectionClass</th><td>treeSelected</td></tr>
+        <tr><th>treeClass</th><td>treeStyle</td></tr>
+        </table>
+        </div>
+        <!-- Postback information -->
+        <div style='float:right;width:250px;border:solid 1pt gray;margin:2 4;'>
+        <p style="font-weight:bold;text-align:center;margin: 0;padding:0;">Tree Postback Information</p>
+        <table cellpadding='0' cellspacing='2' width="100%">
+        <tr><th style="text-align:right" width="100pt">Expand:</th><td>0.0</td></tr>
+        <tr><th style="text-align:right" width="100pt">Selection:</th><td>&nbsp;</td></tr>
+        </table>
+        </div>
+        This test demonstrates using the <i>treeClass</i> to set the overall style around the tree.  In this case
+        we are setting a border and the height and width of the &lt;div> containing the table.  In addition,
+        the overall font is set for the tree.
+        <hr style="clear:left">
+        <div class="content">
+        <div class="treeStyle">
+   <div>
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handlerightlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.0&netui_treeid=tree" class="treeSelected">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/richTree/postback.do?netui_treeselected=0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;Node 0.2&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:52.076 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>7</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>7</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeWriteTreeError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RichTreeWriteTreeError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RichTreeWriteTreeError</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 02:18:43.460 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/richTree/goWriteTreeError.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-4d326ae7:fda04f0262:-6ea7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>writeTreeError.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:8080/coreWeb/richTree/writeTreeError.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/richTree/begin.do" class="homeAnchor">Home</a>writeTreeError.jsp [goWriteTreeError.do] </h4>
+        <!-- Attribute Information -->
+        <div style='float:left;width:300px'>
+        <table cellpadding="2" cellspacing="0" border="1" width="300px">
+        <tr><th>Creation</th><td>Static</td></tr>
+        <tr><th>tree</th><td>{pageFlow.tree7}</td></tr>
+        <tr><th>action</th><td>postback</td></tr>
+        <tr><th>runAtClient</th><td>false</td></tr>
+        </table>
+        </div>
+        This test demonstrates the error reported when the tree cannot write to the expression being bound to.  This is an error because
+        we used the contents of the tree to generate the initial representation, but then didn't have the ability to write it
+        to the backing variable.
+        <hr style="clear:left">
+        <div class="content">
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>RichTree</b>]</span>
+        </div>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>RichTree</th><th>Message</th><td>Unable to create the tree instance identified by the expression 'pageFlow.tree7'. Error:<br>Exception when attempting to update the expression "{pageFlow.tree7}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication]. Root cause: java.lang.RuntimeException: Could not update expression because a public field named "tree7" or setter for the property "tree7" could not be found.</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 02:18:44.361 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Roles.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Roles.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,839 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Roles</sessionName>
+  <tester>rich</tester>
+  <startDate>07 May 2004, 03:34:10.234 PM MDT</startDate>
+  <description>Test roles-allowed.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/roles/rolesController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7c14</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Roles Test
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test</h3>
+        <font color="Red">
+             
+        </font>
+        <br>
+        <a href="/coreWeb/miniTests/roles/goodRoleAction.do">goodRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/badRoleAction.do">badRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/allRolesAction.do">allRolesAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/logOut.do">log out</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/roles/goodRoleAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7c14</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Roles Test - Login
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test - Login</h3>
+        <font color="Red">
+            com.bea.wlw.netui.pageflow.NotLoggedInException: Action goodRoleAction on Page Flow /miniTests/roles/rolesController.jpf requires a current user, but there is no logged-in user. 
+        </font>
+        <br>
+        <a href="/coreWeb/miniTests/roles/logIn.do">log in</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/roles/logIn.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7c14</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Roles Test
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test</h3>
+        <font color="Red">
+             
+        </font>
+        <br>
+        <a href="/coreWeb/miniTests/roles/goodRoleAction.do">goodRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/badRoleAction.do">badRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/allRolesAction.do">allRolesAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/logOut.do">log out</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/roles/goodRoleAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7c14</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Roles Test
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test</h3>
+        <font color="Red">
+             
+        </font>
+        <br>
+        <a href="/coreWeb/miniTests/roles/goodRoleAction.do">goodRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/badRoleAction.do">badRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/allRolesAction.do">allRolesAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/logOut.do">log out</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/roles/badRoleAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7c14</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Roles Test
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test</h3>
+        <font color="Red">
+            com.bea.wlw.netui.pageflow.UnfulfilledRolesException: Action badRoleAction on Page Flow /miniTests/roles/rolesController.jpf requires the user to be in one of the following roles: BadRole. 
+        </font>
+        <br>
+        <a href="/coreWeb/miniTests/roles/goodRoleAction.do">goodRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/badRoleAction.do">badRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/allRolesAction.do">allRolesAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/logOut.do">log out</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/roles/allRolesAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7c14</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Roles Test
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test</h3>
+        <font color="Red">
+             
+        </font>
+        <br>
+        <a href="/coreWeb/miniTests/roles/goodRoleAction.do">goodRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/badRoleAction.do">badRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/allRolesAction.do">allRolesAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/logOut.do">log out</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/roles/logOut.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ab2YhDfLK7xddv42utvWR0RnuzG87mcLi4sHI2ElbKynxiONcFz1!-125393018</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>755a3675:fc615b4c47:-7c14</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Roles Test
+        </title>
+    </head>
+    <body>
+        <h3>Roles Test</h3>
+        <font color="Red">
+             
+        </font>
+        <br>
+        <a href="/coreWeb/miniTests/roles/goodRoleAction.do">goodRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/badRoleAction.do">badRoleAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/allRolesAction.do">allRolesAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/roles/logOut.do">log out</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>07 May 2004, 03:34:15.192 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>7</testCount>
+  <passedCount>5</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RtexpTagId.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RtexpTagId.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RtexpTagId</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>30 Jun 2004, 06:50:24.257 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/rtexpTagId/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>97C465E85F534169650813D0B8DDA35E</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=97C465E85F534169650813D0B8DDA35E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-3c3366e5:fd7815cebf:-63bc</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        
+        &lt;form name="nameBean" action="/coreWeb/tags/rtexpTagId/postForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td>FirstName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.firstName}" value="">
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td>LastName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.lastName}" value="">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;br/>&amp;nbsp;
+            &lt;input type="submit" value="postForm">
+        &lt;/form>
+        &lt;br>Action: &lt;span id="tagid3">begin&lt;/span> 
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.tagid3="tagid3"
+netui_names.tagid1="{actionForm.firstName}"
+netui_names.tagid2="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/rtexpTagId/postForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>sdf</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>sdf</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>97C465E85F534169650813D0B8DDA35E</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>60</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=97C465E85F534169650813D0B8DDA35E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-3c3366e5:fd7815cebf:-63bc</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        
+        &lt;form name="nameBean" action="/coreWeb/tags/rtexpTagId/postForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td>FirstName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.firstName}" value="sdf">
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td>LastName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.lastName}" value="sdf">
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;br/>&amp;nbsp;
+            &lt;input type="submit" value="postForm">
+        &lt;/form>
+        &lt;br>Action: &lt;span id="tagid3">postForm&lt;/span> 
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.tagid3="tagid3"
+netui_names.tagid1="{actionForm.firstName}"
+netui_names.tagid2="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 06:50:24.277 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RuntimeErrors.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/RuntimeErrors.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>RuntimeErrors</ses:sessionName>
+   <ses:tester>daryl</ses:tester>
+   <ses:startDate>30 Jun 2004, 06:31:18.389 PM MDT</ses:startDate>
+   <ses:description>daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/runtimeErrors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>11510CEB15A2C5F6F79E901F911457AC</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=11510CEB15A2C5F6F79E901F911457AC</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-3c3366e5:fd7815cebf:-77de</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://localhost:8080/coreWeb/tags/runtimeErrors/index.jsp">
+    </head>
+    <body>
+        <a href="/coreWeb/tags/runtimeErrors/next.do">Next</a><br />
+        <span style="color:red;background-color:white">
+ [<b>Expression Error:1</b>, Found in tag <b>Label</b>]</span>
+    <!-- report all runtime tag errors -->
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th rowspan="2">1</th><th rowspan="2">Label</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{pageflow.missing}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageflow.missing}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: org.apache.beehive.netui.script.IllegalExpressionException</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/runtimeErrors/next.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>11510CEB15A2C5F6F79E901F911457AC</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=11510CEB15A2C5F6F79E901F911457AC</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-3c3366e5:fd7815cebf:-77de</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://localhost:8080/coreWeb/tags/runtimeErrors/next.jsp">
+    </head>
+    <body>
+        <span style="color:red;background-color:white">
+ [<b>Expression Error:1</b>, Found in tag <b>Label</b>]</span>
+    </body><div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th rowspan="2">1</th><th rowspan="2">Label</th><th>Attribute</th><td>value</td>
+ <th>Expression</th><td>{pageflow.missing}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageflow.missing}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: org.apache.beehive.netui.script.IllegalExpressionException</td></tr>
+</table></div>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>30 Jun 2004, 06:31:20.111 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ScopedJpfTest1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ScopedJpfTest1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,5025 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ScopedJpfTest1</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>17 Dec 2003, 11:55:16.231 AM MST</startDate>
+  <description>Tests scoped page flows in multiple frames and nested pageflows within the scope of the frame.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<frameset rows="30%,35%,35%,35%,35%,35%,35%">
+
+    <frame src="JspTest1.jsp" name="topFrame">
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameA" name="frameA">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameB" name="frameB">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameC" name="frameC">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameD" name="frameD">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameE" name="frameE">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameF" name="frameF">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameG" name="frameG">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameH" name="frameH">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameI" name="frameI">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameJ" name="frameJ">
+    </frameset>
+
+    <frameset cols="50%,50%">
+        <frame src="jpf1/Jpf1.jpf?jpfScopeID=frameK" name="frameK">
+        <frame src="jpf2/Jpf2.jpf?jpfScopeID=frameL" name="frameL">
+    </frameset>
+
+</frameset>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/JspTest1.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - JspTest1.jsp
+            <span style="color: green">
+            Instance: <span>1</span>
+            </span>
+        </h3>
+        <a href="/coreWeb/scopedJpf/jpfTest1/resetCounters.do">Reset Counters</a>
+        &nbsp;&nbsp;
+        <a href="/coreWeb/scopedJpf/jpfTest1/finish.do" target="_top">Done</a>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameA</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>1</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameA">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameB</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>1</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameB">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameC</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>2</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameC">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameD</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>2</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameD">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameE</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>3</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameE">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameF</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>3</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameF">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameG</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>4</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameG">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameH</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>4</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameH">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameI</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>5</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameI">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameK</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>6</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameK">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameJ</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>5</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameJ">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameL</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JpfTest1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>6</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameL">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>15</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameA</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf?jpfScopeID=frameA</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>1</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameA">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>16</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameC</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf?jpfScopeID=frameC</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>2</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameC">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>17</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameE</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf?jpfScopeID=frameE</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>3</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameE">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>18</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameG</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf?jpfScopeID=frameG</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>4</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameG">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>19</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameI</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf?jpfScopeID=frameI</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>5</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameI">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>20</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameK</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/Jpf1.jpf?jpfScopeID=frameK</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>6</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameK">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>21</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameB</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf?jpfScopeID=frameB</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>7</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameB">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>22</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameD</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf?jpfScopeID=frameD</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>8</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameD">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>23</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameF</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf?jpfScopeID=frameF</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>9</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameF">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>24</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameH</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf?jpfScopeID=frameH</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>10</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameH">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>25</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameJ</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf?jpfScopeID=frameJ</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>11</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameJ">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>26</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:goNested</name>
+          <value>Goto nested</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameL</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/Jpf2.jpf?jpfScopeID=frameL</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - SubJpf1.SubJsp1.jsp
+            <span style="color: green">
+            Instance: <span>12</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameL">
+            <input type="submit" name="actionOverride:finish" value="Done"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>27</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameA</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameA</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>1</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameA">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>28</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameC</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameC</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>2</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameC">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>29</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameE</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameE</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>3</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameE">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>30</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameG</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameG</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>4</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameG">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>31</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameI</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameI</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>5</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameI">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>32</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameK</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameK</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>6</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameK">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>33</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameB</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameB</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>1</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameB">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>34</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameD</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameD</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>2</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameD">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>35</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameF</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameF</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>3</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameF">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>36</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameH</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameH</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>4</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameH">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>37</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameJ</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameJ</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>5</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameJ">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>38</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:finish</name>
+          <value>Done</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameL</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>28</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameL</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>6</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameL">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>39</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameA</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameA</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>1</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameA">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>40</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameC</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameC</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>2</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameC">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>41</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameE</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameE</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>3</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameE">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>42</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameG</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameG</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>4</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameG">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>43</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameI</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameI</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>5</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameI">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>44</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameK</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameK</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf1.Jsp1.jsp
+            <span style="color: green">
+            Instance: <span>6</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf1/finish.do?jpfScopeID=frameK">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>45</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameB</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameB</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>1</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameB">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>46</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameD</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameD</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>2</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameD">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>47</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameF</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameF</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>3</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameF">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>48</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameH</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameH</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>4</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameH">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>49</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameJ</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameJ</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>5</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameJ">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>50</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:refresh</name>
+          <value>Refresh page</value>
+        </parameter>
+        <parameter>
+          <name>jpfScopeID</name>
+          <value>frameL</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>37</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/subJpf1/finish.do?jpfScopeID=frameL</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
+        <title>ScopedJpf JpfTest1</title>
+    </head>
+    <body>
+        <center>
+        <h3 align="center">ScopedJpf JpfTest1 - Jpf2.Jsp2.jsp
+            <span style="color: green">
+            Instance: <span>6</span>
+            </span>
+        </h3>
+        <form id="Netui_Form_0" method="post" action="/coreWeb/scopedJpf/jpfTest1/jpf2/finish.do?jpfScopeID=frameL">
+            <input type="submit" name="actionOverride:refresh" value="Refresh page"/>
+            &nbsp;&nbsp;
+            <input type="submit" name="actionOverride:goNested" value="Goto nested"/>
+        </form>
+        </center>
+    </body></html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>51</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/scopedJpf/jpfTest1/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JspTest1.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>52</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/resources/jsp/done.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gm92pDYCEQOT2zUqTaRHND2B251K46mubvunhjWifYL0y1qZ4xr!-582137200</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/scopedJpf/jpfTest1/JspTest1.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>17 Dec 2003, 11:56:40.258 AM MST</endDate>
+  <testCount>52</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SecureLinks.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SecureLinks.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>SecureLinks</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:31:02.010 PM MST</startDate>
+  <description>Test of secure links from various tags.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/secureLinks/linkToSecure/linkToSecureController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7bb0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+-->
+</script>
+
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/secureAction.do">secureAction</a>
+        <br>
+        <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/begin.do">begin in /secure</a>
+        <br>
+        <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/begin.do">begin in /secure (relative)</a>
+        <br>
+        image under /secure: <img src="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif" lowsrc="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif">
+        <br>
+        image under /secure (relative): <img src="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif" lowsrc="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif">
+        <br>
+        imageAnchor under /secure: <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/secureAction.do"><img src="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif" lowsrc="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif" onmouseout="swapImage(this,'https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif')" onmouseover="swapImage(this,'https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif')"></a>
+        <br>
+        imageAnchor under /secure (relative): <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/secureAction.do"><img src="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif" lowsrc="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif" onmouseout="swapImage(this,'https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif')" onmouseover="swapImage(this,'https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif')"></a>
+        <br>
+        imageButton under /secure: <input type="image" src="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif" onmouseout="swapImage(this,'https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif')" onmouseover="swapImage(this,'https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/secure/image.gif')">
+        <br>
+        imageButton under /secure (relative): <input type="image" src="https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif" onmouseout="swapImage(this,'https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif')" onmouseover="swapImage(this,'https://@NON_UNIQUE_HOST@:7002/coreWeb/tags/secureLinks/linkToSecure/../secure/image.gif')">
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:31:04.343 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Security.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Security.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Security</sessionName>
+  <tester>Daryl</tester>
+  <startDate>03 May 2004, 03:13:03.204 PM MDT</startDate>
+  <description>Verify that https and transitions work.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/security/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AWz3vXAsityS0I0TdpKKlJ8gDkbP8y4HQ5BWgjkOpqaTfFE0mA4X!872494358</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AWz3vXAsityS0I0TdpKKlJ8gDkbP8y4HQ5BWgjkOpqaTfFE0mA4X!872494358</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>11f2533b:fc4cabbfdc:-7bf8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.form="form"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+<head>
+<title>Security/Proxies</title>
+</head>
+<body bgcolor="white">
+
+<h3>Secure check</h3>
+
+<form id="form" action="/coreWeb/security/unsecure.do" method="post">
+
+    <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/security/secure.do">Secure</a>
+    <a href="/coreWeb/security/unsecure.do">Unsecure</a>
+</form>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/security/unsecure.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AWz3vXAsityS0I0TdpKKlJ8gDkbP8y4HQ5BWgjkOpqaTfFE0mA4X!872494358</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AWz3vXAsityS0I0TdpKKlJ8gDkbP8y4HQ5BWgjkOpqaTfFE0mA4X!872494358</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>11f2533b:fc4cabbfdc:-7bf8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body bgcolor="white">
+
+<h3>This is page 2!</h3>
+
+<a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/security/back_secure.do">Back to index Secure</a><br>
+<a href="/coreWeb/security/back_unsecure.do">Back to index Unsecure</a>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>03 May 2004, 03:13:07.800 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Select.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Select.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,427 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Select</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 10:15:35.872 AM MST</startDate>
+  <description>Test of the single select tag.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/select/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7baa</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Select Tests</title>
+</head>
+<body>
+<h4>Select</h4>
+<form name="form" action="/coreWeb/tags/select/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option></select>
+  </td></tr>
+<tr><td><b>Select 1, Fully Bound, Option = collection</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected2}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected2}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option></select>
+  </td></tr>
+<tr><td colspan=2>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+Select 1: <span>Option 4</span><br />
+Select 2: <span>Option 4</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/select/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/select/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected2}</name>
+          <value>Option 2</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 1</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>117</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7baa</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Select Tests</title>
+</head>
+<body>
+<h4>Select</h4>
+<form name="form" action="/coreWeb/tags/select/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}">
+<option value="Option 1" selected>Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4">Option 4</option></select>
+  </td></tr>
+<tr><td><b>Select 1, Fully Bound, Option = collection</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected2}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected2}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2" selected>Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4">Option 4</option></select>
+  </td></tr>
+<tr><td colspan=2>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+Select 1: <span>Option 1</span><br />
+Select 2: <span>Option 2</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/select/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>currentURI</name>
+          <value>/coreWeb/tags/select/Begin.jsp</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected2}</name>
+          <value>Option 3</value>
+        </parameter>
+        <parameter>
+          <name>{pageFlow.selected}</name>
+          <value>Option 4</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>117</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkixRbz1p1Z19Zl1GuSOB7eW2LBLnGNVdDjU26U8iNiUqYqVJxVv!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-7baa</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Select Tests</title>
+</head>
+<body>
+<h4>Select</h4>
+<form name="form" action="/coreWeb/tags/select/postback.do" method="post">
+<table>
+<tr><td><b>Select 1, Fully Bound</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3">Option 3</option>
+<option value="Option 4" selected>Option 4</option></select>
+  </td></tr>
+<tr><td><b>Select 1, Fully Bound, Option = collection</b></td><td>
+  <input type="hidden" name="wlw-select_key:{pageFlow.selected2}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selected2}">
+<option value="Option 1">Option 1</option>
+<option value="Option 2">Option 2</option>
+<option value="Option 3" selected>Option 3</option>
+<option value="Option 4">Option 4</option></select>
+  </td></tr>
+<tr><td colspan=2>
+<input type="submit" value="Submit">
+</td></tr>
+</table>
+</form>
+<br />
+Select 1: <span>Option 4</span><br />
+Select 2: <span>Option 3</span>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 10:15:39.116 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SerializeXMLTag.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SerializeXMLTag.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>SerializeXMLTag</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 05:58:52.789 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/xmlBeans/serialize/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27c63d2b:fda072db3a:-74c3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>SerializeXML Tag Test</title>
+  </head>
+  <body>
+    <p>
+      <b>SerializeXML Tag Test</b>
+    <br/>
+    <br/>
+    <div id="customerProfile">
+<!--
+<CUSTOMERPROFILE xmlns="http://openuri.org/customerProfileLocal">
+  <CUSTOMER>
+    <NAME>John Kay</NAME>
+    <ADDRESS>Center Street</ADDRESS>
+    <CITY>Plano</CITY>
+    <STATE>TX</STATE>
+    <ZIP>75023</ZIP>
+    <PHONE>4081231234</PHONE>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T08:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1000</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_0</ORDERID>
+    </ORDER>
+    <ORDER>
+      <ORDER_DATE>2002-03-07T08:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1500</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_1</ORDERID>
+    </ORDER>
+    <PROMOTION>
+      <PROMOTION_NAME>Wireless Upsell</PROMOTION_NAME>
+      <PROMOTION_DESC>Family Holiday Connect</PROMOTION_DESC>
+      <STATE>TX</STATE>
+      <FROM_DATE>2001-11-22T09:00:00-05:00</FROM_DATE>
+      <TO_DATE>2002-12-31T10:00:00-05:00</TO_DATE>
+      <PRICE>49.99</PRICE>
+    </PROMOTION>
+    <CUSTID>CUSTOMER_1</CUSTID>
+  </CUSTOMER>
+    <CUSTOMER>
+    <NAME>Jack Black</NAME>
+    <ADDRESS>North First Street</ADDRESS>
+    <CITY>San Jose</CITY>
+    <STATE>CA</STATE>
+    <ZIP>93151</ZIP>
+    <PHONE>4081231234</PHONE>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T10:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1000</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_0</ORDERID>
+    </ORDER>
+    <ORDER>
+      <ORDER_DATE>2002-03-06T11:00:00-05:00</ORDER_DATE>
+      <TOTAL_ORDER_AMT>1500</TOTAL_ORDER_AMT>
+      <ORDERID>ORDER_ID_1_1</ORDERID>
+    </ORDER>
+    <PROMOTION>
+      <PROMOTION_NAME>Wireless Upsell</PROMOTION_NAME>
+      <PROMOTION_DESC>Family Holiday Connect</PROMOTION_DESC>
+      <STATE>TX</STATE>
+      <FROM_DATE>2001-11-22T12:00:00-05:00</FROM_DATE>
+      <TO_DATE>2002-12-31T13:00:00-05:00</TO_DATE>
+      <PRICE>49.99</PRICE>
+    </PROMOTION>
+    <CUSTID>CUSTOMER_2</CUSTID>
+  </CUSTOMER>
+</CUSTOMERPROFILE>
+-->
+</div>
+    <br/>
+    </p>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/xmlBeans/serialize/error.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>A09E3ABB9C4DEFCE870B4A999D86DA14</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=A09E3ABB9C4DEFCE870B4A999D86DA14; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-27c63d2b:fda072db3a:-74c3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html><head><title>Page Flow Error - Action Not Found</title></head>
+ <body>
+ <h1>Page Flow Error - Action Not Found</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/databinding/xmlBeans/serialize/Controller.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>error</td></tr>
+ <tr><td><b>Form:</b></td><td>null</td></tr>
+ </table><br />
+ <span style="color:red">Unable to find matching action <b>error</b>.</span>
+ </body></html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 05:58:54.672 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>1</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SessionBean.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SessionBean.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>SessionBean</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 03:18:11.747 PM MST</startDate>
+  <description>Test of the scope and type form attributes</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/sessionBean/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-718d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        Change the Session nameBean.name
+        <form name="nameBean" action="/coreWeb/tags/sessionBean/Action2.do" method="post">
+            Name: <input type="text" name="{actionForm.name}" value="Default Value">
+            <input type="submit" value="Action3">
+        </form>
+        <hr/> 
+        Session nameBean.name = '<span>Default Value</span>'
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/sessionBean/Action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.name}</name>
+          <value>foo</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>25</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-718d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        Page Input Form: <span>foo</span><br />
+        Session My Bean: <span>foo</span>
+        <hr />
+        <a href="/coreWeb/tags/sessionBean/Action3.do">Return to Form</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/sessionBean/Action3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-718d</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <p>
+        Change the Session nameBean.name
+        <form name="nameBean" action="/coreWeb/tags/sessionBean/Action2.do" method="post">
+            Name: <input type="text" name="{actionForm.name}" value="foo">
+            <input type="submit" value="Action3">
+        </form>
+        <hr/> 
+        Session nameBean.name = '<span>foo</span>'
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 03:18:13.941 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SimpleExpressionTest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/SimpleExpressionTest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>SimpleExpressionTest</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>11 Sep 2003, 03:12:47.395 PM MDT</startDate>
+  <description>Test of simple expression escaping.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/databinding/expressions/simple.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1gkjoDqmAZs1ZxHz21L51tV9CXq32gPiQewo9bsZJR5Ebfwx2Agg!1658460671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>*/*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1gkjoDqmAZs1ZxHz21L51tV9CXq32gPiQewo9bsZJR5Ebfwx2Agg!1658460671</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feedreader)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>JSP-only Expression Test</title>
+  </head>
+
+  <body>
+    <b>JSP-only Expression Test</b>
+<br/>
+<span>{pageContext.stringAttr}</span><br/>
+<span>Hello World!</span><br/>
+<span>\Hello World!</span><br/>
+<span>\\Hello World!</span><br/>
+<br/>
+<br/>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>11 Sep 2003, 03:12:56.479 PM MDT</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsFormBeanTest1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsFormBeanTest1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,538 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsFormBeanTest1</sessionName>
+  <tester>BVT</tester>
+  <startDate>25 Mar 2004, 12:12:39.127 AM MST</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBean/test1/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>FormBean Test1</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test1 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBean/test1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>FormBean Test1</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test1 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <font color="blue">
+            <h3 align="center">Page Flow jsp page.</h3>
+        </font>
+        <center>
+            <form name="formBeanTest1Form1" action="/coreWeb/formBean/test1/jpfAction1.do" method="post">
+               Field1 value: <span>Default form value</span>
+            </form>
+            <br/>
+            <a href="/coreWeb/formBean/test1/jpfAction1.do">Continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBean/test1/jpfAction1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>FormBean Test1</title>
+   </head>
+   <body>
+      <h3 align="center">FormBean Test1 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <font color="blue">
+         <h3 align="center">Struts jsp page.</h3>
+      </font>
+      <center>
+         Field1 Value:&nbsp;
+         Struts1 form value
+         <br/><br/>
+         <a href="/coreWeb/formBeanTest1/strutsAction2.do">Continue</a>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanTest1/strutsAction2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>FormBean Test1</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test1 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <font color="blue">
+            <h3 align="center">Page Flow jsp page.</h3>
+        </font>
+        <center>
+            <form name="formBeanTest1Form1" action="/coreWeb/formBean/test1/jpfAction3.do" method="post">
+               Field1 value: <span>Struts2 form value</span>
+            </form>
+            <br/>
+            <a href="/coreWeb/formBean/test1/jpfAction3.do">Continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBean/test1/jpfAction3.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:12:42.071 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>3</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsFormBeanTest2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsFormBeanTest2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,603 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsFormBeanTest2</sessionName>
+  <tester>BVT</tester>
+  <startDate>25 Mar 2004, 12:12:42.352 AM MST</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBean/test2/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>FormBean Test2</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test2 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="../../formBeanTest2/strutsAction1.do">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanTest2/strutsAction1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>FormBean Test2</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test2 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <font color="blue">
+            <h3 align="center">Struts jsp page.</h3>
+        </font>
+        <center>
+            <form name="formBeanTest2Form1" method="post" action="/coreWeb/formBeanTest2/strutsAction2.do">
+                <table>
+                    <tr>
+                        <td>Field1 Value:</td>
+                        <td>
+                            <input type="text" name="field1" value="Struts1 form value">
+                        </td>
+                    </tr>
+                </table>
+                <input type="submit" value="Continue">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanTest2/strutsAction2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>field1</name>
+          <value>Struts1 form value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>25</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>FormBean Test2</title>
+    </head>
+   <body>
+      <h3 align="center">FormBean Test2 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <font color="blue">
+         <h3 align="center">Page Flow jsp page.</h3>
+      </font>
+      <center>
+         <form name="formBeanTest2Form1" action="/coreWeb/formBean/test2/jpfAction1.do" method="post">
+            <table>
+               <tr>
+                  <td>Field1 Value:</td>
+                  <td><span>Struts2 form value</span></td>
+               </tr>
+            </table>
+            <input type="submit" name="actionOverride:jpfAction1" value="continue">
+         </form>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBean/test2/jpfAction1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:jpfAction1</name>
+          <value>continue</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>36</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>FormBean Test2</title>
+    </head>
+    <body>
+        <h3 align="center">FormBean Test2 - Jsp3.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <font color="blue">
+            <h3 align="center">Struts jsp page.</h3>
+        </font>
+        <center>
+            <form name="formBeanTest2Form1" method="post" action="/coreWeb/formBeanTest2/strutsAction4.do">
+                <table>
+                    <tr>
+                        <td>Field1 Value:</td>
+                        <td>
+                            <input type="text" name="field1" value="Jpf1 form value">
+                        </td>
+                    </tr>
+                </table>
+                <input type="submit" value="continue">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/formBeanTest2/strutsAction4.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>field1</name>
+          <value>Jpf1 form value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>22</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77d1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:12:45.226 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>4</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsInteropTest1</sessionName>
+  <tester>Connie Emmart</tester>
+  <startDate>23 Jul 2003, 04:24:43.711 PM MDT</startDate>
+  <description>Struts Interopability Test 1</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/test1/Controller1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/test1/Start.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test1</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test1</h3>
+           <br/>
+
+
+
+            Start.jsp ... Jpf1.jpf/begin.do -> /interOp/tests/gotoStrutsJSP.do -> Struts1.jsp ...
+
+
+
+          <hr width="95%"/>
+          <br/>
+
+
+
+        <form name="form" method="post" action="/coreWeb/interOp/tests/test1/gotoJpf2.do">
+            <center>
+                <input type="submit" value="Goto Jpf2">
+            </center>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/tests/test1/gotoJpf2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/test1/Controller1/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test1</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test1</h3>
+           <br/>
+
+
+
+            Start.jsp ... Jpf1.jpf/begin.do -> /interOp/tests/gotoStrutsJSP.do -> Struts1.jsp ...
+                                               gotoJpf2.do -> Jpf2.jpf/begin.do -> Done.jsp
+
+
+
+          <hr width="95%"/>
+          <br/>
+
+
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>23 Jul 2003, 04:25:10.263 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,392 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsInteropTest2</sessionName>
+  <tester>Connie Emmart</tester>
+  <startDate>25 Mar 2004, 12:12:11.527 AM MST</startDate>
+  <description>Struts Interopability Test 2</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/test2/Controller1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7820</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    
+    
+
+
+
+    <head>
+        <title>InterOp Test2</title>
+    </head>
+
+    <body>
+        
+           <h3>Interop Test2</h3>
+           <br/>
+        
+
+        
+            Start.jsp ... Jpf1.jpf/begin.do -> jpf1.jsp ...
+        
+          <hr width="95%"/>
+          <br/>
+        
+
+
+        <form id="Netui_Form_0" action="/coreWeb/interOp/test2/Controller1/toLegacy.do" method="post">
+            <center>
+                <input type="submit" value="Goto Global.app">
+            </center>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/test2/Controller1/toLegacy.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7820</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    
+    
+
+
+
+    <head>
+        <title>InterOp Test2</title>
+    </head>
+
+    <body>
+        
+           <h3>Interop Test2</h3>
+           <br/>
+        
+
+        
+            Start.jsp ... Jpf1.jpf/begin.do -> jpf1.jsp -> /global/Global/toLegacy.do -> /gotoStrutsJSP.do -> Struts1.jsp ...
+        
+          <hr width="95%"/>
+          <br/>
+        
+
+
+        <form name="form" method="post" action="/coreWeb/interOp/tests/test2/gotoDone.do">
+            <center>
+                <input type="submit" value="Goto Done">
+            </center>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/tests/test2/gotoDone.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7820</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    
+    
+
+
+
+    <head>
+        <title>InterOp Test2</title>
+    </head>
+
+    <body>
+        
+           <h3>Interop Test2</h3>
+           <br/>
+        
+
+        
+           Start.jsp ... Jpf1.jpf/begin.do -> jpf1.jsp -> /global/Global/toLegacy.do -> /gotoStrutsJSP.do -> Struts1.jsp ...
+                                               gotoDone -> Done.jsp
+        
+          <hr width="95%"/>
+          <br/>
+        
+
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:12:15.863 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest3.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest3.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsInteropTest3</sessionName>
+  <tester>Connie Emmart</tester>
+  <startDate>23 Jul 2003, 04:27:25.337 PM MDT</startDate>
+  <description>Struts Interoperability Test 3</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/test3/Controller1/JpfNestable.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/test3/Start.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test3</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test3</h3>
+           <br/>
+
+
+
+            Start.jsp ... JpfNestable.jpf/begin.do -> /interOp/tests/gotoStrutsJSP.do -> Struts1.jsp ...
+
+
+
+          <hr width="95%"/>
+          <br/>
+
+
+
+        <form name="form" method="post" action="/coreWeb/interOp/tests/test3/gotoDone.do">
+            <center>
+                <input type="submit" value="Goto Done">
+            </center>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/tests/test3/gotoDone.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/test3/Controller1/JpfNestable.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test3</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test3</h3>
+           <br/>
+
+
+
+            Start.jsp ... JpfNestable.jpf/begin.do -> /interOp/tests/gotoStrutsJSP.do -> Struts1.jsp ...
+                                               JpfNestable/done.do -> Done.jsp
+
+
+
+          <hr width="95%"/>
+          <br/>
+
+
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>23 Jul 2003, 04:27:34.849 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest4.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest4.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsInteropTest4</sessionName>
+  <tester>Connie Emmart</tester>
+  <startDate>23 Jul 2003, 04:28:14.147 PM MDT</startDate>
+  <description>Struts Interoperability Test 4</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/test4/Controller1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/test4/Start.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test4</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test4</h3>
+           <br/>
+
+
+
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do ->
+                              /interOp/tests/test4/gotoStrutsJSP.do -> Struts1.jsp...
+
+
+
+          <hr width="95%"/>
+          <br/>
+
+
+
+        <form name="form" method="post" action="/coreWeb/interOp/tests/test4/gotoDone.do">
+            <center>
+                <input type="submit" value="Goto Done">
+            </center>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/tests/test4/gotoDone.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/test4/Controller1/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test4</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test4</h3>
+           <br/>
+
+
+
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do ->
+                              /interOp/tests/test4/gotoStrutsJSP.do -> Struts1.jsp...
+                             JpfNestable/done.do -> Jpf1.jpf/done.do -> Done.jsp
+
+
+
+          <hr width="95%"/>
+          <br/>
+
+
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>23 Jul 2003, 04:28:23.300 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest5.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsInteropTest5.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsInteropTest5</sessionName>
+  <tester>Connie Emmart</tester>
+  <startDate>23 Jul 2003, 04:29:05.021 PM MDT</startDate>
+  <description>Struts Interoperability Test 5</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/test5/Controller1/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/test5/Start.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test5</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test5</h3>
+           <br/>
+
+
+
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do -> Struts1.jsp...
+
+          <hr width="95%"/>
+          <br/>
+
+
+
+        <form name="form" method="post" action="/coreWeb/interOp/tests/test5/gotoGlobal.do">
+            <center>
+                <input type="submit" value="Goto Global">
+            </center>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/tests/test5/gotoGlobal.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/test5/Controller1/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test5</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test5</h3>
+           <br/>
+
+
+
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do -> Struts1.jsp...
+                              /global/Global/toStruts2 -> /gotoStrutsJSP2.do -> Struts2.jsp...
+
+          <hr width="95%"/>
+          <br/>
+
+
+
+        <form name="form" method="post" action="/coreWeb/interOp/tests/test5/gotoDone.do">
+            <center>
+                <input type="submit" value="Goto JPF Done">
+            </center>
+        </form>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/interOp/tests/test5/gotoDone.do</uri>
+      <method>POST</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>0</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1fKjFWB0hVY2RFoGpLnZSUdGHvBNMTm7L5bx43doq7GMggBB0Bx9!258586711</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/interOp/tests/test5/gotoGlobal.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+
+
+
+
+
+    <head>
+        <title>InterOp Test5</title>
+    </head>
+
+    <body>
+
+           <h3>Interop Test5</h3>
+           <br/>
+
+
+
+            Start.jsp ... Jpf1.jpf/begin.do -> /JpfNestable/begin.do -> Struts1.jsp...
+                              /global/Global/toStruts2 -> /gotoStrutsJSP2.do -> Struts2.jsp...
+                             Jpf1.jpf/toDone.do -> Done.jsp
+
+          <hr width="95%"/>
+          <br/>
+
+
+        <center>
+            <h2>Test completed successfully</h2>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>23 Jul 2003, 04:29:18.907 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsMergeTest2</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>03 Sep 2003, 10:17:46.465 AM MDT</startDate>
+  <description>Test global.app containing a
+struts-merge.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test2/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1WToQsddT6hKIZ5O8WFXACEXAn0I1eR6r8eDpqCE9BpXLUp1iqOR!-106782512</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1WToQsddT6hKIZ5O8WFXACEXAn0I1eR6r8eDpqCE9BpXLUp1iqOR!-106782512</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/strutsMerge/test2/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test2</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test2 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/strutsMerge/test2/unHandledAction.do">Raise action unKnown</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test2/unHandledAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1WToQsddT6hKIZ5O8WFXACEXAn0I1eR6r8eDpqCE9BpXLUp1iqOR!-106782512</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1WToQsddT6hKIZ5O8WFXACEXAn0I1eR6r8eDpqCE9BpXLUp1iqOR!-106782512</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/strutsMerge/test2/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>03 Sep 2003, 10:17:56.717 AM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest3.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest3.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,477 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsMergeTest3</sessionName>
+  <tester>BVT</tester>
+  <startDate>25 Mar 2004, 12:12:24.135 AM MST</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test3/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7805</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test3</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test3 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test3/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7805</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test3</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test3 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="form1" action="/coreWeb/strutsMerge/test3/jpfAction1.do" method="post">
+                <table>
+                    <tr>
+                        <td>Field1</td>
+                        <td><input type="text" name="{actionForm.field1}" value="Default value"></td>
+                    </tr>
+                </table>
+                <input type="submit" name="actionOverride:jpfAction1" value="continue">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test3/jpfAction1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:jpfAction1</name>
+          <value>continue</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.field1}</name>
+          <value>Default value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>74</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7805</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test3</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test3 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="form1" action="/coreWeb/strutsMerge/test3/jpfAction2.do" method="post">
+                <table>
+                    <tr class="tablebody">
+                        <td>Field1</td>
+                        <td>
+                            <input type="text" name="{actionForm.field1}" value="Test Value">
+                        </td>
+                    </tr>
+                </table>
+                <input type="submit" name="actionOverride:jpfAction2" value="continue">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test3/jpfAction2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:jpfAction2</name>
+          <value>continue</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.field1}</name>
+          <value>Test Value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>71</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7805</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:12:26.859 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest4.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest4.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,439 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsMergeTest4</sessionName>
+  <tester>BVT</tester>
+  <startDate>25 Mar 2004, 12:12:27.130 AM MST</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test4/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77fe</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test4</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test4 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test4/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77fe</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test4</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test4 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="form1" action="/coreWeb/strutsMerge/test4/jpfAction1.do" method="post">
+                <table>
+                    <tr>
+                        <td>Field1</td>
+                        <td>
+                            <input type="text" name="{actionForm.field1}" value="Form2 default value">
+                        </td>
+                    </tr>
+                </table>
+            </form>
+            <a href="/coreWeb/strutsMerge/test4/jpfAction1.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test4/jpfAction1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77fe</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test4</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test4 - Jsp2.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <form name="form2" action="/coreWeb/strutsMerge/test4/jpfAction2_strutsMerge_test4_Form2.do" method="post">
+                <table>
+                    <tr>
+                        <td>Field1</td>
+                        <td>
+                            <input type="text" name="{actionForm.field1}" value="Form2 default value">
+                        </td>
+                    </tr>
+                </table>
+            </form>
+            <a href="/coreWeb/strutsMerge/test4/jpfAction2_strutsMerge_test4_Form2.do">continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test4/jpfAction2_strutsMerge_test4_Form2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77fe</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:12:29.523 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest6.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest6.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsMergeTest6</sessionName>
+  <tester>BVT</tester>
+  <startDate>25 Mar 2004, 12:12:29.803 AM MST</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test6/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77f7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test6</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test6 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test6/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77f7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test6</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test6 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <h3 align="center">
+            If you check the box and "submit" you should be<br/>
+            taken to the "done.jsp" page.  If you uncheck the<br/>
+            box you should be taken to the "error.jsp" page.
+        </h3>
+        <center>
+            <form name="form1" action="/coreWeb/strutsMerge/test6/jpfAction1.do" method="post">
+                <table>
+                    <tr>
+                        <td>Check to throw the exception</td>
+                        <td><input type="hidden" name="wlw-checkbox_key:{actionForm.field1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.field1}" checked></td>
+                    </tr>
+                </table>
+                <input type="submit" name="actionOverride:jpfAction1" value="Submit">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test6/jpfAction1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:jpfAction1</name>
+          <value>Submit</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.field1}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.field1}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>137</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77f7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:12:31.786 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest62.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest62.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsMergeTest8</sessionName>
+  <tester>BVT</tester>
+  <startDate>29 Apr 2003, 07:38:25.336 PM MDT</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test8/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test8</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test8 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test8/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2vpW9uu0CIHBwDjS6INmcFxE3cZr2sUeG3ilOlqVRdXJMMTpnKqk!-164477705</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2vpW9uu0CIHBwDjS6INmcFxE3cZr2sUeG3ilOlqVRdXJMMTpnKqk!-164477705</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/strutsMerge/test8/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test8</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test8 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/strutsMerge/test8/jpfAction1.do">Continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test8/jpfAction1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2vpW9uu0CIHBwDjS6INmcFxE3cZr2sUeG3ilOlqVRdXJMMTpnKqk!-164477705</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2vpW9uu0CIHBwDjS6INmcFxE3cZr2sUeG3ilOlqVRdXJMMTpnKqk!-164477705</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/strutsMerge/test8/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>29 Apr 2003, 07:38:41.409 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest6Error.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest6Error.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsMergeTest6Error</sessionName>
+  <tester>BVT</tester>
+  <startDate>25 Mar 2004, 12:12:32.077 AM MST</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test6/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77f1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test6</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test6 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test6/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77f1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test6</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test6 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <h3 align="center">
+            If you check the box and "submit" you should be<br/>
+            taken to the "done.jsp" page.  If you uncheck the<br/>
+            box you should be taken to the "error.jsp" page.
+        </h3>
+        <center>
+            <form name="form1" action="/coreWeb/strutsMerge/test6/jpfAction1.do" method="post">
+                <table>
+                    <tr>
+                        <td>Check to throw the exception</td>
+                        <td><input type="hidden" name="wlw-checkbox_key:{actionForm.field1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.field1}" checked></td>
+                    </tr>
+                </table>
+                <input type="submit" name="actionOverride:jpfAction1" value="Submit">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test6/jpfAction1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:jpfAction1</name>
+          <value>Submit</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{actionForm.field1}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>91</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77f1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - error.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="red"><h2>Test failed with an error.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:12:33.419 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest7.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest7.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsMergeTest7</sessionName>
+  <tester>BVT</tester>
+  <startDate>25 Mar 2004, 12:12:33.699 AM MST</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test7/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77eb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test7</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test7 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test7/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77eb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test7</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test7 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <h3 align="center">
+            Press submit and you should be taken to the "done.jsp" page.
+        </h3>
+        <center>
+            <form name="form1" action="/coreWeb/strutsMerge/test7/jpfAction1.do" method="post">
+                <table>
+                    <tr>
+                        <td><input type="text" name="{actionForm.field1}" value="Form1 default value"></td>
+                    </tr>
+                </table>
+                <input type="submit" name="actionOverride:jpfAction1" value="Submit">
+            </form>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test7/jpfAction1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:jpfAction1</name>
+          <value>Submit</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.field1}</name>
+          <value>Form1 default value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>78</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-77eb</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:12:35.442 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest8.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StrutsMergeTest8.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StrutsMergeTest8</sessionName>
+  <tester>BVT</tester>
+  <startDate>29 Apr 2003, 07:38:25.336 PM MDT</startDate>
+  <description></description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test8/StartTest.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test8</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test8 - StartTest.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="Jpf1.jpf">Start test</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test8/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2vpW9uu0CIHBwDjS6INmcFxE3cZr2sUeG3ilOlqVRdXJMMTpnKqk!-164477705</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2vpW9uu0CIHBwDjS6INmcFxE3cZr2sUeG3ilOlqVRdXJMMTpnKqk!-164477705</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/strutsMerge/test8/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Test8</title>
+    </head>
+    <body>
+        <h3 align="center">Merge Test8 - Jsp1.jsp</h3>
+        <hr width="95%"/>
+        <br/>
+        <center>
+            <a href="/coreWeb/strutsMerge/test8/jpfAction1.do">Continue</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/strutsMerge/test8/jpfAction1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>2vpW9uu0CIHBwDjS6INmcFxE3cZr2sUeG3ilOlqVRdXJMMTpnKqk!-164477705</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,zh-hk;q=0.8,fr;q=0.6,ar-kw;q=0.4,es-mx;q=0.2</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=2vpW9uu0CIHBwDjS6INmcFxE3cZr2sUeG3ilOlqVRdXJMMTpnKqk!-164477705</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/strutsMerge/test8/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>29 Apr 2003, 07:38:41.409 PM MDT</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Style.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Style.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Style</ses:sessionName>
+   <ses:tester>daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 01:06:48.656 PM MDT</ses:startDate>
+   <ses:description>daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/style/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-6e08</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Style</title>
+<!-- target -->
+<base href="http://localhost:8080/coreWeb/tags/style/Begin.jsp">
+</head>
+<body>
+<h4>Style</h4>
+<form name="form" action="/coreWeb/tags/style/postback.do" method="post" style="border: solid 1pt;padding: 10pt">
+<!-- TEXTBOX -->
+<input type="text" name="{actionForm.text}" value="" maxlength="30" style="color: red"><br />
+<!-- TEXTAREA -->
+<textarea name="{actionForm.textArea}" rows="5" cols="20" style="color: green"></textarea><br />
+<!-- CHECKBOXGROUP with Option-->
+<input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}OldValue" value="true">
+<!-- CHECKBOXOPTION -->
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}" value="foo" style="border:solid 1pt blue;color:blue"><span>foo</span>
+<br />
+
+<!-- CHECKBOXGROUP with OptionDataSource-->
+<input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" value="Check 1" style="border: solid 1pt red;color: red"><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" value="Check 2" style="border: solid 1pt red;color: red"><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" value="Check 3" style="border: solid 1pt red;color: red"><span>Check 3</span><br>
+
+
+<!-- LABEL:-->
+<span style="Color: blue;font: bold 14pt sans-serif ">Checkbox 1</span>
+<!-- CHECKBOX: defaultValue, style, styleClass, tabindex
+-->
+<input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" style="border: solid 1pt blue"><br /><br />
+<!-- RADIOBUTTONGROUP with Option-->
+
+<!-- RADIOBUTTONOPTION -->
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="Choice 1" style="border: solid 1pt blue: color:blue"><span>Choice 1</span><br />
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="Choice 2" checked style="border: solid 1pt red; color:red"><span>Choice 2</span>
+<br />
+
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" value="Check 1" style="border: solid 1pt blue"><span>Check 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" value="Check 2" style="border: solid 1pt blue"><span>Check 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" value="Check 3" checked style="border: solid 1pt blue"><span>Check 3</span><br>
+
+<br />
+<!-- SELECT -->
+<input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3" style="margin:10;color: red;font: bold 14pt sans-serif"><!-- SELECTOPTION, locale, style, styleClass, tabindex
+-->
+<option value="Choice 1" style="margin:10;color: blue;font: bold 12pt serif">Choice 1</option>
+<option value="2" selected>Choice 2</option>
+<option value="3" disabled>Choice 3</option></select><br />
+<!-- HIDDEN: style, styleClass, tabindex
+-->
+<input type="hidden" name="{actionForm.hidden}" value="hidden">
+<hr />
+<input type="reset" value="Reset" style="color:red">
+<!-- BUTTON -->
+<input type="submit" value="submit" style="color:blue;font: bold 12pt serif">
+<br />
+<!-- IMAGEBUTTON -->
+
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+-->
+</script>
+
+<input type="image" src="/coreWeb/images/godzilla.gif" style="border: solid 10pt red;padding: 10pt;margin:2pt" onmouseout="swapImage(this,'/coreWeb/images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/images/godzillaRollover.gif')">
+</form>
+<hr />
+<!-- ANCHOR -->
+<a href="/coreWeb/tags/style/postback.do">Post Back</a><br />
+<!-- IMAGE -->
+<img src="/coreWeb/images/godzilla.gif" style="border: solid 2pt blue;" width="48" height="66" hspace="10" align="center" vspace="10"><br />
+<!-- IMAGEANCHOR: formSubmit, forward, href, ismap, linkName, location,
+        lowsrc, page, scope, style, styleClass, tabindex,
+        target, usemap
+
+        (Internally the roll over stuff uses mouse over and mouse out)
+-->
+<a href="/coreWeb/tags/style/postback.do"><img src="/coreWeb/images/godzilla.gif" style="border: solid 4pt green;" width="48" height="66" hspace="10" align="center" vspace="10" onmouseout="swapImage(this,'/coreWeb/images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/images/godzillaRollover.gif')"></a>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 01:06:49.818 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StyleClass.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StyleClass.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>StyleClass</ses:sessionName>
+   <ses:tester>daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 01:06:49.858 PM MDT</ses:startDate>
+   <ses:description>daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/tags/styleClass/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-6e04</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Style</title>
+<!-- target -->
+<base href="http://localhost:8080/coreWeb/tags/styleClass/Begin.jsp">
+<style>
+.red {
+        color: red
+}
+.green {
+        color: green
+}
+.redBorder {
+        border: solid 1pt red;
+        color: red
+}
+.blueBorder {
+        border:solid 1pt blue;
+        color:blue
+}
+.bigBlue {
+        Color: blue;
+        font: bold 14pt sans-serif
+}
+.select {
+        margin:10;
+        color: red;
+        font: bold 14pt sans-serif
+}
+.selectOpt {
+        margin:10;
+        color: blue;
+        font: bold 12pt serif
+}
+.blueButton {
+        color:blue;
+        font: bold 12pt serif
+}
+.redImage {
+        border: solid 10pt red;
+        padding: 10pt;
+        margin:2pt
+}
+.blueImage {
+        border: solid 2pt blue;
+}
+.greenImage {
+        border: solid 4pt green;
+}
+.form {
+        border: solid 1pt;
+        padding: 10pt;
+}
+</style>
+</head>
+<body>
+<h4>Style</h4>
+<form name="form" action="/coreWeb/tags/styleClass/postback.do" class="form" method="post">
+<!-- TEXTBOX -->
+<input type="text" name="{actionForm.text}" class="red" value="" maxlength="30"><br />
+<!-- TEXTAREA -->
+<textarea name="{actionForm.textArea}" class="green" rows="5" cols="20"></textarea><br />
+<!-- CHECKBOXGROUP with Option-->
+<input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}OldValue" value="true">
+<!-- CHECKBOXOPTION -->
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}" class="blueBorder" value="foo"><span>foo</span>
+<br />
+
+<!-- CHECKBOXGROUP with OptionDataSource-->
+<input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" class="redBorder" value="Check 1"><span>Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" class="redBorder" value="Check 2"><span>Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" class="redBorder" value="Check 3"><span>Check 3</span><br>
+
+
+<!-- LABEL:-->
+<span class="bigBlue">Checkbox 1</span>
+<!-- CHECKBOX: defaultValue, style, styleClass, tabindex
+-->
+<input type="hidden" name="wlw-checkbox_key:{actionForm.checkBox1}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{actionForm.checkBox1}" class="blueBorder"><br /><br />
+<!-- RADIOBUTTONGROUP with Option-->
+
+<!-- RADIOBUTTONOPTION -->
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" class="blueBorder" value="Choice 1"><span>Choice 1</span><br />
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" class="redBorder" value="Choice 2" checked><span>Choice 2</span>
+<br />
+
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" class="blueBorder" value="Check 1"><span>Check 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" class="blueBorder" value="Check 2"><span>Check 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" class="blueBorder" value="Check 3" checked><span>Check 3</span><br>
+
+<br />
+<!-- SELECT -->
+<input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" class="select" size="3"><!-- SELECTOPTION, locale, style, styleClass, tabindex
+-->
+<option class="selectOpt" value="1">1</option>
+<option value="2" selected>Choice 2</option>
+<option value="3" disabled>Choice 3</option></select><br />
+<!-- HIDDEN -->
+<input type="hidden" name="{actionForm.hidden}" value="hidden">
+<hr />
+<input type="reset" class="red" value="Reset">
+<!-- BUTTON -->
+<input type="submit" class="blueButton" value="submit">
+<br />
+<!-- IMAGEBUTTON -->
+
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+-->
+</script>
+
+<input type="image" class="redImage" src="/coreWeb/images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/images/godzillaRollover.gif')">
+</form>
+<hr />
+<!-- ANCHOR -->
+<a href="/coreWeb/tags/styleClass/postback.do">Post Back</a><br />
+<!-- IMAGE -->
+<img src="/coreWeb/images/godzilla.gif" class="blueImage" width="48" height="66" hspace="10" align="center" vspace="10"><br />
+<!-- IMAGEANCHOR -->
+<a href="/coreWeb/tags/styleClass/postback.do"><img src="/coreWeb/images/godzilla.gif" class="greenImage" width="48" height="66" hspace="10" align="center" vspace="10" onmouseout="swapImage(this,'/coreWeb/images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/images/godzillaRollover.gif')"></a>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 01:06:50.989 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StyleOptions.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/StyleOptions.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>StyleOptions</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 08:18:10.164 AM MST</startDate>
+  <description>Test of the labelStyle and labelStyleClass attributes on CheckBoxOptions/Group and RadioButtonOptions/Group.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/styleOptions/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkGacOde1diAYxGehL6s8RTmtrgWeKNz3dowrc5BevvBNEe1VP0B!-1788923157</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-325b199d:fb87b38206:-7b8a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Styles on Options</title>
+<!-- target -->
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/tags/styleOptions/Begin.jsp">
+<style>
+.redCheck {
+        Color: red;
+        font: bold 14pt sans-serif
+}
+.redRadio {
+        Color: red;
+        font: bold 10pt sans-serif
+}
+.blueCheck {
+        Color: blue;
+        font: bold 8pt sans-serif
+}
+.blueRadio {
+        Color: blue;
+        font: bold 16pt sans-serif
+}
+</style>
+</head>
+<body>
+<h4>Style</h4>
+<form name="form" action="/coreWeb/tags/styleOptions/postback.do" method="post" style="border: solid 1pt;padding: 10pt">
+
+<!-- CHECKBOXGROUP with Option-->
+<input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}OldValue" value="true">
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}" value="foo"><span style="font: bold 14pt sans-serif">foo</span><br />
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup}" value="bar"><span style="font: 8pt sans-serif">bar</span>
+
+<hr />
+
+<!-- CHECKBOXGROUP with Option-->
+<input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup1}OldValue" value="true">
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup1}" value="foo"><span class="redCheck">foo</span><br />
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup1}" value="bar"><span class="redCheck">bar</span>
+<br />
+<hr />
+
+<!-- CHECKBOXGROUP with OptionDataSource-->
+<input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" value="Check 1"><span style="color: red;font: bold 14pt sans-serif">Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" value="Check 2"><span style="color: red;font: bold 14pt sans-serif">Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup2}" value="Check 3"><span style="color: red;font: bold 14pt sans-serif">Check 3</span><br>
+
+<hr />
+<!-- CHECKBOXGROUP with OptionDataSource-->
+<input type="hidden" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup3}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup3}" value="Check 1"><span class="blueCheck">Check 1</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup3}" value="Check 2"><span class="blueCheck">Check 2</span><br>
+<input type="checkbox" name="wlw-checkbox_group_key:{actionForm.checkBoxGroup3}" value="Check 3"><span class="blueCheck">Check 3</span><br>
+
+<hr />
+
+<!-- RADIOBUTTONGROUP with Option-->
+
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="Radio 1"><span style="font: bold 14pt sans-serif">Radio 1</span><br />
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio}" value="Radio 2" checked><span style="font: 10pt sans-serif">Radio 2</span>
+<br />
+<hr />
+<!-- RADIOBUTTONGROUP with Option-->
+
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio1}" value="Radio 1" checked><span class="redRadio">Radio 1</span><br />
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio1}" value="Radio 2"><span class="redRadio" style="font: 10pt sans-serif">Radio 2</span>
+<br />
+<hr />
+
+<!-- RADIOBUTTONGROUP with OptionDataSource-->
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" value="Radio 1"><span style="color: red;font: bold 6pt sans-serif">Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" value="Radio 2"><span style="color: red;font: bold 6pt sans-serif">Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio2}" value="Radio 3" checked><span style="color: red;font: bold 6pt sans-serif">Radio 3</span><br>
+
+<hr />
+
+<!-- RADIOBUTTONGROUP with OptionDataSource-->
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio3}" value="Radio 1" checked><span class="blueRadio">Radio 1</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio3}" value="Radio 2"><span class="blueRadio">Radio 2</span><br>
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.radio3}" value="Radio 3"><span class="blueRadio">Radio 3</span><br>
+
+<hr />
+
+<!-- BUTTON -->
+<input type="submit" value="submit" style="color:blue;font: bold 12pt serif">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 08:18:12.287 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagIds.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagIds.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TagIds</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 10:35:39.911 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/tagIds/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>Ai5M7uA6hOQKXLeSIsIwBS3FMdc9yJJkuUHXZmQ2P7i1TqyPI0KR!1741402893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=Ai5M7uA6hOQKXLeSIsIwBS3FMdc9yJJkuUHXZmQ2P7i1TqyPI0KR!1741402893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>124cad41:fd73951b48:-761b</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+&lt;html lang="en">
+&lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+        &lt;form name="nameBean" id="form" action="/coreWeb/tags/tagIds/postForm.do" method="post">
+            &lt;table class="tablebody">
+                &lt;tr class="tablehead">
+                    &lt;td>LastName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.lastName}" value="">
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr class="tablehead">
+                    &lt;td>FirstName:&lt;/td>
+                    &lt;td>
+                    &lt;input type="text" name="{actionForm.firstName}" value="">
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr>
+                    &lt;td>Type:&lt;/td>
+                    &lt;td>
+                    &amp;nbsp;
+                    &lt;input type="hidden" name="wlw-select_key:{actionForm.type}OldValue" value="true">
+&lt;select name="wlw-select_key:{actionForm.type}">&lt;option id="opt1" value="Select Option One">Select Option One&lt;/option>
+                        &lt;option id="opt2" value="Select Option Two">Select Option Two&lt;/option>
+                        &lt;option id="opt3" value="Select Option Three">Select Option Three&lt;/option>&lt;/select>
+                    &lt;/td>
+                &lt;/tr>
+            &lt;/table>
+            &lt;br/>&amp;nbsp;
+            &lt;input type="submit" id="submit" value="postForm">&amp;nbsp;
+            &lt;input type="image" id="imageButton" src="/coreWeb/tags/tagIds/./../../resources/images/folder_16_pad.gif">
+        &lt;/form>
+        &lt;hr />
+        &lt;span id="label">begin&lt;/span> &lt;br>
+        &lt;a id="anchor" href="/coreWeb/tags/tagIds/begin.do">Home&lt;/a>&lt;br>
+        &lt;a id="imageAnchor" href="/coreWeb/tags/tagIds/begin.do">&lt;img src="/coreWeb/tags/tagIds/./../../resources/images/folder_16_pad.gif">&lt;/a>&lt;br>
+        &lt;img src="/coreWeb/tags/tagIds/./../../resources/images/bar-background.gif" id="image">
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.form="form"
+netui_names.opt2="opt2"
+netui_names.opt1="opt1"
+netui_names.firstName="{actionForm.firstName}"
+netui_names.lastName="{actionForm.lastName}"
+netui_names.select="wlw-select_key:{actionForm.type}"
+netui_names.submit="submit"
+netui_names.imageButton="imageButton"
+netui_names.label="label"
+netui_names.image="image"
+netui_names.imageAnchor="imageAnchor"
+netui_names.opt3="opt3"
+netui_names.anchor="anchor"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 10:35:39.941 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagImage.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagImage.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TagImage</sessionName>
+  <tester>Daryl</tester>
+  <startDate>20 Mar 2004, 09:59:00.536 AM MST</startDate>
+  <description>Errors in the Image tag</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/errors/tagImage/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ac1i45LQ9pa21drbh37feKCOCZC94et5nINgqFzSnZ2JelUnFYv5!-1017168403</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ac1i45LQ9pa21drbh37feKCOCZC94et5nINgqFzSnZ2JelUnFYv5!-1017168403</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-189e36e1:fb692b5d8a:-7b71</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Image Errors</title>
+</head>
+<body>
+<h4>Image Errors</h4>
+Image specifying both a page and url: <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Image</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Image tag with both a Page and URL specified, page "foo", url "bar"</td></tr>
+</table></span>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>20 Mar 2004, 09:59:01.787 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagImageHtml.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagImageHtml.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TagImageHtml</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:31:47.715 PM MST</startDate>
+  <description>Image tag errors reported in the HTML footer.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/errors/tagImageHtml/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7b73</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Image Errors</title>
+</head>
+<body>
+<h4>Image Errors</h4>
+Image specifying both a page and url: <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Image</b>]</span>
+<div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Image</th><th>Message</th><td>Image tag with both a Page and URL specified, page "foo", url "bar"</td></tr>
+</table></div>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:31:49.577 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagIteration.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagIteration.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TagIteration</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 11:02:14.843 AM MST</startDate>
+  <description>Errors getting a iterator for the optionsDataSource.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tags/tagIteration/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Akt1u1qdFn51WrhppEMQwxPXWdXOHRpjRLURVKg82QuF2P6yvxV1!853167481</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Akt1u1qdFn51WrhppEMQwxPXWdXOHRpjRLURVKg82QuF2P6yvxV1!853167481</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-2520d58a:fb881db534:-6e23</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Single Item Iteration</title>
+</head>
+<body>
+<form id="Netui_Form_0" action="/coreWeb/tags/tagIteration/postback.do" method="post">
+   <input type="hidden" name="wlw-select_key:{pageFlow.select}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.select}">
+<option value="Option 1">Option 1</option>
+<option value="Default Option" selected>Default Option</option></select><br />
+   <input type="radio" name="wlw-radio_button_group_key:{pageFlow.radioGroup}" value="Option 1"><span>Option 1</span><br>
+<br />
+   <input type="hidden" name="wlw-checkbox_group_key:{pageFlow.checkGroup}OldValue" value="true"><input type="checkbox" name="wlw-checkbox_group_key:{pageFlow.checkGroup}" value="Option 1"><span>Option 1</span><br>
+<br />
+   <input type="submit" value="Submit">
+</form>
+<hr />
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 11:02:15.984 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagSizeBinding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TagSizeBinding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,615 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TagSizeBinding</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>29 Jun 2004, 06:45:56.708 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/tagSizeBinding/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7638</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/tagSizeBinding/goImageErrors.do">Image Errors</a>
+    <hr />
+    <h4>Images</h4>
+    <img src="/coreWeb/images/godzilla.gif" width="80" height="100" hspace="5" vspace="10" alt="Alt Text From the Page Flow">
+    <br />
+    <a href="/coreWeb/tags/tagSizeBinding/begin.do"><img src="/coreWeb/images/godzilla.gif" width="80" height="100" hspace="5" vspace="10" border="5" alt="Alt Text From the Page Flow"></a>
+    <input type="image" src="/coreWeb/images/godzilla.gif" value="This is the value" width="80" height="100" hspace="5" vspace="10" alt="Alt Text From the Page Flow">
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/tagSizeBinding/goImageErrors.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7638</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/tagSizeBinding/goForm.do">Form Stuff</a>
+    <hr />
+    <span style="color:red;background-color:white">
+ [<b>Expression Error:1</b>, Found in tag <b>Image</b>]</span>
+    <br />
+    <span style="color:red;background-color:white">
+ [<b>Expression Error:6</b>, Found in tag <b>ImageAnchor</b>]</span>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th rowspan="2">1</th><th rowspan="2">Image</th><th>Attribute</th><td>width</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">2</th><th rowspan="2">Image</th><th>Attribute</th><td>height</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">3</th><th rowspan="2">Image</th><th>Attribute</th><td>hspace</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">4</th><th rowspan="2">Image</th><th>Attribute</th><td>vspace</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">5</th><th rowspan="2">Image</th><th>Attribute</th><td>alt</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">6</th><th rowspan="2">ImageAnchor</th><th>Attribute</th><td>width</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">7</th><th rowspan="2">ImageAnchor</th><th>Attribute</th><td>height</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">8</th><th rowspan="2">ImageAnchor</th><th>Attribute</th><td>hspace</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">9</th><th rowspan="2">ImageAnchor</th><th>Attribute</th><td>vspace</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">10</th><th rowspan="2">ImageAnchor</th><th>Attribute</th><td>border</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">11</th><th rowspan="2">ImageAnchor</th><th>Attribute</th><td>alt</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/tagSizeBinding/goForm.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7638</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <br/>
+        <form name="form" action="/coreWeb/tags/tagSizeBinding/submitForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <input type="text" name="{actionForm.textBox}" value="" maxlength="30" size="30">
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <textarea name="{actionForm.textArea}" rows="5" cols="30"></textarea>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select:</td>
+                    <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.select}OldValue" value="true">
+<select name="wlw-select_key:{actionForm.select}" size="3"><option id="Option-1" value="Option One">Option One</option> 
+                        <option id="Option-2" value="Option Two" selected>Option Two</option> 
+                        <option id="Option-3" value="Option Three">Option Three</option> 
+                        <option id="Option-4" value="Option Four">Option Four</option> 
+                        <option id="Option-5" value="Option Five">Option Five</option></select>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/tagSizeBinding/submitForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.select}</ses:name>
+                  <ses:value>Option Two</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-select_key:{actionForm.select}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.textArea}</ses:name>
+                  <ses:value/>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.textBox}</ses:name>
+                  <ses:value/>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>158</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7638</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        <br/>
+        <form name="form" action="/coreWeb/tags/tagSizeBinding/submitForm2.do" method="post">
+            <table class="tablebody">
+                <tr class="tablebody">
+                    <td>Text Box:</td>
+                    <td>
+                        <span style="color:red;background-color:white">
+ [<b>Expression Error:1</b>, Found in tag <b>TextBox</b>]</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Text Area:</td>
+                    <td>
+                        <span style="color:red;background-color:white">
+ [<b>Expression Error:3</b>, Found in tag <b>TextArea</b>]</span>
+                    </td>
+                </tr>
+                <tr class="tablebody">
+                    <td>Select:</td>
+                    <td>
+                        <span style="color:red;background-color:white">
+ [<b>Expression Error:5</b>, Found in tag <b>Select</b>]</span>
+                    </td>
+                </tr>
+            </table>
+            <br/>&nbsp;
+            <input type="submit" value="Submit">
+        </form>
+    <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th rowspan="2">1</th><th rowspan="2">TextBox</th><th>Attribute</th><td>maxlength</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">2</th><th rowspan="2">TextBox</th><th>Attribute</th><td>size</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">3</th><th rowspan="2">TextArea</th><th>Attribute</th><td>rows</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">4</th><th rowspan="2">TextArea</th><th>Attribute</th><td>cols</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+<tr><th rowspan="2">5</th><th rowspan="2">Select</th><th>Attribute</th><td>size</td>
+ <th>Expression</th><td>{pageFlow.null}</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{pageFlow.null}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, appication, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Could not find property or field "null" on object of type "class tags.tagSizeBinding.Controller"</td></tr>
+</table></div>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tags/tagSizeBinding/submitForm2.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-length</ses:name>
+                  <ses:value>0</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AiIdjSOQiQsWm2GhST2yJaIAsJIIMJ5Tm5erzo1dbxUPbXagn4uI!-1058694893</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-44f110ce:fd72f07a02:-7638</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+    <a href="/coreWeb/tags/tagSizeBinding/goImageErrors.do">Image Errors</a>
+    <hr />
+    <h4>Images</h4>
+    <img src="/coreWeb/images/godzilla.gif" width="80" height="100" hspace="5" vspace="10" alt="Alt Text From the Page Flow">
+    <br />
+    <a href="/coreWeb/tags/tagSizeBinding/begin.do"><img src="/coreWeb/images/godzilla.gif" width="80" height="100" hspace="5" vspace="10" border="5" alt="Alt Text From the Page Flow"></a>
+    <input type="image" src="/coreWeb/images/godzilla.gif" value="This is the value" width="80" height="100" hspace="5" vspace="10" alt="Alt Text From the Page Flow">
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Jun 2004, 06:46:06.285 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>5</ses:testCount>
+   <ses:passedCount>3</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempException.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempException.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TempException</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 06:54:04.071 PM MST</startDate>
+  <description>Test of throwing an exception in a template</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempException/Test.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b5b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Simple Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempException/Test.jsp">
+</head>
+<body>
+<h1>Simple Test</h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  
+<hr />
+</td>
+</tr>
+</table>
+</body>
+</html>
+    <span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Template</td>
+ <th>Errors</th><td colspan="2">2</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Servlet Exception occured including template: foo</td></tr>
+<tr><th>Tag Error</th><th>Message</th><td colspan="3">Servlet Exception occured include template: Template.jsp, message: foo</td></tr>
+</table></span>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 06:54:07.896 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempNegate.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempNegate.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TempNegate</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:32:06.361 PM MST</startDate>
+  <description>Test of the negate attribute on the visible tag</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempNegate/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7b5b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+<h4><span>Template Visibility and Databinding</span></h4>
+
+        <p>Text from the Visible Tag - Should See</p>
+
+
+
+
+        <p>Negate Not Visible Tag - Should See</p>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:32:08.354 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempNest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempNest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TempNest</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 06:54:14.055 PM MST</startDate>
+  <description>Test of nested templates</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempNest/Test.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b50</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Simple Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempNest/Test.jsp">
+</head>
+<body>
+<table cellspacing='0' border='1'>
+<tr><th>Left</th><th>Content</th><th>Right</th></tr>
+<tr>
+<td>
+
+
+
+
+
+
+
+<table>
+<tr><th>
+Left Content
+</th></tr>
+<tr><td><span style='color:blue'>
+
+Default Left Content
+
+</span>
+</td></tr>
+</table>
+</td>
+<td>
+     Page Content</br>
+     Content</br>
+     Page Content</br>
+     Content</br>
+     Page Content
+  </td>
+<td>
+
+
+
+
+
+
+
+<table>
+<tr><th>
+Right Content
+</th></tr>
+<tr><td><span style='color:red'>
+
+Default Right Content
+
+</span>
+</td></tr>
+</table>
+</td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 06:54:20.024 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempRelative.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempRelative.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TempRelative</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 06:54:20.865 PM MST</startDate>
+  <description>Test of using the same template in nested page flows.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Template Test</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/Begin.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Template Test</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/home.do">Home</a><br />
+    <hr />
+    
+  <a href="/coreWeb/template/tempRelative/main.do">Main</a><br />
+  <a href="/coreWeb/template/tempRelative/sub.do">Nested Page Flow</a>
+  
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <h4>Template Test</h4>
+    Test of the templates includes a side bar with actions from the Page Flow.
+    In addition, all Page Flows contain a "home" action that is called from
+    the template itself.
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/main.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Main Page Flow</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/Test.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Main Page Flow</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/home.do">Home</a><br />
+    <hr />
+    
+  <a href="/coreWeb/template/tempRelative/sub.do">Nest Sub Flow</a>
+  
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <span style="color:red;">
+    <h4>Main Page Flow</h4>
+    <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66"><br />
+    This is text in the main page flow.
+    </span>
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/sub.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested Page Flow</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/sub/Test.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Nested Page Flow</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/sub/home.do">Home</a><br />
+    <hr />
+    
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <span style="color:blue;">
+    <h4>Nested Page Flow</h4>
+    <img src="/coreWeb/template/tempRelative/sub/../image/godzilla.gif" width="48" height="66"><br />
+    This is text in the nested page flow.<br/>
+    <a href="/coreWeb/template/tempRelative/sub/returnNow.do">Return</a>
+    </span>
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/sub/returnNow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Template Test</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/Begin.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Template Test</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/home.do">Home</a><br />
+    <hr />
+    
+  <a href="/coreWeb/template/tempRelative/main.do">Main</a><br />
+  <a href="/coreWeb/template/tempRelative/sub.do">Nested Page Flow</a>
+  
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <h4>Template Test</h4>
+    Test of the templates includes a side bar with actions from the Page Flow.
+    In addition, all Page Flows contain a "home" action that is called from
+    the template itself.
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/sub.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested Page Flow</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/sub/Test.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Nested Page Flow</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/sub/home.do">Home</a><br />
+    <hr />
+    
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <span style="color:blue;">
+    <h4>Nested Page Flow</h4>
+    <img src="/coreWeb/template/tempRelative/sub/../image/godzilla.gif" width="48" height="66"><br />
+    This is text in the nested page flow.<br/>
+    <a href="/coreWeb/template/tempRelative/sub/returnNow.do">Return</a>
+    </span>
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/sub/returnNow.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Template Test</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/Begin.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Template Test</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/home.do">Home</a><br />
+    <hr />
+    
+  <a href="/coreWeb/template/tempRelative/main.do">Main</a><br />
+  <a href="/coreWeb/template/tempRelative/sub.do">Nested Page Flow</a>
+  
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <h4>Template Test</h4>
+    Test of the templates includes a side bar with actions from the Page Flow.
+    In addition, all Page Flows contain a "home" action that is called from
+    the template itself.
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/main.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Main Page Flow</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/Test.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Main Page Flow</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/home.do">Home</a><br />
+    <hr />
+    
+  <a href="/coreWeb/template/tempRelative/sub.do">Nest Sub Flow</a>
+  
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <span style="color:red;">
+    <h4>Main Page Flow</h4>
+    <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66"><br />
+    This is text in the main page flow.
+    </span>
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Template Test</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/Begin.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Template Test</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/home.do">Home</a><br />
+    <hr />
+    
+  <a href="/coreWeb/template/tempRelative/main.do">Main</a><br />
+  <a href="/coreWeb/template/tempRelative/sub.do">Nested Page Flow</a>
+  
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <h4>Template Test</h4>
+    Test of the templates includes a side bar with actions from the Page Flow.
+    In addition, all Page Flows contain a "home" action that is called from
+    the template itself.
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/sub.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Nested Page Flow</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/sub/Test.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Nested Page Flow</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/sub/home.do">Home</a><br />
+    <hr />
+    
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <span style="color:blue;">
+    <h4>Nested Page Flow</h4>
+    <img src="/coreWeb/template/tempRelative/sub/../image/godzilla.gif" width="48" height="66"><br />
+    This is text in the nested page flow.<br/>
+    <a href="/coreWeb/template/tempRelative/sub/returnNow.do">Return</a>
+    </span>
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempRelative/sub/home.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b4b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Template Test</title>
+<link rel="stylesheet" href="/coreWeb/site/style.css"/>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempRelative/Begin.jsp">
+</head>
+<body>
+<table class="header" width="100%">
+<tr>
+  <td width="150" style="padding:4,0,0,4">
+      <img src="/coreWeb/template/tempRelative/image/godzilla.gif" width="48" height="66">
+  </td><td valign="top">
+      <h1 class="title">Template Test</h1>
+  </td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<tr>
+  <td valign="top" width="100px">
+    <a href="/coreWeb/template/tempRelative/home.do">Home</a><br />
+    <hr />
+    
+  <a href="/coreWeb/template/tempRelative/main.do">Main</a><br />
+  <a href="/coreWeb/template/tempRelative/sub.do">Nested Page Flow</a>
+  
+  </td><td valign="top">
+    <span style="background-color:white">
+    <table width="100%">
+    <tr><td>
+    
+    <h4>Template Test</h4>
+    Test of the templates includes a side bar with actions from the Page Flow.
+    In addition, all Page Flows contain a "home" action that is called from
+    the template itself.
+  
+    </td></tr>
+    </table>
+    </span>
+  </td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 06:54:33.383 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>10</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>10</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TempTest1</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 06:54:34.304 PM MST</startDate>
+  <description>Template with two sections</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempTest1/Test.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b3c</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Simple Test</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempTest1/Test.jsp">
+</head>
+<body>
+<h1>Simple Test</h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  
+<hr />
+</td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 06:54:37.118 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TempTest2</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 06:54:37.970 PM MST</startDate>
+  <description>Error where all sections are not found.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempTest2/Test.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b37</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title></title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempTest2/Test.jsp">
+</head>
+<body>
+<h1></h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>IncludeSection</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">No Sections defined, '<b>left</b>' not included in template.</td></tr>
+</table></span>
+
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>IncludeSection</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">No Sections defined, '<b>right</b>' not included in template.</td></tr>
+</table></span>
+
+<hr />
+</td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 06:54:40.774 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest3.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempTest3.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TempTest3</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 Mar 2004, 06:54:41.605 PM MST</startDate>
+  <description>Only a single section is missing</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempTest3/Test.jsp</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Ai39B4NXRz98QKbUDYSaHpD6CR02r1m1d06gm3W2bdHRgo0t7UtM!1879045226</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>506182fe:fb7fa87b44:-7b32</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title></title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempTest3/Test.jsp">
+</head>
+<body>
+<h1></h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>IncludeSection</td>
+ <th>Errors</th><td colspan="2">1</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">No Sections defined, '<b>right</b>' not included in template.</td></tr>
+</table></span>
+
+<hr />
+</td>
+</tr>
+</table>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 Mar 2004, 06:54:44.519 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempVisibility.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TempVisibility.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,571 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TempVisibility</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 02:32:34.471 PM MST</startDate>
+  <description>Check the visibility of sections</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempVisibility/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7b3a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Template Visibility and Databinding</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempVisibility/Begin.jsp">
+</head>
+<body>
+<h1>Template Visibility and Databinding</h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<form id="Netui_Form_0" action="/coreWeb/template/tempVisibility/postback.do" method="post">
+Left Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.leftVisible}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.leftVisible}"><br />
+Right Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.rightVisible}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.rightVisible}" checked><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempVisibility/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.leftVisible}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.leftVisible}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.rightVisible}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>169</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7b3a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Template Visibility and Databinding</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempVisibility/Begin.jsp">
+</head>
+<body>
+<h1>Template Visibility and Databinding</h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<form id="Netui_Form_0" action="/coreWeb/template/tempVisibility/postback.do" method="post">
+Left Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.leftVisible}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.leftVisible}" checked><br />
+Right Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.rightVisible}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.rightVisible}"><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempVisibility/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.leftVisible}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.leftVisible}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.rightVisible}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.rightVisible}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>219</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7b3a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Template Visibility and Databinding</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempVisibility/Begin.jsp">
+</head>
+<body>
+<h1>Template Visibility and Databinding</h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<form id="Netui_Form_0" action="/coreWeb/template/tempVisibility/postback.do" method="post">
+Left Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.leftVisible}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.leftVisible}" checked><br />
+Right Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.rightVisible}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.rightVisible}" checked><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/tempVisibility/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.leftVisible}OldValue</name>
+          <value>false</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.rightVisible}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>120</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7b3a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Template Visibility and Databinding</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/tempVisibility/Begin.jsp">
+</head>
+<body>
+<h1>Template Visibility and Databinding</h1>
+<table width="100%"><tr><td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+
+<hr />
+</td>
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<form id="Netui_Form_0" action="/coreWeb/template/tempVisibility/postback.do" method="post">
+Left Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.leftVisible}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.leftVisible}"><br />
+Right Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.rightVisible}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.rightVisible}"><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:32:39.628 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeAttribute1</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:55.731 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute1.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f0b</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute1.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute1.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute1.jsp [goAttribute1.do/tree1] </h4>
+        <p>
+        This test will apply a couple of attributes to individual nodes.  These are only applied to the nodes themselves
+        and not to the descedents.  All nodes are marked. To verify this test you simply run the JSP and then look at
+        the attributes applied to the Label Anchor. There should be an 'a', 'b', or 'c' attribute next to each of the
+        node that indicate they should have the attribute set <b>x.x.x [attributes]</b>.
+        To verify this test you must look at the source and see that the attributes match the
+        expected attributes defined in the label.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [A,B]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [C]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [C]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:57:59.777 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeAttribute2</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:57:59.867 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute2.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f07</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute1.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute2.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute2.jsp [goAttribute1.do/tree2] </h4>
+        <p>
+        This is a basic test of applying an attribute that affects the descendents.  The attributes
+        are applied to the Label anchor and are indicated in the label.  To verify that the attributes
+        are correct you must view the source.  The attributes defined on the Label Anchor should
+        match the label name.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [A,C]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [A,C]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [A,C]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [A,C]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [A,B]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:03.893 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute3.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute3.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeAttribute3</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:03.953 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute3.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f03</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute3.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute3.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute1.jsp [goAttribute3.do/tree3] </h4>
+        <p>
+        This test verifies that an attribute applied to a descendent can be overridden 
+        by another attribute applied to one of it's descendents.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute3.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7f03</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute3.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute3.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute1.jsp [goAttribute3.do/tree3] </h4>
+        <p>
+        This test verifies that an attribute applied to a descendent can be overridden 
+        by another attribute applied to one of it's descendents.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:08.159 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute4.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute4.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeAttribute4</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:08.219 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute4.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7efe</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute4.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute4.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute4.jsp [goAttribute4.do/tree4] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has an attribute that applied to the tree and overridden by an element only
+        attribute on a single tag.  The attributes are applied to the Label Anchor and match the
+        value on the label.  You must look at the source to verify.
+        </p>
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:13.226 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute5.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute5.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeAttribute5</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:13.286 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute5.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7efa</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute5.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute5.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute5.jsp [goAttribute5.do/tree5] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has an attribute that cascades down the whole tree.  Then it is overridden at two
+        different levels within the same descendent change.  The attribute is applied to the Label
+        Anchor and should match the label.  You must view source to verify this results.
+        </p>
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [A]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:17.312 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute6.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute6.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeAttribute6</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:17.362 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute6.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7ef6</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute6.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute6.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute6.jsp [goAttribute6.do/tree6] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has multiple attributes that are applied to there descendents and are overridden
+        below their definitions.  In this case A is on the root, -A- is on the next level down and
+        *A* is the next level down.  The attribute is applied to the Label Anchor and should match
+        the label value.  You must view source to confirm the attributes.
+        </p>
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [*A*]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [*A*]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [*A*]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [*A*]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [A]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:21.368 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute7.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute7.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeAttribute7</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:21.428 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute7.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7ef2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute7.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute7.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute7.jsp [goAttribute7.do/tree7] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has multiple cascades within the same hiearchy and also element scoped attributes.  The
+        attributes are applied to the Label Anchor and should reflect the label value.  You must view source to 
+        verify the attributes and labels are the same.
+        </p>
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [*A*]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [*A*]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [+A+]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [*A*]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [+A+]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [A]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:25.404 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute8.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttribute8.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeAttribute8</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:25.454 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute8.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7eee</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute8.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute8.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute8.jsp [goAttribute8.do/tree8] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has a single attribute descending from the root and then multiple element scoped
+        attributes in a row, followed by elements that are descendents.  The attributes are applied
+        to the Label Anchor and should match the label value.  You need to view source to 
+        compare the attributes and the label.
+        </p>
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [+A+]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [.A.]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [A]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeAttribute/goAttribute8.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7eee</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute8.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeAttribute/attribute8.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeAttribute/begin.do" class="homeAnchor">Home</a>attribute8.jsp [goAttribute8.do/tree8] </h4>
+        <hr style="clear:left">
+        <p>
+        This test has a single attribute descending from the root and then multiple element scoped
+        attributes in a row, followed by elements that are descendents.  The attributes are applied
+        to the Label Anchor and should match the label value.  You need to view source to 
+        compare the attributes and the label.
+        </p>
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0 [+A+]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [.A.]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0 [A]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeAttribute/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1 [A]&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:29.630 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttributeBits.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeAttributeBits.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,528 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>TreeAttributeBits</sessionName>
+  <tester>Daryl</tester>
+  <startDate>16 Jun 2004, 02:55:09.271 PM MDT</startDate>
+  <description>Verification test of the boolean properties of the TreeHtmlAttributeInfo class</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tree/treeAttributeBits/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/tree/treeAttributeBits/index.jsp">
+    </head>
+    <body>
+    <h4>TreeHtmlAttributeInfo 1 - All True</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 1:</td>
+                <td>
+                <span>true</span><br>
+                <span>true</span><br>
+                <span>true</span><br>
+                </td>
+            </tr>
+        </table>
+    <h4>TreeHtmlAttributeInfo 2 - All False</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 2:</td>
+                <td>
+                <span>false</span><br>
+                <span>false</span><br>
+                <span>false</span><br>
+                </td>
+            </tr>
+        </table>
+    <hr>
+        This is a basic test of the TreeHtmlAttributeInfo.  The test will flip the state of 
+        the boolean values and then report the state in the page.  The two anchors below
+        flip the state in different ways.
+        <br>
+        Flip the current state of each to the opposite: <a href="/coreWeb/tree/treeAttributeBits/flip.do">Flip Bits</a><br>
+        Flip every other bit to the opposite (1,3,5): <a href="/coreWeb/tree/treeAttributeBits/alternate.do">Alternate</a>    
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tree/treeAttributeBits/flip.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/tree/treeAttributeBits/Controller.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/tree/treeAttributeBits/index.jsp">
+    </head>
+    <body>
+    <h4>TreeHtmlAttributeInfo 1 - All True</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 1:</td>
+                <td>
+                <span>false</span><br>
+                <span>false</span><br>
+                <span>false</span><br>
+                </td>
+            </tr>
+        </table>
+    <h4>TreeHtmlAttributeInfo 2 - All False</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 2:</td>
+                <td>
+                <span>true</span><br>
+                <span>true</span><br>
+                <span>true</span><br>
+                </td>
+            </tr>
+        </table>
+    <hr>
+        This is a basic test of the TreeHtmlAttributeInfo.  The test will flip the state of 
+        the boolean values and then report the state in the page.  The two anchors below
+        flip the state in different ways.
+        <br>
+        Flip the current state of each to the opposite: <a href="/coreWeb/tree/treeAttributeBits/flip.do">Flip Bits</a><br>
+        Flip every other bit to the opposite (1,3,5): <a href="/coreWeb/tree/treeAttributeBits/alternate.do">Alternate</a>    
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tree/treeAttributeBits/alternate.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/tree/treeAttributeBits/flip.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/tree/treeAttributeBits/index.jsp">
+    </head>
+    <body>
+    <h4>TreeHtmlAttributeInfo 1 - All True</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 1:</td>
+                <td>
+                <span>true</span><br>
+                <span>false</span><br>
+                <span>true</span><br>
+                </td>
+            </tr>
+        </table>
+    <h4>TreeHtmlAttributeInfo 2 - All False</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 2:</td>
+                <td>
+                <span>true</span><br>
+                <span>false</span><br>
+                <span>true</span><br>
+                </td>
+            </tr>
+        </table>
+    <hr>
+        This is a basic test of the TreeHtmlAttributeInfo.  The test will flip the state of 
+        the boolean values and then report the state in the page.  The two anchors below
+        flip the state in different ways.
+        <br>
+        Flip the current state of each to the opposite: <a href="/coreWeb/tree/treeAttributeBits/flip.do">Flip Bits</a><br>
+        Flip every other bit to the opposite (1,3,5): <a href="/coreWeb/tree/treeAttributeBits/alternate.do">Alternate</a>    
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tree/treeAttributeBits/flip.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/tree/treeAttributeBits/alternate.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/tree/treeAttributeBits/index.jsp">
+    </head>
+    <body>
+    <h4>TreeHtmlAttributeInfo 1 - All True</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 1:</td>
+                <td>
+                <span>false</span><br>
+                <span>true</span><br>
+                <span>false</span><br>
+                </td>
+            </tr>
+        </table>
+    <h4>TreeHtmlAttributeInfo 2 - All False</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 2:</td>
+                <td>
+                <span>false</span><br>
+                <span>true</span><br>
+                <span>false</span><br>
+                </td>
+            </tr>
+        </table>
+    <hr>
+        This is a basic test of the TreeHtmlAttributeInfo.  The test will flip the state of 
+        the boolean values and then report the state in the page.  The two anchors below
+        flip the state in different ways.
+        <br>
+        Flip the current state of each to the opposite: <a href="/coreWeb/tree/treeAttributeBits/flip.do">Flip Bits</a><br>
+        Flip every other bit to the opposite (1,3,5): <a href="/coreWeb/tree/treeAttributeBits/alternate.do">Alternate</a>    
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/tree/treeAttributeBits/alternate.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AQzI93gHE7jBj7EUwzwbIWcOvJEgjAkGzbZ9QwLA62skO3BwwnLl!-1340477877</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/tree/treeAttributeBits/flip.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/tree/treeAttributeBits/index.jsp">
+    </head>
+    <body>
+    <h4>TreeHtmlAttributeInfo 1 - All True</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 1:</td>
+                <td>
+                <span>true</span><br>
+                <span>true</span><br>
+                <span>true</span><br>
+                </td>
+            </tr>
+        </table>
+    <h4>TreeHtmlAttributeInfo 2 - All False</h4>
+        <table>
+            <tr valign="top">
+                <td>TreeHtmlAttributeInfo 2:</td>
+                <td>
+                <span>false</span><br>
+                <span>false</span><br>
+                <span>false</span><br>
+                </td>
+            </tr>
+        </table>
+    <hr>
+        This is a basic test of the TreeHtmlAttributeInfo.  The test will flip the state of 
+        the boolean values and then report the state in the page.  The two anchors below
+        flip the state in different ways.
+        <br>
+        Flip the current state of each to the opposite: <a href="/coreWeb/tree/treeAttributeBits/flip.do">Flip Bits</a><br>
+        Flip every other bit to the opposite (1,3,5): <a href="/coreWeb/tree/treeAttributeBits/alternate.do">Alternate</a>    
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>16 Jun 2004, 02:55:32.394 PM MDT</endDate>
+  <testCount>5</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr1.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr1.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeMultiAttr1</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:33.315 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeMultiAttr/goAttribute1.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7ee1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute1.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeMultiAttr/attribute1.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeMultiAttr/begin.do" class="homeAnchor">Home</a>attribute1.jsp [goAttribute1.do/tree1] </h4>
+        <p>
+        This test verifies that a treeHmtlAttribute tag can apply attributes to the four parts of a treeItem.  The four places are
+        the &lt;div> that incloses the item, the &lt;a> that incloses the Icon, the &lt;img> that is the icon and the &lt;a>
+        that incloses the label.  You need to verify that the source matches the label.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:37.251 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeMultiAttr2</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:37.301 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeMultiAttr/goAttribute2.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7edd</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute2.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeMultiAttr/attribute2.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeMultiAttr/begin.do" class="homeAnchor">Home</a>attribute2.jsp [goAttribute2.do/tree2] </h4>
+        <p>
+        This test verifies that an treeHtmlAttribute setting an attribute on a single attribute  and applied to descendents can be overriden by a
+        treeHtmlAttribute with multiple attributes.  You must verify the label names against the generated HTML.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [-A-]&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.0 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.1 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.0.2 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [-A-]&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:41.457 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr3.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr3.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeMultiAttr3</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:41.557 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeMultiAttr/goAttribute3.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7ed9</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute3.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeMultiAttr/attribute3.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeMultiAttr/begin.do" class="homeAnchor">Home</a>attribute3.jsp [goAttribute3.do/tree3] </h4>
+        <p>
+        This test verifies that a multiple attributes can be applied to descendents. You must view source and verify that the label
+        names and attributes match.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.0 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.0.0 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.0.1 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.0.2 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:45.743 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr4.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr4.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeMultiAttr4</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:45.793 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeMultiAttr/goAttribute4.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7ed5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute1.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeMultiAttr/attribute4.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeMultiAttr/begin.do" class="homeAnchor">Home</a>attribute4.jsp [goAttribute4.do/tree4] </h4>
+        <p>
+        This test verifies that an treeHtmlAttribute applied to descendents can be overridden by another
+        treeHtmlAttribute also applied to descendents.  The second treeHtmlAttribute is a descendent of the 
+        first treeHtmlAttribute.  You must verify that the label and the source match.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="-A-">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0&netui_treeid=tree" a="-A-">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="-A-" border="0" alt="Tree Node">&nbsp;0.0.0 [d='-A-', i='-A-', il='-A-', ll='-A-']&nbsp;</a>
+   </div>
+   <div a="-A-">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree" a="-A-">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="-A-" border="0" alt="Tree Node">&nbsp;0.0.0.0 [d='-A-', i='-A-', il='-A-', ll='-A-']&nbsp;</a>
+   </div>
+   <div a="-A-">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree" a="-A-">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="-A-" border="0" alt="Tree Node">&nbsp;0.0.0.1 [d='-A-', i='-A-', il='-A-', ll='-A-']&nbsp;</a>
+   </div>
+   <div a="-A-">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree" a="-A-">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="-A-" border="0" alt="Tree Node">&nbsp;0.0.0.2 [d='-A-', i='-A-', il='-A-', ll='-A-']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.1 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.1.0 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.1.1 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree" a="A">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="A" border="0" alt="Tree Node">&nbsp;0.0.1.2 [d='a', i='a', il='a', ll='a']&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:49.759 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr5.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/TreeMultiAttr5.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>TreeMultiAttr5</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>26 Jun 2004, 08:58:49.809 AM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/tree/treeMultiAttr/goAttribute5.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AdO21zV8OoGDXQcMjK8Nfm2qBDlJ1YmNvVxg6r8FUOLbJdEj2M5o!-1495683163</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>TE</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testID</ses:name>
+                  <ses:value>-5f1b4b71:fd617361cc:-7ed1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testRecorder.playback.testNumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>attribute5.jsp</title>
+        <link href="style.css" rel="stylesheet" type="text/css">
+        <base href="http://localhost:7001/coreWeb/tree/treeMultiAttr/attribute5.jsp">
+    </head>
+    <body>
+        <h4 class="title"><a href="/coreWeb/tree/treeMultiAttr/begin.do" class="homeAnchor">Home</a>attribute5.jsp [goAttribute5.do/tree5] </h4>
+        <p>
+        This test verifies multiple treeHtmlAttributes with some overlapping attributes and applied to descendents interact 
+        correctly.  You must verify the label names with the attributes set in the generated HTML Source.
+        </p>
+        <hr style="clear:left">
+        <div class="content">
+        <div>
+   <div>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0 [d='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="-A-">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.0&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownmiddle.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="-A-" border="0" alt="Tree Node">&nbsp;0.0.0  [d='-a-',  i='-a-', ll='a']&nbsp;</a>
+   </div>
+   <div a="-A-">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="-A-" border="0" alt="Tree Node">&nbsp;0.0.0.0  [d='-a-',  i='-a-', ll='a']&nbsp;</a>
+   </div>
+   <div a="-A-">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="-A-" border="0" alt="Tree Node">&nbsp;0.0.0.1  [d='-a-',  i='-a-', ll='a']&nbsp;</a>
+   </div>
+   <div a="-A-">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.0.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" a="-A-" border="0" alt="Tree Node">&nbsp;0.0.0.2  [d='-a-',  i='-a-', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1 [d='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.0 [d='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.1 [d='a', ll='a']&nbsp;</a>
+   </div>
+   <div a="A">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linevertical.gif" style="vertical-align:middle;" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.0.1.2&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.0.1.2 [d='a', ll='a']&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treenode=0.1&netui_treeid=tree"><img src="/coreWeb/resources/images/handledownlast.gif" style="vertical-align:middle;" border="0" alt=""></a>
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linemiddlenode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.0&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.0&nbsp;</a>
+   </div>
+   <div>
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/spacer.gif" width="16px" border="0" alt="">
+      <img src="/coreWeb/resources/images/linelastnode.gif" style="vertical-align:middle;" border="0" alt="">
+      <a href="/coreWeb/tree/treeMultiAttr/postback.do?netui_treeselected=0.1.1&netui_treeid=tree">&nbsp;<img src="/coreWeb/resources/images/folder_16_pad.gif" style="vertical-align:middle" border="0" alt="Tree Node">&nbsp;0.1.1&nbsp;</a>
+   </div>
+</div>
+
+        </div>
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>26 Jun 2004, 08:58:53.805 AM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UnhandledException.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UnhandledException.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>UnhandledException</sessionName>
+  <tester>Daryl</tester>
+  <startDate>15 Nov 2002, 08:11:57.017 AM MST</startDate>
+  <description>Unhandled exception within a page flow.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/errors/unhandledException/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>9VOqmBIteOZXN2vYK7R3Klq2N8qyFDUS0ODaUa7RvomcoWCndDdS!1381072051</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=9VOqmBIteOZXN2vYK7R3Klq2N8qyFDUS0ODaUa7RvomcoWCndDdS!1381072051</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testNumber</name>
+          <value>1</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>11b92ef:f1883f1ef9:-7f77</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Unhandled Exception</title></head>
+ <body>
+ <h1>Page Flow Unhandled Exception</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Exception:</b></td><td>java.lang.RuntimeException</td></tr>
+ <tr><td><b>Message:</b></td><td>Runtime Error Occurred</td></tr>
+ </table><br />
+ <span style="color:red">A <b>java.lang.RuntimeException</b> exception was thrown and not handled by any page flow. See the log for the exception stack trace.</span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>15 Nov 2002, 08:12:01.923 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UrlBinding.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UrlBinding.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>UrlBinding</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>06 Jul 2004, 04:15:45.772 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/urlBinding/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>bar</ses:name>
+                  <ses:value>bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>baz</ses:name>
+                  <ses:value>baz</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>foo</ses:name>
+                  <ses:value>foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>974C06A2DB9A00BF6D5D75397C9FAEB8</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=974C06A2DB9A00BF6D5D75397C9FAEB8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-63135ed:fd967e87cd:-7704</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Binding to URL (Request)</title>
+</head>
+<body>
+<h4>Binding to {param}</h4>
+<a href="/coreWeb/miniTests/urlBinding/postback.do?foo=param-foo&baz=param-baz&bar=param-bar">Postback</a>
+<hr />
+Foo <span>foo</span><br />
+Bar <span>bar</span><br />
+Baz <span>baz</span><br />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/miniTests/urlBinding/postback.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>bar</ses:name>
+                  <ses:value>param-bar</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>baz</ses:name>
+                  <ses:value>param-baz</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>foo</ses:name>
+                  <ses:value>param-foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>974C06A2DB9A00BF6D5D75397C9FAEB8</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=974C06A2DB9A00BF6D5D75397C9FAEB8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-63135ed:fd967e87cd:-7704</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Binding to URL (Request)</title>
+</head>
+<body>
+<h4>Binding to {param}</h4>
+<a href="/coreWeb/miniTests/urlBinding/postback.do?foo=param-foo&baz=param-baz&bar=param-bar">Postback</a>
+<hr />
+Foo <span>param-foo</span><br />
+Bar <span>param-bar</span><br />
+Baz <span>param-baz</span><br />
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>06 Jul 2004, 04:15:46.453 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>2</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UrlTemplates.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/UrlTemplates.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>UrlTemplates</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:42:23.520 PM MST</startDate>
+  <description>Test URL templates using /WEB-INF/url-template-config.xml.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/testUrlTemplates/testUrlTemplatesController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-783a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>URL Templates Test</title>
+  </head>
+  <body>
+    <a href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/testUrlTemplates/begin.do?URLTEMPLATE=action%26"><i>begin action</i></a><br>
+    <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/testUrlTemplates/secure.do?URLTEMPLATE=secure-action%26"><i>secure action</i></a><br>
+    <a href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/testUrlTemplates/unsecure.do?URLTEMPLATE=action%26"><i>unsecure action</i></a><br>
+    <a href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/testUrlTemplates/index.jsp?URLTEMPLATE=action%26">index.jsp</a><br>
+    <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/testUrlTemplates/secure.jsp?URLTEMPLATE=secure-action%26">secure.jsp</a><br>
+    <a href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/testUrlTemplates/index.jsp?URLTEMPLATE=action%26foo=bar">/coreWeb/testUrlTemplates/index.jsp?foo=bar</a><br>
+    <a href="https://@NON_UNIQUE_HOST@:7002/coreWeb/testUrlTemplates/secure.jsp?URLTEMPLATE=secure-action%26">/coreWeb/testUrlTemplates/secure.jsp?foo=bar</a><br>
+    <a href="http://www.bea.com?foo=bar">http://www.bea.com?foo=bar</a><br>
+    image.gif: <img src="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/testUrlTemplates/image.gif?URLTEMPLATE=resource%26"><br>
+    /coreWeb/testUrlTemplates/image.gif: <img src="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/testUrlTemplates/image.gif?URLTEMPLATE=resource%26"><br>
+    secureImage.gif: <img src="https://@NON_UNIQUE_HOST@:7002/coreWeb/testUrlTemplates/secureImage.gif?URLTEMPLATE=secure-resource%26"><br>
+    /coreWeb/testUrlTemplates/secureImage.gif: <img src="https://@NON_UNIQUE_HOST@:7002/coreWeb/testUrlTemplates/secureImage.gif?URLTEMPLATE=secure-resource%26"><br>
+    http://www.bea.com/content/images/bea_logo.gif?foo=bar: <img src="http://www.bea.com/content/images/bea_logo.gif?foo=bar"><br>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:42:32.203 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest54.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest54.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,834 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>ValFwdErrTest54</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>25 Mar 2004, 12:21:11.123 AM MST</startDate>
+  <description>Tests the validation-error-forward with a return-to="{currentPage and previousPage}".</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/valFwdErr/test54/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-768b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <form name="formB" action="/coreWeb/valFwdErr/test54/action1.do" method="post">
+            String 1:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <font color="green">
+               1) Please don't change any values and press Continue.
+                 <br/>
+                 You will get an error message that says you must change the
+                 values.
+               <br/><br/>
+               2) Change both values and press Continue.
+                <br/>
+                You will be taken to page Jsp2.jsp.
+               <br/><br/>
+               3) After page Jsp2.jsp you will come back to this page for a
+               third time.  When you do, enter "exit" in String 1 and just change
+               the value in String 2 ot any value then press Continue.
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+
+         
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/valFwdErr/test54/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-768b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <form name="formB" action="/coreWeb/valFwdErr/test54/action1.do" method="post">
+            String 1:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <font color="green">
+               1) Please don't change any values and press Continue.
+                 <br/>
+                 You will get an error message that says you must change the
+                 values.
+               <br/><br/>
+               2) Change both values and press Continue.
+                <br/>
+                You will be taken to page Jsp2.jsp.
+               <br/><br/>
+               3) After page Jsp2.jsp you will come back to this page for a
+               third time.  When you do, enter "exit" in String 1 and just change
+               the value in String 2 ot any value then press Continue.
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+
+         <br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+<li class="error">You must change the values of String 1 & String 2.</li>
+</ul></td></tr></table>
+
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/valFwdErr/test54/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>New 1</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>New 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>61</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-768b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - Jsp2.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <form name="formB" action="/coreWeb/valFwdErr/test54/action2.do" method="post">
+            String 1:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <font color="green">
+               Please don't change any values and press Continue.  You will be
+               taken back to page Jsp1.jsp.
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+
+         
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/valFwdErr/test54/action2.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>String 1 value</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>String 2 value</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>79</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-768b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      <center>
+         <h3><font color="blue">
+            Testing Validation Error Forward
+         </font></h3>
+         <br/>
+         <form name="formB" action="/coreWeb/valFwdErr/test54/action1.do" method="post">
+            String 1:
+            <font color="blue">
+               <input type="text" name="{actionForm.string1}" value="String 1 value">
+            </font>
+            <br/>
+
+            String 2:
+            <font color="blue">
+               <input type="text" name="{actionForm.string2}" value="String 2 value">
+            </font>
+            <br/><br/>
+            <font color="green">
+               1) Please don't change any values and press Continue.
+                 <br/>
+                 You will get an error message that says you must change the
+                 values.
+               <br/><br/>
+               2) Change both values and press Continue.
+                <br/>
+                You will be taken to page Jsp2.jsp.
+               <br/><br/>
+               3) After page Jsp2.jsp you will come back to this page for a
+               third time.  When you do, enter "exit" in String 1 and just change
+               the value in String 2 ot any value then press Continue.
+            </font>
+            <br/><br/>
+            <input type="submit" value="Continue...">
+         </form>
+
+         <br/><table align="center" border="2" cellspacing="5" cellpadding="5" bordercolor="crimson"><tr><td><span align="center" class=errorheader>Validation Error(s):</span><ul>
+<li class="error">You must change the values of String 1 & String 2.</li>
+</ul></td></tr></table>
+
+         <hr width="95%"/>
+      </center>
+   </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/valFwdErr/test54/action1.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.string1}</name>
+          <value>exit</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.string2}</name>
+          <value>New 3</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>60</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-768b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+   <head>
+      <title>ValFwdErr Test54</title>
+   </head>
+   <body>
+      <h3 align="center">ValFwdErr Test54 - Jsp3.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+        <center>
+            <br/>
+            <a href="/coreWeb/valFwdErr/test54/finish.do">Finish...</a>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/valFwdErr/test54/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiGJp5NQIhE4ZM9GuFlgYCiMaTpYnRKBiBlbgemi8VkO84D5Bsn7!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-768b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:21:14.778 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>6</testCount>
+  <passedCount>2</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest56.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest56.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest25</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>11 Sep 2003, 02:43:08.774 PM MDT</startDate>
+  <description>Test that a template can access pageInput data thru the tags.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test25/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test25/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+
+
+
+<html>
+   <head>
+      <title>PageInput Test25</title>
+   </head>
+      <body>
+      <h3 align="center">PageInput Test25 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      
+      <center>
+         PageInput context value in the template:
+         <font color="blue">
+            <span>String value</span>
+         </font>
+         <br/><br/>
+      </center>
+      
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         PageInput context value in the main page:
+         <font color="blue">
+            <span>String value</span>
+         </font>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test25/finish.do">Finish...</a>
+      </center>
+   
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test25/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test25/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>11 Sep 2003, 02:43:23.649 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest57.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest57.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest25</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>11 Sep 2003, 02:43:08.774 PM MDT</startDate>
+  <description>Test that a template can access pageInput data thru the tags.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test25/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test25/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+
+
+
+<html>
+   <head>
+      <title>PageInput Test25</title>
+   </head>
+      <body>
+      <h3 align="center">PageInput Test25 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      
+      <center>
+         PageInput context value in the template:
+         <font color="blue">
+            <span>String value</span>
+         </font>
+         <br/><br/>
+      </center>
+      
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         PageInput context value in the main page:
+         <font color="blue">
+            <span>String value</span>
+         </font>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test25/finish.do">Finish...</a>
+      </center>
+   
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test25/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test25/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>11 Sep 2003, 02:43:23.649 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest58.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/ValFwdErrTest58.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>PageInputTest25</sessionName>
+  <tester>Spencer Keller</tester>
+  <startDate>11 Sep 2003, 02:43:08.774 PM MDT</startDate>
+  <description>Test that a template can access pageInput data thru the tags.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test25/Jpf1.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test25/StartTest.jsp</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by Weblogic Workshop-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+
+
+
+<html>
+   <head>
+      <title>PageInput Test25</title>
+   </head>
+      <body>
+      <h3 align="center">PageInput Test25 - Jsp1.jsp</h3>
+      <hr width="95%"/>
+      <br/>
+      
+      <center>
+         PageInput context value in the template:
+         <font color="blue">
+            <span>String value</span>
+         </font>
+         <br/><br/>
+      </center>
+      
+      <center>
+         <br/>
+         <h2><font color="blue">Testing PageInput tags</font></h2>
+         <br/><br/>
+         PageInput context value in the main page:
+         <font color="blue">
+            <span>String value</span>
+         </font>
+         <br/><br/>
+         <a href="/coreWeb/pageInput/test25/finish.do">Finish...</a>
+      </center>
+   
+   </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageInput/test25/finish.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=1ge2eJM1uK3hQq1bDUG3WHb5GP1QdtF2qS6XelAIhGp5nR1TDqtQ!1519252187</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/pageInput/test25/Jpf1.jpf</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Merge Tests</title>
+    </head>
+    <body>
+        <h2 align="center">Merge Tests - done.jsp</h2>
+        <hr align="center" width="95%"/>
+        <br/>
+        <center>
+            <font color="green"><h2>Test completed successfully.</h2></font>
+            <br/>
+            <a href="/coreWeb/index.jsp">Return to main test menu.</a>
+            <br/><br/>
+            <hr align="center" width="95%"/>
+        </center>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>11 Sep 2003, 02:43:23.649 PM MDT</endDate>
+  <testCount>2</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Validate.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Validate.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Validate</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 Mar 2004, 12:03:07.946 AM MST</startDate>
+  <description>Simple test of the form validation</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/validation/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7acd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Validation Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/validation/postback.do" method="post">
+Text: <input type="text" name="{actionForm.text}" value="">
+<input type="submit" value="Submit">
+</form>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/validation/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>text</name>
+          <value>Error</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>10</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7acd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Validation Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/validation/postback.do" method="post">
+Text: <input type="text" name="{actionForm.text}" value="Error">
+<input type="submit" value="Submit">
+</form>
+Validation Error, type in "pass"
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/validation/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>text</name>
+          <value>pass</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>9</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AiA9EIYGxssMKVe2VvwMHckMZyZKUhQaGew1M8gEwC7vMPhZ4y6L!-976488671</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-340cac35:fb80c5cc1d:-7acd</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Validation Test</title>
+</head>
+<body>
+<form name="form" action="/coreWeb/miniTests/validation/postback.do" method="post">
+Text: <input type="text" name="{actionForm.text}" value="pass">
+<input type="submit" value="Submit">
+</form>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 Mar 2004, 12:03:11.350 AM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Validation2.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Validation2.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2038 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Validation2</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:33:55.376 PM MST</startDate>
+  <description>Tests of basic validation and validation using the Struts ValidatorPlugIn (as well as netui:error, netui:errors).</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/validationController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Tests</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Tests</h3>
+
+<a href="/coreWeb/validation/doBasic.do">basic form validation</a>
+<br>
+<a href="/coreWeb/validation/doValidator.do">form validation using Struts ValidatorPlugIn</a>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/doBasic.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="form" action="/coreWeb/validation/basicValidation/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+        <tr>
+            <td>
+                zipcode:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.zipCode}" value="">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/basicValidation/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.zipCode}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>49</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="form" action="/coreWeb/validation/basicValidation/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="">
+            </td>
+            <td>
+            <font color="Red">Bad email address.
+</font>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                zipcode:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.zipCode}" value="">
+            </td>
+            <td>
+            <font color="Red">The zip code has to be exactly 5 characters.
+</font>
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+<li>Bad email address.
+<li>The zip code has to be exactly 5 characters.
+</ul></font>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/basicValidation/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value>foo@bar.com</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.zipCode}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>62</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="form" action="/coreWeb/validation/basicValidation/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="foo@bar.com">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+        <tr>
+            <td>
+                zipcode:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.zipCode}" value="">
+            </td>
+            <td>
+            <font color="Red">The zip code has to be exactly 5 characters.
+</font>
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+<li>The zip code has to be exactly 5 characters.
+</ul></font>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/basicValidation/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.zipCode}</name>
+          <value>12345</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>54</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="form" action="/coreWeb/validation/basicValidation/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="">
+            </td>
+            <td>
+            <font color="Red">Bad email address.
+</font>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                zipcode:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.zipCode}" value="12345">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+<li>Bad email address.
+</ul></font>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/basicValidation/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value>foo@bar.com</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.zipCode}</name>
+          <value>12345</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>67</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Success
+        </title>
+    </head>
+    <body>
+        <p>
+            Success!  Validation passed.
+            <br>
+            <a href="/coreWeb/validation/basicValidation/begin.do">go back</a>
+        </p>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/basicValidation/begin.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="form" action="/coreWeb/validation/basicValidation/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+        <tr>
+            <td>
+                zipcode:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.zipCode}" value="">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/basicValidation/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>actionOverride:exit</name>
+          <value>exit</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.zipCode}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>76</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Tests</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Tests</h3>
+
+<a href="/coreWeb/validation/doBasic.do">basic form validation</a>
+<br>
+<a href="/coreWeb/validation/doValidator.do">form validation using Struts ValidatorPlugIn</a>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/doValidator.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="myForm" action="/coreWeb/validation/strutsValidator/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+        <tr>
+            <td>
+                age:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.age}" value="">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/strutsValidator/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.age}</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>45</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="myForm" action="/coreWeb/validation/strutsValidator/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="">
+            </td>
+            <td>
+            <font color="Red">The email address is required.
+</font>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                age:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.age}" value="">
+            </td>
+            <td>
+            <font color="Red">The age is required.
+</font>
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+<li>The email address is required.
+<li>The age is required.
+</ul></font>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>11</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/strutsValidator/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.age}</name>
+          <value></value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value>foo@bar.com</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>58</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>11</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="myForm" action="/coreWeb/validation/strutsValidator/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="foo@bar.com">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+        <tr>
+            <td>
+                age:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.age}" value="">
+            </td>
+            <td>
+            <font color="Red">The age is required.
+</font>
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+<li>The age is required.
+</ul></font>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>12</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/strutsValidator/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.age}</name>
+          <value>foo</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>48</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>12</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="myForm" action="/coreWeb/validation/strutsValidator/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="">
+            </td>
+            <td>
+            <font color="Red">The email address is required.
+</font>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                age:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.age}" value="foo">
+            </td>
+            <td>
+            <font color="Red">The age must be an integer.
+</font>
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+<li>The email address is required.
+<li>The age must be an integer.
+</ul></font>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>13</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/strutsValidator/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.age}</name>
+          <value>11</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value></value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>47</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>13</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>NetUI Validation Test</title>
+</head>
+<body bgcolor="white">
+
+<h3>NetUI Validation Test</h3>
+
+<br>
+
+<form name="myForm" action="/coreWeb/validation/strutsValidator/submitForm.do" method="post">
+    <table>
+        <tr>
+            <td>
+                email address:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.email}" value="">
+            </td>
+            <td>
+            <font color="Red">The email address is required.
+</font>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                age:
+            </td>
+            <td>
+            <input type="text" name="{actionForm.age}" value="11">
+            </td>
+            <td>
+            
+            </td>
+        </tr>
+    </table>
+
+    <input type="submit" value="submit">
+    <input type="submit" name="actionOverride:exit" value="exit">
+</form>
+
+<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
+<li>The email address is required.
+</ul></font>
+
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>14</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/validation/strutsValidator/submitForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.age}</name>
+          <value>11</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.email}</name>
+          <value>foo@bar.com</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>60</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7ac0</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>14</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+<head>
+<title>Success</title>
+</head>
+<body bgcolor="white">
+
+<h3>Success</h3>
+
+All fields passed form validation.
+<br>
+<br>
+
+<a href="/coreWeb/validation/strutsValidator/begin.do">back</a>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:34:08.725 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>14</testCount>
+  <passedCount>13</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Visible.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/Visible.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,413 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Visible</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 Mar 2004, 03:20:10.956 PM MST</startDate>
+  <description>Test of the Visible Tag</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/visible/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-709b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Template Visibility and Databinding</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/visible/Begin.jsp">
+</head>
+<body>
+<h1>Template Visibility and Databinding</h1>
+<table width="100%"><tr>
+
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<form id="Netui_Form_0" action="/coreWeb/template/visible/postback.do" method="post">
+Left Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.visible}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.visible}"><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/visible/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.visible}</name>
+          <value>on</value>
+        </parameter>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.visible}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>100</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-709b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Template Visibility and Databinding</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/visible/Begin.jsp">
+</head>
+<body>
+<h1>Template Visibility and Databinding</h1>
+<table width="100%"><tr>
+
+<td>
+<table width="100%"><tr><td width="100">'left' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:blue;">
+    Blue text in the 'left' side.
+    </span>
+  
+<hr />
+</td>
+
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<form id="Netui_Form_0" action="/coreWeb/template/visible/postback.do" method="post">
+Left Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.visible}OldValue" value="on"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.visible}" checked><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/template/visible/postback.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-checkbox_key:{pageFlow.visible}OldValue</name>
+          <value>false</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>55</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-709b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Template Visibility and Databinding</title>
+<base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/template/visible/Begin.jsp">
+</head>
+<body>
+<h1>Template Visibility and Databinding</h1>
+<table width="100%"><tr>
+
+<td>
+<table width="100%"><tr><td width="100">'right' Section</td><td><hr /></td></tr></table>
+
+    <span style="color:red;">
+    Red text in the 'right' side.
+    </span>
+  
+<hr />
+</td>
+</tr>
+</table>
+<hr />
+<h4>Control Stuff</h4>
+<form id="Netui_Form_0" action="/coreWeb/template/visible/postback.do" method="post">
+Left Section <input type="hidden" name="wlw-checkbox_key:{pageFlow.visible}OldValue" value="false"><input type="checkbox" name="wlw-checkbox_key:{pageFlow.visible}"><br />
+<input type="submit" value="Submit">
+</form>
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 03:20:13.380 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/VisibleError.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/VisibleError.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>VisibleError</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 09:51:53.057 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/template/visibleError/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-35ead49b:fda1c948e7:-6d30</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<span> <table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="5">Tag Error</th></tr>
+ <tr><th>Tag</th><td>Template</td>
+ <th>Errors</th><td colspan="2">3</td></tr>
+ <tr><th>Tag Error</th><th>Message</th><td colspan="3">Servlet Exception occured including template: Unable to find a value for "foo" in object of class "template.visibleError.Controller" using operator "."</td></tr>
+<tr><th>Tag Error</th><th>Message</th><td colspan="3">Cause: Exception [javax.servlet.jsp.el.ELException] Message [Unable to find a value for "foo" in object of class "template.visibleError.Controller" using operator "."]</td></tr>
+<tr><th>Tag Error</th><th>Message</th><td colspan="3">Exception [ServletException] including template [Template.jsp]</td></tr>
+</table></span>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 09:51:57.494 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/WebinfSrc.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/WebinfSrc.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,584 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>WebinfSrc</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 03:20:15.683 PM MST</startDate>
+  <description>Test of server support for page flows in WEB-INF/src.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/webinfSrc/WebinfSrcController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7091</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action called: <span>/begin</span>
+        <br>
+        scope: <span>request</span>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toAction.do">toAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe1.do">toMe1</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe2.do">toMe2</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/mergeAction.do">mergeAction</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/webinfSrc/toAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7091</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action called: <span>/toAction</span>
+        <br>
+        scope: <span>request</span>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toAction.do">toAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe1.do">toMe1</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe2.do">toMe2</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/mergeAction.do">mergeAction</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/webinfSrc/toMe1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7091</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action called: <span>/begin</span>
+        <br>
+        scope: <span>request</span>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toAction.do">toAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe1.do">toMe1</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe2.do">toMe2</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/mergeAction.do">mergeAction</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/webinfSrc/toMe2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7091</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action called: <span>/begin</span>
+        <br>
+        scope: <span>request</span>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toAction.do">toAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe1.do">toMe1</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe2.do">toMe2</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/mergeAction.do">mergeAction</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/miniTests/webinfSrc/mergeAction.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkqBUHFYtaabnU6x8JzU5uzAalAqfQSUWGsrbj5RE40vbVnAW61O!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7091</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action called: <span>/mergeAction</span>
+        <br>
+        scope: <span>session</span>
+        <br>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toAction.do">toAction</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe1.do">toMe1</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/toMe2.do">toMe2</a>
+        <br>
+        <a href="/coreWeb/miniTests/webinfSrc/mergeAction.do">mergeAction</a>
+        <br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 03:20:19.248 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>5</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>5</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlAnchor.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlAnchor.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>XhtmlAnchor</sessionName>
+  <tester>Daryl</tester>
+  <startDate>31 Mar 2004, 11:31:11.824 AM MST</startDate>
+  <description>Validation of XHTML produced for Anchors</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goAnchorTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ArOBcuW0M1yuZGoVGm4anIp12h2bFjq2nP3ORUFV5ADXQLk2m3g2!2032106384</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ArOBcuW0M1yuZGoVGm4anIp12h2bFjq2nP3ORUFV5ADXQLk2m3g2!2032106384</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Anchor Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/xhtml/anchorTest.jsp" />
+    </head>        
+  <body>
+    <h1 class="normalHead">Anchor Tests</h1>
+    <a href="/coreWeb/xhtml/begin.do" class="normal" hreflang="en" type="text/html" title="Link to the Contents" rel="contents" charset="iso-8859-1" rev="chapter">Test Main</a>
+    <ul>
+    <li><a href="/coreWeb/xhtml/goAnchorTarget.do#bottom" class="normal">Goto Target Page # bottom</a></li>
+    <li><a href="/coreWeb/xhtml/goAnchorTarget.do#top" class="normal">Goto Target Page # top</a></li>
+    <li>Image Map with Anchors (only works in Netscape)<br/>
+    <img src="redblue.gif" alt="pick a color" usemap="#map1" width="200" height="100" />
+        <map id="map1" name="map1">
+            <table width="200"><tr><td width="50%" align="center"> 
+                <a href="/coreWeb/xhtml/goAnchorTarget.do?color=red" class="normal" shape="rect" coords="10, 10, 90, 90" style="color:#ff0033;">Red</a>
+            </td><td width="50%" align="center">
+                <a href="/coreWeb/xhtml/goAnchorTarget.do?color=blue" class="normal" shape="rect" coords="110, 10, 190, 90" style="color:#0000cc;">Blue</a>
+            </td></tr></table>
+        </map>
+    </li>
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goAnchorTarget.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ArOBcuW0M1yuZGoVGm4anIp12h2bFjq2nP3ORUFV5ADXQLk2m3g2!2032106384</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ArOBcuW0M1yuZGoVGm4anIp12h2bFjq2nP3ORUFV5ADXQLk2m3g2!2032106384</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/xhtml/goAnchorTest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Anchor Target Page</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:10pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <body>
+    <a id="top" name="top"></a>
+    <table width="400pt"><tr><td valign="middle" align="left"><p class="normalHead">Anchor Target Page</p></td>
+    <td valign="middle" align="right"><a href="/coreWeb/xhtml/goAnchorTest.do" class="normal">Anchor Tests</a></td>
+    </tr></table>
+    <p class="normal">Targets for the anchor tests</p>
+    <p class="normal">Color: <span></span></p>
+    <p><a href="#bottomP" class="normal">Go to Bottom</a></p>
+    <div style="height:300pt;width:200pt;border:thin solid;">
+    </div>
+    <a id="bottom" name="bottom"></a>
+    <p id="bottomP" class="normal"><a href="#top">Bottom of the page...</a></p>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goAnchorTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ArOBcuW0M1yuZGoVGm4anIp12h2bFjq2nP3ORUFV5ADXQLk2m3g2!2032106384</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ArOBcuW0M1yuZGoVGm4anIp12h2bFjq2nP3ORUFV5ADXQLk2m3g2!2032106384</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/xhtml/goAnchorTarget.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Anchor Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/xhtml/anchorTest.jsp" />
+    </head>        
+  <body>
+    <h1 class="normalHead">Anchor Tests</h1>
+    <a href="/coreWeb/xhtml/begin.do" class="normal" hreflang="en" type="text/html" title="Link to the Contents" rel="contents" charset="iso-8859-1" rev="chapter">Test Main</a>
+    <ul>
+    <li><a href="/coreWeb/xhtml/goAnchorTarget.do#bottom" class="normal">Goto Target Page # bottom</a></li>
+    <li><a href="/coreWeb/xhtml/goAnchorTarget.do#top" class="normal">Goto Target Page # top</a></li>
+    <li>Image Map with Anchors (only works in Netscape)<br/>
+    <img src="redblue.gif" alt="pick a color" usemap="#map1" width="200" height="100" />
+        <map id="map1" name="map1">
+            <table width="200"><tr><td width="50%" align="center"> 
+                <a href="/coreWeb/xhtml/goAnchorTarget.do?color=red" class="normal" shape="rect" coords="10, 10, 90, 90" style="color:#ff0033;">Red</a>
+            </td><td width="50%" align="center">
+                <a href="/coreWeb/xhtml/goAnchorTarget.do?color=blue" class="normal" shape="rect" coords="110, 10, 190, 90" style="color:#0000cc;">Blue</a>
+            </td></tr></table>
+        </map>
+    </li>
+    </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>31 Mar 2004, 11:31:57.782 AM MST</endDate>
+  <testCount>3</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlCheckBox.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlCheckBox.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,915 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>XhtmlCheckBox</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>08 Jul 2004, 01:42:30.362 PM MDT</ses:startDate>
+   <ses:description>ekoneil</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/xhtml/goCheckboxTest.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-5a22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+&lt;html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+&lt;head>
+        &lt;title>Input Test Page&lt;/title>
+        &lt;style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        &lt;/style>
+    &lt;/head>        
+  &lt;body>
+    &lt;h1 class="normalHead">CheckBox and CheckBox Group tests&lt;/h1>
+    &lt;a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home&lt;/a>
+    &lt;div class="resultDiv">
+        &lt;p class="normal">CheckBox and CheckBox Group tests&lt;/p>
+        &lt;form id="checkboxTests" action="/coreWeb/xhtml/postCheckForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox Group&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.cbg}OldValue" value="true" />
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.cbg}" value="CheckBox Option 1" disabled="disabled" lang="en" title="Title Text" alt="Alt Text" dir="ltr" />&lt;span class="normal">Text CB Option One&lt;/span>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.cbg}" value="CheckBox Option 2" checked="checked" />&lt;span class="normal">Text CB Option Two&lt;/span>
+                    
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top" >
+                    &lt;td class="normalBold" align="right">Repeating CheckBox Group&lt;/td>
+                    &lt;td>
+                    &lt;table>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 1&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 1" />&lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.optCbg}OldValue" value="true" />
+                            &lt;/td>&lt;/tr>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 2&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 2" checked="checked" />
+                            &lt;/td>&lt;/tr>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 3&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 3" />
+                            &lt;/td>&lt;/tr>
+                    
+                    &lt;/table>
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox 1&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_key:{actionForm.check1}OldValue" value="false" />&lt;input type="checkbox" name="wlw-checkbox_key:{actionForm.check1}" lang="en" dir="ltr" />
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox 2&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_key:{actionForm.check2}OldValue" value="false" />&lt;input type="checkbox" name="wlw-checkbox_key:{actionForm.check2}" checked="checked" />
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td colspan="2" align="center">
+                        &lt;table cellspacing="0" border="1">
+                        &lt;tr>&lt;th class="normalBold" valign="top" align="center">Complex Repeater&lt;/th>&lt;td>
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-1" checked="checked" />&lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.optCbgMap}OldValue" value="true" />
+                                &lt;span class="normal">Option One&lt;/span>&lt;br/>
+                        
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-2" />
+                                &lt;span class="normal2">Option Two&lt;/span>&lt;br/>
+                        
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-3" />
+                                &lt;span class="normal3">Option Three&lt;/span>&lt;br/>
+                        
+                        
+                        &lt;/td>&lt;/tr>&lt;/table>
+                    &lt;/td>
+                &lt;/tr>                        
+            &lt;/table>
+            &lt;br />
+            &lt;input type="submit" class="normal" value="Post To Results One" title="Post to Results One" lang="en" alt="Post to Results One" dir="ltr" />
+            &lt;input type="submit" name="actionOverride:postCheckFormTwo" class="normal" value="Post To Results Two" />
+        &lt;/form>
+    &lt;/div>
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/xhtml/postCheckForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.cbg}</ses:name>
+                  <ses:value>CheckBox Option 2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.cbg}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbgMap}</ses:name>
+                  <ses:value>opt-1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbgMap}</ses:name>
+                  <ses:value>opt-2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbgMap}</ses:name>
+                  <ses:value>opt-3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbgMap}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbg}</ses:name>
+                  <ses:value>CBG Option 1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbg}</ses:name>
+                  <ses:value>CBG Option 2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbg}</ses:name>
+                  <ses:value>CBG Option 3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbg}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:${actionForm.check1}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:${actionForm.check1}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:${actionForm.check2}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:${actionForm.check2}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>1BFFDA13ECA66F0BFC1745BD8BAB49DE</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>857</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=1BFFDA13ECA66F0BFC1745BD8BAB49DE; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-5a22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>2</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Checkbox Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <body>
+    <a id="top" name="top"></a>
+    <table width="400pt"><tr><td align="left"><h1 class="normalHead">Checkbox Results</h1></td>
+        <td align="right"><a href="/coreWeb/xhtml/goCheckboxTest.do" class="normal">Input Tests</a></td>
+    </tr></table>
+    <p>
+        Action: <span>postFormOne</span> 
+    </p>
+        <table border="1" cellspacing="0">
+        <tr class="tablehead" valign="top">
+            <th class="normal">CheckBox Group</th>
+            <th class="normal">Repeating CheckBox Group</th>
+            <th class="normal">Check One</th>
+            <th class="normal">Check Two</th>
+            <th class="normal">Complex Repeater</th>
+        </tr>
+        <tr valign="top">
+            <td>
+            <table class="tablebody" border="0">
+                    <tr valign="top">
+                        <td><span class="normal">CheckBox Option 2</span></td>
+                    </tr>
+                </table>
+            </td>
+             <td>
+            <table class="tablebody" border="0">
+                    <tr valign="top">
+                        <td><span class="normal">CBG Option 2</span></td>
+                    </tr>
+                </table>
+            </td>
+            <td><span class="normal">false</span></td>
+            <td><span class="normal">true</span></td>
+            <td>
+            <table class="tablebody" border="0">
+                    <tr valign="top">
+                        <td><span class="normal">opt-1</span></td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+        </table>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/xhtml/goCheckboxTest.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>1BFFDA13ECA66F0BFC1745BD8BAB49DE</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=1BFFDA13ECA66F0BFC1745BD8BAB49DE; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-5a22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>3</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+&lt;html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+&lt;head>
+        &lt;title>Input Test Page&lt;/title>
+        &lt;style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        &lt;/style>
+    &lt;/head>        
+  &lt;body>
+    &lt;h1 class="normalHead">CheckBox and CheckBox Group tests&lt;/h1>
+    &lt;a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home&lt;/a>
+    &lt;div class="resultDiv">
+        &lt;p class="normal">CheckBox and CheckBox Group tests&lt;/p>
+        &lt;form id="checkboxTests" action="/coreWeb/xhtml/postCheckForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox Group&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.cbg}OldValue" value="true" />
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.cbg}" value="CheckBox Option 1" disabled="disabled" lang="en" title="Title Text" alt="Alt Text" dir="ltr" />&lt;span class="normal">Text CB Option One&lt;/span>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.cbg}" value="CheckBox Option 2" checked="checked" />&lt;span class="normal">Text CB Option Two&lt;/span>
+                    
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top" >
+                    &lt;td class="normalBold" align="right">Repeating CheckBox Group&lt;/td>
+                    &lt;td>
+                    &lt;table>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 1&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 1" />&lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.optCbg}OldValue" value="true" />
+                            &lt;/td>&lt;/tr>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 2&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 2" checked="checked" />
+                            &lt;/td>&lt;/tr>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 3&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 3" />
+                            &lt;/td>&lt;/tr>
+                    
+                    &lt;/table>
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox 1&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_key:{actionForm.check1}OldValue" value="false" />&lt;input type="checkbox" name="wlw-checkbox_key:{actionForm.check1}" lang="en" dir="ltr" />
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox 2&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_key:{actionForm.check2}OldValue" value="false" />&lt;input type="checkbox" name="wlw-checkbox_key:{actionForm.check2}" checked="checked" />
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td colspan="2" align="center">
+                        &lt;table cellspacing="0" border="1">
+                        &lt;tr>&lt;th class="normalBold" valign="top" align="center">Complex Repeater&lt;/th>&lt;td>
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-1" checked="checked" />&lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.optCbgMap}OldValue" value="true" />
+                                &lt;span class="normal">Option One&lt;/span>&lt;br/>
+                        
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-2" />
+                                &lt;span class="normal2">Option Two&lt;/span>&lt;br/>
+                        
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-3" />
+                                &lt;span class="normal3">Option Three&lt;/span>&lt;br/>
+                        
+                        
+                        &lt;/td>&lt;/tr>&lt;/table>
+                    &lt;/td>
+                &lt;/tr>                        
+            &lt;/table>
+            &lt;br />
+            &lt;input type="submit" class="normal" value="Post To Results One" title="Post to Results One" lang="en" alt="Post to Results One" dir="ltr" />
+            &lt;input type="submit" name="actionOverride:postCheckFormTwo" class="normal" value="Post To Results Two" />
+        &lt;/form>
+    &lt;/div>
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/xhtml/postCheckForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>actionOverride:postCheckFormTwo</ses:name>
+                  <ses:value>Post To Results Two</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.cbg}</ses:name>
+                  <ses:value>CheckBox Option 2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.cbg}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbgMap}</ses:name>
+                  <ses:value>opt-1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbgMap}</ses:name>
+                  <ses:value>opt-2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbgMap}</ses:name>
+                  <ses:value>opt-3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbgMap}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbg}</ses:name>
+                  <ses:value>CBG Option 1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbg}</ses:name>
+                  <ses:value>CBG Option 2</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbg}</ses:name>
+                  <ses:value>CBG Option 3</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_group_key:${actionForm.optCbg}OldValue</ses:name>
+                  <ses:value>true</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:${actionForm.check1}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:${actionForm.check1}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:${actionForm.check2}</ses:name>
+                  <ses:value>on</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>wlw-checkbox_key:${actionForm.check2}OldValue</ses:name>
+                  <ses:value>false</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>1BFFDA13ECA66F0BFC1745BD8BAB49DE</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>911</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=1BFFDA13ECA66F0BFC1745BD8BAB49DE; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-5a22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Checkbox Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <body>
+    <a id="top" name="top"></a>
+    <table width="400pt"><tr><td align="left"><h1 class="normalHead">Checkbox Results</h1></td>
+        <td align="right"><a href="/coreWeb/xhtml/goCheckboxTest.do" class="normal">Input Tests</a></td>
+    </tr></table>
+    <p>
+        Action: <span>postFormTwo</span> 
+    </p>
+        <table border="1" cellspacing="0">
+        <tr class="tablehead" valign="top">
+            <th class="normal">CheckBox Group</th>
+            <th class="normal">Repeating CheckBox Group</th>
+            <th class="normal">Check One</th>
+            <th class="normal">Check Two</th>
+            <th class="normal">Complex Repeater</th>
+        </tr>
+        <tr valign="top">
+            <td>
+            <table class="tablebody" border="0">
+                    <tr valign="top">
+                        <td><span class="normal">CheckBox Option 2</span></td>
+                    </tr>
+                </table>
+            </td>
+             <td>
+            <table class="tablebody" border="0">
+                    <tr valign="top">
+                        <td><span class="normal">CBG Option 2</span></td>
+                    </tr>
+                </table>
+            </td>
+            <td><span class="normal">false</span></td>
+            <td><span class="normal">true</span></td>
+            <td>
+            <table class="tablebody" border="0">
+                    <tr valign="top">
+                        <td><span class="normal">opt-1</span></td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+        </table>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/xhtml/goCheckboxTest.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>1BFFDA13ECA66F0BFC1745BD8BAB49DE</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=1BFFDA13ECA66F0BFC1745BD8BAB49DE; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-5a22</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+&lt;html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+&lt;head>
+        &lt;title>Input Test Page&lt;/title>
+        &lt;style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        &lt;/style>
+    &lt;/head>        
+  &lt;body>
+    &lt;h1 class="normalHead">CheckBox and CheckBox Group tests&lt;/h1>
+    &lt;a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home&lt;/a>
+    &lt;div class="resultDiv">
+        &lt;p class="normal">CheckBox and CheckBox Group tests&lt;/p>
+        &lt;form id="checkboxTests" action="/coreWeb/xhtml/postCheckForm.do" method="post">
+            &lt;table>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox Group&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.cbg}OldValue" value="true" />
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.cbg}" value="CheckBox Option 1" disabled="disabled" lang="en" title="Title Text" alt="Alt Text" dir="ltr" />&lt;span class="normal">Text CB Option One&lt;/span>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.cbg}" value="CheckBox Option 2" checked="checked" />&lt;span class="normal">Text CB Option Two&lt;/span>
+                    
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top" >
+                    &lt;td class="normalBold" align="right">Repeating CheckBox Group&lt;/td>
+                    &lt;td>
+                    &lt;table>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 1&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 1" />&lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.optCbg}OldValue" value="true" />
+                            &lt;/td>&lt;/tr>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 2&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 2" checked="checked" />
+                            &lt;/td>&lt;/tr>
+                    
+                            &lt;tr>&lt;td align="right" class="normal2">
+                            &lt;span>CBG Option 3&lt;/span>
+                            &lt;/td>&lt;td>
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbg}" value="CBG Option 3" />
+                            &lt;/td>&lt;/tr>
+                    
+                    &lt;/table>
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox 1&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_key:{actionForm.check1}OldValue" value="false" />&lt;input type="checkbox" name="wlw-checkbox_key:{actionForm.check1}" lang="en" dir="ltr" />
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td class="normalBold" align="right">CheckBox 2&lt;/td>
+                    &lt;td>
+                    &lt;input type="hidden" name="wlw-checkbox_key:{actionForm.check2}OldValue" value="false" />&lt;input type="checkbox" name="wlw-checkbox_key:{actionForm.check2}" checked="checked" />
+                    &lt;/td>
+                &lt;/tr>
+                &lt;tr valign="top">
+                    &lt;td colspan="2" align="center">
+                        &lt;table cellspacing="0" border="1">
+                        &lt;tr>&lt;th class="normalBold" valign="top" align="center">Complex Repeater&lt;/th>&lt;td>
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-1" checked="checked" />&lt;input type="hidden" name="wlw-checkbox_group_key:{actionForm.optCbgMap}OldValue" value="true" />
+                                &lt;span class="normal">Option One&lt;/span>&lt;br/>
+                        
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-2" />
+                                &lt;span class="normal2">Option Two&lt;/span>&lt;br/>
+                        
+                        
+                            &lt;input type="checkbox" name="wlw-checkbox_group_key:{actionForm.optCbgMap}" value="opt-3" />
+                                &lt;span class="normal3">Option Three&lt;/span>&lt;br/>
+                        
+                        
+                        &lt;/td>&lt;/tr>&lt;/table>
+                    &lt;/td>
+                &lt;/tr>                        
+            &lt;/table>
+            &lt;br />
+            &lt;input type="submit" class="normal" value="Post To Results One" title="Post to Results One" lang="en" alt="Post to Results One" dir="ltr" />
+            &lt;input type="submit" name="actionOverride:postCheckFormTwo" class="normal" value="Post To Results Two" />
+        &lt;/form>
+    &lt;/div>
+    &lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 01:42:34.377 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>5</ses:testCount>
+   <ses:passedCount>2</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlFormLabel.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlFormLabel.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,351 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>XhtmlFormLabel</sessionName>
+  <tester>Daryl</tester>
+  <startDate>25 May 2004, 11:18:49.601 AM MDT</startDate>
+  <description>Validation of the XHTML Produced by the form Label</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goFormLabelTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Az1YRW0YQPslT51iBw3k2zjUF2xwg3yH9WwH9IOAHVDS1wN6umn9!1271867925</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Az1YRW0YQPslT51iBw3k2zjUF2xwg3yH9WwH9IOAHVDS1wN6umn9!1271867925</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>496724cf:fcbd2a36dd:-7f39</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Form Label Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <body>
+    <h1 class="normalHead">Form Label Tests</h1>
+    <a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home</a>
+    <div class="resultDiv">
+            <form id="formLabelTests" action="/coreWeb/xhtml/postFormLabelResults.do" method="post">
+                <table>
+                    <tr valign="top">
+                        <td><label for="labelOne" class="normal">Value Three:</label></td>
+                        <td>
+                        <input type="text" name="{actionForm.valueOne}" value="" />
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td><label for="labelTwo" class="normal">Value Two:</label></td>
+                        <td>
+                        <input type="text" name="{actionForm.valueTwo}" value="" />
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td><label for="labelThree" class="normal">Value Three:</label></td>
+                        <td>
+                        <input type="text" name="{actionForm.valueThree}" value="" />
+                        </td>
+                    </tr>
+                </table>
+                <br />
+                <input type="submit" value="Post Form" />
+            </form>
+     </div>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.labelThree="{actionForm.valueThree}"
+netui_names.labelOne="{actionForm.valueOne}"
+netui_names.labelTwo="{actionForm.valueTwo}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+</body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/postFormLabelResults.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>{actionForm.valueOne}</name>
+          <value>a</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.valueThree}</name>
+          <value>c</value>
+        </parameter>
+        <parameter>
+          <name>{actionForm.valueTwo}</name>
+          <value>b</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>Az1YRW0YQPslT51iBw3k2zjUF2xwg3yH9WwH9IOAHVDS1wN6umn9!1271867925</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>85</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=Az1YRW0YQPslT51iBw3k2zjUF2xwg3yH9WwH9IOAHVDS1wN6umn9!1271867925</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>496724cf:fcbd2a36dd:-7f39</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>FormLabel Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <body>
+    <a id="top" name="top"></a>
+    <table><tr><td align="left"><h1 class="normalHead">Select Post Results</h1></td>
+        <td align="right"><a href="/coreWeb/xhtml/goFormLabelTest.do" class="normal">Form Label Tests</a></td>
+    </tr></table>
+    <table border="1" cellspacing="0">
+        <tr valign="top">
+            <td class="normal">Value One:</td>
+            <td>
+            <span class="normal">a</span>
+            </td>
+        </tr>
+        <tr valign="top">
+            <td class="normal">Value Two:</td>
+            <td>
+            <span class="normal">b</span>
+            </td>
+        </tr>
+        <tr valign="top">
+            <td class="normal">Value Three:</td>
+            <td>
+            <span class="normal">c</span>
+            </td>
+        </tr>
+    </table>    
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>25 May 2004, 11:18:54.177 AM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>1</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlImage.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlImage.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>XhtmlImage</ses:sessionName>
+   <ses:tester>null</ses:tester>
+   <ses:startDate>08 Jul 2004, 01:42:39.124 PM MDT</ses:startDate>
+   <ses:description>null</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/xhtml/goImageTest.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-5a15</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+&lt;html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+&lt;head>
+        &lt;title>Image Tests&lt;/title>
+        &lt;style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        &lt;/style>
+        
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+&lt;/script>
+
+
+	&lt;script src="/coreWeb/resources/javascript/netui-tree.js">&lt;/script>
+    &lt;/head>        
+  &lt;body>
+    &lt;h1 class="normalHead">Image Tests&lt;/h1>
+    &lt;a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter" onclick='NetUIAnchorRewriter(this);'>Home&lt;/a>
+    &lt;div class="resultDiv">
+        &lt;p class="normal">Images&lt;/p>
+        &lt;table width="100%">
+        &lt;tr>&lt;td align="right" class="normal">Image:&lt;/td>&lt;td align="left">
+            &lt;img src="/coreWeb/xhtml/./image/Anieyes.gif" style="border-color:#00cccc;" width="72" height="37" border="1" alt="eyeballs" />
+        &lt;/td>&lt;/tr>
+        &lt;tr>&lt;td align="right" class="normal">ImageAnchor:&lt;/td>&lt;td align="left">
+                    &lt;a href="/coreWeb/xhtml/postImageForm.do" onclick='NetUIAnchorRewriter(this);'>&lt;img src="/coreWeb/xhtml/image/activepython.gif" border="0" alt="Anchor" onmouseout="swapImage(this,'/coreWeb/xhtml/image/activepython.gif')" onmouseover="swapImage(this,'/coreWeb/xhtml/image/activepythonroll.gif')" />&lt;/a>
+        &lt;/td>&lt;/tr>
+        &lt;/table>
+    &lt;/div>
+    &lt;div class="resultDiv">
+        &lt;p class="normal">Images in Forms&lt;/p>
+            &lt;form action="/coreWeb/xhtml/postImageForm.do" method="post">
+                &lt;input type="image" src="/coreWeb/xhtml/./image/back.gif" value="foo" accesskey="G" alt="Navigate" onmouseout="swapImage(this,'/coreWeb/xhtml/./image/back.gif')" onmouseover="swapImage(this,'/coreWeb/xhtml/image/backRoll.gif')" />
+            &lt;/form>
+    &lt;/div>
+    
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains functions typically run as events ****
+
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+
+}
+
+-->
+&lt;/script>
+
+&lt;/body>
+&lt;/html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/xhtml/postImageForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>x</ses:name>
+                  <ses:value>14</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>y</ses:name>
+                  <ses:value>4</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>2FB8A421F6A5559DFEA8FFF537B99AE9</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>8</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=2FB8A421F6A5559DFEA8FFF537B99AE9; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-5a15</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Image Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <body>
+    <a id="top" name="top"></a>
+    <table><tr><td align="left"><h1 class="normalHead">Image Post Results</h1></td>
+        <td align="right"><a href="/coreWeb/xhtml/goImageTest.do" class="normal">Image Tests</a></td>
+    </tr></table>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 01:42:43.770 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>2</ses:testCount>
+   <ses:passedCount>1</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlLabel.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlLabel.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>XhtmlLabel</sessionName>
+  <tester>Daryl</tester>
+  <startDate>31 Mar 2004, 11:59:09.422 AM MST</startDate>
+  <description>Validation of the XHTML produced by the Label.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goLabelTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ArUcgakh10pRfPEdvovxRzR6s0xHwtYcIjEBHM12KrhID2bDyI32!1530290691</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ArUcgakh10pRfPEdvovxRzR6s0xHwtYcIjEBHM12KrhID2bDyI32!1530290691</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Label Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <body>
+    <h1 class="normalHead">Label Tests</h1>
+    <a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home</a>
+    <div class="resultDiv">
+        <p class="normal">Label: <span class="normalAttr">Label One</span></p>
+    </div>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>31 Mar 2004, 11:59:21.860 AM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlRadio.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlRadio.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>XhtmlRadio</sessionName>
+  <tester>Daryl</tester>
+  <startDate>31 Mar 2004, 11:53:13.230 AM MST</startDate>
+  <description>Validation test of the XHTML produced by Radio buttons</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goRadioTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ArT7QtO1zk8uB3raimhEEPO8pZ2j8RV2giYSu3v1JsLJfZ2eGiMF!1530290691</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ArT7QtO1zk8uB3raimhEEPO8pZ2j8RV2giYSu3v1JsLJfZ2eGiMF!1530290691</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>RadioGroup Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <body>
+    <h1 class="normalHead">RadioGroup Tests</h1>
+    <a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home</a>
+    <div class="resultDiv">
+        <p class="normal">RadioGroup Tests</p>
+            <form id="radioTests" action="/coreWeb/xhtml/postRadioForm.do" method="post">
+                <table>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">RadioButton Group</td>
+                        <td>
+                        <table>
+                            <tr><td><input type="radio" name="wlw-radio_button_group_key:{actionForm.rbg}" value="Radio Opt 1" disabled="disabled" checked="checked" /><span class="normal">Radio Option One</span></td></tr>
+                            <tr><td><input type="radio" name="wlw-radio_button_group_key:{actionForm.rbg}" value="Radio Opt 2" /><span class="normal">Radio Option Two</span></td></tr>
+                        </table>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Repeating Options RadioButton Group</td>
+                        <td>
+                        
+                            <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOpts}" class="normal" value="RB Option 1" />
+                            <span class="normal">RB Option 1</span>
+                        
+                            <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOpts}" class="normal" value="RB Option 2" />
+                            <span class="normal">RB Option 2</span>
+                        
+                            <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOpts}" class="normal" value="RB Option 3" checked="checked" />
+                            <span class="normal">RB Option 3</span>
+                        
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Map Options RadioButton Group</td>
+                        <td>
+                        
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOptsMap}" value="RB Map 1" /><span class="normal2">RB Map 1</span><br />
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOptsMap}" value="RB Map 2" checked="checked" /><span class="normal2">RB Map 2</span><br />
+
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td colspan="2" align="center">
+                            <table cellspacing="0" border="1">
+                            <tr><th class="normalBold" valign="top" align="center">Complex Repeater</th><td>
+                            
+                                <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgComplex}" value="opt-1" />
+                                    <span class="normal">Option One</span><br />
+                            
+                            
+                                <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgComplex}" value="opt-2" />
+                                    <span class="normal2">Option Two</span><br />
+                            
+                            
+                                <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgComplex}" value="opt-3" />
+                                    <span class="normal3">Option Three</span><br />
+                            
+                            
+                            </td></tr></table>
+                        </td>
+                    </tr>
+                </table>
+                <br />
+                <input type="submit" value="Post RadioForm" />
+            </form>
+    </div>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/postRadioForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.rbgComplex}</name>
+          <value>opt-2</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.rbgOptsMap}</name>
+          <value>RB Map 1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.rbgOpts}</name>
+          <value>RB Option 2</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.rbg}</name>
+          <value>Radio Opt 2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ArT7QtO1zk8uB3raimhEEPO8pZ2j8RV2giYSu3v1JsLJfZ2eGiMF!1530290691</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>256</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ArT7QtO1zk8uB3raimhEEPO8pZ2j8RV2giYSu3v1JsLJfZ2eGiMF!1530290691</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/xhtml/goRadioTest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Radio Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <body>
+    <a id="top" name="top"></a>
+    <table width="400"><tr><td align="left"><h1 class="normalHead">Radio Post Results</h1></td>
+        <td align="right"><a href="/coreWeb/xhtml/goRadioTest.do" class="normal">Radio Tests</a></td>
+    </tr></table>
+    <p>
+        Action: <span>postFormOne</span> 
+    </p>
+        <table class="tablebody" border="1" cellspacing="0">
+        <tr class="tablehead" valign="top">
+            <th class="normal">RadioButton Group</th>
+            <th class="normal">Options RadioButton Group</th>
+            <th class="normal">Map Options RadioButton Group</th>
+            <th class="normal">Complex RadioButton Group</th>
+        </tr>
+        <tr valign="top">
+            <td>
+                <span class="normal">Radio Opt 2</span>
+
+            </td>
+            <td>
+                <span class="normal">RB Option 2</span>
+            </td>
+            <td>
+                <span class="normal">RB Map 1</span>
+            </td>
+            <td>
+                <span class="normal">opt-2</span>
+            </td>
+        </tr>
+        </table>        
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goRadioTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ArT7QtO1zk8uB3raimhEEPO8pZ2j8RV2giYSu3v1JsLJfZ2eGiMF!1530290691</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ArT7QtO1zk8uB3raimhEEPO8pZ2j8RV2giYSu3v1JsLJfZ2eGiMF!1530290691</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/xhtml/postRadioForm.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>RadioGroup Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal2 {color: #cc0099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normal3 {color: #00cc99;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <body>
+    <h1 class="normalHead">RadioGroup Tests</h1>
+    <a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home</a>
+    <div class="resultDiv">
+        <p class="normal">RadioGroup Tests</p>
+            <form id="radioTests" action="/coreWeb/xhtml/postRadioForm.do" method="post">
+                <table>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">RadioButton Group</td>
+                        <td>
+                        <table>
+                            <tr><td><input type="radio" name="wlw-radio_button_group_key:{actionForm.rbg}" value="Radio Opt 1" disabled="disabled" checked="checked" /><span class="normal">Radio Option One</span></td></tr>
+                            <tr><td><input type="radio" name="wlw-radio_button_group_key:{actionForm.rbg}" value="Radio Opt 2" /><span class="normal">Radio Option Two</span></td></tr>
+                        </table>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Repeating Options RadioButton Group</td>
+                        <td>
+                        
+                            <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOpts}" class="normal" value="RB Option 1" />
+                            <span class="normal">RB Option 1</span>
+                        
+                            <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOpts}" class="normal" value="RB Option 2" />
+                            <span class="normal">RB Option 2</span>
+                        
+                            <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOpts}" class="normal" value="RB Option 3" checked="checked" />
+                            <span class="normal">RB Option 3</span>
+                        
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Map Options RadioButton Group</td>
+                        <td>
+                        
+                        <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOptsMap}" value="RB Map 1" /><span class="normal2">RB Map 1</span><br />
+<input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgOptsMap}" value="RB Map 2" checked="checked" /><span class="normal2">RB Map 2</span><br />
+
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td colspan="2" align="center">
+                            <table cellspacing="0" border="1">
+                            <tr><th class="normalBold" valign="top" align="center">Complex Repeater</th><td>
+                            
+                                <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgComplex}" value="opt-1" />
+                                    <span class="normal">Option One</span><br />
+                            
+                            
+                                <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgComplex}" value="opt-2" />
+                                    <span class="normal2">Option Two</span><br />
+                            
+                            
+                                <input type="radio" name="wlw-radio_button_group_key:{actionForm.rbgComplex}" value="opt-3" />
+                                    <span class="normal3">Option Three</span><br />
+                            
+                            
+                            </td></tr></table>
+                        </td>
+                    </tr>
+                </table>
+                <br />
+                <input type="submit" value="Post RadioForm" />
+            </form>
+    </div>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/postRadioForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.rbgComplex}</name>
+          <value>opt-1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.rbgOptsMap}</name>
+          <value>RB Map 1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-radio_button_group_key:{actionForm.rbgOpts}</name>
+          <value>RB Option 3</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ArT7QtO1zk8uB3raimhEEPO8pZ2j8RV2giYSu3v1JsLJfZ2eGiMF!1530290691</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Content-Length</name>
+          <value>194</value>
+        </header>
+        <header>
+          <name>Content-Type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ArT7QtO1zk8uB3raimhEEPO8pZ2j8RV2giYSu3v1JsLJfZ2eGiMF!1530290691</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Referer</name>
+          <value>http://localhost:7001/coreWeb/xhtml/goRadioTest.do</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Radio Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <body>
+    <a id="top" name="top"></a>
+    <table width="400"><tr><td align="left"><h1 class="normalHead">Radio Post Results</h1></td>
+        <td align="right"><a href="/coreWeb/xhtml/goRadioTest.do" class="normal">Radio Tests</a></td>
+    </tr></table>
+    <p>
+        Action: <span>postFormOne</span> 
+    </p>
+        <table class="tablebody" border="1" cellspacing="0">
+        <tr class="tablehead" valign="top">
+            <th class="normal">RadioButton Group</th>
+            <th class="normal">Options RadioButton Group</th>
+            <th class="normal">Map Options RadioButton Group</th>
+            <th class="normal">Complex RadioButton Group</th>
+        </tr>
+        <tr valign="top">
+            <td>
+                <span class="normal">Radio Opt 1</span>
+
+            </td>
+            <td>
+                <span class="normal">RB Option 3</span>
+            </td>
+            <td>
+                <span class="normal">RB Map 1</span>
+            </td>
+            <td>
+                <span class="normal">opt-1</span>
+            </td>
+        </tr>
+        </table>        
+  </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>31 Mar 2004, 11:53:45.196 AM MST</endDate>
+  <testCount>4</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlSelect.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/XhtmlSelect.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>XhtmlSelect</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>17 May 2004, 03:57:56.508 PM GMT-07:00</startDate>
+  <description>Validation of the XHTML produced by the select.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goSelectTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f4a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Select Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <body>
+    <h1 class="normalHead">Select Tests</h1>
+    <a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home</a>
+    <div class="resultDiv">
+        <p class="normal">Select Tests</p>
+            <form id="selectTests" action="/coreWeb/xhtml/postSelectForm.do" method="post">
+                <table>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Select</td>
+                        <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.sel}OldValue" value="true" />
+<select name="wlw-select_key:{actionForm.sel}"><option class="normalAttr" value="Select Opt 1" disabled="disabled" selected="selected">Select Option One</option>
+                            <option class="normalAttr2" value="Select Opt 2">Select Option Two</option></select>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Select With Options</td>
+                        <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.multiSel}OldValue" value="true" />
+<select name="wlw-select_key:{actionForm.multiSel}" class="normalAttr" multiple="multiple" size="3" style="background-color:#00ffff;">
+<option class="normalAttr" value="Select Option 1" style="background-color:#00ffff;">Select Option 1</option>
+<option class="normalAttr" value="Select Option 2" style="background-color:#00ffff;">Select Option 2</option>
+<option class="normalAttr" value="Select Option 3" style="background-color:#00ffff;">Select Option 3</option></select>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Map Select</td>
+                        <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.selOpts}OldValue" value="true" />
+<select name="wlw-select_key:{actionForm.selOpts}">
+<option value="Sel Opt 1">Sel Opt 1</option>
+<option value="Sel Opt 2">Sel Opt 2</option></select>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Nullable Select</td>
+                        <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.nullable}OldValue" value="true" />
+<select name="wlw-select_key:{actionForm.nullable}" size="7"><option class="normalAttr" value="Null Opt 1">Null Opt 1</option>
+                            
+                            
+                            
+                        
+                            <option class="normalAttr" value="Null Opt 2">Null Opt 2</option>
+                            
+                            
+                            
+                        
+                            <option class="normalAttr" value="Null Opt 3">Null Opt 3</option>
+                            
+                            
+                            
+                        
+                            
+                            <option class="normalAttr2" value="ds Form Opt 1">ds Form Opt 1</option>
+                            
+                            
+                        
+                            
+                            <option class="normalAttr2" value="ds Form Opt 2">ds Form Opt 2</option>
+                            
+                            
+                        
+                            
+                            
+                            <option class="normalAttr3" value="def Default Opt">def Default Opt</option>
+                            
+                        
+                            
+                            
+                            
+                            <option class="normalAttr4" value="Null">Null</option></select>
+                        </td>
+                    </tr>
+                    
+                </table>
+                <br />
+                <input type="submit" value="Post Form" />
+            </form>
+    </div>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/postSelectForm.do</uri>
+      <method>POST</method>
+
+      <parameters>
+        <parameter>
+          <name>wlw-select_key:${actionForm.multiSel}</name>
+          <value>Select Option 1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.multiSel}</name>
+          <value>Select Option 2</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.multiSel}</name>
+          <value>Select Option 3</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.multiSel}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.nullable}</name>
+          <value>Null Opt 3</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.nullable}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.selOpts}</name>
+          <value>Sel Opt 1</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.selOpts}OldValue</name>
+          <value>true</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.sel}</name>
+          <value>Select Opt 2</value>
+        </parameter>
+        <parameter>
+          <name>wlw-select_key:${actionForm.sel}OldValue</name>
+          <value>true</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Cache-Control</name>
+          <value>no-cache</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Content-length</name>
+          <value>581</value>
+        </header>
+        <header>
+          <name>Content-type</name>
+          <value>application/x-www-form-urlencoded</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f4a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Select Post Results</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        p {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;height: 400px;}
+        </style>
+    </head>        
+  <body>
+    <a id="top" name="top"></a>
+    <table><tr><td align="left"><h1 class="normalHead">Select Post Results</h1></td>
+        <td align="right"><a href="/coreWeb/xhtml/goSelectTest.do" class="normal">Select Tests</a></td>
+    </tr></table>
+    <p>
+        Action: <span>postFormOne</span> 
+    </p>
+        <table class="tablebody" border="1" cellspacing="0">
+        <tr class="tablehead" valign="top">
+            <th class="normal">Select</th>
+            <th class="normal">Select Opts</th>
+            <th class="normal">Map Select</th>
+            <th class="normal">Nullable Select</th>
+        </tr>
+        <tr valign="top">
+            <td><span class="normal">&nbsp;</span></td>
+            <td>
+            <table class="tablebody"
+                    border="0">
+                    <tr valign="top">
+                        <td><span class="normal">&nbsp;</span></td>
+                    </tr>
+                </table>
+            </td>
+            <td><span class="normal">&nbsp;</span></td>
+            <td>
+            <ol>
+            
+                    <li class="normal">
+                        <span>Form Opt 1</span>
+                    </li>
+            
+                    <li class="normal">
+                        <span>Form Opt 2</span>
+                    </li>
+            
+            </ol>
+        </td></tr>            
+        </table>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/xhtml/goSelectTest.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=ApDxf9VZ2p9POBhQZz24lRffpH1fdrTiT11pmvtH7sa7Y1RwAk0Z!-1982197774</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-a6589e4:fc951a1e07:-7f4a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+        <title>Select Tests</title>
+        <style type="text/css">
+        .normal {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr {color: #ff9900;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr2 {color: #0099ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr3 {color: #9900ff;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalAttr4 {color: #99ff00;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalBold {color: #000099;font-family:Verdana; font-size:8pt; font-weight: bold;margin:0,0,0,0;}
+        li {color: #000099;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalError {color: #ff0033;font-family:Verdana; font-size:8pt;margin:0,0,0,0;}
+        .normalHead {color: #000099;font-family:Verdana; font-size:8pt;font-weight: strong;margin:0,0,0,0;}
+        .title {color: #000099;font-family:Verdana; font-size:12pt;margin:2,0,5,0;}
+        .resultDiv {border: thin solid;margin:5,5,5,5;}
+        </style>
+    </head>        
+  <body>
+    <h1 class="normalHead">Select Tests</h1>
+    <a href="/coreWeb/xhtml/begin.do" class="normal" rel="contents" rev="chapter">Home</a>
+    <div class="resultDiv">
+        <p class="normal">Select Tests</p>
+            <form id="selectTests" action="/coreWeb/xhtml/postSelectForm.do" method="post">
+                <table>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Select</td>
+                        <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.sel}OldValue" value="true" />
+<select name="wlw-select_key:{actionForm.sel}"><option class="normalAttr" value="Select Opt 1" disabled="disabled" selected="selected">Select Option One</option>
+                            <option class="normalAttr2" value="Select Opt 2">Select Option Two</option></select>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Select With Options</td>
+                        <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.multiSel}OldValue" value="true" />
+<select name="wlw-select_key:{actionForm.multiSel}" class="normalAttr" multiple="multiple" size="3" style="background-color:#00ffff;">
+<option class="normalAttr" value="Select Option 1" style="background-color:#00ffff;">Select Option 1</option>
+<option class="normalAttr" value="Select Option 2" style="background-color:#00ffff;">Select Option 2</option>
+<option class="normalAttr" value="Select Option 3" style="background-color:#00ffff;">Select Option 3</option></select>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Map Select</td>
+                        <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.selOpts}OldValue" value="true" />
+<select name="wlw-select_key:{actionForm.selOpts}">
+<option value="Sel Opt 1">Sel Opt 1</option>
+<option value="Sel Opt 2">Sel Opt 2</option></select>
+                        </td>
+                    </tr>
+                    <tr valign="top">
+                        <td class="normalBold" align="right">Nullable Select</td>
+                        <td>
+                        <input type="hidden" name="wlw-select_key:{actionForm.nullable}OldValue" value="true" />
+<select name="wlw-select_key:{actionForm.nullable}" size="7"><option class="normalAttr" value="Null Opt 1">Null Opt 1</option>
+                            
+                            
+                            
+                        
+                            <option class="normalAttr" value="Null Opt 2">Null Opt 2</option>
+                            
+                            
+                            
+                        
+                            <option class="normalAttr" value="Null Opt 3">Null Opt 3</option>
+                            
+                            
+                            
+                        
+                            
+                            <option class="normalAttr2" value="ds Form Opt 1">ds Form Opt 1</option>
+                            
+                            
+                        
+                            
+                            <option class="normalAttr2" value="ds Form Opt 2">ds Form Opt 2</option>
+                            
+                            
+                        
+                            
+                            
+                            <option class="normalAttr3" value="def Default Opt">def Default Opt</option>
+                            
+                        
+                            
+                            
+                            
+                            <option class="normalAttr4" value="Null">Null</option></select>
+                        </td>
+                    </tr>
+                    
+                </table>
+                <br />
+                <input type="submit" value="Post Form" />
+            </form>
+    </div>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>17 May 2004, 03:57:56.649 PM GMT-07:00</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>3</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>3</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/b34566.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/b34566.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,397 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>B34566</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 08:35:30.758 PM MDT</ses:startDate>
+   <ses:description>Test of parameters encoding on URLS</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b34566/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>618B73199BCC7E5E16617BF9D9136768</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=618B73199BCC7E5E16617BF9D9136768</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b34566/begin.do?name=value&name=value">Postback</a>
+        <form name="nameForm" id="Netui_Form_0" action="/coreWeb/bugs/b34566/postForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablehead">
+                    <td>Name:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="">
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <a href="/coreWeb/bugs/b34566/postForm.do?name=value&name=value" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b34566/postForm.do?name=value&name=value");return false;'>Submit</a>
+            
+        </form>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b34566/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>name</ses:name>
+                  <ses:value>value</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>name</ses:name>
+                  <ses:value>value</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>618B73199BCC7E5E16617BF9D9136768</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=618B73199BCC7E5E16617BF9D9136768</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/bugs/b34566/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b34566/begin.do?name=value&name=value">Postback</a>
+        <form name="nameForm" id="Netui_Form_0" action="/coreWeb/bugs/b34566/postForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablehead">
+                    <td>Name:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="">
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <a href="/coreWeb/bugs/b34566/postForm.do?name=value&name=value" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b34566/postForm.do?name=value&name=value");return false;'>Submit</a>
+            
+        </form>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/b34566/postForm.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>name</ses:name>
+                  <ses:value>value</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>name</ses:name>
+                  <ses:value>value</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.name}</ses:name>
+                  <ses:value>Foo</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>618B73199BCC7E5E16617BF9D9136768</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>25</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=618B73199BCC7E5E16617BF9D9136768</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/bugs/b34566/begin.do?name=value&amp;name=value</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.8</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/bugs/b34566/begin.do?name=value&name=value">Postback</a>
+        <form name="nameForm" id="Netui_Form_0" action="/coreWeb/bugs/b34566/postForm.do" method="post">
+            <table class="tablebody">
+                <tr class="tablehead">
+                    <td>Name:</td>
+                    <td>
+                    <input type="text" name="{actionForm.name}" value="value">
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <a href="/coreWeb/bugs/b34566/postForm.do?name=value&name=value" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/bugs/b34566/postForm.do?name=value&name=value");return false;'>Submit</a>
+            
+        </form>
+    
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i<document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+-->
+</script>
+
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 08:35:51.598 PM MDT</ses:endDate>
+   <ses:testCount>3</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/b37913.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/b37913.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>B37913</sessionName>
+  <tester>ekoneil</tester>
+  <startDate>27 Mar 2004, 12:37:08.523 PM MST</startDate>
+  <description>Ensure that unstructured and structured repeaters render the correct markup for an ArrayList / Object[] of size 0.
+
+Attempt to re-record this test.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/b37913/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AlXMfnZSqpA7QWoxMl8KhWkWB6PoUa6sJd1E2kA0zqsK7lIx3q2B!1007687024</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip,deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AlXMfnZSqpA7QWoxMl8KhWkWB6PoUa6sJd1E2kA0zqsK7lIx3q2B!1007687024</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <h4>String Values - Full Repeater</h4>
+        
+        <hr />
+        <h4>String Values - Simple Repeater</h4>
+        <ul>
+        
+        </ul>
+        <hr />
+        <h4>List Values - Full Repeater</h4>
+        
+        <hr />
+        <h4>List Values - Simple Repeater</h4>
+        <ul>
+        
+        </ul>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>27 Mar 2004, 12:37:26.048 PM MST</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr132760.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr132760.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>Cr132760</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 05:33:11.849 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/bugs/cr132760/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>-1fafffd5:fda0f58f87:-7d64</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testnumber</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://localhost:8080/coreWeb/bugs/cr132760/index.jsp">
+    </head>
+    <body>
+    <p style="color:#339900;">This test will result in an error message because there is a &lt;netui:button> that
+    points to an action that doesn't exist.  This is reported as an error.
+    <hr>
+        <form id="Netui_Form_0" action="/coreWeb/bugs/cr132760/post.do" method="post">
+            <input type="submit" value="Post">
+        </form>
+        
+    </body><div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Button</th><th>Message</th><td>Action 'buttonPost' is not a valid action.</td></tr>
+</table></div>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 05:33:13.421 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>1</ses:testCount>
+   <ses:passedCount>0</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr137279.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr137279.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>cr137279</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 May 2004, 11:36:33.692 AM MDT</startDate>
+  <description>Invalid Action errors on Tree and Node</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr137279/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>A0V8f2RhZ2wCxr5k52IFQc8SIeOthLPN0m39Yw8kFB8RtQvGBWiu!-340733169</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=A0V8f2RhZ2wCxr5k52IFQc8SIeOthLPN0m39Yw8kFB8RtQvGBWiu!-340733169</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/cr137279/index.jsp">
+    </head>
+    <body>
+        <p style="color:#339900;">This test demonstrates two bad action errors within a &lt;netui:richTree>.  There are
+        three trees.  The first is a working tree.  The second has a bad action in the &lt;richTree>
+        tag.  The third has a bad action the first &lt;node> contained inside the tree.  The second
+        and third should result in errors being displayed.
+        <hr>
+        <div>
+   <div>
+      <a href='/coreWeb/bugs/cr137279/begin.do?netui_treenode=0&netui_treeid=treeOne'>
+      <img src='/coreWeb/resources/images/handlerightlast.gif' style='vertical-align:middle;' border='0' alt='' /></a>
+<img  style='vertical-align:middle;' src='/coreWeb/resources/images/folder_16_pad.gif' border='0' alt='Tree Node'/>1.0
+   </div>
+</div>
+
+        <hr>
+        <h4>Tree Action Error</h4>
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:1</b>, Found in tag <b>Tree</b>]</span>
+        <hr>
+        <h4>TreeNode Action Error</h4>
+        <span style="color:red;background-color:white">
+ [<b>Tag Error:2</b>, Found in tag <b>Node</b>]</span>
+        <hr>
+    </body><div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
+ <tr><th colspan="6">Page Errors</th></tr>
+ <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
+<tr><th>1</th><th>Tree</th><th>Message</th><td>Action badAction is not a valid action.</td></tr>
+<tr><th>2</th><th>Node</th><th>Message</th><td>Action badAction is not a valid action.</td></tr>
+</table></div>
+
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 May 2004, 11:36:38.268 AM MDT</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr176508.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr176508.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>cr176508</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 May 2004, 11:37:23.455 AM MDT</startDate>
+  <description>Select compare an Integer and String</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr176508/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>A0V1dZOrEWDRWuJvnDOp1KpLFUSZgD8k1ZwAwZEAcOEK1LauE8GN!-340733169</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=A0V1dZOrEWDRWuJvnDOp1KpLFUSZgD8k1ZwAwZEAcOEK1LauE8GN!-340733169</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/cr176508/index.jsp">
+    </head>
+    <body>
+        <p style="color:#339900;">This test verifies that within a select box the proper options are selected based upon
+        the values of the dataSource.  The test will compare an Integer to a String and then the
+        other way around. In both cases (1) and (3) should be selected.  Postback on the
+        second select doesn't work correctly because the array type is Integer.
+        <hr>
+        <form id="Netui_Form_0" action="/coreWeb/bugs/cr176508/postback.do" method="post">
+            <input type="hidden" name="wlw-select_key:{pageFlow.selectVals}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selectVals}" multiple size="3">
+<option value="1" selected>1</option>
+<option value="2">2</option>
+<option value="3" selected>3</option></select><br><br>
+            <input type="hidden" name="wlw-select_key:{pageFlow.selectValsTwo}OldValue" value="true">
+<select name="wlw-select_key:{pageFlow.selectValsTwo}" multiple size="3">
+<option value="1" selected>1</option>
+<option value="2">2</option>
+<option value="3" selected>3</option></select><br>
+            <input type="submit" value="Submit">
+        </form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 May 2004, 11:37:31.166 AM MDT</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr180865.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr180865.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,847 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>Cr180865</sessionName>
+  <tester>null</tester>
+  <startDate>23 Jun 2004, 07:30:44.610 AM MDT</startDate>
+  <description>Verify that the current page behavior works in the divpanel</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr180865/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AZFVvoYd5Hbgs8aBtNhOg8FkE1p1niEHF2Aodj1K3mJjDH7Wv1f5!1870334572</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AZFVvoYd5Hbgs8aBtNhOg8FkE1p1niEHF2Aodj1K3mJjDH7Wv1f5!1870334572</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-24eea10d:fd51b287ec:-7fc7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://localhost:7001/coreWeb/bugs/cr180865/index.jsp">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+    <body>
+        <p style="color:#339900;">This is a test of the &lt;divPanel>.  There are three links which change the currently
+        displayed page.  Each 'page' contains a link.  When the link is pressed, we hit the postback
+        link and redisplay the page.  What should happen is that the current page inside the &lt;divPanel>
+        should still be the same one that was posted back.
+        <hr>
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page1\");");'>page One</a>&nbsp;&nbsp;&nbsp;
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page2\");");'>page Two</a>&nbsp;&nbsp;&nbsp;
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page3\");");'>page Three</a>
+        <hr>
+        <div  id="divpanel" netui-div-panel="true">
+            <div  id="page1">
+                Page One<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+            
+            <div  id="page2">            
+                Page Two<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+            
+            <div  id="page3">            
+                Page Three<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+        </div>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.page2="page2"
+netui_names.page3="page3"
+netui_names.divpanel="divpanel"
+netui_names.page1="page1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUIDivPanel object and initialize it.
+     this.netUIDivPanel = new NetUIDivPanel();
+     this.netUIDivPanel.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUIDivPanel object and initialize it.
+     netUI.netUIDivPanel.rewriteAnchor(node);
+
+
+}
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr180865/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>netui_divpanel_divpanel</name>
+          <value>page3</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AZFVvoYd5Hbgs8aBtNhOg8FkE1p1niEHF2Aodj1K3mJjDH7Wv1f5!1870334572</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AZFVvoYd5Hbgs8aBtNhOg8FkE1p1niEHF2Aodj1K3mJjDH7Wv1f5!1870334572</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-24eea10d:fd51b287ec:-7fc7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://localhost:7001/coreWeb/bugs/cr180865/index.jsp">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+    <body>
+        <p style="color:#339900;">This is a test of the &lt;divPanel>.  There are three links which change the currently
+        displayed page.  Each 'page' contains a link.  When the link is pressed, we hit the postback
+        link and redisplay the page.  What should happen is that the current page inside the &lt;divPanel>
+        should still be the same one that was posted back.
+        <hr>
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page1\");");'>page One</a>&nbsp;&nbsp;&nbsp;
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page2\");");'>page Two</a>&nbsp;&nbsp;&nbsp;
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page3\");");'>page Three</a>
+        <hr>
+        <div  id="divpanel" netui-div-panel="true" netui-div-panel-first="page3">
+            <div  id="page1">
+                Page One<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+            
+            <div  id="page2">            
+                Page Two<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+            
+            <div  id="page3">            
+                Page Three<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+        </div>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.page2="page2"
+netui_names.page3="page3"
+netui_names.divpanel="divpanel"
+netui_names.page1="page1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUIDivPanel object and initialize it.
+     this.netUIDivPanel = new NetUIDivPanel();
+     this.netUIDivPanel.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUIDivPanel object and initialize it.
+     netUI.netUIDivPanel.rewriteAnchor(node);
+
+
+}
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr180865/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>netui_divpanel_divpanel</name>
+          <value>page2</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AZFVvoYd5Hbgs8aBtNhOg8FkE1p1niEHF2Aodj1K3mJjDH7Wv1f5!1870334572</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AZFVvoYd5Hbgs8aBtNhOg8FkE1p1niEHF2Aodj1K3mJjDH7Wv1f5!1870334572</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-24eea10d:fd51b287ec:-7fc7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://localhost:7001/coreWeb/bugs/cr180865/index.jsp">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+    <body>
+        <p style="color:#339900;">This is a test of the &lt;divPanel>.  There are three links which change the currently
+        displayed page.  Each 'page' contains a link.  When the link is pressed, we hit the postback
+        link and redisplay the page.  What should happen is that the current page inside the &lt;divPanel>
+        should still be the same one that was posted back.
+        <hr>
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page1\");");'>page One</a>&nbsp;&nbsp;&nbsp;
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page2\");");'>page Two</a>&nbsp;&nbsp;&nbsp;
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page3\");");'>page Three</a>
+        <hr>
+        <div  id="divpanel" netui-div-panel="true" netui-div-panel-first="page2">
+            <div  id="page1">
+                Page One<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+            
+            <div  id="page2">            
+                Page Two<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+            
+            <div  id="page3">            
+                Page Three<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+        </div>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.page2="page2"
+netui_names.page3="page3"
+netui_names.divpanel="divpanel"
+netui_names.page1="page1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUIDivPanel object and initialize it.
+     this.netUIDivPanel = new NetUIDivPanel();
+     this.netUIDivPanel.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUIDivPanel object and initialize it.
+     netUI.netUIDivPanel.rewriteAnchor(node);
+
+
+}
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr180865/postback.do</uri>
+      <method>GET</method>
+
+      <parameters>
+        <parameter>
+          <name>netui_divpanel_divpanel</name>
+          <value>page1</value>
+        </parameter>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AZFVvoYd5Hbgs8aBtNhOg8FkE1p1niEHF2Aodj1K3mJjDH7Wv1f5!1870334572</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AZFVvoYd5Hbgs8aBtNhOg8FkE1p1niEHF2Aodj1K3mJjDH7Wv1f5!1870334572</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-24eea10d:fd51b287ec:-7fc7</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://localhost:7001/coreWeb/bugs/cr180865/index.jsp">
+        
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+// define the constructor for the NetUI object
+function NetUI() {
+   this.members = new Object();    // the named object
+}
+
+// create the variable, it will be empty
+var netUI = new NetUI();
+
+-->
+</script>
+
+
+	<script src="/coreWeb/resources/javascript/netui-tree.js"></script>
+    <body>
+        <p style="color:#339900;">This is a test of the &lt;divPanel>.  There are three links which change the currently
+        displayed page.  Each 'page' contains a link.  When the link is pressed, we hit the postback
+        link and redisplay the page.  What should happen is that the current page inside the &lt;divPanel>
+        should still be the same one that was posted back.
+        <hr>
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page1\");");'>page One</a>&nbsp;&nbsp;&nbsp;
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page2\");");'>page Two</a>&nbsp;&nbsp;&nbsp;
+        <a href="" onclick='return netUI.action("divpanel.showPage(\"page3\");");'>page Three</a>
+        <hr>
+        <div  id="divpanel" netui-div-panel="true" netui-div-panel-first="page1">
+            <div  id="page1">
+                Page One<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+            
+            <div  id="page2">            
+                Page Two<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+            
+            <div  id="page3">            
+                Page Three<br>
+                <a href="/coreWeb/bugs/cr180865/postback.do" onclick='NetUIAnchorRewriter(this);'>postback</a>
+            </div>
+        </div>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.page2="page2"
+netui_names.page3="page3"
+netui_names.divpanel="divpanel"
+netui_names.page1="page1"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// Create the NetUI variable and put the webapp name into it
+netUI.webAppName = "/coreWeb";
+
+// This method will init the
+NetUI.prototype.init = function()
+{
+     // create the netUIDivPanel object and initialize it.
+     this.netUIDivPanel = new NetUIDivPanel();
+     this.netUIDivPanel.init();
+
+
+}
+
+netUI.init();
+
+
+// Create the NetUI anchor rewriter method
+function NetUIAnchorRewriter(node)
+{
+     // create the netUIDivPanel object and initialize it.
+     netUI.netUIDivPanel.rewriteAnchor(node);
+
+
+}
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>23 Jun 2004, 07:30:47.834 AM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>4</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>4</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr183774.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/cr183774.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>cr183774</sessionName>
+  <tester>Daryl</tester>
+  <startDate>26 May 2004, 11:39:16.400 AM MDT</startDate>
+  <description>Verify that tagId is written for Hidden</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/bugs/cr183774/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>A0Wr64j7PzRdfOFU8UkeJ9BIF6YFzQs2a0RDHp2Ap112P8VZ0RHb!-340733169</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=A0Wr64j7PzRdfOFU8UkeJ9BIF6YFzQs2a0RDHp2Ap112P8VZ0RHb!-340733169</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <base href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/coreWeb/bugs/cr183774/index.jsp">
+    </head>
+    <body>
+    <p style="color:#009900;">This test contains two hidden fields inside a form with the tagId attribute set.  The
+    result should be an id attribute set in the resulting html.  No need to postback.
+    <hr>
+    <form name="fooForm" action="/coreWeb/bugs/cr183774/testAction.do" method="post">
+            <input type="hidden" id="barId" name="{actionForm.bar}" value="">
+            <input type="hidden" id="fooId" name="{actionForm.foo}" value="">
+            <input type="submit" value="TestAction">
+        </form>
+    </body>
+
+<script language="JavaScript" type="text/JavaScript">
+<!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.barId="barId"
+netui_names.fooId="fooId"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+</script>
+
+
+</html>]]></responseBody>
+
+    </response>
+  </test>
+
+  </tests>
+
+  <endDate>26 May 2004, 11:39:32.063 AM MDT</endDate>
+  <testCount>1</testCount>
+
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/demo.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/demo.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,540 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>demo</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>16 Jul 2004, 11:56:05.796 AM MDT</ses:startDate>
+   <ses:description>Simple JPF / form post test.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/demo/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Demo</title>
+<link rel="stylesheet" href="/coreWeb/demo/default.css" type="text/css" />
+<base href="http://localhost:8080/coreWeb/demo/Demo.jsp">
+</head>
+<body>
+<table width="300" class="wiztable">
+  <tr>
+    <td class="wizhead" colspan="3"><b>New Hire Wizard - Name</b></td>
+  </tr>
+  <tr>
+    
+
+<!-- The contents of the form -->
+<form name="demoForm" action="/coreWeb/demo/DemoSubmit.do" method="post">
+<tr>
+  <td class="wizbody" colspan="3">Enter new hire's first and last name:</td>
+</tr>
+<tr>
+  <td class="wizbody" rowspan="2"><img src="images/_.gif" height="75" width="1"></td>
+  <td class="wizbody">Name</td>
+  <td class="wizbody"><input type="text" name="{actionForm.name}" value="">
+</tr>
+<tr>
+  <td class="wizbodyright" colspan="3" ><hr>
+    <input type="submit" value="Next">
+  </td>
+</form>
+
+  
+  </tr>
+</table>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/demo/DemoSubmit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.name}</ses:name>
+                  <ses:value>animals</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>29</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/demo/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Demo Results</title>
+<link rel="stylesheet" href="/coreWeb/demo/default.css" type="text/css" />
+<base href="http://localhost:8080/coreWeb/demo/DemoResults.jsp">
+</head>
+<body>
+<table width="300" class="wiztable">
+  <tr>
+    <td class="wizhead" colspan="3"><b>Demo Results</b></td>
+  </tr>
+  <tr>
+    
+    </tr><tr>
+    <td class="wizbody" colspan="3">Name: <b><span>animals</span></b></td>
+    </tr>
+    
+            <tr>
+                <td class="wizbody" colspan="3"><span>pig</span></td>
+            </tr>
+        
+            <tr>
+                <td class="wizbody" colspan="3"><span>frog</span></td>
+            </tr>
+        
+            <tr>
+                <td class="wizbody" colspan="3"><span>dog</span></td>
+            </tr>
+        
+<tr>
+  <td class="wizbodyright" colspan="3" ><hr>
+    <a href="/coreWeb/demo/begin.do">Back</a>
+  </td>
+
+</td>
+
+  
+  </tr>
+</table>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/demo/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/demo/DemoSubmit.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Demo</title>
+<link rel="stylesheet" href="/coreWeb/demo/default.css" type="text/css" />
+<base href="http://localhost:8080/coreWeb/demo/Demo.jsp">
+</head>
+<body>
+<table width="300" class="wiztable">
+  <tr>
+    <td class="wizhead" colspan="3"><b>New Hire Wizard - Name</b></td>
+  </tr>
+  <tr>
+    
+
+<!-- The contents of the form -->
+<form name="demoForm" action="/coreWeb/demo/DemoSubmit.do" method="post">
+<tr>
+  <td class="wizbody" colspan="3">Enter new hire's first and last name:</td>
+</tr>
+<tr>
+  <td class="wizbody" rowspan="2"><img src="images/_.gif" height="75" width="1"></td>
+  <td class="wizbody">Name</td>
+  <td class="wizbody"><input type="text" name="{actionForm.name}" value="">
+</tr>
+<tr>
+  <td class="wizbodyright" colspan="3" ><hr>
+    <input type="submit" value="Next">
+  </td>
+</form>
+
+  
+  </tr>
+</table>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/demo/DemoSubmit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>{actionForm.name}</ses:name>
+                  <ses:value>frumpels</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>30</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/demo/begin.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Demo Results</title>
+<link rel="stylesheet" href="/coreWeb/demo/default.css" type="text/css" />
+<base href="http://localhost:8080/coreWeb/demo/DemoResults.jsp">
+</head>
+<body>
+<table width="300" class="wiztable">
+  <tr>
+    <td class="wizhead" colspan="3"><b>Demo Results</b></td>
+  </tr>
+  <tr>
+    
+    </tr><tr>
+    <td class="wizbody" colspan="3">Name: <b><span>frumpels</span></b></td>
+    </tr>
+    
+            <tr>
+                <td class="wizbody" colspan="3"><span>Bob</span></td>
+            </tr>
+        
+            <tr>
+                <td class="wizbody" colspan="3"><span>Fred</span></td>
+            </tr>
+        
+            <tr>
+                <td class="wizbody" colspan="3"><span>Pete</span></td>
+            </tr>
+        
+<tr>
+  <td class="wizbodyright" colspan="3" ><hr>
+    <a href="/coreWeb/demo/begin.do">Back</a>
+  </td>
+
+</td>
+
+  
+  </tr>
+</table>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/demo/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=D02FE8CFA0A08C308957154130C6D92D</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/demo/DemoSubmit.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<html>
+<head>
+<title>Demo</title>
+<link rel="stylesheet" href="/coreWeb/demo/default.css" type="text/css" />
+<base href="http://localhost:8080/coreWeb/demo/Demo.jsp">
+</head>
+<body>
+<table width="300" class="wiztable">
+  <tr>
+    <td class="wizhead" colspan="3"><b>New Hire Wizard - Name</b></td>
+  </tr>
+  <tr>
+    
+
+<!-- The contents of the form -->
+<form name="demoForm" action="/coreWeb/demo/DemoSubmit.do" method="post">
+<tr>
+  <td class="wizbody" colspan="3">Enter new hire's first and last name:</td>
+</tr>
+<tr>
+  <td class="wizbody" rowspan="2"><img src="images/_.gif" height="75" width="1"></td>
+  <td class="wizbody">Name</td>
+  <td class="wizbody"><input type="text" name="{actionForm.name}" value="">
+</tr>
+<tr>
+  <td class="wizbodyright" colspan="3" ><hr>
+    <input type="submit" value="Next">
+  </td>
+</form>
+
+  
+  </tr>
+</table>
+</body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>16 Jul 2004, 11:56:18.062 AM MDT</ses:endDate>
+   <ses:testCount>5</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/jsScriptScopeId.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/jsScriptScopeId.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,987 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>jsScriptScopeId</ses:sessionName>
+   <ses:tester>Daryl</ses:tester>
+   <ses:startDate>08 Jul 2004, 01:01:34.173 PM MDT</ses:startDate>
+   <ses:description>Daryl</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsScriptScopeId/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies/>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-729d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;html>
+    &lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+            &lt;table border='1' cellspacing="0" cellpadding="5">&lt;tr>&lt;td>
+            &lt;div scopeId="one" >&lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsScriptScopeId/submit.do" method="post">
+&lt;input type="hidden" name="scope" value="one">
+                &lt;h4>Form One&lt;/h4>
+                &lt;table class="tablebody">
+                        
+                        
+                        
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                &lt;br />
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsScriptScopeId/./../../resources/images/bar-background.gif">&lt;/a>
+                &amp;nbsp;
+                &lt;input type="image" src="/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.one__firstName="{actionForm.firstName}"
+netui_names.one__lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+            &lt;/td>&lt;td>
+            &lt;div scopeId="two" >&lt;form name="nameBean" id="Netui_Form_1" action="/coreWeb/javascript/jsScriptScopeId/submit.do" method="post">
+&lt;input type="hidden" name="scope" value="two">
+                &lt;h4>Form Two&lt;/h4>
+                  
+                 &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+           &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.two__firstName="{actionForm.firstName}"
+netui_names.two__lastName="{actionForm.lastName}"
+
+-->
+&lt;/script>
+
+
+           &lt;/td>&lt;/tr>&lt;/table>
+           &lt;hr />
+
+        &lt;a href="/coreWeb/javascript/jsScriptScopeId/begin.do">&lt;img src="/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzillaRollover.gif')">&lt;/a>
+            &lt;script language="JavaScript" type="text/JavaScript">
+                document.writeln("&lt;br/>Get Name&lt;br/>");
+                var name = getNetuiTagName("firstName",document.forms[0]);
+                var myscope = getScopeId(document.forms[0]);
+                document.writeln("Name:" + name +  " Scope:" + myscope + "&lt;br/>");
+                name = getNetuiTagName("lastName",document.forms[0]);
+                var myscope = getScopeId(document.forms[0]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+                var name = getNetuiTagName("firstName",document.forms[1]);
+                var myscope = getScopeId(document.forms[1]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+                name = getNetuiTagName("lastName",document.forms[1]);
+                var myscope = getScopeId(document.forms[1]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+            &lt;/script>
+    &lt;/body>
+&lt;html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsScriptScopeId/submit.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>scope</ses:name>
+                  <ses:value>one</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>x</ses:name>
+                  <ses:value>33</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>y</ses:name>
+                  <ses:value>66</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>sdfasdf</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>sdfsdf</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>773B570C0D71D2F5B02DE77E0F631D63</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>87</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=773B570C0D71D2F5B02DE77E0F631D63; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-729d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsScriptScopeId/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span></span> <br />
+        scope: <span>one</span> <br /><br />
+        LastName: <span>sdfasdf</span><br />
+        FirstName: <span>sdfsdf</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsScriptScopeId/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>773B570C0D71D2F5B02DE77E0F631D63</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=773B570C0D71D2F5B02DE77E0F631D63; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-729d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;html>
+    &lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+            &lt;table border='1' cellspacing="0" cellpadding="5">&lt;tr>&lt;td>
+            &lt;div scopeId="one" >&lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsScriptScopeId/submit.do" method="post">
+&lt;input type="hidden" name="scope" value="one">
+                &lt;h4>Form One&lt;/h4>
+                &lt;table class="tablebody">
+                        
+                        
+                        
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                &lt;br />
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsScriptScopeId/./../../resources/images/bar-background.gif">&lt;/a>
+                &amp;nbsp;
+                &lt;input type="image" src="/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.one__firstName="{actionForm.firstName}"
+netui_names.one__lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+            &lt;/td>&lt;td>
+            &lt;div scopeId="two" >&lt;form name="nameBean" id="Netui_Form_1" action="/coreWeb/javascript/jsScriptScopeId/submit.do" method="post">
+&lt;input type="hidden" name="scope" value="two">
+                &lt;h4>Form Two&lt;/h4>
+                  
+                 &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+           &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.two__firstName="{actionForm.firstName}"
+netui_names.two__lastName="{actionForm.lastName}"
+
+-->
+&lt;/script>
+
+
+           &lt;/td>&lt;/tr>&lt;/table>
+           &lt;hr />
+
+        &lt;a href="/coreWeb/javascript/jsScriptScopeId/begin.do">&lt;img src="/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzillaRollover.gif')">&lt;/a>
+            &lt;script language="JavaScript" type="text/JavaScript">
+                document.writeln("&lt;br/>Get Name&lt;br/>");
+                var name = getNetuiTagName("firstName",document.forms[0]);
+                var myscope = getScopeId(document.forms[0]);
+                document.writeln("Name:" + name +  " Scope:" + myscope + "&lt;br/>");
+                name = getNetuiTagName("lastName",document.forms[0]);
+                var myscope = getScopeId(document.forms[0]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+                var name = getNetuiTagName("firstName",document.forms[1]);
+                var myscope = getScopeId(document.forms[1]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+                name = getNetuiTagName("lastName",document.forms[1]);
+                var myscope = getScopeId(document.forms[1]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+            &lt;/script>
+    &lt;/body>
+&lt;html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsScriptScopeId/foobar.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>anchorForm</ses:name>
+                  <ses:value>Submit pageFlow.action("Foo")</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>scope</ses:name>
+                  <ses:value>two</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.firstName}</ses:name>
+                  <ses:value>sdfasdfasdf</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.lastName}</ses:name>
+                  <ses:value>sfsdf</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>773B570C0D71D2F5B02DE77E0F631D63</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>129</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=773B570C0D71D2F5B02DE77E0F631D63; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-729d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!--Generated by WebLogic Workshop-->
+
+
+
+
+
+<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            Web Application Page
+        </title>
+    </head>
+    <body>
+        <a href="/coreWeb/javascript/jsScriptScopeId/begin.do">Home</a><br>
+        <hr />
+        anchorForm: <span>Submit pageFlow.action(&quot;Foo&quot;)</span> <br />
+        scope: <span>two</span> <br /><br />
+        LastName: <span>sdfasdfasdf</span><br />
+        FirstName: <span>sfsdf</span><br />
+            
+    </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>pass</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/javascript/jsScriptScopeId/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>773B570C0D71D2F5B02DE77E0F631D63</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip, deflate, x-gzip, compress, x-compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>Keep-Alive, TE</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>$Version=0; JSESSIONID=773B570C0D71D2F5B02DE77E0F631D63; $Path=/coreWeb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie2</ses:name>
+                  <ses:value>$Version="1"</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>te</ses:name>
+                  <ses:value>trailers, deflate, gzip, compress</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>testrecorder.playback.testid</ses:name>
+                  <ses:value>5322191f:fd9ffc1336:-729d</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E RPT-HTTPClient/0.3-3E</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>&lt;!--Generated by WebLogic Workshop-->
+
+
+
+
+&lt;html>
+    &lt;head>
+        &lt;title>
+            Web Application Page
+        &lt;/title>
+    &lt;/head>
+    &lt;body>
+            &lt;table border='1' cellspacing="0" cellpadding="5">&lt;tr>&lt;td>
+            &lt;div scopeId="one" >&lt;form name="nameBean" id="Netui_Form_0" action="/coreWeb/javascript/jsScriptScopeId/submit.do" method="post">
+&lt;input type="hidden" name="scope" value="one">
+                &lt;h4>Form One&lt;/h4>
+                &lt;table class="tablebody">
+                        
+                        
+                        
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/baz.do?anchorForm=Submit+Baz" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/baz.do?anchorForm=Submit+Baz");return false;'>Submit Baz&lt;/a>
+                &amp;nbsp;
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/submit.do?anchorForm=Default+Form+Submit" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/submit.do?anchorForm=Default+Form+Submit");return false;'>Default Form Submit&lt;/a>
+                &lt;br />
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/imageSubmit.do?anchorForm=Submit+from+ImageAnchor" onclick='anchor_submit_form("Netui_Form_0","/coreWeb/javascript/jsScriptScopeId/imageSubmit.do?anchorForm=Submit+from+ImageAnchor");return false;'>&lt;img src="/coreWeb/javascript/jsScriptScopeId/./../../resources/images/bar-background.gif">&lt;/a>
+                &amp;nbsp;
+                &lt;input type="image" src="/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif" onmouseout="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzillaRollover.gif')">
+            &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+// set the focus on a field within the named form
+if (document.forms["nameBean"]["{actionForm.firstName}"].type != "hidden")
+    document.forms["nameBean"]["{actionForm.firstName}"].focus();
+-->
+&lt;/script>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.one__firstName="{actionForm.firstName}"
+netui_names.one__lastName="{actionForm.lastName}"
+
+
+// **** This section contains functions typically run as events ****
+
+
+// submit the form from an Anchor or ImageAnchor
+// Search for the form by actionName,
+// Replace the action with the passed in action
+// Submit the form
+function anchor_submit_form(netuiName, newAction)
+{
+  for (var i=0; i&lt;document.forms.length; i++) {
+     if (document.forms[i].id == netuiName) {
+        document.forms[i].method = "POST";
+        document.forms[i].action = newAction;
+        document.forms[i].submit();
+     }
+   }
+}
+
+// Simple rollover function which replaces the image.src with the passed image
+function swapImage(control, image)
+{
+  control.src = image;
+}
+
+// method which will return a real id for a tagId,
+// the tag parameter will be used to find the scopeId for
+// containers that may scope their ids
+function getNetuiTagName(id, tag)
+{
+   var scopeId = getScopeId(tag);
+   if (scopeId == "")
+      return netui_names[id];
+   else
+      return netui_names[scopeId  + "__" + id];
+}
+
+// This method will walk the hierarchy from the pass element looking for a scopeId.
+// The first scopeId found will be returned or the empty string if a scopeId is not found.
+function getScopeId(tag)
+{
+   if (tag == null)
+      return "";
+   if (tag.scopeId != null)
+      return tag.scopeId;
+   return getScopeId(tag.parentElement);
+}
+-->
+&lt;/script>
+
+
+            &lt;/td>&lt;td>
+            &lt;div scopeId="two" >&lt;form name="nameBean" id="Netui_Form_1" action="/coreWeb/javascript/jsScriptScopeId/submit.do" method="post">
+&lt;input type="hidden" name="scope" value="two">
+                &lt;h4>Form Two&lt;/h4>
+                  
+                 &lt;table class="tablebody">
+                    &lt;tr class="tablehead">
+                        &lt;td>LastName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.lastName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                    &lt;tr class="tablehead">
+                        &lt;td>FirstName:&lt;/td>
+                        &lt;td>
+                        &lt;input type="text" name="{actionForm.firstName}" value="">
+                        &lt;/td>
+                    &lt;/tr>
+                &lt;/table>
+                &lt;br/>
+                &lt;a href="/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29" onclick='anchor_submit_form("Netui_Form_1","/coreWeb/javascript/jsScriptScopeId/foobar.do?anchorForm=Submit+pageFlow.action%28%22Foo%22%29");return false;'>Submit pageFlow.action("Foo")&lt;/a>
+                &amp;nbsp;
+           &lt;/form>
+
+&lt;script language="JavaScript" type="text/JavaScript">
+&lt;!--
+
+// **** This section contains code that will run when the page is loaded ****
+
+
+// Build the netui_names table to map the tagId attributes
+// to the real id written into the HTML
+if (netui_names == null)
+   var netui_names = new Object();
+netui_names.two__firstName="{actionForm.firstName}"
+netui_names.two__lastName="{actionForm.lastName}"
+
+-->
+&lt;/script>
+
+
+           &lt;/td>&lt;/tr>&lt;/table>
+           &lt;hr />
+
+        &lt;a href="/coreWeb/javascript/jsScriptScopeId/begin.do">&lt;img src="/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif" width="80" height="100" onmouseout="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzilla.gif')" onmouseover="swapImage(this,'/coreWeb/javascript/jsScriptScopeId/../../images/godzillaRollover.gif')">&lt;/a>
+            &lt;script language="JavaScript" type="text/JavaScript">
+                document.writeln("&lt;br/>Get Name&lt;br/>");
+                var name = getNetuiTagName("firstName",document.forms[0]);
+                var myscope = getScopeId(document.forms[0]);
+                document.writeln("Name:" + name +  " Scope:" + myscope + "&lt;br/>");
+                name = getNetuiTagName("lastName",document.forms[0]);
+                var myscope = getScopeId(document.forms[0]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+                var name = getNetuiTagName("firstName",document.forms[1]);
+                var myscope = getScopeId(document.forms[1]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+                name = getNetuiTagName("lastName",document.forms[1]);
+                var myscope = getScopeId(document.forms[1]);
+                document.writeln("Name:" + name + " Scope:" + myscope + "&lt;br/>");
+            &lt;/script>
+    &lt;/body>
+&lt;html></ses:responseBody>
+         </ses:response>
+         <ses:testResults>
+            <ses:testStatus>fail</ses:testStatus>
+         </ses:testResults>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>08 Jul 2004, 01:01:36.506 PM MDT</ses:endDate>
+   <ses:sessionStatus>fail</ses:sessionStatus>
+   <ses:testCount>5</ses:testCount>
+   <ses:passedCount>2</ses:passedCount>
+   <ses:failedCount>3</ses:failedCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/pfPageInput.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/pfPageInput.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,1171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>pfPageInput</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:27:41.876 PM MST</startDate>
+  <description>Tests the runtime effects of action output (formerly "page input") annotations.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/PageInputController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action output string: <b><span></span></b>
+        <br>
+        action output array: 
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good1.do">good1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good2.do">good2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable1.do">missingButNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable2.do">missingButNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched1.do">mismatched1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched2.do">mismatched2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable1.do">missingNotNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable2.do">missingNotNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/lots.do">lots</a><br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/good1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action output string: <b><span>hello</span></b>
+        <br>
+        action output array: 
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good1.do">good1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good2.do">good2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable1.do">missingButNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable2.do">missingButNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched1.do">mismatched1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched2.do">mismatched2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable1.do">missingNotNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable2.do">missingNotNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/lots.do">lots</a><br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>3</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/good2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>3</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action output string: <b><span></span></b>
+        <br>
+        action output array: 
+                            <ul>
+                        
+                            <li><span>hello</span></li>
+                        
+                            <li><span>there</span></li>
+                        
+                            </ul>
+                        
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good1.do">good1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good2.do">good2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable1.do">missingButNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable2.do">missingButNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched1.do">mismatched1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched2.do">mismatched2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable1.do">missingNotNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable2.do">missingNotNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/lots.do">lots</a><br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>4</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/missingButNullable1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>4</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action output string: <b><span></span></b>
+        <br>
+        action output array: 
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good1.do">good1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good2.do">good2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable1.do">missingButNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable2.do">missingButNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched1.do">mismatched1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched2.do">mismatched2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable1.do">missingNotNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable2.do">missingNotNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/lots.do">lots</a><br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>5</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/missingButNullable2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>5</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<body>
+        action output string: <b><span></span></b>
+        <br>
+        action output array: 
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good1.do">good1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/good2.do">good2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable1.do">missingButNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingButNullable2.do">missingButNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched1.do">mismatched1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/mismatched2.do">mismatched2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable1.do">missingNotNullable1</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/missingNotNullable2.do">missingNotNullable2</a><br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/lots.do">lots</a><br>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>6</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/mismatched1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>6</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - Mismatched Action Output</title></head>
+ <body>
+ <h1>Page Flow Error - Mismatched Action Output</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/pageFlowCore/pfPageInput/PageInputController.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>mismatched1</td></tr>
+ <tr><td><b>Forward:</b></td><td>success</td></tr>
+ <tr><td><b>Action Output:</b></td><td>mismatched</td></tr>
+ </table><br />
+ <span style="color:red">
+ The action output <b>mismatched</b> is of type <b>java.lang.Integer</b>, but was declared to expect type <b>java.lang.String</b>.
+ </span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>7</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/mismatched2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>7</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - Mismatched Action Output</title></head>
+ <body>
+ <h1>Page Flow Error - Mismatched Action Output</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/pageFlowCore/pfPageInput/PageInputController.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>mismatched2</td></tr>
+ <tr><td><b>Forward:</b></td><td>globalSuccessMismatched</td></tr>
+ <tr><td><b>Action Output:</b></td><td>mismatched</td></tr>
+ </table><br />
+ <span style="color:red">
+ The action output <b>mismatched</b> is of type <b>java.lang.String[]</b>, but was declared to expect type <b>java.lang.String</b>.
+ </span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>8</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/missingNotNullable1.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>8</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - Missing Action Output</title></head>
+ <body>
+ <h1>Page Flow Error - Missing Action Output</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/pageFlowCore/pfPageInput/PageInputController.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>missingNotNullable1</td></tr>
+ <tr><td><b>Forward:</b></td><td>success</td></tr>
+ <tr><td><b>Action Output:</b></td><td>missingNotNullable</td></tr>
+ </table><br />
+ <span style="color:red">
+ The required action output <b>missingNotNullable</b> was not present on forward <b>success</b>.
+ </span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>9</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/missingNotNullable2.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>9</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html><head><title>Page Flow Error - Missing Action Output</title></head>
+ <body>
+ <h1>Page Flow Error - Missing Action Output</h1>
+ <table border="1" cellspacing="0">
+ <tr><td><b>Page Flow:</b></td><td>/pageFlowCore/pfPageInput/PageInputController.jpf</td></tr>
+ <tr><td><b>Action:</b></td><td>missingNotNullable2</td></tr>
+ <tr><td><b>Forward:</b></td><td>globalSuccessMissingNotNullable</td></tr>
+ <tr><td><b>Action Output:</b></td><td>missingNotNullable</td></tr>
+ </table><br />
+ <span style="color:red">
+ The required action output <b>missingNotNullable</b> was not present on forward <b>globalSuccessMissingNotNullable</b>.
+ </span>
+ </body></html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>pass</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>10</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/pageFlowCore/pfPageInput/lots.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AkeadFMq2FYrS3jFgVcWLMGz3M2CaGoWmy732dQPcga5tzxWmird!601497888</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-7cb8</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>10</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+        <title>
+            lots of action outputs:
+        </title>
+    </head>
+    <body>
+        pi1: <span>hi</span>
+        <br>
+        pi2: 
+                    <ul>
+                
+                    <li><span>hi</span></li>
+                
+                    <li><span>there</span></li>
+                
+                    </ul>
+                
+        <br>
+        pi3: 
+                    <ul>
+                
+                    
+                            subarray: <ul>
+                        
+                            <li><span>hi</span></li>
+                        
+                            <li><span>there</span></li>
+                        
+                            </ul>
+                        
+                
+                    
+                            subarray: <ul>
+                        
+                            <li><span>this</span></li>
+                        
+                            <li><span>works</span></li>
+                        
+                            </ul>
+                        
+                
+                    </ul>
+                
+
+        <br>
+        <br>
+        <a href="/coreWeb/pageFlowCore/pfPageInput/begin.do">back to start</a>
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:27:50.408 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>10</testCount>
+  <passedCount>4</passedCount>
+  <failedCount>6</failedCount>
+</recorderSession>

Added: incubator/beehive/netui/test/webapps/drt/testRecorder/tests/simplerepeater.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/drt/testRecorder/tests/simplerepeater.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>simplerepeater</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>27 Jun 2004, 01:11:30.728 PM MDT</ses:startDate>
+   <ses:description>Simple repeater test for seeing how compatible the JSP compilers are between Tomcat and WLS.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/simplerepeater/simpleRepeater.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AfZqQj9GG91uJi2rEfn1JS3kVYPdNzaV2hq1s8A2ovbkPN0sYinf!619338570</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AfZqQj9GG91uJi2rEfn1JS3kVYPdNzaV2hq1s8A2ovbkPN0sYinf!619338570</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Keep-Alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Simple Repeater Test</title>
+  </head>
+
+  <body>
+    <b>Simple Repeater Test</b>
+<br/>
+
+        <table>
+    
+        <tr>
+        <td>
+             <span>foo</span>
+        </td>
+        </tr>
+    
+        <tr>
+        <td>
+             <span>bar</span>
+        </td>
+        </tr>
+    
+        <tr>
+        <td>
+             <span>baz</span>
+        </td>
+        </tr>
+    
+        <tr>
+        <td>
+             <span>blee</span>
+        </td>
+        </tr>
+    
+        </table>
+    
+
+    some random whitespace
+    <br/>
+
+    dashes ---- dashes    and dots ... dots
+
+        <br/>
+
+    <hr>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>7001</ses:port>
+            <ses:uri>/coreWeb/databinding/simplerepeater/simpleRepeater.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>AfZqQj9GG91uJi2rEfn1JS3kVYPdNzaV2hq1s8A2ovbkPN0sYinf!619338570</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>Accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Accept-Language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cache-Control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Cookie</ses:name>
+                  <ses:value>JSESSIONID=AfZqQj9GG91uJi2rEfn1JS3kVYPdNzaV2hq1s8A2ovbkPN0sYinf!619338570</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Host</ses:name>
+                  <ses:value>localhost:7001</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Keep-Alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>Pragma</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>User-Agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>Simple Repeater Test</title>
+  </head>
+
+  <body>
+    <b>Simple Repeater Test</b>
+<br/>
+
+        <table>
+    
+        <tr>
+        <td>
+             <span>foo</span>
+        </td>
+        </tr>
+    
+        <tr>
+        <td>
+             <span>bar</span>
+        </td>
+        </tr>
+    
+        <tr>
+        <td>
+             <span>baz</span>
+        </td>
+        </tr>
+    
+        <tr>
+        <td>
+             <span>blee</span>
+        </td>
+        </tr>
+    
+        </table>
+    
+
+    some random whitespace
+    <br/>
+
+    dashes ---- dashes    and dots ... dots
+
+        <br/>
+
+    <hr>
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>27 Jun 2004, 01:11:47.923 PM MDT</ses:endDate>
+   <ses:testCount>2</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/jsf/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+<?xml version="1.0"?>
+
+<!-- 
+================================================================
+
+  This project is a test of using the test recorder against a
+  Tomcat web application.  Below are targets that show how 
+  the test recorder runs against Tomcat for running a test suite 
+  against a running server, a test suite without the server running,
+  and a set of named tests against a running server.
+
+================================================================ 
+-->
+<project name="Beehive/NetUI/TestRecorder-webapp" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="../../../../beehive.properties"/>
+    <property file="../../ant/test.properties"/>
+    <property file="../../../ant/bootstrap.properties"/>
+    <property file="../../../ant/common.properties"/>
+
+    <property name="webapp.name" value="jsfWeb"/>
+    <property name="testRecorder.config.name" value="netui-server-jsf-config"/>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for building a webapp                                    -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="build" description="Build webapp">
+        <ant antfile="${test.dir}/ant/buildWebapp.xml" target="deploy.netui" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/jsf/${webapp.name}"/>
+            <property name="include.testrecorder" value="true"/>
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="test.file" location="${app.dir}/jsf/testRecorder/config/testRecorder-tests.xml"/>
+            <property name="config.file" location="${app.dir}/jsf/testRecorder/config/testRecorder-config.xml"/>
+            <property name="webapp.file" location="${app.dir}/jsf/testRecorder/config/testRecorder-webapp.xml"/>
+        </ant>
+
+        <ant antfile="${buildWebapp.ant}" target="build.webapp" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/jsf/${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="clean" description="Clean webapp">
+        <ant antfile="${test.dir}/ant/buildWebapp.xml" target="undeploy.netui" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/jsf/${webapp.name}"/>
+            <property name="include.testrecorder" value="true"/>
+        </ant>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for running test recorder test suites                    -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="playback" description="Playback a specified list of test recorder tests">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="playback" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+        </ant>
+    </target>
+
+    <target name="drt.running" description="Playback the 'drt' category to a running server">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="suite.callback" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="suite.name" value="drt"/>
+        </ant>
+    </target>
+
+    <target name="drt" description="Run the drt suite with full server start / stop support.">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" inheritAll="false" target="server.test">
+            <property name="app.build.file" location="${app.dir}/jsf/build.xml"/>
+            <property name="waitfor.url" value="http://localhost:8080/${webapp.name}"/>
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="suite.name" value="drt"/>
+            <property name="drt.mode" value="true"/>
+        </ant>
+    </target>
+
+    <target name="ensure.deployed" description="Deploy webapp">
+        <echo>ensure.deployed is NYI</echo>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for deploying the webapp on a server                     -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="deploy" description="Deploy webapp">
+        <ant antfile="${runTomcat.ant}" target="deploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+            <property name="webapp.root" value="${app.dir}/jsf/${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="undeploy" description="Undeploy webapp">
+        <ant antfile="${runTomcat.ant}" target="undeploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="redeploy" description="Redeploy webapp">
+        <ant antfile="${runTomcat.ant}" target="redeploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+        </ant>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for starting / stopping a server                         -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="start" description="Start server">
+        <ant antfile="${runTomcat.ant}" target="start" inheritAll="false"/>
+    </target>
+
+    <target name="stop" description="Stop server">
+        <ant antfile="${runTomcat.ant}" target="stop" inheritAll="false"/>
+    </target>
+
+    <target name="usage">
+        <java fork="no" classname="org.apache.tools.ant.Main">
+            <arg line="-projecthelp"/>
+        </java>
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/ActionListen.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/ActionListen.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,31 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package faces.facesSmoke;  
+
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+
+public class ActionListen implements ActionListener
+{ 
+    public void processAction(ActionEvent arg0) throws AbortProcessingException
+    {
+        System.err.println("Inside the Action Listener");
+    }
+} 

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Backing.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Backing.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package faces.facesSmoke; 
+
+import com.bea.wlw.netui.pageflow.PageFlowController;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+public class Backing implements java.io.Serializable
+{
+    private PageFlowController _pageFlow;
+    
+    public Backing() {
+    }
+    
+    public PageFlowController getPageFlow() {
+        return _pageFlow;
+    }
+    
+    public void setPageFlow(PageFlowController pageFlow) {
+        _pageFlow = pageFlow;        
+    }
+    
+    protected FacesContext getFacesContext() {
+        return FacesContext.getCurrentInstance();
+    }
+} 

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/CustomRenderBacking.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/CustomRenderBacking.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,36 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package faces.facesSmoke; 
+
+import javax.faces.event.ActionEvent;
+
+public class CustomRenderBacking extends Backing
+{
+    //private faces.facesSmoke.Controller _pageFlow;
+    
+    public void setPageFlow() {
+    }
+     
+    public void formTwoSubmit(ActionEvent event) 
+    {
+        //System.err.println("Form Two Submit:" + _pageFlow.getFormTwo().getCheckbox());
+    }
+    
+    
+} 

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/TestValidator.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/TestValidator.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,60 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package faces.facesSmoke;  
+
+import javax.faces.application.FacesMessage;
+
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+
+public class TestValidator implements Validator, StateHolder
+{ 
+    boolean _transient = false;
+    public boolean isTransient()
+    {
+        return _transient;
+    }
+
+    public void restoreState(FacesContext arg0, Object arg1)
+    {
+    }
+
+    public Object saveState(FacesContext arg0)
+    {
+        return null;
+    }
+
+    public void setTransient(boolean transientVal)
+    {
+            _transient = transientVal;
+    }
+
+    public void validate(FacesContext ctxt, UIComponent component, Object toValidate) throws ValidatorException
+    {
+        System.err.println("Inside the validator:" + toValidate);
+        String s = toValidate.toString();
+        if (!s.startsWith("x-")) {
+            FacesMessage errMsg =new FacesMessage("Text must start with 'x-'");
+            throw new ValidatorException(errMsg);
+        }
+    }
+} 

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Text.properties
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Text.properties	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,2 @@
+message=This is a message from the properties file
+replacement=This is a replacement value: {0}
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/ValueChangeListen.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/ValueChangeListen.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package faces.facesSmoke;  
+
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.PhaseId;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.event.ValueChangeListener;
+
+public class ValueChangeListen implements ValueChangeListener
+{ 
+    public void processValueChange(ValueChangeEvent arg0) throws AbortProcessingException
+    {
+        System.err.println("Inside ValueChangeListener:" + arg0.getComponent().getId());
+        System.err.println("Value:" + arg0.getNewValue() + " Old Value:" + arg0.getOldValue());
+        return;        
+    }
+    
+    public PhaseId getPhaseId() {
+        return PhaseId.ANY_PHASE;
+    }
+
+} 

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/web.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/WEB-INF/web.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+    version="2.4">
+
+    <!-- Make sure the secure forwards are turned on -->
+    <context-param>
+       <param-name>jpf-secure-forwards</param-name>
+       <param-value>true</param-value>
+    </context-param>
+
+    <!--
+    <context-param>
+        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
+        <param-value>client</param-value>
+    </context-param>
+
+    <context-param>
+        <description>
+            Set this flag to true if you want the JavaServer Faces
+            Reference Implementation to validate the XML in your
+            faces-config.xml resources against the DTD.  Default
+            value is false.
+        </description>
+        <param-name>com.sun.faces.validateXml</param-name>
+        <param-value>true</param-value>
+    </context-param>
+
+    <context-param>
+        <description>
+            Set this flag to true if you want the JavaServer Faces
+            Reference Implementation to verify that all of the application
+            objects you have configured (components, converters,
+            renderers, and validators) can be successfully created.
+            Default value is false.
+        </description>
+        <param-name>com.sun.faces.verifyObjects</param-name>
+        <param-value>true</param-value>
+    </context-param>
+  -->
+
+  <!-- Test Recorder Filter -->
+  <filter>
+    <filter-name>TestRecorderFilter</filter-name>
+    <filter-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter</filter-class>
+      <init-param>
+          <param-name>webapp</param-name>
+          <param-value>coreWeb</param-value>
+      </init-param>
+  </filter>
+
+  <filter>
+    <filter-name>PageFlowJspFilter</filter-name>
+    <filter-class>org.apache.beehive.netui.pageflow.PageFlowJspFilter</filter-class>
+  </filter>
+
+  <filter-mapping>
+    <filter-name>TestRecorderFilter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+
+  <filter-mapping>
+    <filter-name>PageFlowJspFilter</filter-name>
+    <url-pattern>*.jsp</url-pattern>
+  </filter-mapping>
+
+    <!--
+  <listener>
+      <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
+  </listener>
+    -->
+
+  <!-- Test Recorder Servlet (control channel) -->
+  <servlet>
+    <servlet-name>TestRecorderServlet</servlet-name>
+    <servlet-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet</servlet-class>
+  </servlet>
+
+  <!-- Struts Action Servlet / PageFlowController Configuration (with debugging) -->
+  <servlet>
+    <servlet-name>action</servlet-name>
+    <servlet-class>org.apache.beehive.netui.pageflow.DynamicSubappActionServlet</servlet-class>
+
+    <init-param>
+      <param-name>config</param-name>
+      <param-value>/WEB-INF/struts-config.xml</param-value>
+    </init-param>
+
+    <init-param>
+      <param-name>config/-global</param-name>
+      <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config--global.xml</param-value>
+    </init-param>
+
+    <init-param>
+      <param-name>moduleConfigLocators</param-name>
+      <param-value>moduleConfigLocator.Locator1,moduleConfigLocator.Locator2</param-value>
+    </init-param>
+
+         <!--
+            The <init-param> entry below is for Test13 which is a pure 100%
+            struts test.  The "application" param points to a properties file
+            that contains the tests error messages.  This is valid in struts.
+         -->
+        <init-param>
+            <param-name>application</param-name>
+            <param-value>miscJpf.test13.test13</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/formBeanTest1</param-name>
+            <param-value>/WEB-INF/src/formBean/test1/struts-config-formBean.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/interOp/tests</param-name>
+            <param-value>/WEB-INF/interOp/struts-config-tests.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/formBeanTest2</param-name>
+            <param-value>/WEB-INF/src/formBean/test2/struts-config-formBean.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/miscJpf/test13</param-name>
+            <param-value>/WEB-INF/src/miscJpf/test13/struts-config-test13.xml</param-value>
+        </init-param>
+
+    <init-param>
+      <param-name>debug</param-name>
+      <param-value>2</param-value>
+    </init-param>
+    <init-param>
+      <param-name>detail</param-name>
+      <param-value>2</param-value>
+    </init-param>
+    <load-on-startup>2</load-on-startup>
+  </servlet>
+
+  <!-- Struts Action Servlet Mapping -->
+
+  <!-- Note that because Struts takes the *last* mapping here as the extension to add to
+       actions posted from forms, we must have *.do come after *.jpf. -->
+  <servlet-mapping>
+    <servlet-name>action</servlet-name>
+    <url-pattern>*.jpf</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
+    <servlet-name>action</servlet-name>
+    <url-pattern>*.do</url-pattern>
+  </servlet-mapping>
+
+  <!-- Faces Servlet -->
+  <!--
+  <servlet>
+      <servlet-name>Faces Servlet</servlet-name>
+      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+      <load-on-startup> 1 </load-on-startup>
+  </servlet>
+  -->
+
+  <!-- TestRecorder Control Servlet -->
+  <servlet-mapping>
+    <servlet-name>TestRecorderServlet</servlet-name>
+    <url-pattern>/testRecorder</url-pattern>
+  </servlet-mapping>
+
+  <!-- 
+       This mapping identifies a jsp page as having JSF content.  If a
+       request comes to the server for foo.faces, the container will
+       send the request to the FacesServlet, which will expect a
+       corresponding foo.jsp page to exist containing the content.
+  <servlet-mapping>
+      <servlet-name>Faces Servlet</servlet-name>
+      <url-pattern>*.faces</url-pattern>
+  </servlet-mapping>
+  -->
+
+  <welcome-file-list>
+    <welcome-file>index.jsp</welcome-file>
+  </welcome-file-list>
+
+  <error-page>
+    <error-code>500</error-code>
+    <location>/error.jsp</location>
+  </error-page>
+
+  <jsp-config>
+    <taglib>
+        <taglib-uri>beehive-netui-tags-html.tld</taglib-uri>
+        <taglib-location>/WEB-INF/beehive-netui-tags-html.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>beehive-netui-tags-databinding.tld</taglib-uri>
+        <taglib-location>/WEB-INF/beehive-netui-tags-databinding.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>beehive-netui-tags-template.tld</taglib-uri>
+        <taglib-location>/WEB-INF/beehive-netui-tags-template.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>beehive-netui-tags-datagrid.tld</taglib-uri>
+        <taglib-location>/WEB-INF/beehive-netui-tags-datagrid.tld</taglib-location>
+    </taglib>
+
+      <!-- the JSF Tag Libraries -->
+      <taglib>
+          <taglib-uri>http://java.sun.com/jsf/html</taglib-uri>
+          <taglib-location>/WEB-INF/html_basic.tld</taglib-location>
+      </taglib>
+
+      <taglib>
+          <taglib-uri>http://java.sun.com/jsf/core</taglib-uri>
+          <taglib-location>/WEB-INF/jsf_core.tld</taglib-location>
+      </taglib>
+
+      <!-- Mock Portal -->
+      <taglib>
+          <taglib-uri>mockportal.tld</taglib-uri>
+          <taglib-location>/WEB-INF/mockportal.tld</taglib-location>
+      </taglib>
+
+    <!-- Struts Tag Library Descriptors -->
+    <taglib>
+        <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
+        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
+        <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
+        <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>struts-bean.tld</taglib-uri>
+        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>struts-html.tld</taglib-uri>
+        <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>struts-logic.tld</taglib-uri>
+        <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
+    </taglib>
+
+  </jsp-config>
+
+   <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>Secure PageFlow - all</web-resource-name>
+        <url-pattern>/security/secure.do</url-pattern>
+        <url-pattern>/security/back_secure.do</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+  <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>Unsecure PageFlow - begin</web-resource-name>
+        <url-pattern>/security/unsecure.do</url-pattern>
+        <url-pattern>/security/back_unsecure.do</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>NONE</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+
+  <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>miniTests-pageFlowUtils-secure</web-resource-name>
+        <url-pattern>/miniTests/pageFlowUtils/secure/*</url-pattern>
+        <url-pattern>/miniTests/pageFlowUtils/secureFoo.do</url-pattern>
+        <url-pattern>*.pageFlowUtilsSecure</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+  <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>miniTests-pageFlowUtils-unsecure</web-resource-name>
+        <url-pattern>/miniTests/pageFlowUtils/unsecure/*</url-pattern>
+        <url-pattern>/miniTests/pageFlowUtils/unsecureFoo.do</url-pattern>
+        <url-pattern>*.pageFlowUtilsUnsecure</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>NONE</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+
+  <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>for SecureLinks test</web-resource-name>
+        <url-pattern>/tags/secureLinks/secure/*</url-pattern>
+        <url-pattern>/tags/secureLinks/linkToSecure/secureAction.do</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+      </user-data-constraint>
+  </security-constraint>
+
+  <security-role>
+      <description>Test role for /miniTests/roles</description>
+      <role-name>GoodRole1</role-name>
+  </security-role>
+  <security-role>
+      <description>Test role for /miniTests/roles</description>
+      <role-name>GoodRole2</role-name>
+  </security-role>
+  <security-role>
+      <description>Test role for /miniTests/roles</description>
+      <role-name>BadRole</role-name>
+  </security-role>
+
+    <!-- Security constraints for the jpfSecurity tests -->
+    <security-constraint>
+       <web-resource-collection>
+          <web-resource-name>Jpf Security on - filters</web-resource-name>
+          <url-pattern>/jpfSecurity/test1/secure1.do</url-pattern>
+          <url-pattern>/jpfSecurity/test2/secure1.do</url-pattern>
+          <url-pattern>/jpfSecurity/test3/secure1.do</url-pattern>
+          <url-pattern>/pageInput/test11/secure1.do</url-pattern>
+          <url-pattern>/miscJpf/bug38484/action1.do</url-pattern>
+          <url-pattern>/jpfScopedForms/test50/secure1.do</url-pattern>
+          <url-pattern>/resources/images/secureButton.jpg</url-pattern>
+          <url-pattern>/scopedJpf/jpfTest3/jpf1/begin.do</url-pattern>
+          <url-pattern>/scopedJpf/jpfTest3/jpf2/Jpf2.jpf</url-pattern>
+          <url-pattern>/singletonJpf/jpfTest9/jpf2/Jpf2.jpf</url-pattern>
+
+          </web-resource-collection>
+       <user-data-constraint>
+          <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+       </user-data-constraint>
+    </security-constraint>
+    <security-constraint>
+       <display-name>Security Constraints</display-name>
+       <web-resource-collection>
+          <web-resource-name>Jpf Security off - filters</web-resource-name>
+          <url-pattern>/jpfSecurity/test1/action2.do</url-pattern>
+          <url-pattern>/resources/jsp/done.jsp</url-pattern>
+          <url-pattern>/resources/jsp/error.jsp</url-pattern>
+          <url-pattern>/pageInput/test11/action2.do</url-pattern>
+          <url-pattern>/miscJpf/bug38484/action2.do</url-pattern>
+          <url-pattern>/jpfScopedForms/test50/action2.do</url-pattern>
+          <url-pattern>/scopedJpf/jpfTest3/jpf1/unsecure.do</url-pattern>
+          <url-pattern>/scopedJpf/jpfTest3/jpf2/unsecure.do</url-pattern>
+          <url-pattern>/singletonJpf/jpfTest9/jpf1/Jpf1.jpf</url-pattern>
+          </web-resource-collection>
+       <user-data-constraint>
+          <transport-guarantee>NONE</transport-guarantee>
+       </user-data-constraint>
+    </security-constraint>
+
+</web-app>

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,43 @@
+<%@ page import="java.net.URL,
+    org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions,
+    org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter" %>
+<% String _title = "JSF Tests"; %>
+<%@ include file="dataStructure.jspf"%>
+<%
+    TestDefinitions testDefs = TestRecorderFilter.instance().getTestDefinitions();
+    Info[] _testList = {
+	new Info("FacesSmokeAnchors", "/coreWeb/faces/facesSmoke/Controller.jpf",
+	 "Smoke test of the JSF Anchor.",
+	 "JSF, commandLink"
+		 ),
+	new Info("FacesSmokeBundle", "/coreWeb/faces/facesSmoke/Controller.jpf",
+	 "Smoke test of the JSF Bundle.",
+	 "JSF, bundle"
+		 ),
+	new Info("FacesSmokeConversions", "/coreWeb/faces/facesSmoke/Controller.jpf",
+	 "Smoke test of the JSF Conversions.",
+	 "JSF, conversions"
+		 ),
+	new Info("FacesSmokeDataTable", "/coreWeb/faces/facesSmoke/Controller.jpf",
+	 "Smoke test of the JSF DataTable.",
+	 "JSF, DataTable"
+		 ),
+	new Info("FacesSmokeFormOne", "/coreWeb/faces/facesSmoke/Controller.jpf",
+	 "Smoke test of the JSF Form and controls.",
+	 "JSF, Form"
+		 ),
+	new Info("FacesSmokeFormTwo", "/coreWeb/faces/facesSmoke/Controller.jpf",
+	 "Smoke test of the JSF Form and controls.",
+	 "JSF, Form"
+		 ),
+	new Info("FacesSmokeImage", "/coreWeb/faces/facesSmoke/Controller.jpf",
+	 "Smoke test of the JSF Image.",
+	 "JSF, GraphicImage"
+		 ),
+	new Info("FacesSmokePanel", "/coreWeb/faces/facesSmoke/Controller.jpf",
+	 "Smoke test of the JSF Panel.",
+	 "JSF, PanelGrid"
+		 ),
+    };
+%>
+<%@ include file="page.jspf"%>

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Anchors.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Anchors.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,73 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+
+<html>
+    <head>
+        <title>Anchor - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        <f:view>
+              <h:form id="formBase">
+                <h:panelGrid  cellpadding="0" cellspacing="0" columns="1" width="600pt" columnClasses="titleBar">
+                    <h:outputText value="Anchor and Button Tests" />
+                    <f:verbatim escape="false"><hr width="600pt" /></f:verbatim>
+                </h:panelGrid>
+                
+                <h:panelGrid style="margin:5,0,5,0" columns="1">
+                <h:outputLink value="Controller.jpf" >
+                    <h:outputText value="Navigate Home" styleClass="normal" />
+                </h:outputLink>
+                </h:panelGrid>
+                
+                <h:outputText value="Links" styleClass="sectionTitle" />
+                <h:panelGrid columns="2" width="400pt" style="margin:5,0,5,0">
+                    <h:commandLink styleClass="normal" >
+                        <h:outputText value="Command Link One" styleClass="normal" />            
+                        <f:param name="foo" value="link1-bar" />
+                        <f:param name="blee" value="link1-baz" />
+                    </h:commandLink>
+                    <h:commandLink styleClass="normal" >
+                        <f:actionListener type="faces.facesSmoke.ActionListen" />
+                        <h:outputText value="Command Link Two" styleClass="normal" />            
+                        <f:param name="foo" value="link2-bar" />
+                        <f:param name="blee" value="link2-baz" />
+                    </h:commandLink>
+                </h:panelGrid>
+
+                <h:panelGrid columns="1" width="400pt" style="margin:5,0,5,0">
+                
+                <h:outputText value="Image Button" styleClass="sectionTitle" />
+                <h:commandButton type="button" image="update.gif" />
+
+                <h:outputText value="Command Button" styleClass="sectionTitle" />
+                <h:commandButton value="Submit this Form" >
+                    <f:param name="foo" value="button-bar" />
+                    <f:param name="blee" value="button-baz" />
+                </h:commandButton>
+                </h:panelGrid>
+               </h:form>
+               
+               <hr />
+                <h:outputText value="Test of Attribute" >
+                    <f:attribute name="styleClass" value="normal" />
+                </h:outputText>
+        </f:view>
+        <hr />
+        <%
+            HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
+            String foo =  req.getParameter("foo");
+            String blee =  req.getParameter("blee");
+            if (foo == null)
+                foo = "[Not Defined]";
+            if (blee == null)
+                blee = "[Not Defined]";
+        %>
+        Foo: <%= foo %><br />
+        Blee: <%= blee %><br />
+    </body>
+</html>
+

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Bundle.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Bundle.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,37 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <title>Image - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        <f:view>
+             <f:loadBundle basename="faces.facesSmoke.Text" var="Bundle" />
+              <h:form>
+                <h:panelGrid  cellpadding="0" cellspacing="0" columns="1" width="600pt" columnClasses="titleBar">
+                    <h:outputText value="Bundle Tests" />
+                    <f:verbatim escape="false"><hr width="600pt" /></f:verbatim>
+                </h:panelGrid>
+                <h:outputLink value="Controller.jpf" >
+                    <h:outputText value="Navigate Home" styleClass="normal" />
+                </h:outputLink><br />
+                <h:outputText value="Bundle" styleClass="normal" />
+                <f:subview id="sub1">
+                    <h:panelGrid columns="1">
+                        <h:outputText value="#{Bundle.message}" styleClass="normal" />
+                        <h:outputFormat value="#{Bundle.replacement}" styleClass="normal"> 
+                            <f:param value="Replacement Value From Param" />
+                        </h:outputFormat>
+                    </h:panelGrid>
+                </f:subview>
+               </h:form>
+        </f:view>
+    </body>
+</html>
+
+  
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,698 @@
+package faces.facesSmoke;
+
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import javax.faces.component.UISelectItem;
+import javax.faces.model.SelectItem;
+import javax.servlet.http.HttpSession;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller 
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ * <pageflow-object id="formbean:FormOne"/>
+ * <pageflow-object id="formbean:FormTwo"/>
+ * <pageflow-object id="formbean:ListBean"/>
+ * <pageflow-object id="action:begin.do">
+ *   <property value="80" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#index#index.faces#@action:begin.do@">
+ *   <property value="116,130,130,144" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="index" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goPanels.do">
+ *   <property value="80" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Panels.faces#@action:goPanels.do@">
+ *   <property value="116,130,130,144" name="elbowsX"/>
+ *   <property value="192,192,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goImages.do">
+ *   <property value="80" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Image.faces#@action:goImages.do@">
+ *   <property value="116,130,130,144" name="elbowsX"/>
+ *   <property value="272,272,272,272" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goAnchors.do">
+ *   <property value="80" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Anchors.faces#@action:goAnchors.do@">
+ *   <property value="116,130,130,144" name="elbowsX"/>
+ *   <property value="352,352,352,352" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goConvert.do">
+ *   <property value="400" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Convert.faces#@action:goConvert.do@">
+ *   <property value="436,460,460,484" name="elbowsX"/>
+ *   <property value="92,92,92,92" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goFormOne.do">
+ *   <property value="400" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#FormOne.faces#@action:goFormOne.do@">
+ *   <property value="436,460,460,484" name="elbowsX"/>
+ *   <property value="192,192,192,192" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goBundle.do">
+ *   <property value="400" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#Bundle.faces#@action:goBundle.do@">
+ *   <property value="436,460,460,484" name="elbowsX"/>
+ *   <property value="272,272,272,272" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goFormTwo.do">
+ *   <property value="400" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#FormTwo.faces#@action:goFormTwo.do@">
+ *   <property value="436,460,460,484" name="elbowsX"/>
+ *   <property value="352,352,352,352" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="action:goDataTable.do">
+ *   <property value="400" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="forward:path#success#DataTable.faces#@action:goDataTable.do@">
+ *   <property value="436,460,460,484" name="elbowsX"/>
+ *   <property value="432,432,432,432" name="elbowsY"/>
+ *   <property value="East_1" name="fromPort"/>
+ *   <property value="West_1" name="toPort"/>
+ *   <property value="success" name="label"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:index.faces">
+ *   <property value="180" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Panels.faces">
+ *   <property value="180" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Image.faces">
+ *   <property value="180" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Anchors.faces">
+ *   <property value="180" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Convert.faces">
+ *   <property value="520" name="x"/>
+ *   <property value="100" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:FormOne.faces">
+ *   <property value="520" name="x"/>
+ *   <property value="200" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:Bundle.faces">
+ *   <property value="520" name="x"/>
+ *   <property value="280" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:FormTwo.faces">
+ *   <property value="520" name="x"/>
+ *   <property value="360" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:DataTable.faces">
+ *   <property value="520" name="x"/>
+ *   <property value="440" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:facesTemplate.faces">
+ *   <property value="80" name="x"/>
+ *   <property value="520" name="y"/>
+ * </pageflow-object>
+ * <pageflow-object id="page:testPage.faces">
+ *   <property value="80" name="x"/>
+ *   <property value="460" name="y"/>
+ * </pageflow-object>
+ * </view-properties>
+ * ::
+ */
+@Jpf.Controller(
+    )
+@Jpf.ViewProperties(
+    value = {
+        "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+        "<view-properties>",
+        "<pageflow-object id='formbean:FormOne'/>",
+        "<pageflow-object id='formbean:FormTwo'/>",
+        "<pageflow-object id='formbean:ListBean'/>",
+        "<pageflow-object id='action:begin.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#index#index.faces#@action:begin.do@'>",
+        "  <property value='116,130,130,144' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='index' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goPanels.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Panels.faces#@action:goPanels.do@'>",
+        "  <property value='116,130,130,144' name='elbowsX'/>",
+        "  <property value='192,192,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goImages.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Image.faces#@action:goImages.do@'>",
+        "  <property value='116,130,130,144' name='elbowsX'/>",
+        "  <property value='272,272,272,272' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goAnchors.do'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Anchors.faces#@action:goAnchors.do@'>",
+        "  <property value='116,130,130,144' name='elbowsX'/>",
+        "  <property value='352,352,352,352' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goConvert.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Convert.faces#@action:goConvert.do@'>",
+        "  <property value='436,460,460,484' name='elbowsX'/>",
+        "  <property value='92,92,92,92' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goFormOne.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#FormOne.faces#@action:goFormOne.do@'>",
+        "  <property value='436,460,460,484' name='elbowsX'/>",
+        "  <property value='192,192,192,192' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goBundle.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#Bundle.faces#@action:goBundle.do@'>",
+        "  <property value='436,460,460,484' name='elbowsX'/>",
+        "  <property value='272,272,272,272' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goFormTwo.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#FormTwo.faces#@action:goFormTwo.do@'>",
+        "  <property value='436,460,460,484' name='elbowsX'/>",
+        "  <property value='352,352,352,352' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='action:goDataTable.do'>",
+        "  <property value='400' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='forward:path#success#DataTable.faces#@action:goDataTable.do@'>",
+        "  <property value='436,460,460,484' name='elbowsX'/>",
+        "  <property value='432,432,432,432' name='elbowsY'/>",
+        "  <property value='East_1' name='fromPort'/>",
+        "  <property value='West_1' name='toPort'/>",
+        "  <property value='success' name='label'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:index.faces'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Panels.faces'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Image.faces'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Anchors.faces'>",
+        "  <property value='180' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Convert.faces'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='100' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:FormOne.faces'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='200' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:Bundle.faces'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='280' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:FormTwo.faces'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='360' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:DataTable.faces'>",
+        "  <property value='520' name='x'/>",
+        "  <property value='440' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:facesTemplate.faces'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='520' name='y'/>",
+        "</pageflow-object>",
+        "<pageflow-object id='page:testPage.faces'>",
+        "  <property value='80' name='x'/>",
+        "  <property value='460' name='y'/>",
+        "</pageflow-object>",
+        "</view-properties>"
+    })
+public class Controller extends PageFlowController
+{
+    private Date _date;
+    private int _number = 123456;
+    private FormOne _formOne;
+    private FormTwo _formTwo;
+    private String _menuOne;
+    private ListBean[] _list;
+    
+    private ArrayList _selectItems;
+    
+    public Date getDate() {
+        return _date;
+    }
+    
+    public int getNumber() {
+        return _number;
+    }
+    
+    public FormOne getFormOne() {
+        return _formOne;
+    }
+    
+    public void setFormOne(FormOne formOne) {
+        _formOne = formOne;
+    }
+    
+    public FormTwo getFormTwo() {
+        return _formTwo;
+    }
+      
+      
+    public ArrayList getSelectItems() {
+        return _selectItems;
+    }
+    
+    public String getMenuOne() {
+        return _menuOne;
+    }
+    
+    public void setMenuOne(String menuOne) {
+        _menuOne = menuOne;
+    }
+    
+    public ListBean[] getList() {
+        return _list;
+    }
+        
+    public void onCreate()
+    {
+        try {
+            
+            HttpSession session = this.getSession();
+            createBacking(session);
+            session.setAttribute("PageFlow", this); 
+            
+            DateFormat df = DateFormat.getInstance();
+            _date = df.parse("01/12/2000 4:5 PM, PDT");
+            
+            _formOne = new FormOne();
+            _formOne.setText("x-initial Text Value");
+            _formOne.setTextArea("initial Text Area Value"); 
+            _formOne.setTextInt(80); 
+            
+            _formTwo = new FormTwo();
+            
+            _selectItems = new ArrayList();
+            _selectItems.add(new SelectItem("Select Items One"));
+            _selectItems.add(new SelectItem("Select Items Two"));
+            
+            _list = new ListBean[5];
+            for (int i=0;i<_list.length;i++) {
+                _list[i] = new ListBean("Name " + i, "Type " + i);
+            }
+            
+            CustomRenderBacking crb = new CustomRenderBacking();
+            crb.setPageFlow(this);
+            session.setAttribute("CustomRenderBacking",crb);
+                   
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    
+    private void createBacking(HttpSession session)
+    {
+            Backing b = new CustomRenderBacking();
+            b.setPageFlow(this);
+            session.setAttribute("CustomRenderBacking",b); 
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "index",
+                path = "index.faces") 
+        })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Panels.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Panels.faces") 
+        })
+    protected Forward goPanels()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Image.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Image.faces") 
+        })
+    protected Forward goImages()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Anchors.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Anchors.faces") 
+        })
+    protected Forward goAnchors()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Convert.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Convert.faces") 
+        })
+    protected Forward goConvert()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="FormOne.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "FormOne.faces") 
+        })
+    protected Forward goFormOne()
+    {
+        return new Forward("success");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="Bundle.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "Bundle.faces") 
+        })
+    protected Forward goBundle()
+    {
+        return new Forward("success");
+    }
+    
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="FormTwo.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "FormTwo.faces") 
+        })
+    protected Forward goFormTwo()
+    {
+        return new Forward("success");
+    }
+
+    /**
+     * @jpf:action
+     * @jpf:forward name="success" path="DataTable.faces"
+     */
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "DataTable.faces") 
+        })
+    protected Forward goDataTable()
+    {
+        return new Forward("success");
+    }
+
+    public static class FormOne extends org.apache.beehive.netui.pageflow.FormData
+    {
+        private String password;
+
+        private int textInt;
+
+        private String textArea;
+
+        private String text;
+
+        public String getText()
+                {
+            return this.text;
+            }
+
+
+        public void setText(String text)
+                {
+            this.text = text;
+            }
+
+
+        public String getTextArea()
+                {
+            return this.textArea;
+            }
+
+
+        public void setTextArea(String textArea)
+                {
+            this.textArea = textArea;
+            }
+
+
+        public int getTextInt()
+                {
+            return this.textInt;
+            }
+
+
+        public void setTextInt(int textInt)
+                {
+            this.textInt = textInt;
+            }
+
+
+        public String getPassword()
+                {
+            return this.password;
+            }
+
+
+        public void setPassword(String password)
+                {
+            this.password = password;
+            }
+
+    }
+
+
+
+    public static class FormTwo extends org.apache.beehive.netui.pageflow.FormData
+    {
+        private String[] manyCheckboxTwo;
+
+        private String[] manyCheckbox;
+
+        private boolean checkbox;
+
+        public boolean getCheckbox()
+                {
+            return this.checkbox;
+            }
+
+
+        public void setCheckbox(boolean checkbox)
+                {
+            this.checkbox = checkbox;
+            }
+
+
+        public String[] getManyCheckbox()
+                {
+            return this.manyCheckbox;
+            }
+
+
+        public void setManyCheckbox(String[] manyCheckbox)
+                {
+            this.manyCheckbox = manyCheckbox;
+            }
+
+
+        public String[] getManyCheckboxTwo()
+                {
+            return this.manyCheckboxTwo;
+            }
+
+
+        public void setManyCheckboxTwo(String[] manyCheckboxTwo)
+                {
+            this.manyCheckboxTwo = manyCheckboxTwo;
+            }
+
+    }
+
+    public static class ListBean extends org.apache.beehive.netui.pageflow.FormData
+    {
+        private String type;
+
+        private String name;
+        
+        public ListBean() {
+        }
+        
+        public ListBean(String name, String type) {
+            this.name = name;
+            this.type = type;
+        }
+
+        public String getName()
+                {
+            return this.name;
+            }
+
+
+        public void setName(String name)
+                {
+            this.name = name;
+            }
+
+
+        public String getType()
+                {
+            return this.type;
+            }
+
+
+        public void setType(String type)
+                {
+            this.type = type;
+            }
+
+    }
+}

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Convert.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Convert.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <title>Image - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        <f:view>
+              <h:form>
+                <h:panelGrid  cellpadding="0" cellspacing="0" columns="1" width="600pt" columnClasses="titleBar">
+                    <h:outputText value="Image Tests" />
+                    <f:verbatim escape="false"><hr width="600pt" /></f:verbatim>
+                </h:panelGrid>
+                <h:outputLink value="Controller.jpf" >
+                    <h:outputText value="Navigate Home" styleClass="normal" />
+                </h:outputLink><br />
+                <h:outputText value="Converter Tag" styleClass="sectionTitle" />
+                <h:panelGrid columns="3" styleClass="normal">
+                    <h:outputText value="Date:" /><h:outputText id="date" value="#{PageFlow.date}"><f:convertDateTime pattern="dd-MMM-yyyy" /></h:outputText> 
+                        <h:message  styleClass="validationMessage" for="date" showDetail="true" showSummary="true"/>
+                    <h:outputText value="Number:" /><h:outputText id="number" value="#{PageFlow.number}"><f:convertNumber currencyCode="usd" /></h:outputText> 
+                        <h:message  styleClass="validationMessage" for="number" showDetail="true" showSummary="true"/>
+                    <h:outputText value="No Formatting Date:" /><h:outputText value="#{PageFlow.date}" />
+                        <h:message  styleClass="validationMessage" for="date" showDetail="true" showSummary="true"/>
+                    <h:outputText value="No Formatting Number:" /><h:outputText value="#{PageFlow.number}" />
+                        <h:message  styleClass="validationMessage" for="date" showDetail="true" showSummary="true"/>
+                </h:panelGrid>
+              </h:form>
+        </f:view>
+    </body>
+</html>
+
+  
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/DataTable.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/DataTable.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,52 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <title>DataTable</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        <f:view>
+          <h:form>
+                <h:panelGrid  cellpadding="0" cellspacing="0" columns="1" width="600pt" columnClasses="titleBar">
+                    <h:outputText value="DataTable Tests" />
+                    <f:verbatim escape="false"><hr width="600pt" /></f:verbatim>
+                </h:panelGrid>
+                <h:outputLink value="Controller.jpf" >
+                    <h:outputText value="Navigate Home" styleClass="normal" />
+                </h:outputLink><br />
+
+            <h:dataTable id="table" rows="20" value="#{PageFlow.list}" var="l" border="1" 
+                cellpadding="2" cellspacing="0" headerClass="dataHeaders"
+                columnClasses="dataColumnOne, dataColumnTwo" footerClass="dataHeaders" 
+                >  
+            
+            <!-- The columns contain facets which act as headers -->      
+            <h:column>
+                <f:facet name="header">
+                    <h:outputText value="Name"/>
+                </f:facet>
+                <f:facet name="footer">
+                    <h:outputText value="Last Name"/>
+                </f:facet>
+                    <h:outputText value="#{l.name}"/>
+            </h:column>
+            
+            <!-- The columns contain facets which act as headers -->      
+            <h:column>
+                <f:facet name="header">
+                    <h:outputText value="Type"/>
+                </f:facet>
+                <f:facet name="footer">
+                    <h:outputText value="Last Type"/>
+                </f:facet>
+                    <h:outputText value="#{l.type}"/>
+            </h:column>
+            </h:dataTable>
+        </h:form>
+    </f:view>
+    </body>
+</html>

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/FormOne.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/FormOne.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,56 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <title>Form One - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        <f:view>
+              <h:form>
+                <h:panelGrid  cellpadding="0" cellspacing="0" columns="1" width="600pt" columnClasses="titleBar">
+                    <h:outputText value="Form One Tests" />
+                    <f:verbatim escape="false"><hr width="600pt" /></f:verbatim>
+                </h:panelGrid>
+                <h:outputLink value="Controller.jpf" >
+                    <h:outputText value="Navigate Home" styleClass="normal" />
+                </h:outputLink><br />
+
+                <h:outputText value="Form One" styleClass="sectionTitle" />
+                <br />
+                <h:panelGrid columns="3" styleClass="normal" columnClasses="columnRight, columnLeft" width="600pt">
+                    <h:outputLabel for="text"><h:outputText value="Text:"/></h:outputLabel>
+                    <h:inputText id="text" value="#{PageFlow.formOne.text}" size="25" styleClass="normal">
+                        <f:valueChangeListener type="faces.facesSmoke.ValueChangeListen" />
+                    </h:inputText>     
+                    <h:message  styleClass="validationMessage" for="text" showDetail="true"/>
+                    
+                    <h:outputLabel for="textArea" ><h:outputText value="Text Area:"/></h:outputLabel>
+                    <h:inputTextarea id="textArea" value="#{PageFlow.formOne.textArea}" cols="25" rows="10" 
+                        style="color: #000099;font-family:Verdana; font-size:8pt; margin:5,5,5,5; "> </h:inputTextarea>
+                    <h:outputText value=""/>
+                    
+                    <h:outputLabel for="password" value="Secret:"><h:outputText value="Secret:"/></h:outputLabel>
+                    <h:inputSecret id="password" value="#{PageFlow.formOne.password}"> </h:inputSecret>
+                    <h:outputText value=""/>
+
+                    <h:outputLabel for="textInt"  >
+                        <h:outputText value="Binding to Number (#{PageFlow.formOne.textInt / 100}%)"/>
+                    </h:outputLabel>
+                    <h:inputText id="textInt" value="#{PageFlow.formOne.textInt}" styleClass="normal" size="3">
+                        <f:validateLongRange maximum="100" minimum="0" />
+                    </h:inputText>
+                    <h:message  styleClass="validationMessage" for="textInt" showDetail="true"/>
+                </h:panelGrid>
+                <h:inputHidden value="PostFromHidden"> </h:inputHidden>
+                <h:commandButton value="Submit" />
+                <hr>
+                <h:messages styleClass="validationMessage" />
+              </h:form>
+        </f:view>
+    </body>
+</html>
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/FormTwo.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/FormTwo.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,81 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <title>Form One - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        <f:view>
+              <h:form>
+                <h:panelGrid  cellpadding="0" cellspacing="0" columns="1" width="600pt" columnClasses="titleBar">
+                    <h:outputText value="Form One Tests" />
+                    <f:verbatim escape="false"><hr width="600pt" /></f:verbatim>
+                </h:panelGrid>
+                <h:outputLink value="Controller.jpf" >
+                    <h:outputText value="Navigate Home" styleClass="normal" />
+                </h:outputLink><br />
+                <h:outputText value="Form One" styleClass="sectionTitle" />
+                <br />
+                <h:panelGrid columns="2" columnClasses="columnRight, columnLeft" width="600pt">
+                    <h:outputText value="SelectBooleanCheckbox" /> 
+                    <h:selectBooleanCheckbox id="selectBooleanCheckbox" value="#{PageFlow.formTwo.checkbox}" />
+                    
+                    <h:outputText value="SelectManyCheckbox" />
+                    <h:selectManyCheckbox value="#{PageFlow.formTwo.manyCheckbox}">
+                        <f:selectItem itemValue="item1" itemLabel="Item One" /> 
+                        <f:selectItem itemValue="item2" itemLabel="Item Two" />
+                    </h:selectManyCheckbox> 
+                    
+                    
+                    <h:outputText value="SelectManyCheckbox-SelectItems" />
+                    <h:selectManyCheckbox value="#{PageFlow.formTwo.manyCheckboxTwo}">
+                        <f:selectItems value="#{PageFlow.selectItems}" />
+                    </h:selectManyCheckbox>
+                    
+                    <h:outputText value="SelectManyListbox" />
+                    <h:selectManyListbox size="3" style="color: #000099;font-family:Verdana;font-size:8pt;"> 
+                        <f:selectItem itemValue="list1" itemLabel="List One" /> 
+                        <f:selectItem itemValue="list2" itemLabel="List Two" /> 
+                        <f:selectItem itemValue="list3" itemLabel="List Three" /> 
+                    </h:selectManyListbox>
+                    
+                    <h:outputText value="SelectManyMenu" />
+                    <h:selectManyMenu style="color: #000099;font-family:Verdana;font-size:8pt;" > 
+                        <f:selectItem itemValue="Menu1" itemLabel="Menu One" /> 
+                        <f:selectItem itemValue="Menu2" itemLabel="Menu Two" /> 
+                        <f:selectItem itemValue="Menu3" itemLabel="Menu Three" /> 
+                    </h:selectManyMenu>
+                     
+                    <h:outputText value="SelectOneListbox" />
+                    <h:selectOneListbox style="color: #000099;font-family:Verdana;font-size:8pt;"> 
+                        <f:selectItem itemValue="One-list1" itemLabel="One-List One" /> 
+                        <f:selectItem itemValue="One-list2" itemLabel="One-List Two" /> 
+                        <f:selectItem itemValue="One-list3" itemLabel="One-List Three" /> 
+                    </h:selectOneListbox>
+                    
+                    <h:outputText value="SelectOneMenu" />
+                    <h:selectOneMenu value="#{PageFlow.menuOne}" style="color: #000099;font-family:Verdana;font-size:8pt;"> 
+                        <f:selectItem itemLabel="One-Menu-1" itemValue="One-Menu One" />
+                        <f:selectItem itemLabel="One-Menu-2" itemValue="One-Menu Two" />
+                        <f:selectItem itemLabel="One-Menu-3" itemValue="One-Menu Three" />
+                    </h:selectOneMenu>
+                    
+                    <h:outputText value="SelectOneMenu" /> 
+                    <h:selectOneRadio> 
+                        <f:selectItem itemLabel="One-Radio-1" itemValue="One-Radio One" />
+                        <f:selectItem itemLabel="One-Radio-2" itemValue="One-Radio Two" />
+                        <f:selectItem itemLabel="One-Radio-3" itemValue="One-Radio Three" />
+                    </h:selectOneRadio>
+                </h:panelGrid>
+                <h:commandButton value="Submit" actionListener="#{CustomRenderBacking.formTwoSubmit}" />
+                <hr>
+                <h:messages styleClass="validationMessage" />
+              </h:form>
+        </f:view>
+    </body>
+</html>
+

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Image.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Image.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <title>Image - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        <f:view>
+              <h:form>
+                <h:panelGrid  cellpadding="0" cellspacing="0" columns="1" width="600pt" columnClasses="titleBar">
+                    <h:outputText value="Image Tests" />
+                    <f:verbatim escape="false"><hr width="600pt" /></f:verbatim>
+                </h:panelGrid>
+
+                <h:outputLink value="Controller.jpf" >
+                    <h:outputText value="Navigate Home" styleClass="normal" />
+                </h:outputLink><br />
+
+                <h:outputText value="Image Tag" styleClass="normal" />
+                <h:panelGrid>
+                    <h:graphicImage height="96" width="96" url="godzilla.gif" styleClass="imageBorder" />
+                </h:panelGrid>
+               </h:form>
+        </f:view>
+    </body>
+</html>
+
+  
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Panels.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Panels.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,64 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<html>
+    <head>
+        <title>PanelGrid - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        <f:view>
+              <h:form>
+                <h:panelGrid  cellpadding="0" cellspacing="0" columns="1" width="600pt" columnClasses="titleBar">
+                    <h:outputText value="PanelGrid Tests" />
+                    <f:verbatim escape="false"><hr width="600pt" /></f:verbatim>
+                </h:panelGrid>
+                <h:outputLink value="Controller.jpf" >
+                    <h:outputText value="Navigate Home" styleClass="normal" />
+                </h:outputLink>
+                <h:outputText value="Bordered Table, Backgroup color" styleClass="normal" />
+                <h:panelGrid bgcolor="#c0c0c0" width="600pt" columns="2" border="1" cellpadding="0" cellspacing="0" columnClasses="normal">
+                    <h:outputText value="Object One" />
+                    <h:outputText value="Object Two" /> 
+                    <h:outputText value="Object Three" /> 
+                    <h:outputText value="Object Four" /> 
+                </h:panelGrid>
+                <h:panelGrid cellpadding="5" cellspacing="5"><f:verbatim escape="false"><hr width="590pt" /></f:verbatim></h:panelGrid>
+                <h:outputText value="Alternating Row Colors" styleClass="normal" />
+                <h:panelGrid width="600pt" cellpadding="0" cellspacing="0" columnClasses="normal" rowClasses="rowOne, rowTwo">
+                    <h:outputText value="Object One" />
+                    <h:outputText value="Object Two" /> 
+                    <h:outputText value="Object Three" /> 
+                    <h:outputText value="Object Four" /> 
+                </h:panelGrid>
+                <h:panelGrid cellpadding="5" cellspacing="5"><f:verbatim escape="false"><hr width="590pt" /></f:verbatim></h:panelGrid>
+                <h:outputText value="Header/Footers" styleClass="normal" />
+                <h:panelGrid width="600pt" cellpadding="0" cellspacing="0" columnClasses="normal" columns="2" headerClass="titleBar" footerClass="footerBar">
+                    <f:facet name="header">
+                        <h:outputText value="Header" />
+                    </f:facet>
+                    <f:facet name="footer">
+                        <h:outputText value="Footer" />
+                    </f:facet>
+                    <h:outputText value="Object One" />
+                    <h:outputText value="Object Two" /> 
+                    <h:outputText value="Object Three" /> 
+                    <h:outputText value="Object Four" /> 
+                </h:panelGrid>
+                <h:panelGrid cellpadding="5" cellspacing="5"><f:verbatim escape="false"><hr width="590pt" /></f:verbatim></h:panelGrid>
+                <h:outputText value="panelGroup" styleClass="normal" />
+                <h:panelGrid width="600pt" cellpadding="0" cellspacing="0" columnClasses="normal" columns="2" rowClasses="rowOne">
+                    <h:panelGroup>
+                        <h:outputText value="Object One " style="color:#ff00ff;" /><h:outputText value="Object Two" style="color:#ff9900;" />
+                    </h:panelGroup>
+                    <h:outputText value="Object Three" /> 
+                </h:panelGrid>
+             </h:form>
+        </f:view>
+    </body>
+</html>
+
+  
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/godzilla.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,47 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        <f:view>
+            <h:form id="pageForm" >
+            <h:panelGrid columns="1" width="600pt" columnClasses="titleBar">
+                <h:outputText value="Custom Renderer Tests"></h:outputText>
+            </h:panelGrid>
+            <h:panelGrid columns="2" width="600pt">
+                    
+                <h:outputLink value="goPanels.do" styleClass="normal"><h:outputText value="Panel"/></h:outputLink>
+                <h:outputText value="Test of the PanelGrid and related controls" styleClass="normal"/>
+                
+                <h:outputLink value="goImages.do" styleClass="normal"><h:outputText value="Images" /></h:outputLink>
+                <h:outputText value="Test of the GraphicImage" styleClass="normal"/>
+
+                <h:outputLink value="goAnchors.do" styleClass="normal"><h:outputText value="Anchors" /></h:outputLink>
+                <h:outputText value="Test of Anchors and Buttons" styleClass="normal"/>
+
+                <h:outputLink value="goConvert.do" styleClass="normal"><h:outputText value="Conversions" /></h:outputLink>
+                <h:outputText value="Test of Converters" styleClass="normal"/>
+                
+                <h:outputLink value="goFormOne.do" styleClass="normal"><h:outputText value="Form One" /></h:outputLink>
+                <h:outputText value="Test the Form Fields" styleClass="normal"/>
+                
+                <h:outputLink value="goFormTwo.do" styleClass="normal"><h:outputText value="Form Two" /></h:outputLink>
+                <h:outputText value="Test the Select/Radio/Checkbox Form Fields" styleClass="normal"/>
+
+                <h:outputLink value="goBundle.do" styleClass="normal"><h:outputText value="Bundle" /></h:outputLink>
+                <h:outputText value="Test of the Bundle" styleClass="normal"/>
+
+                <h:outputLink value="goDataTable.do" styleClass="normal"><h:outputText value="Data Table" /></h:outputLink>
+                <h:outputText value="Test of the DataTable" styleClass="normal"/>
+
+            </h:panelGrid>
+            </h:form>
+        </f:view>
+    </body>
+</html>
+
+  
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/styles.css
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/styles.css	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,143 @@
+.normal {
+    color: #000099;
+    font-family:Verdana; 
+    font-size:8pt;
+    margin:5,5,5,5;
+}
+
+.titleBar {
+    color: #000099;
+    background-color:#babaff;
+    font-family:Verdana;
+    font-size:12pt;
+    font-weight: bold;
+    text-align: center;
+    margin:5,5,0,5;
+}
+
+.sectionTitle {
+    color: #000099;
+    font-family:Verdana;
+    font-size:12pt;
+    font-weight: bold;
+}
+.footerBar {
+    color: #000099;
+    background-color:#cacaff;
+    font-family:Verdana;
+    font-size:10pt;
+    margin:5,5,0,5;
+}
+
+.rowOne {
+    background-color:#c0ffc0;
+}
+
+.rowTwo {
+    background-color:#c0c0ff;
+}
+
+.validationMessage {
+    color: red;
+}
+
+.imageBorder {
+    border: 1pt solid red;
+}
+
+.normalLeft {
+    color: #ff0099;
+    font-family:Verdana; 
+    font-size:8pt;
+    margin:0,0,5,0;
+    text-align: left;
+}
+
+.topAlign {
+    vertical-align: top;
+}
+
+.dataColumnOne {
+    color: #000099;
+    font-family:Verdana; 
+    font-size:8pt;
+    margin:0,0,0,0;
+    text-align: center;
+    width: 60pt;
+}
+
+.dataColumnTwo {
+    color: #000099;
+    font-family:Verdana; 
+    font-size:8pt;
+    margin:0,0,0,0;
+    text-align: left;
+    width: 200pt;
+}
+
+
+.columnLeft {
+    color: #000099;
+    font-family:Verdana; 
+    font-size:8pt;
+    font-weight: bold;
+    margin:0,0,0,0;
+    text-align:left;
+    vertical-align: top;
+}
+
+.columnRight {
+    color: #000099;
+    font-family:Verdana; 
+    font-size:10pt;
+    font-weight: bold;
+    text-align:right;
+    vertical-align: top;
+}
+
+.innerColumnRight {
+    color: #000099;
+    font-family:Verdana; 
+    font-size:10pt;
+    font-weight: bold;
+    width: 100pt;
+    text-align:right;
+    vertical-align: top;
+}
+
+.dataHeaders {
+    color: #000099;
+    background-color:#babaff;
+    font-family:Verdana; 
+    font-size:10pt;
+    font-weight: bold;
+    margin:0,0,0,0;
+    text-align: center;
+}
+
+.titleBar {
+    color: #000099;
+    background-color:#babaff;
+    font-family:Verdana;
+    font-size:12pt;
+    font-weight: bold;
+    text-align: center;
+    margin:5,5,0,5;
+}
+
+.home {
+    color: #000099;
+    font-family:Verdana; 
+    font-size:8pt;
+    margin:0,5,5,5;
+    text-align: left;
+}
+
+.title {
+    color: #000099;
+    background-color:#babaff;
+    font-family:Verdana;
+    font-size:12pt;
+    margin:2,10,0,10;
+    text-align: center;
+}

Added: incubator/beehive/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/update.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<config xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <suffixList>
+        <suffix>jsp</suffix>
+        <suffix>jspx</suffix>
+        <suffix>do</suffix>
+        <suffix>jpf</suffix>
+        <suffix></suffix>
+    </suffixList>
+    <servletURI>testRecorder</servletURI>
+    <baseDirectory>@BASE_DIR@</baseDirectory>
+</config>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-tests.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-tests.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testDefinitions xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <categories>
+        <category>
+            <name>drt</name>
+            <description>drt</description>
+        </category>
+    </categories>
+    <tests>
+        <test>
+            <name>FacesSmokeAnchors</name>
+            <description>FacesSmokeAnchors</description>
+            <webapp>jsfWeb</webapp>
+            <categories>
+                <category>drt</category>
+            </categories>
+        </test>
+        <test>
+            <name>FacesSmokeBundle</name>
+            <description>FacesSmokeBundle</description>
+            <webapp>jsfWeb</webapp>
+            <categories>
+                <category>drt</category>
+            </categories>
+        </test>
+        <test>
+            <name>FacesSmokeConversions</name>
+            <description>FacesSmokeConversions</description>
+            <webapp>jsfWeb</webapp>
+            <categories>
+                <category>drt</category>
+            </categories>
+        </test>
+        <test>
+            <name>FacesSmokeDataTable</name>
+            <description>FacesSmokeDataTable</description>
+            <webapp>jsfWeb</webapp>
+            <categories>
+                <category>drt</category>
+            </categories>
+        </test>
+        <test>
+            <name>FacesSmokeFormOne</name>
+            <description>FacesSmokeFormOne</description>
+            <webapp>jsfWeb</webapp>
+            <categories>
+                <category>drt</category>
+            </categories>
+        </test>
+        <test>
+            <name>FacesSmokeFormTwo</name>
+            <description>FacesSmokeFormTwo</description>
+            <webapp>jsfWeb</webapp>
+            <categories>
+                <category>drt</category>
+            </categories>
+        </test>
+        <test>
+            <name>FacesSmokeImage</name>
+            <description>FacesSmokeImage</description>
+            <webapp>jsfWeb</webapp>
+            <categories>
+                <category>drt</category>
+            </categories>
+        </test>
+        <test>
+            <name>FacesSmokePanel</name>
+            <description>FacesSmokePanel</description>
+            <webapp>jsfWeb</webapp>
+            <categories>
+                <category>drt</category>
+            </categories>
+        </test>
+    </tests>
+</testDefinitions>

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-webapp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/config/testRecorder-webapp.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<server xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <name>tomcat</name>
+    <hostname>localhost</hostname>
+    <port>8080</port>
+
+    <webapps>
+        <webapp>
+            <name>jsfWeb</name>
+            <description>NetUI / JSF web application</description>
+            <testMode>true</testMode>
+            <contextRoot>/jsfWeb</contextRoot>
+            <testDefinitionsDirectory>@DOMAIN_DIR@/jsf/testRecorder/tests</testDefinitionsDirectory>
+        </webapp>
+    </webapps>
+</server>

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeAnchors.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeAnchors.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,379 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FacesSmokeAnchors</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 May 2004, 01:17:38.966 PM MDT</startDate>
+  <description>Smoke test of the JSF anchors</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-78a9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        
+            <form id="pageForm" method="post" action="/coreWeb/faces/facesSmoke/index.faces" enctype="application/x-www-form-urlencoded">
+
+            
+                
+            <table width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Custom Renderer Tests</td>
+</tr>
+</tbody>
+</table>
+
+            
+                    
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+                
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+
+            <table width="600pt">
+<tbody>
+<tr>
+<td><a href="goPanels.do" class="normal">Panel</a></td>
+<td><span class="normal">Test of the PanelGrid and related controls</span></td>
+</tr>
+<tr>
+<td><a href="goImages.do" class="normal">Images</a></td>
+<td><span class="normal">Test of the GraphicImage</span></td>
+</tr>
+<tr>
+<td><a href="goAnchors.do" class="normal">Anchors</a></td>
+<td><span class="normal">Test of Anchors and Buttons</span></td>
+</tr>
+<tr>
+<td><a href="goConvert.do" class="normal">Conversions</a></td>
+<td><span class="normal">Test of Converters</span></td>
+</tr>
+<tr>
+<td><a href="goFormOne.do" class="normal">Form One</a></td>
+<td><span class="normal">Test the Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goFormTwo.do" class="normal">Form Two</a></td>
+<td><span class="normal">Test the Select/Radio/Checkbox Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goBundle.do" class="normal">Bundle</a></td>
+<td><span class="normal">Test of the Bundle</span></td>
+</tr>
+<tr>
+<td><a href="goDataTable.do" class="normal">Data Table</a></td>
+<td><span class="normal">Test of the DataTable</span></td>
+</tr>
+</tbody>
+</table>
+
+             <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAABB3BAAAABBzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDR4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkM3NxAH4AAHBxAH4ADHB0AARfaWQ1c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ3eHEAfgAWcHQABF9pZDZzcQB+AABwcQB+AAxwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTB4cQB+ABZwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABZwdAAFX2lkMTJzcQB+AABwcQB+AAxwdAAFX2lkMTRzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE2eHEAfgAWcHQABV9pZDE1c3EAfgAAcHEAfgAMcHQABV9pZDE3c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4AFnB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQyMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjJ4cQB+ABZwdAAFX2lkMjFzcQB+AABwcQB+AAxwdAAFX2lkMjNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDI1eHEAfgAWcHQABV9pZDI0c3EAfgAAcHEAfgAMcHQABV9pZDI2eHEAfgAOcHQABF9pZDJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAIcGFnZUZvcm14dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AE8AAAAEdXEAfgBPAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AFV4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AVgBwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9pbmRleC5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAAFnVxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAJ3BAAAAApxAH4AD3EAfgBLeHhwdAAIcGFnZUZvcm1xAH4ATXEAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBPAAAAAnVxAH4ATwAAAAJ1cQB+AE8AAAAfdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgANeHhwdAANcGFnZUZvcm06X2lkMHEAfgAPcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AFhwcHQACHRpdGxlQmFyc3EAfgByAAAAAXEAfgBXcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkMXEAfgANcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLlRleHRwcHQAFUN1c3RvbSBSZW5kZXJlciBUZXN0c3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAB91cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAABcQB+AGVzcQB+AAUAAAAQdwQAAAAQcQB+ABdxAH4AGXEAfgAecQB+ACBxAH4AJXEAfgAncQB+ACxxAH4ALnEAfgAzcQB+ADVxAH4AOnEAfgA8cQB+AEFxAH4AQ3EAfgBIcQB+AEp4eHB0AA1wYWdlRm9ybTpfaWQycQB+AEtxAH4AV3EAfgBYcQB+AHFwcHNxAH4AcoAAAABxAH4AWHBwcHNxAH4AcgAAAAJxAH4AV3BwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgB3dXEAfgBPAAAAEHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AFXh4cHQADXBhZ2VGb3JtOl9pZDNxAH4AF3EAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5MaW5rcHB0AAtnb1BhbmVscy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAZub3JtYWxwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDRxAH4AFXEAfgBXcQB+AFhxAH4Af3BwdAAFUGFuZWxxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDVxAH4AGXEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCBvZiB0aGUgUGFuZWxHcmlkIGFuZCByZWxhdGVkIGNvbnRyb2xzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAdeHhwdAANcGFnZUZvcm06X2lkNnEAfgAecQB+AFdxAH4AWHEAfgCScHB0AAtnb0ltYWdlcy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkN3EAfgAdcQB+AFdxAH4AWHEAfgB/cHB0AAZJbWFnZXNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDhxAH4AIHEAfgBXcQB+AFhxAH4Af3BwdAAYVGVzdCBvZiB0aGUgR3JhcGhpY0ltYWdlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAkeHhwdAANcGFnZUZvcm06X2lkOXEAfgAlcQB+AFdxAH4AWHEAfgCScHB0AAxnb0FuY2hvcnMuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDEwcQB+ACRxAH4AV3EAfgBYcQB+AH9wcHQAB0FuY2hvcnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDExcQB+ACdxAH4AV3EAfgBYcQB+AH9wcHQAG1Rlc3Qgb2YgQW5jaG9ycyBhbmQgQnV0dG9uc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AK3h4cHQADnBhZ2VGb3JtOl9pZDEycQB+ACxxAH4AV3EAfgBYcQB+AJJwcHQADGdvQ29udmVydC5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTNxAH4AK3EAfgBXcQB+AFhxAH4Af3BwdAALQ29udmVyc2lvbnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE0cQB+AC5xAH4AV3EAfgBYcQB+AH9wcHQAElRlc3Qgb2YgQ29udmVydGVyc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AMnh4cHQADnBhZ2VGb3JtOl9pZDE1cQB+ADNxAH4AV3EAfgBYcQB+AJJwcHQADGdvRm9ybU9uZS5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTZxAH4AMnEAfgBXcQB+AFhxAH4Af3BwdAAIRm9ybSBPbmVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE3cQB+ADVxAH4AV3EAfgBYcQB+AH9wcHQAFFRlc3QgdGhlIEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgA5eHhwdAAOcGFnZUZvcm06X2lkMThxAH4AOnEAfgBXcQB+AFhxAH4AknBwdAAMZ29Gb3JtVHdvLmRvcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCUcHBwcHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAABnVxAH4ATwAAAAN1cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAAAeHB0AA5wYWdlRm9ybTpfaWQxOXEAfgA5cQB+AFdxAH4AWHEAfgB/cHB0AAhGb3JtIFR3b3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjBxAH4APHEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCB0aGUgU2VsZWN0L1JhZGlvL0NoZWNrYm94IEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBAeHhwdAAOcGFnZUZvcm06X2lkMjFxAH4AQXEAfgBXcQB+AFhxAH4AknBwdAALZ29CdW5kbGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDIycQB+AEBxAH4AV3EAfgBYcQB+AH9wcHQABkJ1bmRsZXEAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjNxAH4AQ3EAfgBXcQB+AFhxAH4Af3BwdAASVGVzdCBvZiB0aGUgQnVuZGxlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBHeHhwdAAOcGFnZUZvcm06X2lkMjRxAH4ASHEAfgBXcQB+AFhxAH4AknBwdAAOZ29EYXRhVGFibGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI1cQB+AEdxAH4AV3EAfgBYcQB+AH9wcHQACkRhdGEgVGFibGVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI2cQB+AEpxAH4AV3EAfgBYcQB+AH9wcHQAFVRlc3Qgb2YgdGhlIERhdGFUYWJsZXEAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAA==" />
+ <input type="hidden" name="pageForm" value="pageForm" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/goAnchors.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-78a9</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Anchor - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        
+              <form id="formBase" method="post" action="/coreWeb/faces/facesSmoke/Anchors.faces" enctype="application/x-www-form-urlencoded">
+
+                
+                    
+                    
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Anchor and Button Tests</td>
+</tr>
+<tr>
+<td class="titleBar"><hr width="600pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                
+                
+                
+                    
+                
+                <table style="margin:5,0,5,0">
+<tbody>
+<tr>
+<td><a href="Controller.jpf"><span class="normal">Navigate Home</span></a></td>
+</tr>
+</tbody>
+</table>
+
+                
+                <span class="sectionTitle">Links</span>
+                
+                    
+                                    
+                        
+                        
+                    
+                    
+                        
+                                    
+                        
+                        
+                    
+                <table style="margin:5,0,5,0" width="400pt">
+<tbody>
+<tr>
+<td><a href="#" onclick="document.forms['formBase']['formBase:_id8'].value='formBase:_id8';document.forms['formBase']['foo'].value='link1-bar';document.forms['formBase']['blee'].value='link1-baz'; document.forms['formBase'].submit(); return false;" class="normal"><span class="normal">Command Link One</span></a></td>
+<td><a href="#" onclick="document.forms['formBase']['formBase:_id12'].value='formBase:_id12';document.forms['formBase']['foo'].value='link2-bar';document.forms['formBase']['blee'].value='link2-baz'; document.forms['formBase'].submit(); return false;" class="normal"><span class="normal">Command Link Two</span></a></td>
+</tr>
+</tbody>
+</table>
+
+
+                
+                
+                
+                
+
+                
+                
+                    
+                    
+                
+                <table style="margin:5,0,5,0" width="400pt">
+<tbody>
+<tr>
+<td><span class="sectionTitle">Image Button</span></td>
+</tr>
+<tr>
+<td><input type="image" src="update.gif" name="formBase:_id18" /></td>
+</tr>
+<tr>
+<td><span class="sectionTitle">Command Button</span></td>
+</tr>
+<tr>
+<td><input type="submit" name="formBase:_id20" value="Submit this Form" /></td>
+</tr>
+</tbody>
+</table>
+
+                <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAJ3BAAAAApzcQB+AABzcQB+AAUAAAAFdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDV4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkNHhxAH4ADnB0AARfaWQzc3EAfgAAcHEAfgAMcHQABF9pZDZzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAA3cEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ5c3EAfgAAcHQAIWphdmF4LmZhY2VzLmNvbXBvbmVudC5VSVBhcmFtZXRlcnB0AAVfaWQxMHNxAH4AAHBxAH4AInB0AAVfaWQxMXh0ACpqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sQ29tbWFuZExpbmtwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAN3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTNzcQB+AABwcQB+ACJwdAAFX2lkMTRzcQB+AABwcQB+ACJwdAAFX2lkMTV4cQB+ACZwdAAFX2lkMTJ4cQB+AA5wdAAEX2lkN3NxAH4AAHNxAH4ABQAAAAR3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTdzcQB+AABwdAAsamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbENvbW1hbmRCdXR0b25wdAAFX2lkMThzcQB+AABwcQB+AAxwdAAFX2lkMTlzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAcHEAfgAicHQABV9pZDIxc3EAfgAAcHEAfgAicHQABV9pZDIyeHEAfgA3cHQABV9pZDIweHEAfgAOcHQABV9pZDE2eHQAI2phdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxGb3JtcHQACGZvcm1CYXNlc3EAfgAAcHEAfgAMcHQABV9pZDIzeHQAIGphdmF4LmZhY2VzLmNvbXBvbmVudC5VSVZpZXdSb290cHB1cgATW0xqYXZhLmxhbmcuT2JqZWN0O5DOWJ8QcylsAgAAeHAAAAACdXEAfgBIAAAABHVxAH4ASAAAAAhzcgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4cD9AAAAAAAAMdwgAAAAQAAAAAXQAJGphdmF4LmZhY2VzLndlYmFwcC5DVVJSRU5UX1ZJRVdfUk9PVHEAfgBOeHBwcHNyABFqYXZhLmxhbmcuQm9vbGVhbs0gcoDVnPruAgABWgAFdmFsdWV4cAFzcQB+AE8AcHB0AApIVE1MX0JBU0lDdAAdL2ZhY2VzL2ZhY2VzU21va2UvQW5jaG9ycy5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ASAAAAAJ1cQB+AEgAAAACdXEAfgBIAAAAFnVxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAV3BAAAAApxAH4AD3EAfgAYcQB+ABpxAH4AMXEAfgBCeHhwdAAIZm9ybUJhc2VxAH4ARHEAfgBQcQB+AFF0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBIAAAABXVxAH4ASAAAAAJ1cQB+AEgAAAAfdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAXEAfgBec3EAfgAFAAAAAncEAAAACnEAfgANdAAEX2lkMnh4cHQADWZvcm1CYXNlOl9pZDBxAH4AD3EAfgBQcQB+AFF0ABBqYXZheC5mYWNlcy5HcmlkcHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwgAAAAHEAfgBRdAABMHEAfgBvdAAIdGl0bGVCYXJzcQB+AGwAAAABcQB+AFBwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAU2MDBwdHVxAH4ASAAAAAJ1cQB+AEgAAAACdXEAfgBIAAAABnVxAH4ASAAAAAN1cQB+AEgAAAAIc3EAfgBMP0AAAAAAAAx3CAAAABAAAAAAeHB0AA1mb3JtQmFzZTpfaWQxcQB+AA1xAH4AUHEAfgBRdAAQamF2YXguZmFjZXMuVGV4dHBwdAAXQW5jaG9yIGFuZCBCdXR0b24gVGVzdHNxAH4AUHEAfgBRcHBwdXEAfgBIAAAAAHB1cQB+AEgAAAACdXEAfgBIAAAAH3VxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAFxAH4AXnNxAH4ABQAAAAF3BAAAAApxAH4AF3h4cHQADWZvcm1CYXNlOl9pZDNxAH4AGHEAfgBQcQB+AFFxAH4Aa3Bwc3EAfgBsgAAAAHEAfgBRcHBwc3EAfgBsAAAAAXEAfgBQcHBwcHBwcHBwcHBwcHBwcHB0AA5tYXJnaW46NSwwLDUsMHBwcHB1cQB+AEgAAAABdXEAfgBIAAAAAnVxAH4ASAAAABx1cQB+AEgAAAADdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAXEAfgBec3EAfgAFAAAAAXcEAAAACnEAfgAVeHhwdAANZm9ybUJhc2U6X2lkNHEAfgAXcQB+AFBxAH4AUXQAEGphdmF4LmZhY2VzLkxpbmtwcHQADkNvbnRyb2xsZXIuanBmcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBIAAAAAXVxAH4ASAAAAAJ1cQB+AEgAAAAGdXEAfgBIAAAAA3VxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAB4cHQADWZvcm1CYXNlOl9pZDVxAH4AFXEAfgBQcQB+AFFxAH4AenBwdAANTmF2aWdhdGUgSG9tZXEAfgBQcQB+AFFwdAAGbm9ybWFscHVxAH4ASAAAAAB1cQB+AEgAAAACdXEAfgBIAAAABnVxAH4ASAAAAAN1cQB+AEgAAAAIc3EAfgBMP0AAAAAAAAx3CAAAABAAAAAAeHB0AA1mb3JtQmFzZTpfaWQ2cQB+ABpxAH4AUHEAfgBRcQB+AHpwcHQABUxpbmtzcQB+AFBxAH4AUXB0AAxzZWN0aW9uVGl0bGVwdXEAfgBIAAAAAHVxAH4ASAAAAAJ1cQB+AEgAAAAfdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAXEAfgBec3EAfgAFAAAAAncEAAAACnEAfgAncQB+ADB4eHB0AA1mb3JtQmFzZTpfaWQ3cQB+ADFxAH4AUHEAfgBRcQB+AGtwcHNxAH4AbIAAAABxAH4AUXBwcHNxAH4AbAAAAAJxAH4AUHBwcHBwcHBwcHBwcHBwcHBwcQB+AIVwcHB0AAU0MDBwdHVxAH4ASAAAAAJ1cQB+AEgAAAACdXEAfgBIAAAAHHVxAH4ASAAAAAZ1cQB+AEgAAAAIc3EAfgBMP0AAAAAAAAx3CAAAABAAAAABcQB+AF5zcQB+AAUAAAADdwQAAAAKcQB+ACBxAH4AI3EAfgAleHhwdAANZm9ybUJhc2U6X2lkOHEAfgAncQB+AFBxAH4AUXEAfgCOcHBwcQB+AFFxAH4AUXBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJhwcHBwdXEAfgBIAAAAA3VxAH4ASAAAAAJ1cQB+AEgAAAAGdXEAfgBIAAAAA3VxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAB4cHQADWZvcm1CYXNlOl9pZDlxAH4AIHEAfgBQcQB+AFFxAH4AenBwdAAQQ29tbWFuZCBMaW5rIE9uZXEAfgBQcQB+AFFwcQB+AJhwdXEAfgBIAAAAAHVxAH4ASAAAAAJ1cQB+AEgAAAADdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOZm9ybUJhc2U6X2lkMTBxAH4AI3EAfgBQcQB+AFFwcHQAA2Zvb3QACWxpbmsxLWJhcnVxAH4ASAAAAAB1cQB+AEgAAAACdXEAfgBIAAAAA3VxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAB4cHQADmZvcm1CYXNlOl9pZDExcQB+ACVxAH4AUHEAfgBRcHB0AARibGVldAAJbGluazEtYmF6dXEAfgBIAAAAAHVxAH4ASAAAAAJ1cQB+AEgAAAAcdXEAfgBIAAAABnVxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAFxAH4AXnNxAH4ABQAAAAN3BAAAAApxAH4AK3EAfgAtcQB+AC94eHB0AA5mb3JtQmFzZTpfaWQxMnEAfgAwcQB+AFBxAH4AUXEAfgCOc3EAfgAFAAAAAXcEAAAAAXNyACZqYXZheC5mYWNlcy5jb21wb25lbnQuU3RhdGVIb2xkZXJTYXZlclnKsz2TnM1NAgACTAAJY2xhc3NOYW1lcQB+AAJMAApzYXZlZFN0YXRldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AB1mYWNlcy5mYWNlc1Ntb2tlLkFjdGlvbkxpc3RlbnB4cHBxAH4AUXEAfgBRcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AmHBwcHB1cQB+AEgAAAADdXEAfgBIAAAAAnVxAH4ASAAAAAZ1cQB+AEgAAAADdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOZm9ybUJhc2U6X2lkMTNxAH4AK3EAfgBQcQB+AFFxAH4AenBwdAAQQ29tbWFuZCBMaW5rIFR3b3EAfgBQcQB+AFFwcQB+AJhwdXEAfgBIAAAAAHVxAH4ASAAAAAJ1cQB+AEgAAAADdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOZm9ybUJhc2U6X2lkMTRxAH4ALXEAfgBQcQB+AFFwcHEAfgDCdAAJbGluazItYmFydXEAfgBIAAAAAHVxAH4ASAAAAAJ1cQB+AEgAAAADdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOZm9ybUJhc2U6X2lkMTVxAH4AL3EAfgBQcQB+AFFwcHEAfgDKdAAJbGluazItYmF6dXEAfgBIAAAAAHVxAH4ASAAAAAJ1cQB+AEgAAAAfdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAXEAfgBec3EAfgAFAAAABHcEAAAACnEAfgA1cQB+ADhxAH4AOnEAfgBBeHhwdAAOZm9ybUJhc2U6X2lkMTZxAH4AQnEAfgBQcQB+AFFxAH4Aa3Bwc3EAfgBsgAAAAHEAfgBRcHBwc3EAfgBsAAAAAXEAfgBQcHBwcHBwcHBwcHBwcHBwcHBxAH4AhXBwcHEAfgCrdXEAfgBIAAAABHVxAH4ASAAAAAJ1cQB+AEgAAAAGdXEAfgBIAAAAA3VxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAB4cHQADmZvcm1CYXNlOl9pZDE3cQB+ADVxAH4AUHEAfgBRcQB+AHpwcHQADEltYWdlIEJ1dHRvbnEAfgBQcQB+AFFwcQB+AKFwdXEAfgBIAAAAAHVxAH4ASAAAAAJ1cQB+AEgAAAAddXEAfgBIAAAABnVxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAB4cHQADmZvcm1CYXNlOl9pZDE4cQB+ADhxAH4AUHEAfgBRdAASamF2YXguZmFjZXMuQnV0dG9ucHBwcQB+AFFxAH4AUXBwcHBxAH4AUXEAfgBRdAAKdXBkYXRlLmdpZnBwcHBwcHBwcHBwcHBwcHEAfgBRcQB+AFFwcHBwdAAGYnV0dG9udXEAfgBIAAAAAHVxAH4ASAAAAAJ1cQB+AEgAAAAGdXEAfgBIAAAAA3VxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAB4cHQADmZvcm1CYXNlOl9pZDE5cQB+ADpxAH4AUHEAfgBRcQB+AHpwcHQADkNvbW1hbmQgQnV0dG9ucQB+AFBxAH4AUXBxAH4AoXB1cQB+AEgAAAAAdXEAfgBIAAAAAnVxAH4ASAAAAB11cQB+AEgAAAAGdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAXEAfgBec3EAfgAFAAAAAncEAAAACnEAfgA+cQB+AEB4eHB0AA5mb3JtQmFzZTpfaWQyMHEAfgBBcQB+AFBxAH4AUXEAfgEHcHBwcQB+AFFxAH4AUXQAEFN1Ym1pdCB0aGlzIEZvcm1wcHBxAH4AUXEAfgBRcHBwcHBwcHBwcHBwcHBwcHEAfgBRcQB+AFFwcHBwdAAGc3VibWl0dXEAfgBIAAAAAnVxAH4ASAAAAAJ1cQB+AEgAAAADdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOZm9ybUJhc2U6X2lkMjFxAH4APnEAfgBQcQB+AFFwcHEAfgDCdAAKYnV0dG9uLWJhcnVxAH4ASAAAAAB1cQB+AEgAAAACdXEAfgBIAAAAA3VxAH4ASAAAAAhzcQB+AEw/QAAAAAAADHcIAAAAEAAAAAB4cHQADmZvcm1CYXNlOl9pZDIycQB+AEBxAH4AUHEAfgBRcHBxAH4AynQACmJ1dHRvbi1iYXp1cQB+AEgAAAAAdXEAfgBIAAAAAnVxAH4ASAAAAAZ1cQB+AEgAAAADdXEAfgBIAAAACHNxAH4ATD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAFX2lkMjNxAH4ARnEAfgBQcQB+AFFxAH4AenBwdAARVGVzdCBvZiBBdHRyaWJ1dGVxAH4AUHEAfgBRcHEAfgCYcHVxAH4ASAAAAAA=" />
+ <input type="hidden" name="formBase" value="formBase" /><input type="hidden" name="foo" /><input type="hidden" name="formBase:_id12" /><input type="hidden" name="blee" /><input type="hidden" name="formBase:_id8" /></form>
+               
+               <hr />
+                
+                    
+                <span class="normal">Test of Attribute</span>
+        
+        <hr />
+        
+        Foo: [Not Defined]<br />
+        Blee: [Not Defined]<br />
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:17:45.225 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeBundle.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeBundle.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FacesSmokeBundle</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 May 2004, 01:17:45.245 PM MDT</startDate>
+  <description>Smoke test of the JSF Bundle</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-78a4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        
+            <form id="pageForm" method="post" action="/coreWeb/faces/facesSmoke/index.faces" enctype="application/x-www-form-urlencoded">
+
+            
+                
+            <table width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Custom Renderer Tests</td>
+</tr>
+</tbody>
+</table>
+
+            
+                    
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+                
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+
+            <table width="600pt">
+<tbody>
+<tr>
+<td><a href="goPanels.do" class="normal">Panel</a></td>
+<td><span class="normal">Test of the PanelGrid and related controls</span></td>
+</tr>
+<tr>
+<td><a href="goImages.do" class="normal">Images</a></td>
+<td><span class="normal">Test of the GraphicImage</span></td>
+</tr>
+<tr>
+<td><a href="goAnchors.do" class="normal">Anchors</a></td>
+<td><span class="normal">Test of Anchors and Buttons</span></td>
+</tr>
+<tr>
+<td><a href="goConvert.do" class="normal">Conversions</a></td>
+<td><span class="normal">Test of Converters</span></td>
+</tr>
+<tr>
+<td><a href="goFormOne.do" class="normal">Form One</a></td>
+<td><span class="normal">Test the Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goFormTwo.do" class="normal">Form Two</a></td>
+<td><span class="normal">Test the Select/Radio/Checkbox Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goBundle.do" class="normal">Bundle</a></td>
+<td><span class="normal">Test of the Bundle</span></td>
+</tr>
+<tr>
+<td><a href="goDataTable.do" class="normal">Data Table</a></td>
+<td><span class="normal">Test of the DataTable</span></td>
+</tr>
+</tbody>
+</table>
+
+             <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAABB3BAAAABBzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDR4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkM3NxAH4AAHBxAH4ADHB0AARfaWQ1c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ3eHEAfgAWcHQABF9pZDZzcQB+AABwcQB+AAxwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTB4cQB+ABZwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABZwdAAFX2lkMTJzcQB+AABwcQB+AAxwdAAFX2lkMTRzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE2eHEAfgAWcHQABV9pZDE1c3EAfgAAcHEAfgAMcHQABV9pZDE3c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4AFnB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQyMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjJ4cQB+ABZwdAAFX2lkMjFzcQB+AABwcQB+AAxwdAAFX2lkMjNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDI1eHEAfgAWcHQABV9pZDI0c3EAfgAAcHEAfgAMcHQABV9pZDI2eHEAfgAOcHQABF9pZDJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAIcGFnZUZvcm14dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AE8AAAAEdXEAfgBPAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AFV4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AVgBwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9pbmRleC5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAAFnVxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAJ3BAAAAApxAH4AD3EAfgBLeHhwdAAIcGFnZUZvcm1xAH4ATXEAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBPAAAAAnVxAH4ATwAAAAJ1cQB+AE8AAAAfdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgANeHhwdAANcGFnZUZvcm06X2lkMHEAfgAPcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AFhwcHQACHRpdGxlQmFyc3EAfgByAAAAAXEAfgBXcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkMXEAfgANcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLlRleHRwcHQAFUN1c3RvbSBSZW5kZXJlciBUZXN0c3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAB91cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAABcQB+AGVzcQB+AAUAAAAQdwQAAAAQcQB+ABdxAH4AGXEAfgAecQB+ACBxAH4AJXEAfgAncQB+ACxxAH4ALnEAfgAzcQB+ADVxAH4AOnEAfgA8cQB+AEFxAH4AQ3EAfgBIcQB+AEp4eHB0AA1wYWdlRm9ybTpfaWQycQB+AEtxAH4AV3EAfgBYcQB+AHFwcHNxAH4AcoAAAABxAH4AWHBwcHNxAH4AcgAAAAJxAH4AV3BwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgB3dXEAfgBPAAAAEHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AFXh4cHQADXBhZ2VGb3JtOl9pZDNxAH4AF3EAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5MaW5rcHB0AAtnb1BhbmVscy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAZub3JtYWxwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDRxAH4AFXEAfgBXcQB+AFhxAH4Af3BwdAAFUGFuZWxxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDVxAH4AGXEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCBvZiB0aGUgUGFuZWxHcmlkIGFuZCByZWxhdGVkIGNvbnRyb2xzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAdeHhwdAANcGFnZUZvcm06X2lkNnEAfgAecQB+AFdxAH4AWHEAfgCScHB0AAtnb0ltYWdlcy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkN3EAfgAdcQB+AFdxAH4AWHEAfgB/cHB0AAZJbWFnZXNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDhxAH4AIHEAfgBXcQB+AFhxAH4Af3BwdAAYVGVzdCBvZiB0aGUgR3JhcGhpY0ltYWdlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAkeHhwdAANcGFnZUZvcm06X2lkOXEAfgAlcQB+AFdxAH4AWHEAfgCScHB0AAxnb0FuY2hvcnMuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDEwcQB+ACRxAH4AV3EAfgBYcQB+AH9wcHQAB0FuY2hvcnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDExcQB+ACdxAH4AV3EAfgBYcQB+AH9wcHQAG1Rlc3Qgb2YgQW5jaG9ycyBhbmQgQnV0dG9uc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AK3h4cHQADnBhZ2VGb3JtOl9pZDEycQB+ACxxAH4AV3EAfgBYcQB+AJJwcHQADGdvQ29udmVydC5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTNxAH4AK3EAfgBXcQB+AFhxAH4Af3BwdAALQ29udmVyc2lvbnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE0cQB+AC5xAH4AV3EAfgBYcQB+AH9wcHQAElRlc3Qgb2YgQ29udmVydGVyc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AMnh4cHQADnBhZ2VGb3JtOl9pZDE1cQB+ADNxAH4AV3EAfgBYcQB+AJJwcHQADGdvRm9ybU9uZS5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTZxAH4AMnEAfgBXcQB+AFhxAH4Af3BwdAAIRm9ybSBPbmVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE3cQB+ADVxAH4AV3EAfgBYcQB+AH9wcHQAFFRlc3QgdGhlIEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgA5eHhwdAAOcGFnZUZvcm06X2lkMThxAH4AOnEAfgBXcQB+AFhxAH4AknBwdAAMZ29Gb3JtVHdvLmRvcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCUcHBwcHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAABnVxAH4ATwAAAAN1cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAAAeHB0AA5wYWdlRm9ybTpfaWQxOXEAfgA5cQB+AFdxAH4AWHEAfgB/cHB0AAhGb3JtIFR3b3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjBxAH4APHEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCB0aGUgU2VsZWN0L1JhZGlvL0NoZWNrYm94IEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBAeHhwdAAOcGFnZUZvcm06X2lkMjFxAH4AQXEAfgBXcQB+AFhxAH4AknBwdAALZ29CdW5kbGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDIycQB+AEBxAH4AV3EAfgBYcQB+AH9wcHQABkJ1bmRsZXEAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjNxAH4AQ3EAfgBXcQB+AFhxAH4Af3BwdAASVGVzdCBvZiB0aGUgQnVuZGxlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBHeHhwdAAOcGFnZUZvcm06X2lkMjRxAH4ASHEAfgBXcQB+AFhxAH4AknBwdAAOZ29EYXRhVGFibGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI1cQB+AEdxAH4AV3EAfgBYcQB+AH9wcHQACkRhdGEgVGFibGVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI2cQB+AEpxAH4AV3EAfgBYcQB+AH9wcHQAFVRlc3Qgb2YgdGhlIERhdGFUYWJsZXEAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAA==" />
+ <input type="hidden" name="pageForm" value="pageForm" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/goBundle.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-78a4</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Image - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        
+             
+              <form id="_id0" method="post" action="/coreWeb/faces/facesSmoke/Bundle.faces" enctype="application/x-www-form-urlencoded">
+
+                
+                    
+                    
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Bundle Tests</td>
+</tr>
+<tr>
+<td class="titleBar"><hr width="600pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                
+                    
+                <a href="Controller.jpf"><span class="normal">Navigate Home</span></a><br />
+                <span class="normal">Bundle</span>
+                
+                    
+                        
+                         
+                            
+                        
+                    <table>
+<tbody>
+<tr>
+<td><span class="normal">This is a message from the properties file</span></td>
+</tr>
+<tr>
+<td><span class="normal">This is a replacement value: Replacement Value From Param</span></td>
+</tr>
+</tbody>
+</table>
+
+                
+                <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAAEdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQyeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAEX2lkNXh0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0TGlua3B0AARfaWQ0c3EAfgAAcHEAfgAMcHQABF9pZDZzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAc3EAfgAFAAAAAncEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ4c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0ACFqYXZheC5mYWNlcy5jb21wb25lbnQuVUlQYXJhbWV0ZXJwdAAFX2lkMTB4dAAramF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dEZvcm1hdHB0AARfaWQ5eHEAfgAOcHQABF9pZDd4dAAnamF2YXguZmFjZXMuY29tcG9uZW50LlVJTmFtaW5nQ29udGFpbmVycHQABHN1YjF4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAEX2lkMHh0ACBqYXZheC5mYWNlcy5jb21wb25lbnQuVUlWaWV3Um9vdHBwdXIAE1tMamF2YS5sYW5nLk9iamVjdDuQzlifEHMpbAIAAHhwAAAAAnVxAH4AKwAAAAR1cQB+ACsAAAAIc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA/QAAAAAAADHcIAAAAEAAAAAF0ACRqYXZheC5mYWNlcy53ZWJhcHAuQ1VSUkVOVF9WSUVXX1JPT1RxAH4AMXhwcHBzcgARamF2YS5sYW5nLkJvb2xlYW7NIHKA1Zz67gIAAVoABXZhbHVleHABc3EAfgAyAHBwdAAKSFRNTF9CQVNJQ3QAHC9mYWNlcy9mYWNlc1Ntb2tlL0J1bmRsZS5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4AKwAAAAF1cQB+ACsAAAACdXEAfgArAAAAFnVxAH4AKwAAAAhzcQB+AC8/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAR3BAAAAApxAH4AD3EAfgAVcQB+ABdxAH4AJ3h4cHQABF9pZDBxAH4AKXEAfgAzcQB+ADR0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgArAAAABHVxAH4AKwAAAAJ1cQB+ACsAAAAfdXEAfgArAAAACHNxAH4ALz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBBc3EAfgAFAAAAAncEAAAACnEAfgANdAAEX2lkM3h4cHQACV9pZDA6X2lkMXEAfgAPcQB+ADNxAH4ANHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+ADR0AAEwcQB+AFJ0AAh0aXRsZUJhcnNxAH4ATwAAAAFxAH4AM3BwcHBwcHBwcHBwcHBwcHBwcHBwcHQABTYwMHB0dXEAfgArAAAAAnVxAH4AKwAAAAJ1cQB+ACsAAAAGdXEAfgArAAAAA3VxAH4AKwAAAAhzcQB+AC8/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkMnEAfgANcQB+ADNxAH4ANHQAEGphdmF4LmZhY2VzLlRleHRwcHQADEJ1bmRsZSBUZXN0c3EAfgAzcQB+ADRwcHB1cQB+ACsAAAAAcHVxAH4AKwAAAAJ1cQB+ACsAAAAcdXEAfgArAAAAA3VxAH4AKwAAAAhzcQB+AC8/QAAAAAAADHcIAAAAEAAAAAFxAH4AQXNxAH4ABQAAAAF3BAAAAApxAH4AE3h4cHQACV9pZDA6X2lkNHEAfgAVcQB+ADNxAH4ANHQAEGphdmF4LmZhY2VzLkxpbmtwcHQADkNvbnRyb2xsZXIuanBmcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwdXEAfgArAAAAAXVxAH4AKwAAAAJ1cQB+ACsAAAAGdXEAfgArAAAAA3VxAH4AKwAAAAhzcQB+AC8/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkNXEAfgATcQB+ADNxAH4ANHEAfgBdcHB0AA1OYXZpZ2F0ZSBIb21lcQB+ADNxAH4ANHB0AAZub3JtYWxwdXEAfgArAAAAAHVxAH4AKwAAAAJ1cQB+ACsAAAAGdXEAfgArAAAAA3VxAH4AKwAAAAhzcQB+AC8/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkNnEAfgAXcQB+ADNxAH4ANHEAfgBdcHB0AAZCdW5kbGVxAH4AM3EAfgA0cHEAfgBxcHVxAH4AKwAAAAB1cQB+ACsAAAACdXEAfgArAAAACHNxAH4ALz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBBc3EAfgAFAAAAAXcEAAAACnEAfgAleHhwdAAJX2lkMDpzdWIxcQB+ACdxAH4AM3EAfgA0cHB1cQB+ACsAAAABdXEAfgArAAAAAnVxAH4AKwAAAB91cQB+ACsAAAAIc3EAfgAvP0AAAAAAAAx3CAAAABAAAAABcQB+AEFzcQB+AAUAAAACdwQAAAAKcQB+AB1xAH4AJHh4cHQADl9pZDA6c3ViMTpfaWQ3cQB+ACVxAH4AM3EAfgA0cQB+AE5wcHNxAH4AT4AAAABxAH4ANHBwcHNxAH4ATwAAAAFxAH4AM3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB1cQB+ACsAAAACdXEAfgArAAAAAnVxAH4AKwAAAAZ1cQB+ACsAAAADdXEAfgArAAAACHNxAH4ALz9AAAAAAAAMdwgAAAAQAAAAAHh1cQB+ACsAAAACdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAXQABXZhbHVldXEAfgArAAAAAXNyACZqYXZheC5mYWNlcy5jb21wb25lbnQuU3RhdGVIb2xkZXJTYXZlclnKsz2TnM1NAgACTAAJY2xhc3NOYW1lcQB+AAJMAApzYXZlZFN0YXRldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0ACFjb20uc3VuLmZhY2VzLmVsLlZhbHVlQmluZGluZ0ltcGx0AA5CdW5kbGUubWVzc2FnZXQADl9pZDA6c3ViMTpfaWQ4cQB+AB1xAH4AM3EAfgA0cQB+AF1wcHBxAH4AM3EAfgA0cHEAfgBxcHVxAH4AKwAAAAB1cQB+ACsAAAACdXEAfgArAAAABnVxAH4AKwAAAAN1cQB+ACsAAAAIc3EAfgAvP0AAAAAAAAx3CAAAABAAAAABcQB+AEFzcQB+AAUAAAABdwQAAAAKcQB+ACJ4eHVxAH4AKwAAAAJ1cQB+AJAAAAABcQB+AJJ1cQB+ACsAAAABc3EAfgCUcQB+AJd0ABJCdW5kbGUucmVwbGFjZW1lbnR0AA5faWQwOnN1YjE6X2lkOXEAfgAkcQB+ADNxAH4ANHQAEmphdmF4LmZhY2VzLkZvcm1hdHBwcHEAfgAzcQB+ADRwcQB+AHFwdXEAfgArAAAAAXVxAH4AKwAAAAJ1cQB+ACsAAAADdXEAfgArAAAACHNxAH4ALz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAPX2lkMDpzdWIxOl9pZDEwcQB+ACJxAH4AM3EAfgA0cHBwdAAcUmVwbGFjZW1lbnQgVmFsdWUgRnJvbSBQYXJhbXVxAH4AKwAAAAA=" />
+ <input type="hidden" name="_id0" value="_id0" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:17:47.488 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeConversions.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeConversions.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FacesSmokeConversions</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 May 2004, 01:17:47.508 PM MDT</startDate>
+  <description>Smoke test of the faces converters.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-789f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        
+            <form id="pageForm" method="post" action="/coreWeb/faces/facesSmoke/index.faces" enctype="application/x-www-form-urlencoded">
+
+            
+                
+            <table width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Custom Renderer Tests</td>
+</tr>
+</tbody>
+</table>
+
+            
+                    
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+                
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+
+            <table width="600pt">
+<tbody>
+<tr>
+<td><a href="goPanels.do" class="normal">Panel</a></td>
+<td><span class="normal">Test of the PanelGrid and related controls</span></td>
+</tr>
+<tr>
+<td><a href="goImages.do" class="normal">Images</a></td>
+<td><span class="normal">Test of the GraphicImage</span></td>
+</tr>
+<tr>
+<td><a href="goAnchors.do" class="normal">Anchors</a></td>
+<td><span class="normal">Test of Anchors and Buttons</span></td>
+</tr>
+<tr>
+<td><a href="goConvert.do" class="normal">Conversions</a></td>
+<td><span class="normal">Test of Converters</span></td>
+</tr>
+<tr>
+<td><a href="goFormOne.do" class="normal">Form One</a></td>
+<td><span class="normal">Test the Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goFormTwo.do" class="normal">Form Two</a></td>
+<td><span class="normal">Test the Select/Radio/Checkbox Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goBundle.do" class="normal">Bundle</a></td>
+<td><span class="normal">Test of the Bundle</span></td>
+</tr>
+<tr>
+<td><a href="goDataTable.do" class="normal">Data Table</a></td>
+<td><span class="normal">Test of the DataTable</span></td>
+</tr>
+</tbody>
+</table>
+
+             <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAABB3BAAAABBzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDR4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkM3NxAH4AAHBxAH4ADHB0AARfaWQ1c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ3eHEAfgAWcHQABF9pZDZzcQB+AABwcQB+AAxwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTB4cQB+ABZwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABZwdAAFX2lkMTJzcQB+AABwcQB+AAxwdAAFX2lkMTRzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE2eHEAfgAWcHQABV9pZDE1c3EAfgAAcHEAfgAMcHQABV9pZDE3c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4AFnB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQyMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjJ4cQB+ABZwdAAFX2lkMjFzcQB+AABwcQB+AAxwdAAFX2lkMjNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDI1eHEAfgAWcHQABV9pZDI0c3EAfgAAcHEAfgAMcHQABV9pZDI2eHEAfgAOcHQABF9pZDJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAIcGFnZUZvcm14dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AE8AAAAEdXEAfgBPAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AFV4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AVgBwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9pbmRleC5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAAFnVxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAJ3BAAAAApxAH4AD3EAfgBLeHhwdAAIcGFnZUZvcm1xAH4ATXEAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBPAAAAAnVxAH4ATwAAAAJ1cQB+AE8AAAAfdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgANeHhwdAANcGFnZUZvcm06X2lkMHEAfgAPcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AFhwcHQACHRpdGxlQmFyc3EAfgByAAAAAXEAfgBXcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkMXEAfgANcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLlRleHRwcHQAFUN1c3RvbSBSZW5kZXJlciBUZXN0c3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAB91cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAABcQB+AGVzcQB+AAUAAAAQdwQAAAAQcQB+ABdxAH4AGXEAfgAecQB+ACBxAH4AJXEAfgAncQB+ACxxAH4ALnEAfgAzcQB+ADVxAH4AOnEAfgA8cQB+AEFxAH4AQ3EAfgBIcQB+AEp4eHB0AA1wYWdlRm9ybTpfaWQycQB+AEtxAH4AV3EAfgBYcQB+AHFwcHNxAH4AcoAAAABxAH4AWHBwcHNxAH4AcgAAAAJxAH4AV3BwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgB3dXEAfgBPAAAAEHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AFXh4cHQADXBhZ2VGb3JtOl9pZDNxAH4AF3EAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5MaW5rcHB0AAtnb1BhbmVscy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAZub3JtYWxwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDRxAH4AFXEAfgBXcQB+AFhxAH4Af3BwdAAFUGFuZWxxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDVxAH4AGXEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCBvZiB0aGUgUGFuZWxHcmlkIGFuZCByZWxhdGVkIGNvbnRyb2xzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAdeHhwdAANcGFnZUZvcm06X2lkNnEAfgAecQB+AFdxAH4AWHEAfgCScHB0AAtnb0ltYWdlcy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkN3EAfgAdcQB+AFdxAH4AWHEAfgB/cHB0AAZJbWFnZXNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDhxAH4AIHEAfgBXcQB+AFhxAH4Af3BwdAAYVGVzdCBvZiB0aGUgR3JhcGhpY0ltYWdlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAkeHhwdAANcGFnZUZvcm06X2lkOXEAfgAlcQB+AFdxAH4AWHEAfgCScHB0AAxnb0FuY2hvcnMuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDEwcQB+ACRxAH4AV3EAfgBYcQB+AH9wcHQAB0FuY2hvcnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDExcQB+ACdxAH4AV3EAfgBYcQB+AH9wcHQAG1Rlc3Qgb2YgQW5jaG9ycyBhbmQgQnV0dG9uc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AK3h4cHQADnBhZ2VGb3JtOl9pZDEycQB+ACxxAH4AV3EAfgBYcQB+AJJwcHQADGdvQ29udmVydC5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTNxAH4AK3EAfgBXcQB+AFhxAH4Af3BwdAALQ29udmVyc2lvbnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE0cQB+AC5xAH4AV3EAfgBYcQB+AH9wcHQAElRlc3Qgb2YgQ29udmVydGVyc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AMnh4cHQADnBhZ2VGb3JtOl9pZDE1cQB+ADNxAH4AV3EAfgBYcQB+AJJwcHQADGdvRm9ybU9uZS5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTZxAH4AMnEAfgBXcQB+AFhxAH4Af3BwdAAIRm9ybSBPbmVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE3cQB+ADVxAH4AV3EAfgBYcQB+AH9wcHQAFFRlc3QgdGhlIEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgA5eHhwdAAOcGFnZUZvcm06X2lkMThxAH4AOnEAfgBXcQB+AFhxAH4AknBwdAAMZ29Gb3JtVHdvLmRvcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCUcHBwcHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAABnVxAH4ATwAAAAN1cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAAAeHB0AA5wYWdlRm9ybTpfaWQxOXEAfgA5cQB+AFdxAH4AWHEAfgB/cHB0AAhGb3JtIFR3b3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjBxAH4APHEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCB0aGUgU2VsZWN0L1JhZGlvL0NoZWNrYm94IEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBAeHhwdAAOcGFnZUZvcm06X2lkMjFxAH4AQXEAfgBXcQB+AFhxAH4AknBwdAALZ29CdW5kbGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDIycQB+AEBxAH4AV3EAfgBYcQB+AH9wcHQABkJ1bmRsZXEAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjNxAH4AQ3EAfgBXcQB+AFhxAH4Af3BwdAASVGVzdCBvZiB0aGUgQnVuZGxlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBHeHhwdAAOcGFnZUZvcm06X2lkMjRxAH4ASHEAfgBXcQB+AFhxAH4AknBwdAAOZ29EYXRhVGFibGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI1cQB+AEdxAH4AV3EAfgBYcQB+AH9wcHQACkRhdGEgVGFibGVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI2cQB+AEpxAH4AV3EAfgBYcQB+AH9wcHQAFVRlc3Qgb2YgdGhlIERhdGFUYWJsZXEAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAA==" />
+ <input type="hidden" name="pageForm" value="pageForm" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/goConvert.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-789f</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Image - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        
+              <form id="_id0" method="post" action="/coreWeb/faces/facesSmoke/Convert.faces" enctype="application/x-www-form-urlencoded">
+
+                
+                    
+                    
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Image Tests</td>
+</tr>
+<tr>
+<td class="titleBar"><hr width="600pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                
+                    
+                <a href="Controller.jpf"><span class="normal">Navigate Home</span></a><br />
+                <span class="sectionTitle">Converter Tag</span>
+                
+                     
+                        
+                     
+                        
+                    
+                        
+                    
+                        
+                <table class="normal">
+<tbody>
+<tr>
+<td>Date:</td>
+<td><span id="_id0:date">12-Jan-2000</span></td>
+<td></td>
+</tr>
+<tr>
+<td>Number:</td>
+<td><span id="_id0:number">123,456</span></td>
+<td></td>
+</tr>
+<tr>
+<td>No Formatting Date:</td>
+<td>Wed Jan 12 16:05:00 MST 2000</td>
+<td></td>
+</tr>
+<tr>
+<td>No Formatting Number:</td>
+<td>123456</td>
+<td></td>
+</tr>
+</tbody>
+</table>
+
+               <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAAEdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQyeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAEX2lkNXh0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0TGlua3B0AARfaWQ0c3EAfgAAcHEAfgAMcHQABF9pZDZzcQB+AABzcQB+AAUAAAAMdwQAAAAQc3EAfgAAcHEAfgAMcHQABF9pZDhzcQB+AABwcQB+AAxwdAAEZGF0ZXNxAH4AAHB0ACZqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sTWVzc2FnZXB0AARfaWQ5c3EAfgAAcHEAfgAMcHQABV9pZDEwc3EAfgAAcHEAfgAMcHQABm51bWJlcnNxAH4AAHBxAH4AH3B0AAVfaWQxMXNxAH4AAHBxAH4ADHB0AAVfaWQxMnNxAH4AAHBxAH4ADHB0AAVfaWQxM3NxAH4AAHBxAH4AH3B0AAVfaWQxNHNxAH4AAHBxAH4ADHB0AAVfaWQxNXNxAH4AAHBxAH4ADHB0AAVfaWQxNnNxAH4AAHBxAH4AH3B0AAVfaWQxN3hxAH4ADnB0AARfaWQ3eHQAI2phdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxGb3JtcHQABF9pZDB4dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+ADcAAAAEdXEAfgA3AAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AD14cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4APgBwcHQACkhUTUxfQkFTSUN0AB0vZmFjZXMvZmFjZXNTbW9rZS9Db252ZXJ0LmpzcHNyABBqYXZhLnV0aWwuTG9jYWxlfvgRYJww+ewCAARJAAhoYXNoY29kZUwAB2NvdW50cnlxAH4AAkwACGxhbmd1YWdlcQB+AAJMAAd2YXJpYW50cQB+AAJ4cP////90AAJVU3QAAmVudAAAdXEAfgA3AAAAAXVxAH4ANwAAAAJ1cQB+ADcAAAAWdXEAfgA3AAAACHNxAH4AOz9AAAAAAAAMdwgAAAAQAAAAAXQAIGphdmF4LmZhY2VzLndlYmFwcC5DT01QT05FTlRfSURTc3EAfgAFAAAABHcEAAAACnEAfgAPcQB+ABVxAH4AF3EAfgAzeHhwdAAEX2lkMHEAfgA1cQB+AD9xAH4AQHQAEGphdmF4LmZhY2VzLkZvcm1wcHBwdAAhYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkcHBwcHBwcHBwcHBwcHBwcHB1cQB+ADcAAAAEdXEAfgA3AAAAAnVxAH4ANwAAAB91cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAABcQB+AE1zcQB+AAUAAAACdwQAAAAKcQB+AA10AARfaWQzeHhwdAAJX2lkMDpfaWQxcQB+AA9xAH4AP3EAfgBAdAAQamF2YXguZmFjZXMuR3JpZHBwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cIAAAABxAH4AQHQAATBxAH4AXnQACHRpdGxlQmFyc3EAfgBbAAAAAXEAfgA/cHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+ADcAAAACdXEAfgA3AAAAAnVxAH4ANwAAAAZ1cQB+ADcAAAADdXEAfgA3AAAACHNxAH4AOz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQycQB+AA1xAH4AP3EAfgBAdAAQamF2YXguZmFjZXMuVGV4dHBwdAALSW1hZ2UgVGVzdHNxAH4AP3EAfgBAcHBwdXEAfgA3AAAAAHB1cQB+ADcAAAACdXEAfgA3AAAAHHVxAH4ANwAAAAN1cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAABcQB+AE1zcQB+AAUAAAABdwQAAAAKcQB+ABN4eHB0AAlfaWQwOl9pZDRxAH4AFXEAfgA/cQB+AEB0ABBqYXZheC5mYWNlcy5MaW5rcHB0AA5Db250cm9sbGVyLmpwZnBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHVxAH4ANwAAAAF1cQB+ADcAAAACdXEAfgA3AAAABnVxAH4ANwAAAAN1cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAAAeHB0AAlfaWQwOl9pZDVxAH4AE3EAfgA/cQB+AEBxAH4AaXBwdAANTmF2aWdhdGUgSG9tZXEAfgA/cQB+AEBwdAAGbm9ybWFscHVxAH4ANwAAAAB1cQB+ADcAAAACdXEAfgA3AAAABnVxAH4ANwAAAAN1cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAAAeHB0AAlfaWQwOl9pZDZxAH4AF3EAfgA/cQB+AEBxAH4AaXBwdAANQ29udmVydGVyIFRhZ3EAfgA/cQB+AEBwdAAMc2VjdGlvblRpdGxlcHVxAH4ANwAAAAB1cQB+ADcAAAACdXEAfgA3AAAAH3VxAH4ANwAAAAhzcQB+ADs/QAAAAAAADHcIAAAAEAAAAAFxAH4ATXNxAH4ABQAAAAx3BAAAABBxAH4AG3EAfgAdcQB+ACBxAH4AInEAfgAkcQB+ACZxAH4AKHEAfgAqcQB+ACxxAH4ALnEAfgAwcQB+ADJ4eHB0AAlfaWQwOl9pZDdxAH4AM3EAfgA/cQB+AEBxAH4AWnBwc3EAfgBbgAAAAHEAfgBAcHBwc3EAfgBbAAAAA3EAfgA/cHBwcHBwcHBwcHBwcHBwcHBwcQB+AH1wcHB1cQB+ADcAAAAMdXEAfgA3AAAAAnVxAH4ANwAAAAZ1cQB+ADcAAAADdXEAfgA3AAAACHNxAH4AOz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ4cQB+ABtxAH4AP3EAfgBAcQB+AGlwcHQABURhdGU6cQB+AD9xAH4AQHBwcHVxAH4ANwAAAAB1cQB+ADcAAAACdXEAfgA3AAAABnVxAH4ANwAAAAN1cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAAAeHVxAH4ANwAAAAJ1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAABdAAFdmFsdWV1cQB+ADcAAAABc3IAJmphdmF4LmZhY2VzLmNvbXBvbmVudC5TdGF0ZUhvbGRlclNhdmVyWcqzPZOczU0CAAJMAAljbGFzc05hbWVxAH4AAkwACnNhdmVkU3RhdGV0ABJMamF2YS9sYW5nL09iamVjdDt4cHQAIWNvbS5zdW4uZmFjZXMuZWwuVmFsdWVCaW5kaW5nSW1wbHQADVBhZ2VGbG93LmRhdGV0AAlfaWQwOmRhdGVxAH4AHXEAfgA/cQB+AEBxAH4AaXBzcQB+AKN0ACVqYXZheC5mYWNlcy5jb252ZXJ0LkRhdGVUaW1lQ29udmVydGVydXEAfgA3AAAABnQAB2RlZmF1bHRwdAALZGQtTU1NLXl5eXlxAH4ArHBxAH4AHXBxAH4AP3EAfgBAcHBwdXEAfgA3AAAAAHVxAH4ANwAAAAJ1cQB+ADcAAAAOdXEAfgA3AAAABnVxAH4ANwAAAAhzcQB+ADs/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkOXEAfgAgcQB+AD9xAH4AQHQAE2phdmF4LmZhY2VzLk1lc3NhZ2VwcQB+AB1xAH4AP3EAfgA/cQB+AD9xAH4AP3BwcHBwcHB0ABF2YWxpZGF0aW9uTWVzc2FnZXBxAH4AQHEAfgBAcHB1cQB+ADcAAAAAdXEAfgA3AAAAAnVxAH4ANwAAAAZ1cQB+ADcAAAADdXEAfgA3AAAACHNxAH4AOz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxMHEAfgAicQB+AD9xAH4AQHEAfgBpcHB0AAdOdW1iZXI6cQB+AD9xAH4AQHBwcHVxAH4ANwAAAAB1cQB+ADcAAAACdXEAfgA3AAAABnVxAH4ANwAAAAN1cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAAAeHVxAH4ANwAAAAJ1cQB+AJ8AAAABcQB+AKF1cQB+ADcAAAABc3EAfgCjcQB+AKZ0AA9QYWdlRmxvdy5udW1iZXJ0AAtfaWQwOm51bWJlcnEAfgAkcQB+AD9xAH4AQHEAfgBpcHNxAH4Ao3QAI2phdmF4LmZhY2VzLmNvbnZlcnQuTnVtYmVyQ29udmVydGVydXEAfgA3AAAAD3QAA3VzZHBxAH4AP3EAfgBAc3EAfgBbAAAAAHEAfgBAc3EAfgBbAAAAAHEAfgBAc3EAfgBbAAAAAHEAfgBAc3EAfgBbAAAAAHEAfgBAcHBxAH4AJHBxAH4AP3EAfgBAcHBwdXEAfgA3AAAAAHVxAH4ANwAAAAJ1cQB+ADcAAAAOdXEAfgA3AAAABnVxAH4ANwAAAAhzcQB+ADs/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMTFxAH4AJnEAfgA/cQB+AEBxAH4AtXBxAH4AJHEAfgA/cQB+AD9xAH4AP3EAfgA/cHBwcHBwcHEAfgC2cHEAfgBAcQB+AEBwcHVxAH4ANwAAAAB1cQB+ADcAAAACdXEAfgA3AAAABnVxAH4ANwAAAAN1cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDEycQB+AChxAH4AP3EAfgBAcQB+AGlwcHQAE05vIEZvcm1hdHRpbmcgRGF0ZTpxAH4AP3EAfgBAcHBwdXEAfgA3AAAAAHVxAH4ANwAAAAJ1cQB+ADcAAAAGdXEAfgA3AAAAA3VxAH4ANwAAAAhzcQB+ADs/QAAAAAAADHcIAAAAEAAAAAB4dXEAfgA3AAAAAnVxAH4AnwAAAAFxAH4AoXVxAH4ANwAAAAFzcQB+AKNxAH4ApnQADVBhZ2VGbG93LmRhdGV0AApfaWQwOl9pZDEzcQB+ACpxAH4AP3EAfgBAcQB+AGlwcHBxAH4AP3EAfgBAcHBwdXEAfgA3AAAAAHVxAH4ANwAAAAJ1cQB+ADcAAAAOdXEAfgA3AAAABnVxAH4ANwAAAAhzcQB+ADs/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMTRxAH4ALHEAfgA/cQB+AEBxAH4AtXBxAH4AHXEAfgA/cQB+AD9xAH4AP3EAfgA/cHBwcHBwcHEAfgC2cHEAfgBAcQB+AEBwcHVxAH4ANwAAAAB1cQB+ADcAAAACdXEAfgA3AAAABnVxAH4ANwAAAAN1cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDE1cQB+AC5xAH4AP3EAfgBAcQB+AGlwcHQAFU5vIEZvcm1hdHRpbmcgTnVtYmVyOnEAfgA/cQB+AEBwcHB1cQB+ADcAAAAAdXEAfgA3AAAAAnVxAH4ANwAAAAZ1cQB+ADcAAAADdXEAfgA3AAAACHNxAH4AOz9AAAAAAAAMdwgAAAAQAAAAAHh1cQB+ADcAAAACdXEAfgCfAAAAAXEAfgChdXEAfgA3AAAAAXNxAH4Ao3EAfgCmdAAPUGFnZUZsb3cubnVtYmVydAAKX2lkMDpfaWQxNnEAfgAwcQB+AD9xAH4AQHEAfgBpcHBwcQB+AD9xAH4AQHBwcHVxAH4ANwAAAAB1cQB+ADcAAAACdXEAfgA3AAAADnVxAH4ANwAAAAZ1cQB+ADcAAAAIc3EAfgA7P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDE3cQB+ADJxAH4AP3EAfgBAcQB+ALVwcQB+AB1xAH4AP3EAfgA/cQB+AD9xAH4AP3BwcHBwcHBxAH4AtnBxAH4AQHEAfgBAcHB1cQB+ADcAAAAA" />
+ <input type="hidden" name="_id0" value="_id0" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:17:49.822 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeDataTable.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeDataTable.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FacesSmokeDataTable</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 May 2004, 01:17:49.842 PM MDT</startDate>
+  <description>Smoke test of the JSF DataTable</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-789a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        
+            <form id="pageForm" method="post" action="/coreWeb/faces/facesSmoke/index.faces" enctype="application/x-www-form-urlencoded">
+
+            
+                
+            <table width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Custom Renderer Tests</td>
+</tr>
+</tbody>
+</table>
+
+            
+                    
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+                
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+
+            <table width="600pt">
+<tbody>
+<tr>
+<td><a href="goPanels.do" class="normal">Panel</a></td>
+<td><span class="normal">Test of the PanelGrid and related controls</span></td>
+</tr>
+<tr>
+<td><a href="goImages.do" class="normal">Images</a></td>
+<td><span class="normal">Test of the GraphicImage</span></td>
+</tr>
+<tr>
+<td><a href="goAnchors.do" class="normal">Anchors</a></td>
+<td><span class="normal">Test of Anchors and Buttons</span></td>
+</tr>
+<tr>
+<td><a href="goConvert.do" class="normal">Conversions</a></td>
+<td><span class="normal">Test of Converters</span></td>
+</tr>
+<tr>
+<td><a href="goFormOne.do" class="normal">Form One</a></td>
+<td><span class="normal">Test the Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goFormTwo.do" class="normal">Form Two</a></td>
+<td><span class="normal">Test the Select/Radio/Checkbox Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goBundle.do" class="normal">Bundle</a></td>
+<td><span class="normal">Test of the Bundle</span></td>
+</tr>
+<tr>
+<td><a href="goDataTable.do" class="normal">Data Table</a></td>
+<td><span class="normal">Test of the DataTable</span></td>
+</tr>
+</tbody>
+</table>
+
+             <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAABB3BAAAABBzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDR4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkM3NxAH4AAHBxAH4ADHB0AARfaWQ1c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ3eHEAfgAWcHQABF9pZDZzcQB+AABwcQB+AAxwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTB4cQB+ABZwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABZwdAAFX2lkMTJzcQB+AABwcQB+AAxwdAAFX2lkMTRzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE2eHEAfgAWcHQABV9pZDE1c3EAfgAAcHEAfgAMcHQABV9pZDE3c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4AFnB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQyMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjJ4cQB+ABZwdAAFX2lkMjFzcQB+AABwcQB+AAxwdAAFX2lkMjNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDI1eHEAfgAWcHQABV9pZDI0c3EAfgAAcHEAfgAMcHQABV9pZDI2eHEAfgAOcHQABF9pZDJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAIcGFnZUZvcm14dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AE8AAAAEdXEAfgBPAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AFV4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AVgBwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9pbmRleC5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAAFnVxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAJ3BAAAAApxAH4AD3EAfgBLeHhwdAAIcGFnZUZvcm1xAH4ATXEAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBPAAAAAnVxAH4ATwAAAAJ1cQB+AE8AAAAfdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgANeHhwdAANcGFnZUZvcm06X2lkMHEAfgAPcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AFhwcHQACHRpdGxlQmFyc3EAfgByAAAAAXEAfgBXcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkMXEAfgANcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLlRleHRwcHQAFUN1c3RvbSBSZW5kZXJlciBUZXN0c3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAB91cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAABcQB+AGVzcQB+AAUAAAAQdwQAAAAQcQB+ABdxAH4AGXEAfgAecQB+ACBxAH4AJXEAfgAncQB+ACxxAH4ALnEAfgAzcQB+ADVxAH4AOnEAfgA8cQB+AEFxAH4AQ3EAfgBIcQB+AEp4eHB0AA1wYWdlRm9ybTpfaWQycQB+AEtxAH4AV3EAfgBYcQB+AHFwcHNxAH4AcoAAAABxAH4AWHBwcHNxAH4AcgAAAAJxAH4AV3BwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgB3dXEAfgBPAAAAEHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AFXh4cHQADXBhZ2VGb3JtOl9pZDNxAH4AF3EAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5MaW5rcHB0AAtnb1BhbmVscy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAZub3JtYWxwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDRxAH4AFXEAfgBXcQB+AFhxAH4Af3BwdAAFUGFuZWxxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDVxAH4AGXEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCBvZiB0aGUgUGFuZWxHcmlkIGFuZCByZWxhdGVkIGNvbnRyb2xzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAdeHhwdAANcGFnZUZvcm06X2lkNnEAfgAecQB+AFdxAH4AWHEAfgCScHB0AAtnb0ltYWdlcy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkN3EAfgAdcQB+AFdxAH4AWHEAfgB/cHB0AAZJbWFnZXNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDhxAH4AIHEAfgBXcQB+AFhxAH4Af3BwdAAYVGVzdCBvZiB0aGUgR3JhcGhpY0ltYWdlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAkeHhwdAANcGFnZUZvcm06X2lkOXEAfgAlcQB+AFdxAH4AWHEAfgCScHB0AAxnb0FuY2hvcnMuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDEwcQB+ACRxAH4AV3EAfgBYcQB+AH9wcHQAB0FuY2hvcnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDExcQB+ACdxAH4AV3EAfgBYcQB+AH9wcHQAG1Rlc3Qgb2YgQW5jaG9ycyBhbmQgQnV0dG9uc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AK3h4cHQADnBhZ2VGb3JtOl9pZDEycQB+ACxxAH4AV3EAfgBYcQB+AJJwcHQADGdvQ29udmVydC5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTNxAH4AK3EAfgBXcQB+AFhxAH4Af3BwdAALQ29udmVyc2lvbnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE0cQB+AC5xAH4AV3EAfgBYcQB+AH9wcHQAElRlc3Qgb2YgQ29udmVydGVyc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AMnh4cHQADnBhZ2VGb3JtOl9pZDE1cQB+ADNxAH4AV3EAfgBYcQB+AJJwcHQADGdvRm9ybU9uZS5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTZxAH4AMnEAfgBXcQB+AFhxAH4Af3BwdAAIRm9ybSBPbmVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE3cQB+ADVxAH4AV3EAfgBYcQB+AH9wcHQAFFRlc3QgdGhlIEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgA5eHhwdAAOcGFnZUZvcm06X2lkMThxAH4AOnEAfgBXcQB+AFhxAH4AknBwdAAMZ29Gb3JtVHdvLmRvcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCUcHBwcHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAABnVxAH4ATwAAAAN1cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAAAeHB0AA5wYWdlRm9ybTpfaWQxOXEAfgA5cQB+AFdxAH4AWHEAfgB/cHB0AAhGb3JtIFR3b3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjBxAH4APHEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCB0aGUgU2VsZWN0L1JhZGlvL0NoZWNrYm94IEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBAeHhwdAAOcGFnZUZvcm06X2lkMjFxAH4AQXEAfgBXcQB+AFhxAH4AknBwdAALZ29CdW5kbGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDIycQB+AEBxAH4AV3EAfgBYcQB+AH9wcHQABkJ1bmRsZXEAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjNxAH4AQ3EAfgBXcQB+AFhxAH4Af3BwdAASVGVzdCBvZiB0aGUgQnVuZGxlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBHeHhwdAAOcGFnZUZvcm06X2lkMjRxAH4ASHEAfgBXcQB+AFhxAH4AknBwdAAOZ29EYXRhVGFibGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI1cQB+AEdxAH4AV3EAfgBYcQB+AH9wcHQACkRhdGEgVGFibGVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI2cQB+AEpxAH4AV3EAfgBYcQB+AH9wcHQAFVRlc3Qgb2YgdGhlIERhdGFUYWJsZXEAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAA==" />
+ <input type="hidden" name="pageForm" value="pageForm" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/goDataTable.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-789a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>DataTable</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        
+          <form id="_id0" method="post" action="/coreWeb/faces/facesSmoke/DataTable.faces" enctype="application/x-www-form-urlencoded">
+
+                
+                    
+                    
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">DataTable Tests</td>
+</tr>
+<tr>
+<td class="titleBar"><hr width="600pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                
+                    
+                <a href="Controller.jpf"><span class="normal">Navigate Home</span></a><br />
+
+              
+            
+            <!-- The columns contain facets which act as headers -->      
+            
+                
+                    
+                
+                
+                    
+                
+                    
+            
+            
+            <!-- The columns contain facets which act as headers -->      
+            
+                
+                    
+                
+                
+                    
+                
+                    
+            
+            <table id="_id0:table" border="1" cellpadding="2" cellspacing="0">
+<thead>
+<tr>
+<th class="dataHeaders" scope="col">Name</th>
+<th class="dataHeaders" scope="col">Type</th>
+</tr>
+</thead>
+<tfoot>
+<tr>
+<td class="dataHeaders">Last Name</td>
+<td class="dataHeaders">Last Type</td>
+</tr>
+</tfoot>
+<tbody>
+<tr>
+<td class="dataColumnOne">Name 0</td>
+<td class="dataColumnTwo">Type 0</td>
+</tr>
+<tr>
+<td class="dataColumnOne">Name 1</td>
+<td class="dataColumnTwo">Type 1</td>
+</tr>
+<tr>
+<td class="dataColumnOne">Name 2</td>
+<td class="dataColumnTwo">Type 2</td>
+</tr>
+<tr>
+<td class="dataColumnOne">Name 3</td>
+<td class="dataColumnTwo">Type 3</td>
+</tr>
+<tr>
+<td class="dataColumnOne">Name 4</td>
+<td class="dataColumnTwo">Type 4</td>
+</tr>
+</tbody>
+</table>
+
+         <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAADdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQyeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAEX2lkNXh0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0TGlua3B0AARfaWQ0c3EAfgAAc3EAfgAFAAAAAncEAAAACnNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAEX2lkOXh0AB5qYXZheC5mYWNlcy5jb21wb25lbnQuVUlDb2x1bW5zcgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4cD9AAAAAAAAMdwgAAAAQAAAAAnQABmZvb3RlcnNxAH4AAHBxAH4ADHB0AARfaWQ4dAAGaGVhZGVyc3EAfgAAcHEAfgAMcHQABF9pZDd4dAAEX2lkNnNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABxzcQB+AB0/QAAAAAAADHcIAAAAEAAAAAJxAH4AH3NxAH4AAHBxAH4ADHB0AAVfaWQxMnEAfgAic3EAfgAAcHEAfgAMcHQABV9pZDExeHQABV9pZDEweHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxEYXRhVGFibGVwdAAFdGFibGV4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAEX2lkMHh0ACBqYXZheC5mYWNlcy5jb21wb25lbnQuVUlWaWV3Um9vdHBwdXIAE1tMamF2YS5sYW5nLk9iamVjdDuQzlifEHMpbAIAAHhwAAAAAnVxAH4ANQAAAAR1cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+ADp4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AOwBwcHQACkhUTUxfQkFTSUN0AB8vZmFjZXMvZmFjZXNTbW9rZS9EYXRhVGFibGUuanNwc3IAEGphdmEudXRpbC5Mb2NhbGV++BFgnDD57AIABEkACGhhc2hjb2RlTAAHY291bnRyeXEAfgACTAAIbGFuZ3VhZ2VxAH4AAkwAB3ZhcmlhbnRxAH4AAnhw/////3QAAlVTdAACZW50AAB1cQB+ADUAAAABdXEAfgA1AAAAAnVxAH4ANQAAABZ1cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAABdAAgamF2YXguZmFjZXMud2ViYXBwLkNPTVBPTkVOVF9JRFNzcQB+AAUAAAADdwQAAAAKcQB+AA9xAH4AFXEAfgAxeHhwdAAEX2lkMHEAfgAzcQB+ADxxAH4APXQAEGphdmF4LmZhY2VzLkZvcm1wcHBwdAAhYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkcHBwcHBwcHBwcHBwcHBwcHB1cQB+ADUAAAADdXEAfgA1AAAAAnVxAH4ANQAAAB91cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAABcQB+AEpzcQB+AAUAAAACdwQAAAAKcQB+AA10AARfaWQzeHhwdAAJX2lkMDpfaWQxcQB+AA9xAH4APHEAfgA9dAAQamF2YXguZmFjZXMuR3JpZHBwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cIAAAABxAH4APXQAATBxAH4AW3QACHRpdGxlQmFyc3EAfgBYAAAAAXEAfgA8cHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+ADUAAAACdXEAfgA1AAAAAnVxAH4ANQAAAAZ1cQB+ADUAAAADdXEAfgA1AAAACHNxAH4AHT9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQycQB+AA1xAH4APHEAfgA9dAAQamF2YXguZmFjZXMuVGV4dHBwdAAPRGF0YVRhYmxlIFRlc3RzcQB+ADxxAH4APXBwcHVxAH4ANQAAAABwdXEAfgA1AAAAAnVxAH4ANQAAABx1cQB+ADUAAAADdXEAfgA1AAAACHNxAH4AHT9AAAAAAAAMdwgAAAAQAAAAAXEAfgBKc3EAfgAFAAAAAXcEAAAACnEAfgATeHhwdAAJX2lkMDpfaWQ0cQB+ABVxAH4APHEAfgA9dAAQamF2YXguZmFjZXMuTGlua3BwdAAOQ29udHJvbGxlci5qcGZwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB1cQB+ADUAAAABdXEAfgA1AAAAAnVxAH4ANQAAAAZ1cQB+ADUAAAADdXEAfgA1AAAACHNxAH4AHT9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ1cQB+ABNxAH4APHEAfgA9cQB+AGZwcHQADU5hdmlnYXRlIEhvbWVxAH4APHEAfgA9cHQABm5vcm1hbHB1cQB+ADUAAAAAdXEAfgA1AAAAAnVxAH4ANQAAAB11cQB+ADUAAAAJdXEAfgA1AAAACHNxAH4AHT9AAAAAAAAMdwgAAAAQAAAAAXEAfgBKc3EAfgAFAAAAAncEAAAACnEAfgAlcQB+AC94eHVxAH4ANQAAAAJ1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAABdAAFdmFsdWV1cQB+ADUAAAABc3IAJmphdmF4LmZhY2VzLmNvbXBvbmVudC5TdGF0ZUhvbGRlclNhdmVyWcqzPZOczU0CAAJMAAljbGFzc05hbWVxAH4AAkwACnNhdmVkU3RhdGV0ABJMamF2YS9sYW5nL09iamVjdDt4cHQAIWNvbS5zdW4uZmFjZXMuZWwuVmFsdWVCaW5kaW5nSW1wbHQADVBhZ2VGbG93Lmxpc3R0AApfaWQwOnRhYmxlcQB+ADFxAH4APHEAfgA9dAARamF2YXguZmFjZXMuVGFibGVwc3EAfgBYAAAAAHEAfgA9c3EAfgBY/////3NxAH4AWAAAABRxAH4APHNxAH4AHT9AAAAAAAAMdwgAAAAQAAAAAHhwdAABbHBzcQB+AFgAAAABcQB+ADx0AAEycQB+AFt0ABxkYXRhQ29sdW1uT25lLCBkYXRhQ29sdW1uVHdvcHQAC2RhdGFIZWFkZXJzcHEAfgCWcHBwcHBwcHBwcHBwcHBwcHBwdXEAfgA1AAAAAnVxAH4ANQAAAAJ1cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAACdAAeamF2YXguZmFjZXMud2ViYXBwLkZBQ0VUX05BTUVTc3EAfgAFAAAAAncEAAAACnEAfgAicQB+AB94cQB+AEpzcQB+AAUAAAABdwQAAAAKcQB+ABt4eHB0AA9faWQwOnRhYmxlOl9pZDZxAH4AJXEAfgA8cQB+AD1wcHVxAH4ANQAAAAN1cQB+ADUAAAACdXEAfgA1AAAABnVxAH4ANQAAAAN1cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAAAeHVxAH4ANQAAAAJ1cQB+AIMAAAABcQB+AIV1cQB+ADUAAAABc3EAfgCHcQB+AIp0AAZsLm5hbWV0AA9faWQwOnRhYmxlOl9pZDlxAH4AG3EAfgA8cQB+AD1xAH4AZnBwcHEAfgA8cQB+AD1wcHB1cQB+ADUAAAAAdXIAFFtbTGphdmEubGFuZy5PYmplY3Q7GL/7U+Rr28oCAAB4cAAAAAF1cQB+ADUAAAACcQB+AB91cQB+ADUAAAACdXEAfgA1AAAABnVxAH4ANQAAAAN1cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAAAeHB0AA9faWQwOnRhYmxlOl9pZDhxAH4AIXEAfgA8cQB+AD1xAH4AZnBwdAAJTGFzdCBOYW1lcQB+ADxxAH4APXBwcHVxAH4ANQAAAAB1cQB+AKwAAAABdXEAfgA1AAAAAnEAfgAidXEAfgA1AAAAAnVxAH4ANQAAAAZ1cQB+ADUAAAADdXEAfgA1AAAACHNxAH4AHT9AAAAAAAAMdwgAAAAQAAAAAHhwdAAPX2lkMDp0YWJsZTpfaWQ3cQB+ACRxAH4APHEAfgA9cQB+AGZwcHQABE5hbWVxAH4APHEAfgA9cHBwdXEAfgA1AAAAAHVxAH4ANQAAAAJ1cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAACcQB+AJtzcQB+AAUAAAACdwQAAAAKcQB+ACJxAH4AH3hxAH4ASnNxAH4ABQAAAAF3BAAAAApxAH4AKXh4cHQAEF9pZDA6dGFibGU6X2lkMTBxAH4AL3EAfgA8cQB+AD1wcHVxAH4ANQAAAAN1cQB+ADUAAAACdXEAfgA1AAAABnVxAH4ANQAAAAN1cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAAAeHVxAH4ANQAAAAJ1cQB+AIMAAAABcQB+AIV1cQB+ADUAAAABc3EAfgCHcQB+AIp0AAZsLnR5cGV0ABBfaWQwOnRhYmxlOl9pZDEzcQB+AClxAH4APHEAfgA9cQB+AGZwcHBxAH4APHEAfgA9cHBwdXEAfgA1AAAAAHVxAH4ArAAAAAF1cQB+ADUAAAACcQB+AB91cQB+ADUAAAACdXEAfgA1AAAABnVxAH4ANQAAAAN1cQB+ADUAAAAIc3EAfgAdP0AAAAAAAAx3CAAAABAAAAAAeHB0ABBfaWQwOnRhYmxlOl9pZDEycQB+ACxxAH4APHEAfgA9cQB+AGZwcHQACUxhc3QgVHlwZXEAfgA8cQB+AD1wcHB1cQB+ADUAAAAAdXEAfgCsAAAAAXVxAH4ANQAAAAJxAH4AInVxAH4ANQAAAAJ1cQB+ADUAAAAGdXEAfgA1AAAAA3VxAH4ANQAAAAhzcQB+AB0/QAAAAAAADHcIAAAAEAAAAAB4cHQAEF9pZDA6dGFibGU6X2lkMTFxAH4ALnEAfgA8cQB+AD1xAH4AZnBwdAAEVHlwZXEAfgA8cQB+AD1wcHB1cQB+ADUAAAAA" />
+ <input type="hidden" name="_id0" value="_id0" /></form>
+    
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:17:52.205 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormOne.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormOne.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FacesSmokeFormOne</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 May 2004, 01:17:52.225 PM MDT</startDate>
+  <description>Test of JSF Forms and controls</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7895</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        
+            <form id="pageForm" method="post" action="/coreWeb/faces/facesSmoke/index.faces" enctype="application/x-www-form-urlencoded">
+
+            
+                
+            <table width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Custom Renderer Tests</td>
+</tr>
+</tbody>
+</table>
+
+            
+                    
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+                
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+
+            <table width="600pt">
+<tbody>
+<tr>
+<td><a href="goPanels.do" class="normal">Panel</a></td>
+<td><span class="normal">Test of the PanelGrid and related controls</span></td>
+</tr>
+<tr>
+<td><a href="goImages.do" class="normal">Images</a></td>
+<td><span class="normal">Test of the GraphicImage</span></td>
+</tr>
+<tr>
+<td><a href="goAnchors.do" class="normal">Anchors</a></td>
+<td><span class="normal">Test of Anchors and Buttons</span></td>
+</tr>
+<tr>
+<td><a href="goConvert.do" class="normal">Conversions</a></td>
+<td><span class="normal">Test of Converters</span></td>
+</tr>
+<tr>
+<td><a href="goFormOne.do" class="normal">Form One</a></td>
+<td><span class="normal">Test the Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goFormTwo.do" class="normal">Form Two</a></td>
+<td><span class="normal">Test the Select/Radio/Checkbox Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goBundle.do" class="normal">Bundle</a></td>
+<td><span class="normal">Test of the Bundle</span></td>
+</tr>
+<tr>
+<td><a href="goDataTable.do" class="normal">Data Table</a></td>
+<td><span class="normal">Test of the DataTable</span></td>
+</tr>
+</tbody>
+</table>
+
+             <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAABB3BAAAABBzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDR4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkM3NxAH4AAHBxAH4ADHB0AARfaWQ1c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ3eHEAfgAWcHQABF9pZDZzcQB+AABwcQB+AAxwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTB4cQB+ABZwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABZwdAAFX2lkMTJzcQB+AABwcQB+AAxwdAAFX2lkMTRzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE2eHEAfgAWcHQABV9pZDE1c3EAfgAAcHEAfgAMcHQABV9pZDE3c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4AFnB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQyMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjJ4cQB+ABZwdAAFX2lkMjFzcQB+AABwcQB+AAxwdAAFX2lkMjNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDI1eHEAfgAWcHQABV9pZDI0c3EAfgAAcHEAfgAMcHQABV9pZDI2eHEAfgAOcHQABF9pZDJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAIcGFnZUZvcm14dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AE8AAAAEdXEAfgBPAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AFV4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AVgBwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9pbmRleC5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAAFnVxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAJ3BAAAAApxAH4AD3EAfgBLeHhwdAAIcGFnZUZvcm1xAH4ATXEAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBPAAAAAnVxAH4ATwAAAAJ1cQB+AE8AAAAfdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgANeHhwdAANcGFnZUZvcm06X2lkMHEAfgAPcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AFhwcHQACHRpdGxlQmFyc3EAfgByAAAAAXEAfgBXcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkMXEAfgANcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLlRleHRwcHQAFUN1c3RvbSBSZW5kZXJlciBUZXN0c3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAB91cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAABcQB+AGVzcQB+AAUAAAAQdwQAAAAQcQB+ABdxAH4AGXEAfgAecQB+ACBxAH4AJXEAfgAncQB+ACxxAH4ALnEAfgAzcQB+ADVxAH4AOnEAfgA8cQB+AEFxAH4AQ3EAfgBIcQB+AEp4eHB0AA1wYWdlRm9ybTpfaWQycQB+AEtxAH4AV3EAfgBYcQB+AHFwcHNxAH4AcoAAAABxAH4AWHBwcHNxAH4AcgAAAAJxAH4AV3BwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgB3dXEAfgBPAAAAEHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AFXh4cHQADXBhZ2VGb3JtOl9pZDNxAH4AF3EAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5MaW5rcHB0AAtnb1BhbmVscy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAZub3JtYWxwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDRxAH4AFXEAfgBXcQB+AFhxAH4Af3BwdAAFUGFuZWxxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDVxAH4AGXEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCBvZiB0aGUgUGFuZWxHcmlkIGFuZCByZWxhdGVkIGNvbnRyb2xzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAdeHhwdAANcGFnZUZvcm06X2lkNnEAfgAecQB+AFdxAH4AWHEAfgCScHB0AAtnb0ltYWdlcy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkN3EAfgAdcQB+AFdxAH4AWHEAfgB/cHB0AAZJbWFnZXNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDhxAH4AIHEAfgBXcQB+AFhxAH4Af3BwdAAYVGVzdCBvZiB0aGUgR3JhcGhpY0ltYWdlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAkeHhwdAANcGFnZUZvcm06X2lkOXEAfgAlcQB+AFdxAH4AWHEAfgCScHB0AAxnb0FuY2hvcnMuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDEwcQB+ACRxAH4AV3EAfgBYcQB+AH9wcHQAB0FuY2hvcnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDExcQB+ACdxAH4AV3EAfgBYcQB+AH9wcHQAG1Rlc3Qgb2YgQW5jaG9ycyBhbmQgQnV0dG9uc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AK3h4cHQADnBhZ2VGb3JtOl9pZDEycQB+ACxxAH4AV3EAfgBYcQB+AJJwcHQADGdvQ29udmVydC5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTNxAH4AK3EAfgBXcQB+AFhxAH4Af3BwdAALQ29udmVyc2lvbnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE0cQB+AC5xAH4AV3EAfgBYcQB+AH9wcHQAElRlc3Qgb2YgQ29udmVydGVyc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AMnh4cHQADnBhZ2VGb3JtOl9pZDE1cQB+ADNxAH4AV3EAfgBYcQB+AJJwcHQADGdvRm9ybU9uZS5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTZxAH4AMnEAfgBXcQB+AFhxAH4Af3BwdAAIRm9ybSBPbmVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE3cQB+ADVxAH4AV3EAfgBYcQB+AH9wcHQAFFRlc3QgdGhlIEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgA5eHhwdAAOcGFnZUZvcm06X2lkMThxAH4AOnEAfgBXcQB+AFhxAH4AknBwdAAMZ29Gb3JtVHdvLmRvcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCUcHBwcHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAABnVxAH4ATwAAAAN1cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAAAeHB0AA5wYWdlRm9ybTpfaWQxOXEAfgA5cQB+AFdxAH4AWHEAfgB/cHB0AAhGb3JtIFR3b3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjBxAH4APHEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCB0aGUgU2VsZWN0L1JhZGlvL0NoZWNrYm94IEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBAeHhwdAAOcGFnZUZvcm06X2lkMjFxAH4AQXEAfgBXcQB+AFhxAH4AknBwdAALZ29CdW5kbGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDIycQB+AEBxAH4AV3EAfgBYcQB+AH9wcHQABkJ1bmRsZXEAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjNxAH4AQ3EAfgBXcQB+AFhxAH4Af3BwdAASVGVzdCBvZiB0aGUgQnVuZGxlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBHeHhwdAAOcGFnZUZvcm06X2lkMjRxAH4ASHEAfgBXcQB+AFhxAH4AknBwdAAOZ29EYXRhVGFibGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI1cQB+AEdxAH4AV3EAfgBYcQB+AH9wcHQACkRhdGEgVGFibGVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI2cQB+AEpxAH4AV3EAfgBYcQB+AH9wcHQAFVRlc3Qgb2YgdGhlIERhdGFUYWJsZXEAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAA==" />
+ <input type="hidden" name="pageForm" value="pageForm" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/goFormOne.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7895</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Form One - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        
+              <form id="_id0" method="post" action="/coreWeb/faces/facesSmoke/FormOne.faces" enctype="application/x-www-form-urlencoded">
+
+                
+                    
+                    
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Form One Tests</td>
+</tr>
+<tr>
+<td class="titleBar"><hr width="600pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                
+                    
+                <a href="Controller.jpf"><span class="normal">Navigate Home</span></a><br />
+
+                <span class="sectionTitle">Form One</span>
+                <br />
+                
+                    
+                    
+                        
+                         
+                    
+                    
+                    
+                     
+                    
+                    
+                    
+                     
+                    
+
+                    
+                        
+                    
+                    
+                        
+                    
+                    
+                <table class="normal" width="600pt">
+<tbody>
+<tr>
+<td class="columnRight"><label for="_id0:text">
+Text:</label></td>
+<td class="columnLeft"><input id="_id0:text" type="text" name="_id0:text" value="x-initial Text Value" class="normal" size="25" /></td>
+<td class="columnRight"></td>
+</tr>
+<tr>
+<td class="columnRight"><label for="_id0:textArea">
+Text Area:</label></td>
+<td class="columnLeft"><textarea id="_id0:textArea" name="_id0:textArea" cols="25" rows="10" style="color: #000099;font-family:Verdana; font-size:8pt; margin:5,5,5,5; ">initial Text Area Value</textarea></td>
+<td class="columnRight"></td>
+</tr>
+<tr>
+<td class="columnRight"><label for="_id0:password">
+Secret:</label></td>
+<td class="columnLeft"><input id="_id0:password" type="password" name="_id0:password" value="" /></td>
+<td class="columnRight"></td>
+</tr>
+<tr>
+<td class="columnRight"><label for="_id0:textInt">
+Binding to Number (0.8%)</label></td>
+<td class="columnLeft"><input id="_id0:textInt" type="text" name="_id0:textInt" value="80" class="normal" size="3" /></td>
+<td class="columnRight"></td>
+</tr>
+</tbody>
+</table>
+
+                 <input type="hidden" name="_id0:_id20" value="PostFromHidden" />
+                <input type="submit" name="_id0:_id21" value="Submit" />
+                <hr>
+                
+               <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAAHdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQyeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAEX2lkNXh0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0TGlua3B0AARfaWQ0c3EAfgAAcHEAfgAMcHQABF9pZDZzcQB+AABzcQB+AAUAAAAMdwQAAAAQc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ5eHQAKmphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxPdXRwdXRMYWJlbHB0AARfaWQ4c3EAfgAAcHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxJbnB1dFRleHRwdAAEdGV4dHNxAH4AAHB0ACZqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sTWVzc2FnZXB0AAVfaWQxMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTJ4cQB+AB5wdAAFX2lkMTFzcQB+AABwdAAsamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbElucHV0VGV4dGFyZWFwdAAIdGV4dEFyZWFzcQB+AABwcQB+AAxwdAAFX2lkMTNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE1eHEAfgAecHQABV9pZDE0c3EAfgAAcHQAKmphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxJbnB1dFNlY3JldHB0AAhwYXNzd29yZHNxAH4AAHBxAH4ADHB0AAVfaWQxNnNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTh4cQB+AB5wdAAFX2lkMTdzcQB+AABwcQB+ACFwdAAHdGV4dEludHNxAH4AAHBxAH4AJHB0AAVfaWQxOXhxAH4ADnB0AARfaWQ3c3EAfgAAcHQAKmphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxJbnB1dEhpZGRlbnB0AAVfaWQyMHNxAH4AAHB0ACxqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sQ29tbWFuZEJ1dHRvbnB0AAVfaWQyMXNxAH4AAHB0ACdqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sTWVzc2FnZXNwdAAFX2lkMjJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAEX2lkMHh0ACBqYXZheC5mYWNlcy5jb21wb25lbnQuVUlWaWV3Um9vdHBwdXIAE1tMamF2YS5sYW5nLk9iamVjdDuQzlifEHMpbAIAAHhwAAAAAnVxAH4AUAAAAAR1cQB+AFAAAAAIc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA/QAAAAAAADHcIAAAAEAAAAAF0ACRqYXZheC5mYWNlcy53ZWJhcHAuQ1VSUkVOVF9WSUVXX1JPT1RxAH4AVnhwcHBzcgARamF2YS5sYW5nLkJvb2xlYW7NIHKA1Zz67gIAAVoABXZhbHVleHABc3EAfgBXAHBwdAAKSFRNTF9CQVNJQ3QAHS9mYWNlcy9mYWNlc1Ntb2tlL0Zvcm1PbmUuanNwc3IAEGphdmEudXRpbC5Mb2NhbGV++BFgnDD57AIABEkACGhhc2hjb2RlTAAHY291bnRyeXEAfgACTAAIbGFuZ3VhZ2VxAH4AAkwAB3ZhcmlhbnRxAH4AAnhw/////3QAAlVTdAACZW50AAB1cQB+AFAAAAABdXEAfgBQAAAAAnVxAH4AUAAAABZ1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAABdAAgamF2YXguZmFjZXMud2ViYXBwLkNPTVBPTkVOVF9JRFNzcQB+AAUAAAAHdwQAAAAKcQB+AA9xAH4AFXEAfgAXcQB+AENxAH4ARnEAfgBJcQB+AEx4eHB0AARfaWQwcQB+AE5xAH4AWHEAfgBZdAAQamF2YXguZmFjZXMuRm9ybXBwcHB0ACFhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRwcHBwcHBwcHBwcHBwcHBwcHVxAH4AUAAAAAd1cQB+AFAAAAACdXEAfgBQAAAAH3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAFxAH4AZnNxAH4ABQAAAAJ3BAAAAApxAH4ADXQABF9pZDN4eHB0AAlfaWQwOl9pZDFxAH4AD3EAfgBYcQB+AFl0ABBqYXZheC5mYWNlcy5HcmlkcHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwgAAAAHEAfgBZdAABMHEAfgB3dAAIdGl0bGVCYXJzcQB+AHQAAAABcQB+AFhwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAU2MDBwdHVxAH4AUAAAAAJ1cQB+AFAAAAACdXEAfgBQAAAABnVxAH4AUAAAAAN1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAAAeHB0AAlfaWQwOl9pZDJxAH4ADXEAfgBYcQB+AFl0ABBqYXZheC5mYWNlcy5UZXh0cHB0AA5Gb3JtIE9uZSBUZXN0c3EAfgBYcQB+AFlwcHB1cQB+AFAAAAAAcHVxAH4AUAAAAAJ1cQB+AFAAAAAcdXEAfgBQAAAAA3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAFxAH4AZnNxAH4ABQAAAAF3BAAAAApxAH4AE3h4cHQACV9pZDA6X2lkNHEAfgAVcQB+AFhxAH4AWXQAEGphdmF4LmZhY2VzLkxpbmtwcHQADkNvbnRyb2xsZXIuanBmcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBQAAAAAXVxAH4AUAAAAAJ1cQB+AFAAAAAGdXEAfgBQAAAAA3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkNXEAfgATcQB+AFhxAH4AWXEAfgCCcHB0AA1OYXZpZ2F0ZSBIb21lcQB+AFhxAH4AWXB0AAZub3JtYWxwdXEAfgBQAAAAAHVxAH4AUAAAAAJ1cQB+AFAAAAAGdXEAfgBQAAAAA3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkNnEAfgAXcQB+AFhxAH4AWXEAfgCCcHB0AAhGb3JtIE9uZXEAfgBYcQB+AFlwdAAMc2VjdGlvblRpdGxlcHVxAH4AUAAAAAB1cQB+AFAAAAACdXEAfgBQAAAAH3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAFxAH4AZnNxAH4ABQAAAAx3BAAAABBxAH4AH3EAfgAicQB+ACVxAH4AKnEAfgAtcQB+AC9xAH4ANHEAfgA3cQB+ADlxAH4APnEAfgBAcQB+AEJ4eHB0AAlfaWQwOl9pZDdxAH4AQ3EAfgBYcQB+AFlxAH4Ac3Bwc3EAfgB0gAAAAHEAfgBZcHB0ABdjb2x1bW5SaWdodCwgY29sdW1uTGVmdHNxAH4AdAAAAANxAH4AWHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCWcHBxAH4AenVxAH4AUAAAAAx1cQB+AFAAAAACdXEAfgBQAAAAFXVxAH4AUAAAAAN1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAABcQB+AGZzcQB+AAUAAAABdwQAAAAKcQB+AB14eHB0AAlfaWQwOl9pZDhxAH4AH3EAfgBYcQB+AFl0ABFqYXZheC5mYWNlcy5MYWJlbHBwcHBwcQB+ACJwcHBwcHBwcHBwcHBwcHBwcHVxAH4AUAAAAAF1cQB+AFAAAAACdXEAfgBQAAAABnVxAH4AUAAAAAN1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAAAeHB0AAlfaWQwOl9pZDlxAH4AHXEAfgBYcQB+AFlxAH4AgnBwdAAFVGV4dDpxAH4AWHEAfgBZcHBwdXEAfgBQAAAAAHVxAH4AUAAAAAJ1cQB+AFAAAAAfdXEAfgBQAAAACnVxAH4AUAAAAAN1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAAAeHVxAH4AUAAAAAJ1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAABdAAFdmFsdWV1cQB+AFAAAAABc3IAJmphdmF4LmZhY2VzLmNvbXBvbmVudC5TdGF0ZUhvbGRlclNhdmVyWcqzPZOczU0CAAJMAAljbGFzc05hbWVxAH4AAkwACnNhdmVkU3RhdGV0ABJMamF2YS9sYW5nL09iamVjdDt4cHQAIWNvbS5zdW4uZmFjZXMuZWwuVmFsdWVCaW5kaW5nSW1wbHQAFVBhZ2VGbG93LmZvcm1PbmUudGV4dHQACV9pZDA6dGV4dHEAfgAicQB+AFhxAH4AWXEAfgCCc3EAfgAFAAAAAXcEAAAAAXNxAH4Ax3QAImZhY2VzLmZhY2VzU21va2UuVmFsdWVDaGFuZ2VMaXN0ZW5weHBwcQB+AFlxAH4AWXEAfgBZcQB+AFhxAH4AWXEAfgBZcHBwcHBwcQB+AFlxAH4AWXBzcQB+AHSAAAAAcQB+AFlwcHBwcHBwcHBwcHBwcHEAfgBZcQB+AFlzcQB+AHQAAAAZcQB+AFhwcQB+AJZwcHVxAH4AUAAAAAB1cQB+AFAAAAACdXEAfgBQAAAADnVxAH4AUAAAAAZ1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDEwcQB+ACVxAH4AWHEAfgBZdAATamF2YXguZmFjZXMuTWVzc2FnZXBxAH4AInEAfgBYcQB+AFhxAH4AWXEAfgBZcHBwcHBwcHQAEXZhbGlkYXRpb25NZXNzYWdlcHEAfgBZcQB+AFlwcHVxAH4AUAAAAAB1cQB+AFAAAAACdXEAfgBQAAAAFXVxAH4AUAAAAAN1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAABcQB+AGZzcQB+AAUAAAABdwQAAAAKcQB+ACl4eHB0AApfaWQwOl9pZDExcQB+ACpxAH4AWHEAfgBZcQB+ALJwcHBwcHEAfgAtcHBwcHBwcHBwcHBwcHBwcHB1cQB+AFAAAAABdXEAfgBQAAAAAnVxAH4AUAAAAAZ1cQB+AFAAAAADdXEAfgBQAAAACHNxAH4AVD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxMnEAfgApcQB+AFhxAH4AWXEAfgCCcHB0AApUZXh0IEFyZWE6cQB+AFhxAH4AWXBwcHVxAH4AUAAAAAB1cQB+AFAAAAACdXEAfgBQAAAAHnVxAH4AUAAAAAp1cQB+AFAAAAADdXEAfgBQAAAACHNxAH4AVD9AAAAAAAAMdwgAAAAQAAAAAHh1cQB+AFAAAAACdXEAfgDDAAAAAXEAfgDFdXEAfgBQAAAAAXNxAH4Ax3EAfgDKdAAZUGFnZUZsb3cuZm9ybU9uZS50ZXh0QXJlYXQADV9pZDA6dGV4dEFyZWFxAH4ALXEAfgBYcQB+AFl0ABRqYXZheC5mYWNlcy5UZXh0YXJlYXBwcHEAfgBZcQB+AFlxAH4AWXEAfgBYcQB+AFlxAH4AWXBwcHBzcQB+AHQAAAAZcQB+AFhwcQB+AFlxAH4AWXBwcHBwcHBwcHBwcHBwcHEAfgBZcQB+AFlzcQB+AHQAAAAKcQB+AFh0AENjb2xvcjogIzAwMDA5OTtmb250LWZhbWlseTpWZXJkYW5hOyBmb250LXNpemU6OHB0OyBtYXJnaW46NSw1LDUsNTsgcHBwdXEAfgBQAAAAAHVxAH4AUAAAAAJ1cQB+AFAAAAAGdXEAfgBQAAAAA3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMTNxAH4AL3EAfgBYcQB+AFlxAH4AgnBwcQB+AGBxAH4AWHEAfgBZcHBwdXEAfgBQAAAAAHVxAH4AUAAAAAJ1cQB+AFAAAAAVdXEAfgBQAAAAA3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAFxAH4AZnNxAH4ABQAAAAF3BAAAAApxAH4AM3h4cHQACl9pZDA6X2lkMTRxAH4ANHEAfgBYcQB+AFlxAH4AsnBwdAAHU2VjcmV0OnBwcQB+ADdwcHBwcHBwcHBwcHBwcHBwcHVxAH4AUAAAAAF1cQB+AFAAAAACdXEAfgBQAAAABnVxAH4AUAAAAAN1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDE1cQB+ADNxAH4AWHEAfgBZcQB+AIJwcHEAfgELcQB+AFhxAH4AWXBwcHVxAH4AUAAAAAB1cQB+AFAAAAACdXEAfgBQAAAAIXVxAH4AUAAAAAp1cQB+AFAAAAADdXEAfgBQAAAACHNxAH4AVD9AAAAAAAAMdwgAAAAQAAAAAHh1cQB+AFAAAAACdXEAfgDDAAAAAXEAfgDFdXEAfgBQAAAAAXNxAH4Ax3EAfgDKdAAZUGFnZUZsb3cuZm9ybU9uZS5wYXNzd29yZHQADV9pZDA6cGFzc3dvcmRxAH4AN3EAfgBYcQB+AFl0ABJqYXZheC5mYWNlcy5TZWNyZXRwcHBxAH4AWXEAfgBZcQB+AFlxAH4AWHEAfgBZcQB+AFlwcHBwcHBxAH4AWXEAfgBZcHNxAH4AdIAAAABxAH4AWXBwcHBwcHBwcHBwcHBwcQB+AFlxAH4AWXEAfgBZcQB+AFlzcQB+AHSAAAAAcQB+AFlwcHBwdXEAfgBQAAAAAHVxAH4AUAAAAAJ1cQB+AFAAAAAGdXEAfgBQAAAAA3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMTZxAH4AOXEAfgBYcQB+AFlxAH4AgnBwcQB+AGBxAH4AWHEAfgBZcHBwdXEAfgBQAAAAAHVxAH4AUAAAAAJ1cQB+AFAAAAAVdXEAfgBQAAAAA3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAFxAH4AZnNxAH4ABQAAAAF3BAAAAApxAH4APXh4cHQACl9pZDA6X2lkMTdxAH4APnEAfgBYcQB+AFlxAH4AsnBwcHBwcQB+AEBwcHBwcHBwcHBwcHBwcHBwcHVxAH4AUAAAAAF1cQB+AFAAAAACdXEAfgBQAAAABnVxAH4AUAAAAAN1cQB+AFAAAAAIc3EAfgBUP0AAAAAAAAx3CAAAABAAAAAAeHVxAH4AUAAAAAJ1cQB+AMMAAAABcQB+AMV1cQB+AFAAAAABc3EAfgDHdAAkY29tLnN1bi5mYWNlcy5lbC5NaXhlZEVMVmFsdWVCaW5kaW5ndAA2QmluZGluZyB0byBOdW1iZXIgKCN7UGFnZUZsb3cuZm9ybU9uZS50ZXh0SW50IC8gMTAwfSUpdAAKX2lkMDpfaWQxOHEAfgA9cQB+AFhxAH4AWXEAfgCCcHBwcQB+AFhxAH4AWXBwcHVxAH4AUAAAAAB1cQB+AFAAAAACdXEAfgBQAAAAH3VxAH4AUAAAAAp1cQB+AFAAAAADdXEAfgBQAAAACHNxAH4AVD9AAAAAAAAMdwgAAAAQAAAAAHh1cQB+AFAAAAACdXEAfgDDAAAAAXEAfgDFdXEAfgBQAAAAAXNxAH4Ax3EAfgDKdAAYUGFnZUZsb3cuZm9ybU9uZS50ZXh0SW50dAAMX2lkMDp0ZXh0SW50cQB+AEBxAH4AWHEAfgBZcQB+AIJwcHBxAH4AWXEAfgBZcQB+AFlxAH4AWHEAfgBZcQB+AFlzcQB+AAUAAAABdwQAAAABc3EAfgDHdAAoamF2YXguZmFjZXMudmFsaWRhdG9yLkxvbmdSYW5nZVZhbGlkYXRvcnVxAH4AUAAAAARzcgAOamF2YS5sYW5nLkxvbmc7i+SQzI8j3wIAAUoABXZhbHVleHEAfgB1AAAAAAAAAGRxAH4AWHNxAH4BUAAAAAAAAAAAcQB+AFh4cHBwcHBxAH4AWXEAfgBZcHNxAH4AdIAAAABxAH4AWXBwcHBwcHBwcHBwcHBwcQB+AFlxAH4AWXNxAH4AdAAAAANxAH4AWHBxAH4AlnBwdXEAfgBQAAAAAHVxAH4AUAAAAAJ1cQB+AFAAAAAOdXEAfgBQAAAABnVxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMTlxAH4AQnEAfgBYcQB+AFlxAH4A2XBxAH4AQHEAfgBYcQB+AFhxAH4AWXEAfgBZcHBwcHBwcHEAfgDacHEAfgBZcQB+AFlwcHVxAH4AUAAAAAB1cQB+AFAAAAACdXEAfgBQAAAAAXVxAH4AUAAAAAp1cQB+AFAAAAADdXEAfgBQAAAACHNxAH4AVD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQyMHEAfgBGcQB+AFhxAH4AWXQAEmphdmF4LmZhY2VzLkhpZGRlbnBwdAAOUG9zdEZyb21IaWRkZW5xAH4AWHEAfgBZcQB+AFlxAH4AWHEAfgBZcQB+AFlwcHB1cQB+AFAAAAAAdXEAfgBQAAAAAnVxAH4AUAAAAB11cQB+AFAAAAAGdXEAfgBQAAAACHNxAH4AVD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQyMXEAfgBJcQB+AFhxAH4AWXQAEmphdmF4LmZhY2VzLkJ1dHRvbnBwcHEAfgBZcQB+AFl0AAZTdWJtaXRwcHBxAH4AWXEAfgBZcHBwcHBwcHBwcHBwcHBwcHEAfgBZcQB+AFlwcHBwdAAGc3VibWl0dXEAfgBQAAAAAHVxAH4AUAAAAAJ1cQB+AFAAAAAPdXEAfgBQAAAAB3VxAH4AUAAAAAhzcQB+AFQ/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMjJxAH4ATHEAfgBYcQB+AFl0ABRqYXZheC5mYWNlcy5NZXNzYWdlc3BxAH4AWXEAfgBZcQB+AFlxAH4AWXEAfgBYcQB+AFlwcHBwcHB0AARsaXN0cHEAfgDacHEAfgBZcQB+AFlwcHVxAH4AUAAAAAA=" />
+ <input type="hidden" name="_id0" value="_id0" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:17:54.759 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormTwo.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormTwo.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,436 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FacesSmokeFormTwo</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 May 2004, 01:17:54.779 PM MDT</startDate>
+  <description>Smoke test of the JSF Form controls</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7890</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        
+            <form id="pageForm" method="post" action="/coreWeb/faces/facesSmoke/index.faces" enctype="application/x-www-form-urlencoded">
+
+            
+                
+            <table width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Custom Renderer Tests</td>
+</tr>
+</tbody>
+</table>
+
+            
+                    
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+                
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+
+            <table width="600pt">
+<tbody>
+<tr>
+<td><a href="goPanels.do" class="normal">Panel</a></td>
+<td><span class="normal">Test of the PanelGrid and related controls</span></td>
+</tr>
+<tr>
+<td><a href="goImages.do" class="normal">Images</a></td>
+<td><span class="normal">Test of the GraphicImage</span></td>
+</tr>
+<tr>
+<td><a href="goAnchors.do" class="normal">Anchors</a></td>
+<td><span class="normal">Test of Anchors and Buttons</span></td>
+</tr>
+<tr>
+<td><a href="goConvert.do" class="normal">Conversions</a></td>
+<td><span class="normal">Test of Converters</span></td>
+</tr>
+<tr>
+<td><a href="goFormOne.do" class="normal">Form One</a></td>
+<td><span class="normal">Test the Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goFormTwo.do" class="normal">Form Two</a></td>
+<td><span class="normal">Test the Select/Radio/Checkbox Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goBundle.do" class="normal">Bundle</a></td>
+<td><span class="normal">Test of the Bundle</span></td>
+</tr>
+<tr>
+<td><a href="goDataTable.do" class="normal">Data Table</a></td>
+<td><span class="normal">Test of the DataTable</span></td>
+</tr>
+</tbody>
+</table>
+
+             <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAABB3BAAAABBzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDR4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkM3NxAH4AAHBxAH4ADHB0AARfaWQ1c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ3eHEAfgAWcHQABF9pZDZzcQB+AABwcQB+AAxwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTB4cQB+ABZwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABZwdAAFX2lkMTJzcQB+AABwcQB+AAxwdAAFX2lkMTRzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE2eHEAfgAWcHQABV9pZDE1c3EAfgAAcHEAfgAMcHQABV9pZDE3c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4AFnB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQyMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjJ4cQB+ABZwdAAFX2lkMjFzcQB+AABwcQB+AAxwdAAFX2lkMjNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDI1eHEAfgAWcHQABV9pZDI0c3EAfgAAcHEAfgAMcHQABV9pZDI2eHEAfgAOcHQABF9pZDJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAIcGFnZUZvcm14dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AE8AAAAEdXEAfgBPAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AFV4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AVgBwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9pbmRleC5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAAFnVxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAJ3BAAAAApxAH4AD3EAfgBLeHhwdAAIcGFnZUZvcm1xAH4ATXEAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBPAAAAAnVxAH4ATwAAAAJ1cQB+AE8AAAAfdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgANeHhwdAANcGFnZUZvcm06X2lkMHEAfgAPcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AFhwcHQACHRpdGxlQmFyc3EAfgByAAAAAXEAfgBXcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkMXEAfgANcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLlRleHRwcHQAFUN1c3RvbSBSZW5kZXJlciBUZXN0c3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAB91cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAABcQB+AGVzcQB+AAUAAAAQdwQAAAAQcQB+ABdxAH4AGXEAfgAecQB+ACBxAH4AJXEAfgAncQB+ACxxAH4ALnEAfgAzcQB+ADVxAH4AOnEAfgA8cQB+AEFxAH4AQ3EAfgBIcQB+AEp4eHB0AA1wYWdlRm9ybTpfaWQycQB+AEtxAH4AV3EAfgBYcQB+AHFwcHNxAH4AcoAAAABxAH4AWHBwcHNxAH4AcgAAAAJxAH4AV3BwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgB3dXEAfgBPAAAAEHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AFXh4cHQADXBhZ2VGb3JtOl9pZDNxAH4AF3EAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5MaW5rcHB0AAtnb1BhbmVscy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAZub3JtYWxwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDRxAH4AFXEAfgBXcQB+AFhxAH4Af3BwdAAFUGFuZWxxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDVxAH4AGXEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCBvZiB0aGUgUGFuZWxHcmlkIGFuZCByZWxhdGVkIGNvbnRyb2xzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAdeHhwdAANcGFnZUZvcm06X2lkNnEAfgAecQB+AFdxAH4AWHEAfgCScHB0AAtnb0ltYWdlcy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkN3EAfgAdcQB+AFdxAH4AWHEAfgB/cHB0AAZJbWFnZXNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDhxAH4AIHEAfgBXcQB+AFhxAH4Af3BwdAAYVGVzdCBvZiB0aGUgR3JhcGhpY0ltYWdlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAkeHhwdAANcGFnZUZvcm06X2lkOXEAfgAlcQB+AFdxAH4AWHEAfgCScHB0AAxnb0FuY2hvcnMuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDEwcQB+ACRxAH4AV3EAfgBYcQB+AH9wcHQAB0FuY2hvcnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDExcQB+ACdxAH4AV3EAfgBYcQB+AH9wcHQAG1Rlc3Qgb2YgQW5jaG9ycyBhbmQgQnV0dG9uc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AK3h4cHQADnBhZ2VGb3JtOl9pZDEycQB+ACxxAH4AV3EAfgBYcQB+AJJwcHQADGdvQ29udmVydC5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTNxAH4AK3EAfgBXcQB+AFhxAH4Af3BwdAALQ29udmVyc2lvbnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE0cQB+AC5xAH4AV3EAfgBYcQB+AH9wcHQAElRlc3Qgb2YgQ29udmVydGVyc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AMnh4cHQADnBhZ2VGb3JtOl9pZDE1cQB+ADNxAH4AV3EAfgBYcQB+AJJwcHQADGdvRm9ybU9uZS5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTZxAH4AMnEAfgBXcQB+AFhxAH4Af3BwdAAIRm9ybSBPbmVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE3cQB+ADVxAH4AV3EAfgBYcQB+AH9wcHQAFFRlc3QgdGhlIEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgA5eHhwdAAOcGFnZUZvcm06X2lkMThxAH4AOnEAfgBXcQB+AFhxAH4AknBwdAAMZ29Gb3JtVHdvLmRvcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCUcHBwcHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAABnVxAH4ATwAAAAN1cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAAAeHB0AA5wYWdlRm9ybTpfaWQxOXEAfgA5cQB+AFdxAH4AWHEAfgB/cHB0AAhGb3JtIFR3b3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjBxAH4APHEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCB0aGUgU2VsZWN0L1JhZGlvL0NoZWNrYm94IEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBAeHhwdAAOcGFnZUZvcm06X2lkMjFxAH4AQXEAfgBXcQB+AFhxAH4AknBwdAALZ29CdW5kbGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDIycQB+AEBxAH4AV3EAfgBYcQB+AH9wcHQABkJ1bmRsZXEAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjNxAH4AQ3EAfgBXcQB+AFhxAH4Af3BwdAASVGVzdCBvZiB0aGUgQnVuZGxlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBHeHhwdAAOcGFnZUZvcm06X2lkMjRxAH4ASHEAfgBXcQB+AFhxAH4AknBwdAAOZ29EYXRhVGFibGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI1cQB+AEdxAH4AV3EAfgBYcQB+AH9wcHQACkRhdGEgVGFibGVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI2cQB+AEpxAH4AV3EAfgBYcQB+AH9wcHQAFVRlc3Qgb2YgdGhlIERhdGFUYWJsZXEAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAA==" />
+ <input type="hidden" name="pageForm" value="pageForm" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/goFormTwo.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7890</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Form One - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        
+              <form id="_id0" method="post" action="/coreWeb/faces/facesSmoke/FormTwo.faces" enctype="application/x-www-form-urlencoded">
+
+                
+                    
+                    
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Form One Tests</td>
+</tr>
+<tr>
+<td class="titleBar"><hr width="600pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                
+                    
+                <a href="Controller.jpf"><span class="normal">Navigate Home</span></a><br />
+                <span class="sectionTitle">Form One</span>
+                <br />
+                
+                     
+                    
+                    
+                    
+                    
+                         
+                        
+                     
+                    
+                    
+                    
+                    
+                        
+                    
+                    
+                    
+                     
+                         
+                         
+                         
+                    
+                    
+                    
+                     
+                         
+                         
+                         
+                    
+                     
+                    
+                     
+                         
+                         
+                         
+                    
+                    
+                    
+                     
+                        
+                        
+                        
+                    
+                    
+                     
+                     
+                        
+                        
+                        
+                    
+                <table width="600pt">
+<tbody>
+<tr>
+<td class="columnRight">SelectBooleanCheckbox</td>
+<td class="columnLeft"><input id="_id0:selectBooleanCheckbox" type="checkbox" name="_id0:selectBooleanCheckbox" /></td>
+</tr>
+<tr>
+<td class="columnRight">SelectManyCheckbox</td>
+<td class="columnLeft"><table>
+	<tr>
+<td>
+<label for="_id0:_id10"><input name="_id0:_id10" value="item1" type="checkbox"> Item One</input></label></td>
+<td>
+<label for="_id0:_id10"><input name="_id0:_id10" value="item2" type="checkbox"> Item Two</input></label></td>
+	</tr>
+</table></td>
+</tr>
+<tr>
+<td class="columnRight">SelectManyCheckbox-SelectItems</td>
+<td class="columnLeft"><table>
+	<tr>
+<td>
+<label for="_id0:_id14"><input name="_id0:_id14" value="Select Items One" type="checkbox"> Select Items One</input></label></td>
+<td>
+<label for="_id0:_id14"><input name="_id0:_id14" value="Select Items Two" type="checkbox"> Select Items Two</input></label></td>
+	</tr>
+</table></td>
+</tr>
+<tr>
+<td class="columnRight">SelectManyListbox</td>
+<td class="columnLeft"><select name="_id0:_id17" multiple size="3" style="color: #000099;font-family:Verdana;font-size:8pt;">	<option value="list1">List One</option>
+	<option value="list2">List Two</option>
+	<option value="list3">List Three</option>
+</select></td>
+</tr>
+<tr>
+<td class="columnRight">SelectManyMenu</td>
+<td class="columnLeft"><select name="_id0:_id22" multiple size="1" style="color: #000099;font-family:Verdana;font-size:8pt;">	<option value="Menu1">Menu One</option>
+	<option value="Menu2">Menu Two</option>
+	<option value="Menu3">Menu Three</option>
+</select></td>
+</tr>
+<tr>
+<td class="columnRight">SelectOneListbox</td>
+<td class="columnLeft"><select name="_id0:_id27" size="3" style="color: #000099;font-family:Verdana;font-size:8pt;">	<option value="One-list1">One-List One</option>
+	<option value="One-list2">One-List Two</option>
+	<option value="One-list3">One-List Three</option>
+</select></td>
+</tr>
+<tr>
+<td class="columnRight">SelectOneMenu</td>
+<td class="columnLeft"><select name="_id0:_id32" size="1" style="color: #000099;font-family:Verdana;font-size:8pt;">	<option value="One-Menu One">One-Menu-1</option>
+	<option value="One-Menu Two">One-Menu-2</option>
+	<option value="One-Menu Three">One-Menu-3</option>
+</select></td>
+</tr>
+<tr>
+<td class="columnRight">SelectOneMenu</td>
+<td class="columnLeft"><table>
+	<tr>
+<td>
+<label for="_id0:_id37"><input type="radio" name="_id0:_id37" value="One-Radio One"> One-Radio-1</input></label></td>
+<td>
+<label for="_id0:_id37"><input type="radio" name="_id0:_id37" value="One-Radio Two"> One-Radio-2</input></label></td>
+<td>
+<label for="_id0:_id37"><input type="radio" name="_id0:_id37" value="One-Radio Three"> One-Radio-3</input></label></td>
+	</tr>
+</table></td>
+</tr>
+</tbody>
+</table>
+
+                <input type="submit" name="_id0:_id41" value="Submit" />
+                <hr>
+                
+               <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAAGdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQyeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAEX2lkNXh0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0TGlua3B0AARfaWQ0c3EAfgAAcHEAfgAMcHQABF9pZDZzcQB+AABzcQB+AAUAAAAQdwQAAAAQc3EAfgAAcHEAfgAMcHQABF9pZDhzcQB+AABwdAA0amF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbFNlbGVjdEJvb2xlYW5DaGVja2JveHB0ABVzZWxlY3RCb29sZWFuQ2hlY2tib3hzcQB+AABwcQB+AAxwdAAEX2lkOXNxAH4AAHNxAH4ABQAAAAJ3BAAAAApzcQB+AABwdAAiamF2YXguZmFjZXMuY29tcG9uZW50LlVJU2VsZWN0SXRlbXB0AAVfaWQxMXNxAH4AAHBxAH4AJHB0AAVfaWQxMnh0ADFqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sU2VsZWN0TWFueUNoZWNrYm94cHQABV9pZDEwc3EAfgAAcHEAfgAMcHQABV9pZDEzc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0ACNqYXZheC5mYWNlcy5jb21wb25lbnQuVUlTZWxlY3RJdGVtc3B0AAVfaWQxNXhxAH4AKHB0AAVfaWQxNHNxAH4AAHBxAH4ADHB0AAVfaWQxNnNxAH4AAHNxAH4ABQAAAAN3BAAAAApzcQB+AABwcQB+ACRwdAAFX2lkMThzcQB+AABwcQB+ACRwdAAFX2lkMTlzcQB+AABwcQB+ACRwdAAFX2lkMjB4dAAwamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbFNlbGVjdE1hbnlMaXN0Ym94cHQABV9pZDE3c3EAfgAAcHEAfgAMcHQABV9pZDIxc3EAfgAAc3EAfgAFAAAAA3cEAAAACnNxAH4AAHBxAH4AJHB0AAVfaWQyM3NxAH4AAHBxAH4AJHB0AAVfaWQyNHNxAH4AAHBxAH4AJHB0AAVfaWQyNXh0AC1qYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sU2VsZWN0TWFueU1lbnVwdAAFX2lkMjJzcQB+AABwcQB+AAxwdAAFX2lkMjZzcQB+AABzcQB+AAUAAAADdwQAAAAKc3EAfgAAcHEAfgAkcHQABV9pZDI4c3EAfgAAcHEAfgAkcHQABV9pZDI5c3EAfgAAcHEAfgAkcHQABV9pZDMweHQAL2phdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxTZWxlY3RPbmVMaXN0Ym94cHQABV9pZDI3c3EAfgAAcHEAfgAMcHQABV9pZDMxc3EAfgAAc3EAfgAFAAAAA3cEAAAACnNxAH4AAHBxAH4AJHB0AAVfaWQzM3NxAH4AAHBxAH4AJHB0AAVfaWQzNHNxAH4AAHBxAH4AJHB0AAVfaWQzNXh0ACxqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sU2VsZWN0T25lTWVudXB0AAVfaWQzMnNxAH4AAHBxAH4ADHB0AAVfaWQzNnNxAH4AAHNxAH4ABQAAAAN3BAAAAApzcQB+AABwcQB+ACRwdAAFX2lkMzhzcQB+AABwcQB+ACRwdAAFX2lkMzlzcQB+AABwcQB+ACRwdAAFX2lkNDB4dAAtamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbFNlbGVjdE9uZVJhZGlvcHQABV9pZDM3eHEAfgAOcHQABF9pZDdzcQB+AABwdAAsamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbENvbW1hbmRCdXR0b25wdAAFX2lkNDFzcQB+AABwdAAnamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE1lc3NhZ2VzcHQABV9pZDQyeHQAI2phdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxGb3JtcHQABF9pZDB4dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AHgAAAAEdXEAfgB4AAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AH54cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AfwBwcHQACkhUTUxfQkFTSUN0AB0vZmFjZXMvZmFjZXNTbW9rZS9Gb3JtVHdvLmpzcHNyABBqYXZhLnV0aWwuTG9jYWxlfvgRYJww+ewCAARJAAhoYXNoY29kZUwAB2NvdW50cnlxAH4AAkwACGxhbmd1YWdlcQB+AAJMAAd2YXJpYW50cQB+AAJ4cP////90AAJVU3QAAmVudAAAdXEAfgB4AAAAAXVxAH4AeAAAAAJ1cQB+AHgAAAAWdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAXQAIGphdmF4LmZhY2VzLndlYmFwcC5DT01QT05FTlRfSURTc3EAfgAFAAAABncEAAAACnEAfgAPcQB+ABVxAH4AF3EAfgBucQB+AHFxAH4AdHh4cHQABF9pZDBxAH4AdnEAfgCAcQB+AIF0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgB4AAAABnVxAH4AeAAAAAJ1cQB+AHgAAAAfdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAXEAfgCOc3EAfgAFAAAAAncEAAAACnEAfgANdAAEX2lkM3h4cHQACV9pZDA6X2lkMXEAfgAPcQB+AIBxAH4AgXQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AIF0AAEwcQB+AJ90AAh0aXRsZUJhcnNxAH4AnAAAAAFxAH4AgHBwcHBwcHBwcHBwcHBwcHBwcHBwcHQABTYwMHB0dXEAfgB4AAAAAnVxAH4AeAAAAAJ1cQB+AHgAAAAGdXEAfgB4AAAAA3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkMnEAfgANcQB+AIBxAH4AgXQAEGphdmF4LmZhY2VzLlRleHRwcHQADkZvcm0gT25lIFRlc3RzcQB+AIBxAH4AgXBwcHVxAH4AeAAAAABwdXEAfgB4AAAAAnVxAH4AeAAAABx1cQB+AHgAAAADdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAXEAfgCOc3EAfgAFAAAAAXcEAAAACnEAfgATeHhwdAAJX2lkMDpfaWQ0cQB+ABVxAH4AgHEAfgCBdAAQamF2YXguZmFjZXMuTGlua3BwdAAOQ29udHJvbGxlci5qcGZwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB1cQB+AHgAAAABdXEAfgB4AAAAAnVxAH4AeAAAAAZ1cQB+AHgAAAADdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ1cQB+ABNxAH4AgHEAfgCBcQB+AKpwcHQADU5hdmlnYXRlIEhvbWVxAH4AgHEAfgCBcHQABm5vcm1hbHB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAZ1cQB+AHgAAAADdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ2cQB+ABdxAH4AgHEAfgCBcQB+AKpwcHQACEZvcm0gT25lcQB+AIBxAH4AgXB0AAxzZWN0aW9uVGl0bGVwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAfdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAXEAfgCOc3EAfgAFAAAAEHcEAAAAEHEAfgAbcQB+AB5xAH4AIHEAfgApcQB+ACtxAH4AMXEAfgAzcQB+AD1xAH4AP3EAfgBJcQB+AEtxAH4AVXEAfgBXcQB+AGFxAH4AY3EAfgBteHhwdAAJX2lkMDpfaWQ3cQB+AG5xAH4AgHEAfgCBcQB+AJtwcHNxAH4AnIAAAABxAH4AgXBwdAAXY29sdW1uUmlnaHQsIGNvbHVtbkxlZnRzcQB+AJwAAAACcQB+AIBwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AonVxAH4AeAAAABB1cQB+AHgAAAACdXEAfgB4AAAABnVxAH4AeAAAAAN1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AAlfaWQwOl9pZDhxAH4AG3EAfgCAcQB+AIFxAH4AqnBwdAAVU2VsZWN0Qm9vbGVhbkNoZWNrYm94cQB+AIBxAH4AgXBwcHVxAH4AeAAAAAB1cQB+AHgAAAACdXEAfgB4AAAAGnVxAH4AeAAAAAp1cQB+AHgAAAADdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHh1cQB+AHgAAAACdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAXQABXZhbHVldXEAfgB4AAAAAXNyACZqYXZheC5mYWNlcy5jb21wb25lbnQuU3RhdGVIb2xkZXJTYXZlclnKsz2TnM1NAgACTAAJY2xhc3NOYW1lcQB+AAJMAApzYXZlZFN0YXRldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0ACFjb20uc3VuLmZhY2VzLmVsLlZhbHVlQmluZGluZ0ltcGx0ABlQYWdlRmxvdy5mb3JtVHdvLmNoZWNrYm94dAAaX2lkMDpzZWxlY3RCb29sZWFuQ2hlY2tib3hxAH4AHnEAfgCAcQB+AIF0ABRqYXZheC5mYWNlcy5DaGVja2JveHBwcHEAfgCBcQB+AIFxAH4AgXEAfgCAcQB+AIFxAH4AgXBwcHBwcQB+AIFxAH4AgXBwcHBwcHBwcHBwcHBwcHEAfgCBcQB+AIFwcHBwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAGdXEAfgB4AAAAA3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkOXEAfgAgcQB+AIBxAH4AgXEAfgCqcHB0ABJTZWxlY3RNYW55Q2hlY2tib3hxAH4AgHEAfgCBcHBwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAfdXEAfgB4AAAACnVxAH4AeAAAAAN1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAABcQB+AI5zcQB+AAUAAAACdwQAAAAKcQB+ACVxAH4AJ3h4dXEAfgB4AAAAAnVxAH4A4gAAAAFxAH4A5HVxAH4AeAAAAAFzcQB+AOZxAH4A6XQAHVBhZ2VGbG93LmZvcm1Ud28ubWFueUNoZWNrYm94dAAKX2lkMDpfaWQxMHEAfgApcQB+AIBxAH4AgXEAfgDscHBwcQB+AIFxAH4AgXEAfgCBcQB+AIBxAH4AgXEAfgCBcHBwcHNxAH4AnIAAAABxAH4AgXBxAH4AgXEAfgCBcHBwcHBwcHBwcHBwcHBwcHBwcQB+AIFxAH4AgXBwcHB1cQB+AHgAAAACdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDExcQB+ACVxAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQACEl0ZW0gT25ldAAFaXRlbTFwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAHdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxMnEAfgAncQB+AIBxAH4AgXBwcHEAfgCBcQB+AIF0AAhJdGVtIFR3b3QABWl0ZW0ycHVxAH4AeAAAAAB1cQB+AHgAAAACdXEAfgB4AAAABnVxAH4AeAAAAAN1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDEzcQB+ACtxAH4AgHEAfgCBcQB+AKpwcHQAHlNlbGVjdE1hbnlDaGVja2JveC1TZWxlY3RJdGVtc3EAfgCAcQB+AIFwcHB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAB91cQB+AHgAAAAKdXEAfgB4AAAAA3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAFxAH4AjnNxAH4ABQAAAAF3BAAAAApxAH4AMHh4dXEAfgB4AAAAAnVxAH4A4gAAAAFxAH4A5HVxAH4AeAAAAAFzcQB+AOZxAH4A6XQAIFBhZ2VGbG93LmZvcm1Ud28ubWFueUNoZWNrYm94VHdvdAAKX2lkMDpfaWQxNHEAfgAxcQB+AIBxAH4AgXEAfgDscHBwcQB+AIFxAH4AgXEAfgCBcQB+AIBxAH4AgXEAfgCBcHBwcHNxAH4AnIAAAABxAH4AgXBxAH4AgXEAfgCBcHBwcHBwcHBwcHBwcHBwcHBwcQB+AIFxAH4AgXBwcHB1cQB+AHgAAAABdXEAfgB4AAAAAnVxAH4AeAAAAAJ1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHVxAH4AeAAAAAJ1cQB+AOIAAAABcQB+AOR1cQB+AHgAAAABc3EAfgDmcQB+AOl0ABRQYWdlRmxvdy5zZWxlY3RJdGVtc3QACl9pZDA6X2lkMTVxAH4AMHEAfgCAcQB+AIFwcHB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAZ1cQB+AHgAAAADdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxNnEAfgAzcQB+AIBxAH4AgXEAfgCqcHB0ABFTZWxlY3RNYW55TGlzdGJveHEAfgCAcQB+AIFwcHB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAABx1cQB+AHgAAAAKdXEAfgB4AAAAA3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAFxAH4AjnNxAH4ABQAAAAN3BAAAAApxAH4AN3EAfgA5cQB+ADt4eHB0AApfaWQwOl9pZDE3cQB+AD1xAH4AgHEAfgCBdAATamF2YXguZmFjZXMuTGlzdGJveHBwcHEAfgCBcQB+AIFxAH4AgXEAfgCAcQB+AIFxAH4AgXBwcHBwcQB+AIFxAH4AgXBwcHBwcHBwcHBwcHBwcHEAfgCBcQB+AIFzcQB+AJwAAAADcQB+AIB0ADFjb2xvcjogIzAwMDA5OTtmb250LWZhbWlseTpWZXJkYW5hO2ZvbnQtc2l6ZTo4cHQ7cHBwdXEAfgB4AAAAA3VxAH4AeAAAAAJ1cQB+AHgAAAAHdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxOHEAfgA3cQB+AIBxAH4AgXBwcHEAfgCBcQB+AIF0AAhMaXN0IE9uZXQABWxpc3QxcHVxAH4AeAAAAAB1cQB+AHgAAAACdXEAfgB4AAAAB3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMTlxAH4AOXEAfgCAcQB+AIFwcHBxAH4AgXEAfgCBdAAITGlzdCBUd290AAVsaXN0MnB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDIwcQB+ADtxAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQACkxpc3QgVGhyZWV0AAVsaXN0M3B1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAZ1cQB+AHgAAAADdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQyMXEAfgA/cQB+AIBxAH4AgXEAfgCqcHB0AA5TZWxlY3RNYW55TWVudXEAfgCAcQB+AIFwcHB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAABp1cQB+AHgAAAAKdXEAfgB4AAAAA3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAFxAH4AjnNxAH4ABQAAAAN3BAAAAApxAH4AQ3EAfgBFcQB+AEd4eHB0AApfaWQwOl9pZDIycQB+AElxAH4AgHEAfgCBdAAQamF2YXguZmFjZXMuTWVudXBwcHEAfgCBcQB+AIFxAH4AgXEAfgCAcQB+AIFxAH4AgXBwcHBwcQB+AIFxAH4AgXBwcHBwcHBwcHBwcHBwcHEAfgCBcQB+AIFxAH4BSXBwcHVxAH4AeAAAAAN1cQB+AHgAAAACdXEAfgB4AAAAB3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMjNxAH4AQ3EAfgCAcQB+AIFwcHBxAH4AgXEAfgCBdAAITWVudSBPbmV0AAVNZW51MXB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDI0cQB+AEVxAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQACE1lbnUgVHdvdAAFTWVudTJwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAHdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQyNXEAfgBHcQB+AIBxAH4AgXBwcHEAfgCBcQB+AIF0AApNZW51IFRocmVldAAFTWVudTNwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAGdXEAfgB4AAAAA3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMjZxAH4AS3EAfgCAcQB+AIFxAH4AqnBwdAAQU2VsZWN0T25lTGlzdGJveHEAfgCAcQB+AIFwcHB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAABx1cQB+AHgAAAAKdXEAfgB4AAAAA3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAFxAH4AjnNxAH4ABQAAAAN3BAAAAApxAH4AT3EAfgBRcQB+AFN4eHB0AApfaWQwOl9pZDI3cQB+AFVxAH4AgHEAfgCBcQB+AUdwcHBxAH4AgXEAfgCBcQB+AIFxAH4AgHEAfgCBcQB+AIFwcHBwcHEAfgCBcQB+AIFwcHBwcHBwcHBwcHBwcHBxAH4AgXEAfgCBc3EAfgCcgAAAAHEAfgCBcQB+AUlwcHB1cQB+AHgAAAADdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDI4cQB+AE9xAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQADE9uZS1MaXN0IE9uZXQACU9uZS1saXN0MXB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDI5cQB+AFFxAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQADE9uZS1MaXN0IFR3b3QACU9uZS1saXN0MnB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDMwcQB+AFNxAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQADk9uZS1MaXN0IFRocmVldAAJT25lLWxpc3QzcHVxAH4AeAAAAAB1cQB+AHgAAAACdXEAfgB4AAAABnVxAH4AeAAAAAN1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDMxcQB+AFdxAH4AgHEAfgCBcQB+AKpwcHQADVNlbGVjdE9uZU1lbnVxAH4AgHEAfgCBcHBwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAadXEAfgB4AAAACnVxAH4AeAAAAAN1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAABcQB+AI5zcQB+AAUAAAADdwQAAAAKcQB+AFtxAH4AXXEAfgBfeHh1cQB+AHgAAAACdXEAfgDiAAAAAXEAfgDkdXEAfgB4AAAAAXNxAH4A5nEAfgDpdAAQUGFnZUZsb3cubWVudU9uZXQACl9pZDA6X2lkMzJxAH4AYXEAfgCAcQB+AIFxAH4Bc3BwcHEAfgCBcQB+AIFxAH4AgXEAfgCAcQB+AIFxAH4AgXBwcHBwcQB+AIFxAH4AgXBwcHBwcHBwcHBwcHBwcHEAfgCBcQB+AIFxAH4BSXBwcHVxAH4AeAAAAAN1cQB+AHgAAAACdXEAfgB4AAAAB3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMzNxAH4AW3EAfgCAcQB+AIFwcHBxAH4AgXEAfgCBdAAKT25lLU1lbnUtMXQADE9uZS1NZW51IE9uZXB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDM0cQB+AF1xAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQACk9uZS1NZW51LTJ0AAxPbmUtTWVudSBUd29wdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAHdXEAfgB4AAAACHNxAH4AfD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQzNXEAfgBfcQB+AIBxAH4AgXBwcHEAfgCBcQB+AIF0AApPbmUtTWVudS0zdAAOT25lLU1lbnUgVGhyZWVwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAGdXEAfgB4AAAAA3VxAH4AeAAAAAhzcQB+AHw/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMzZxAH4AY3EAfgCAcQB+AIFxAH4AqnBwcQB+Ab1xAH4AgHEAfgCBcHBwdXEAfgB4AAAAAHVxAH4AeAAAAAJ1cQB+AHgAAAAfdXEAfgB4AAAACnVxAH4AeAAAAAN1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAABcQB+AI5zcQB+AAUAAAADdwQAAAAKcQB+AGdxAH4AaXEAfgBreHhwdAAKX2lkMDpfaWQzN3EAfgBtcQB+AIBxAH4AgXQAEWphdmF4LmZhY2VzLlJhZGlvcHBwcQB+AIFxAH4AgXEAfgCBcQB+AIBxAH4AgXEAfgCBcHBwcHNxAH4AnIAAAABxAH4AgXBxAH4AgXEAfgCBcHBwcHBwcHBwcHBwcHBwcHBwcQB+AIFxAH4AgXBwcHB1cQB+AHgAAAADdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDM4cQB+AGdxAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQAC09uZS1SYWRpby0xdAANT25lLVJhZGlvIE9uZXB1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDM5cQB+AGlxAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQAC09uZS1SYWRpby0ydAANT25lLVJhZGlvIFR3b3B1cQB+AHgAAAAAdXEAfgB4AAAAAnVxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDQwcQB+AGtxAH4AgHEAfgCBcHBwcQB+AIFxAH4AgXQAC09uZS1SYWRpby0zdAAPT25lLVJhZGlvIFRocmVlcHVxAH4AeAAAAAB1cQB+AHgAAAACdXEAfgB4AAAAHXVxAH4AeAAAAAZ1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDQxcQB+AHFxAH4AgHEAfgCBdAASamF2YXguZmFjZXMuQnV0dG9ucHBzcQB+AOZ0ACJjb20uc3VuLmZhY2VzLmVsLk1ldGhvZEJpbmRpbmdJbXBsdXEAfgB4AAAABHQADWZvcm1Ud29TdWJtaXRzcQB+AOZxAH4A6XQAE0N1c3RvbVJlbmRlckJhY2tpbmd1cgASW0xqYXZhLmxhbmcuQ2xhc3M7qxbXrsvNWpkCAAB4cAAAAAF2cgAdamF2YXguZmFjZXMuZXZlbnQuQWN0aW9uRXZlbnQzQEdpY77HwwIAAHhyABxqYXZheC5mYWNlcy5ldmVudC5GYWNlc0V2ZW50V8ybRm096d8CAAFMAAdwaGFzZUlkdAAbTGphdmF4L2ZhY2VzL2V2ZW50L1BoYXNlSWQ7eHIAFWphdmEudXRpbC5FdmVudE9iamVjdEyNCU4YbX2oAgAAeHB0ACQje0N1c3RvbVJlbmRlckJhY2tpbmcuZm9ybVR3b1N1Ym1pdH1xAH4AgXEAfgCBdAAGU3VibWl0cHBwcQB+AIFxAH4AgXBwcHBwcHBwcHBwcHBwcHBxAH4AgXEAfgCBcHBwcHQABnN1Ym1pdHVxAH4AeAAAAAB1cQB+AHgAAAACdXEAfgB4AAAAD3VxAH4AeAAAAAd1cQB+AHgAAAAIc3EAfgB8P0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDQycQB+AHRxAH4AgHEAfgCBdAAUamF2YXguZmFjZXMuTWVzc2FnZXNwcQB+AIFxAH4AgXEAfgCBcQB+AIFxAH4AgHEAfgCBcHBwcHBwdAAEbGlzdHB0ABF2YWxpZGF0aW9uTWVzc2FnZXBxAH4AgXEAfgCBcHB1cQB+AHgAAAAA" />
+ <input type="hidden" name="_id0" value="_id0" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:17:57.412 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeImage.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeImage.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FacesSmokeImage</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 May 2004, 01:17:57.432 PM MDT</startDate>
+  <description>Smoke test of the faces Image</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-788b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        
+            <form id="pageForm" method="post" action="/coreWeb/faces/facesSmoke/index.faces" enctype="application/x-www-form-urlencoded">
+
+            
+                
+            <table width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Custom Renderer Tests</td>
+</tr>
+</tbody>
+</table>
+
+            
+                    
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+                
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+
+            <table width="600pt">
+<tbody>
+<tr>
+<td><a href="goPanels.do" class="normal">Panel</a></td>
+<td><span class="normal">Test of the PanelGrid and related controls</span></td>
+</tr>
+<tr>
+<td><a href="goImages.do" class="normal">Images</a></td>
+<td><span class="normal">Test of the GraphicImage</span></td>
+</tr>
+<tr>
+<td><a href="goAnchors.do" class="normal">Anchors</a></td>
+<td><span class="normal">Test of Anchors and Buttons</span></td>
+</tr>
+<tr>
+<td><a href="goConvert.do" class="normal">Conversions</a></td>
+<td><span class="normal">Test of Converters</span></td>
+</tr>
+<tr>
+<td><a href="goFormOne.do" class="normal">Form One</a></td>
+<td><span class="normal">Test the Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goFormTwo.do" class="normal">Form Two</a></td>
+<td><span class="normal">Test the Select/Radio/Checkbox Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goBundle.do" class="normal">Bundle</a></td>
+<td><span class="normal">Test of the Bundle</span></td>
+</tr>
+<tr>
+<td><a href="goDataTable.do" class="normal">Data Table</a></td>
+<td><span class="normal">Test of the DataTable</span></td>
+</tr>
+</tbody>
+</table>
+
+             <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAABB3BAAAABBzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDR4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkM3NxAH4AAHBxAH4ADHB0AARfaWQ1c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ3eHEAfgAWcHQABF9pZDZzcQB+AABwcQB+AAxwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTB4cQB+ABZwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABZwdAAFX2lkMTJzcQB+AABwcQB+AAxwdAAFX2lkMTRzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE2eHEAfgAWcHQABV9pZDE1c3EAfgAAcHEAfgAMcHQABV9pZDE3c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4AFnB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQyMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjJ4cQB+ABZwdAAFX2lkMjFzcQB+AABwcQB+AAxwdAAFX2lkMjNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDI1eHEAfgAWcHQABV9pZDI0c3EAfgAAcHEAfgAMcHQABV9pZDI2eHEAfgAOcHQABF9pZDJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAIcGFnZUZvcm14dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AE8AAAAEdXEAfgBPAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AFV4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AVgBwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9pbmRleC5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAAFnVxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAJ3BAAAAApxAH4AD3EAfgBLeHhwdAAIcGFnZUZvcm1xAH4ATXEAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBPAAAAAnVxAH4ATwAAAAJ1cQB+AE8AAAAfdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgANeHhwdAANcGFnZUZvcm06X2lkMHEAfgAPcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AFhwcHQACHRpdGxlQmFyc3EAfgByAAAAAXEAfgBXcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkMXEAfgANcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLlRleHRwcHQAFUN1c3RvbSBSZW5kZXJlciBUZXN0c3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAB91cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAABcQB+AGVzcQB+AAUAAAAQdwQAAAAQcQB+ABdxAH4AGXEAfgAecQB+ACBxAH4AJXEAfgAncQB+ACxxAH4ALnEAfgAzcQB+ADVxAH4AOnEAfgA8cQB+AEFxAH4AQ3EAfgBIcQB+AEp4eHB0AA1wYWdlRm9ybTpfaWQycQB+AEtxAH4AV3EAfgBYcQB+AHFwcHNxAH4AcoAAAABxAH4AWHBwcHNxAH4AcgAAAAJxAH4AV3BwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgB3dXEAfgBPAAAAEHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AFXh4cHQADXBhZ2VGb3JtOl9pZDNxAH4AF3EAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5MaW5rcHB0AAtnb1BhbmVscy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAZub3JtYWxwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDRxAH4AFXEAfgBXcQB+AFhxAH4Af3BwdAAFUGFuZWxxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDVxAH4AGXEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCBvZiB0aGUgUGFuZWxHcmlkIGFuZCByZWxhdGVkIGNvbnRyb2xzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAdeHhwdAANcGFnZUZvcm06X2lkNnEAfgAecQB+AFdxAH4AWHEAfgCScHB0AAtnb0ltYWdlcy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkN3EAfgAdcQB+AFdxAH4AWHEAfgB/cHB0AAZJbWFnZXNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDhxAH4AIHEAfgBXcQB+AFhxAH4Af3BwdAAYVGVzdCBvZiB0aGUgR3JhcGhpY0ltYWdlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAkeHhwdAANcGFnZUZvcm06X2lkOXEAfgAlcQB+AFdxAH4AWHEAfgCScHB0AAxnb0FuY2hvcnMuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDEwcQB+ACRxAH4AV3EAfgBYcQB+AH9wcHQAB0FuY2hvcnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDExcQB+ACdxAH4AV3EAfgBYcQB+AH9wcHQAG1Rlc3Qgb2YgQW5jaG9ycyBhbmQgQnV0dG9uc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AK3h4cHQADnBhZ2VGb3JtOl9pZDEycQB+ACxxAH4AV3EAfgBYcQB+AJJwcHQADGdvQ29udmVydC5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTNxAH4AK3EAfgBXcQB+AFhxAH4Af3BwdAALQ29udmVyc2lvbnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE0cQB+AC5xAH4AV3EAfgBYcQB+AH9wcHQAElRlc3Qgb2YgQ29udmVydGVyc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AMnh4cHQADnBhZ2VGb3JtOl9pZDE1cQB+ADNxAH4AV3EAfgBYcQB+AJJwcHQADGdvRm9ybU9uZS5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTZxAH4AMnEAfgBXcQB+AFhxAH4Af3BwdAAIRm9ybSBPbmVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE3cQB+ADVxAH4AV3EAfgBYcQB+AH9wcHQAFFRlc3QgdGhlIEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgA5eHhwdAAOcGFnZUZvcm06X2lkMThxAH4AOnEAfgBXcQB+AFhxAH4AknBwdAAMZ29Gb3JtVHdvLmRvcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCUcHBwcHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAABnVxAH4ATwAAAAN1cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAAAeHB0AA5wYWdlRm9ybTpfaWQxOXEAfgA5cQB+AFdxAH4AWHEAfgB/cHB0AAhGb3JtIFR3b3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjBxAH4APHEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCB0aGUgU2VsZWN0L1JhZGlvL0NoZWNrYm94IEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBAeHhwdAAOcGFnZUZvcm06X2lkMjFxAH4AQXEAfgBXcQB+AFhxAH4AknBwdAALZ29CdW5kbGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDIycQB+AEBxAH4AV3EAfgBYcQB+AH9wcHQABkJ1bmRsZXEAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjNxAH4AQ3EAfgBXcQB+AFhxAH4Af3BwdAASVGVzdCBvZiB0aGUgQnVuZGxlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBHeHhwdAAOcGFnZUZvcm06X2lkMjRxAH4ASHEAfgBXcQB+AFhxAH4AknBwdAAOZ29EYXRhVGFibGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI1cQB+AEdxAH4AV3EAfgBYcQB+AH9wcHQACkRhdGEgVGFibGVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI2cQB+AEpxAH4AV3EAfgBYcQB+AH9wcHQAFVRlc3Qgb2YgdGhlIERhdGFUYWJsZXEAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAA==" />
+ <input type="hidden" name="pageForm" value="pageForm" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/goImages.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-788b</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>Image - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        
+              <form id="_id0" method="post" action="/coreWeb/faces/facesSmoke/Image.faces" enctype="application/x-www-form-urlencoded">
+
+                
+                    
+                    
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Image Tests</td>
+</tr>
+<tr>
+<td class="titleBar"><hr width="600pt" /></td>
+</tr>
+</tbody>
+</table>
+
+
+                
+                    
+                <a href="Controller.jpf"><span class="normal">Navigate Home</span></a><br />
+
+                <span class="normal">Image Tag</span>
+                
+                    
+                <table>
+<tbody>
+<tr>
+<td><img src="godzilla.gif" height="96" width="96" class="imageBorder" alt="" /></td>
+</tr>
+</tbody>
+</table>
+
+                <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAAEdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQyeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAEX2lkNXh0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0TGlua3B0AARfaWQ0c3EAfgAAcHEAfgAMcHQABF9pZDZzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHQAK2phdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxHcmFwaGljSW1hZ2VwdAAEX2lkOHhxAH4ADnB0AARfaWQ3eHQAI2phdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxGb3JtcHQABF9pZDB4dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+ACEAAAAEdXEAfgAhAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+ACd4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AKABwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9JbWFnZS5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4AIQAAAAF1cQB+ACEAAAACdXEAfgAhAAAAFnVxAH4AIQAAAAhzcQB+ACU/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAR3BAAAAApxAH4AD3EAfgAVcQB+ABdxAH4AHXh4cHQABF9pZDBxAH4AH3EAfgApcQB+ACp0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgAhAAAABHVxAH4AIQAAAAJ1cQB+ACEAAAAfdXEAfgAhAAAACHNxAH4AJT9AAAAAAAAMdwgAAAAQAAAAAXEAfgA3c3EAfgAFAAAAAncEAAAACnEAfgANdAAEX2lkM3h4cHQACV9pZDA6X2lkMXEAfgAPcQB+AClxAH4AKnQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+ACp0AAEwcQB+AEh0AAh0aXRsZUJhcnNxAH4ARQAAAAFxAH4AKXBwcHBwcHBwcHBwcHBwcHBwcHBwcHQABTYwMHB0dXEAfgAhAAAAAnVxAH4AIQAAAAJ1cQB+ACEAAAAGdXEAfgAhAAAAA3VxAH4AIQAAAAhzcQB+ACU/QAAAAAAADHcIAAAAEAAAAAB4cHQACV9pZDA6X2lkMnEAfgANcQB+AClxAH4AKnQAEGphdmF4LmZhY2VzLlRleHRwcHQAC0ltYWdlIFRlc3RzcQB+AClxAH4AKnBwcHVxAH4AIQAAAABwdXEAfgAhAAAAAnVxAH4AIQAAABx1cQB+ACEAAAADdXEAfgAhAAAACHNxAH4AJT9AAAAAAAAMdwgAAAAQAAAAAXEAfgA3c3EAfgAFAAAAAXcEAAAACnEAfgATeHhwdAAJX2lkMDpfaWQ0cQB+ABVxAH4AKXEAfgAqdAAQamF2YXguZmFjZXMuTGlua3BwdAAOQ29udHJvbGxlci5qcGZwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB1cQB+ACEAAAABdXEAfgAhAAAAAnVxAH4AIQAAAAZ1cQB+ACEAAAADdXEAfgAhAAAACHNxAH4AJT9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ1cQB+ABNxAH4AKXEAfgAqcQB+AFNwcHQADU5hdmlnYXRlIEhvbWVxAH4AKXEAfgAqcHQABm5vcm1hbHB1cQB+ACEAAAAAdXEAfgAhAAAAAnVxAH4AIQAAAAZ1cQB+ACEAAAADdXEAfgAhAAAACHNxAH4AJT9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ2cQB+ABdxAH4AKXEAfgAqcQB+AFNwcHQACUltYWdlIFRhZ3EAfgApcQB+ACpwcQB+AGdwdXEAfgAhAAAAAHVxAH4AIQAAAAJ1cQB+ACEAAAAfdXEAfgAhAAAACHNxAH4AJT9AAAAAAAAMdwgAAAAQAAAAAXEAfgA3c3EAfgAFAAAAAXcEAAAACnEAfgAceHhwdAAJX2lkMDpfaWQ3cQB+AB1xAH4AKXEAfgAqcQB+AERwcHNxAH4ARYAAAABxAH4AKnBwcHNxAH4ARYAAAABxAH4AKnBwcHBwcHBwcHBwcHBwcHBwcHBwcHB1cQB+ACEAAAABdXEAfgAhAAAAAnVxAH4AIQAAABd1cQB+ACEAAAACdXEAfgAhAAAACHNxAH4AJT9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ4cQB+ABxxAH4AKXEAfgAqdAARamF2YXguZmFjZXMuSW1hZ2VwdAAMZ29kemlsbGEuZ2lmcHB0AAI5NnEAfgAqcQB+ACpwcHBwcHBwcHBwcHBwdAALaW1hZ2VCb3JkZXJwcHEAfgCCdXEAfgAhAAAAAA==" />
+ <input type="hidden" name="_id0" value="_id0" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:17:59.495 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokePanel.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/jsf/testRecorder/tests/FacesSmokePanel.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,421 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>FacesSmokePanel</sessionName>
+  <tester>Daryl</tester>
+  <startDate>24 May 2004, 01:17:59.515 PM MDT</startDate>
+  <description>Smoke test of the JSF Panel</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7886</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>CustomRenderer - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body style="border: 1px dotted;">
+        
+            <form id="pageForm" method="post" action="/coreWeb/faces/facesSmoke/index.faces" enctype="application/x-www-form-urlencoded">
+
+            
+                
+            <table width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">Custom Renderer Tests</td>
+</tr>
+</tbody>
+</table>
+
+            
+                    
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+                
+                
+                
+                
+                
+                
+
+                
+                
+
+                
+                
+
+            <table width="600pt">
+<tbody>
+<tr>
+<td><a href="goPanels.do" class="normal">Panel</a></td>
+<td><span class="normal">Test of the PanelGrid and related controls</span></td>
+</tr>
+<tr>
+<td><a href="goImages.do" class="normal">Images</a></td>
+<td><span class="normal">Test of the GraphicImage</span></td>
+</tr>
+<tr>
+<td><a href="goAnchors.do" class="normal">Anchors</a></td>
+<td><span class="normal">Test of Anchors and Buttons</span></td>
+</tr>
+<tr>
+<td><a href="goConvert.do" class="normal">Conversions</a></td>
+<td><span class="normal">Test of Converters</span></td>
+</tr>
+<tr>
+<td><a href="goFormOne.do" class="normal">Form One</a></td>
+<td><span class="normal">Test the Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goFormTwo.do" class="normal">Form Two</a></td>
+<td><span class="normal">Test the Select/Radio/Checkbox Form Fields</span></td>
+</tr>
+<tr>
+<td><a href="goBundle.do" class="normal">Bundle</a></td>
+<td><span class="normal">Test of the Bundle</span></td>
+</tr>
+<tr>
+<td><a href="goDataTable.do" class="normal">Data Table</a></td>
+<td><span class="normal">Test of the DataTable</span></td>
+</tr>
+</tbody>
+</table>
+
+             <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQxeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMHNxAH4AAHNxAH4ABQAAABB3BAAAABBzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDR4dAApamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbE91dHB1dExpbmtwdAAEX2lkM3NxAH4AAHBxAH4ADHB0AARfaWQ1c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AARfaWQ3eHEAfgAWcHQABF9pZDZzcQB+AABwcQB+AAxwdAAEX2lkOHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTB4cQB+ABZwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMTN4cQB+ABZwdAAFX2lkMTJzcQB+AABwcQB+AAxwdAAFX2lkMTRzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDE2eHEAfgAWcHQABV9pZDE1c3EAfgAAcHEAfgAMcHQABV9pZDE3c3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4AFnB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQyMHNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjJ4cQB+ABZwdAAFX2lkMjFzcQB+AABwcQB+AAxwdAAFX2lkMjNzcQB+AABzcQB+AAUAAAABdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDI1eHEAfgAWcHQABV9pZDI0c3EAfgAAcHEAfgAMcHQABV9pZDI2eHEAfgAOcHQABF9pZDJ4dAAjamF2YXguZmFjZXMuY29tcG9uZW50Lmh0bWwuSHRtbEZvcm1wdAAIcGFnZUZvcm14dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AE8AAAAEdXEAfgBPAAAACHNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAkamF2YXguZmFjZXMud2ViYXBwLkNVUlJFTlRfVklFV19ST09UcQB+AFV4cHBwc3IAEWphdmEubGFuZy5Cb29sZWFuzSBygNWc+u4CAAFaAAV2YWx1ZXhwAXNxAH4AVgBwcHQACkhUTUxfQkFTSUN0ABsvZmFjZXMvZmFjZXNTbW9rZS9pbmRleC5qc3BzcgAQamF2YS51dGlsLkxvY2FsZX74EWCcMPnsAgAESQAIaGFzaGNvZGVMAAdjb3VudHJ5cQB+AAJMAAhsYW5ndWFnZXEAfgACTAAHdmFyaWFudHEAfgACeHD/////dAACVVN0AAJlbnQAAHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAAFnVxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAF0ACBqYXZheC5mYWNlcy53ZWJhcHAuQ09NUE9ORU5UX0lEU3NxAH4ABQAAAAJ3BAAAAApxAH4AD3EAfgBLeHhwdAAIcGFnZUZvcm1xAH4ATXEAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5Gb3JtcHBwcHQAIWFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZHBwcHBwcHBwcHBwcHBwcHBwdXEAfgBPAAAAAnVxAH4ATwAAAAJ1cQB+AE8AAAAfdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgANeHhwdAANcGFnZUZvcm06X2lkMHEAfgAPcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLkdyaWRwcHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHCAAAAAcQB+AFhwcHQACHRpdGxlQmFyc3EAfgByAAAAAXEAfgBXcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkMXEAfgANcQB+AFdxAH4AWHQAEGphdmF4LmZhY2VzLlRleHRwcHQAFUN1c3RvbSBSZW5kZXJlciBUZXN0c3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAB91cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAABcQB+AGVzcQB+AAUAAAAQdwQAAAAQcQB+ABdxAH4AGXEAfgAecQB+ACBxAH4AJXEAfgAncQB+ACxxAH4ALnEAfgAzcQB+ADVxAH4AOnEAfgA8cQB+AEFxAH4AQ3EAfgBIcQB+AEp4eHB0AA1wYWdlRm9ybTpfaWQycQB+AEtxAH4AV3EAfgBYcQB+AHFwcHNxAH4AcoAAAABxAH4AWHBwcHNxAH4AcgAAAAJxAH4AV3BwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgB3dXEAfgBPAAAAEHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AFXh4cHQADXBhZ2VGb3JtOl9pZDNxAH4AF3EAfgBXcQB+AFh0ABBqYXZheC5mYWNlcy5MaW5rcHB0AAtnb1BhbmVscy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHB0AAZub3JtYWxwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDRxAH4AFXEAfgBXcQB+AFhxAH4Af3BwdAAFUGFuZWxxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDVxAH4AGXEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCBvZiB0aGUgUGFuZWxHcmlkIGFuZCByZWxhdGVkIGNvbnRyb2xzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAdeHhwdAANcGFnZUZvcm06X2lkNnEAfgAecQB+AFdxAH4AWHEAfgCScHB0AAtnb0ltYWdlcy5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAANcGFnZUZvcm06X2lkN3EAfgAdcQB+AFdxAH4AWHEAfgB/cHB0AAZJbWFnZXNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADXBhZ2VGb3JtOl9pZDhxAH4AIHEAfgBXcQB+AFhxAH4Af3BwdAAYVGVzdCBvZiB0aGUgR3JhcGhpY0ltYWdlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgAkeHhwdAANcGFnZUZvcm06X2lkOXEAfgAlcQB+AFdxAH4AWHEAfgCScHB0AAxnb0FuY2hvcnMuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDEwcQB+ACRxAH4AV3EAfgBYcQB+AH9wcHQAB0FuY2hvcnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDExcQB+ACdxAH4AV3EAfgBYcQB+AH9wcHQAG1Rlc3Qgb2YgQW5jaG9ycyBhbmQgQnV0dG9uc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AK3h4cHQADnBhZ2VGb3JtOl9pZDEycQB+ACxxAH4AV3EAfgBYcQB+AJJwcHQADGdvQ29udmVydC5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTNxAH4AK3EAfgBXcQB+AFhxAH4Af3BwdAALQ29udmVyc2lvbnNxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE0cQB+AC5xAH4AV3EAfgBYcQB+AH9wcHQAElRlc3Qgb2YgQ29udmVydGVyc3EAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAcdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAFxAH4AZXNxAH4ABQAAAAF3BAAAAApxAH4AMnh4cHQADnBhZ2VGb3JtOl9pZDE1cQB+ADNxAH4AV3EAfgBYcQB+AJJwcHQADGdvRm9ybU9uZS5kb3BwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AlHBwcHB1cQB+AE8AAAABdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMTZxAH4AMnEAfgBXcQB+AFhxAH4Af3BwdAAIRm9ybSBPbmVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDE3cQB+ADVxAH4AV3EAfgBYcQB+AH9wcHQAFFRlc3QgdGhlIEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgA5eHhwdAAOcGFnZUZvcm06X2lkMThxAH4AOnEAfgBXcQB+AFhxAH4AknBwdAAMZ29Gb3JtVHdvLmRvcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHEAfgCUcHBwcHVxAH4ATwAAAAF1cQB+AE8AAAACdXEAfgBPAAAABnVxAH4ATwAAAAN1cQB+AE8AAAAIc3EAfgBTP0AAAAAAAAx3CAAAABAAAAAAeHB0AA5wYWdlRm9ybTpfaWQxOXEAfgA5cQB+AFdxAH4AWHEAfgB/cHB0AAhGb3JtIFR3b3EAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjBxAH4APHEAfgBXcQB+AFhxAH4Af3BwdAAqVGVzdCB0aGUgU2VsZWN0L1JhZGlvL0NoZWNrYm94IEZvcm0gRmllbGRzcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBAeHhwdAAOcGFnZUZvcm06X2lkMjFxAH4AQXEAfgBXcQB+AFhxAH4AknBwdAALZ29CdW5kbGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDIycQB+AEBxAH4AV3EAfgBYcQB+AH9wcHQABkJ1bmRsZXEAfgBXcQB+AFhwcHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAAAZ1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAHhwdAAOcGFnZUZvcm06X2lkMjNxAH4AQ3EAfgBXcQB+AFhxAH4Af3BwdAASVGVzdCBvZiB0aGUgQnVuZGxlcQB+AFdxAH4AWHBxAH4AlHB1cQB+AE8AAAAAdXEAfgBPAAAAAnVxAH4ATwAAABx1cQB+AE8AAAADdXEAfgBPAAAACHNxAH4AUz9AAAAAAAAMdwgAAAAQAAAAAXEAfgBlc3EAfgAFAAAAAXcEAAAACnEAfgBHeHhwdAAOcGFnZUZvcm06X2lkMjRxAH4ASHEAfgBXcQB+AFhxAH4AknBwdAAOZ29EYXRhVGFibGUuZG9wcHBwcHBwcHBwcHBwcHBwcHBwcHBwcQB+AJRwcHBwdXEAfgBPAAAAAXVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI1cQB+AEdxAH4AV3EAfgBYcQB+AH9wcHQACkRhdGEgVGFibGVxAH4AV3EAfgBYcHBwdXEAfgBPAAAAAHVxAH4ATwAAAAJ1cQB+AE8AAAAGdXEAfgBPAAAAA3VxAH4ATwAAAAhzcQB+AFM/QAAAAAAADHcIAAAAEAAAAAB4cHQADnBhZ2VGb3JtOl9pZDI2cQB+AEpxAH4AV3EAfgBYcQB+AH9wcHQAFVRlc3Qgb2YgdGhlIERhdGFUYWJsZXEAfgBXcQB+AFhwcQB+AJRwdXEAfgBPAAAAAA==" />
+ <input type="hidden" name="pageForm" value="pageForm" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+  <test>
+    <testNumber>2</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/coreWeb/faces/facesSmoke/goPanels.do</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+        <cookie>
+          <name>JSESSIONID</name>
+          <value>AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </cookie>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>Keep-Alive, TE</value>
+        </header>
+        <header>
+          <name>Cookie</name>
+          <value>JSESSIONID=AyGZpnlrox931i4OnmkIaa8zdTHXTVhbm9yGWzOpzNMv5V6L04q1!-1344080924</value>
+        </header>
+        <header>
+          <name>Cookie2</name>
+          <value>$Version="1"</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>continue</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>58507d48:fcb8629a80:-7886</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>2</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<html>
+    <head>
+        <title>PanelGrid - Test Web</title>
+        <link rel="stylesheet" href="styles.css" type="text/css" />
+    </head>
+    <body>
+        
+              <form id="_id0" method="post" action="/coreWeb/faces/facesSmoke/Panels.faces" enctype="application/x-www-form-urlencoded">
+
+                
+                    
+                    
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="titleBar">PanelGrid Tests</td>
+</tr>
+<tr>
+<td class="titleBar"><hr width="600pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                
+                    
+                <a href="Controller.jpf"><span class="normal">Navigate Home</span></a>
+                <span class="normal">Bordered Table, Backgroup color</span>
+                
+                    
+                     
+                     
+                     
+                <table bgcolor="#c0c0c0" border="1" cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr>
+<td class="normal">Object One</td>
+<td class="normal">Object Two</td>
+</tr>
+<tr>
+<td class="normal">Object Three</td>
+<td class="normal">Object Four</td>
+</tr>
+</tbody>
+</table>
+
+                <table cellpadding="5" cellspacing="5">
+<tbody>
+<tr>
+<td><hr width="590pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                <span class="normal">Alternating Row Colors</span>
+                
+                    
+                     
+                     
+                     
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr class="rowOne">
+<td class="normal">Object One</td>
+</tr>
+<tr class="rowTwo">
+<td class="normal">Object Two</td>
+</tr>
+<tr class="rowOne">
+<td class="normal">Object Three</td>
+</tr>
+<tr class="rowTwo">
+<td class="normal">Object Four</td>
+</tr>
+</tbody>
+</table>
+
+                <table cellpadding="5" cellspacing="5">
+<tbody>
+<tr>
+<td><hr width="590pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                <span class="normal">Header/Footers</span>
+                
+                    
+                        
+                    
+                    
+                        
+                    
+                    
+                     
+                     
+                     
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<thead>
+<tr><th class="titleBar" colspan="2" scope="colgroup">Header</th></tr>
+</thead>
+<tfoot>
+<tr><td class="footerBar" colspan="2">Footer</td></tr>
+</tfoot>
+<tbody>
+<tr>
+<td class="normal">Object One</td>
+<td class="normal">Object Two</td>
+</tr>
+<tr>
+<td class="normal">Object Three</td>
+<td class="normal">Object Four</td>
+</tr>
+</tbody>
+</table>
+
+                <table cellpadding="5" cellspacing="5">
+<tbody>
+<tr>
+<td><hr width="590pt" /></td>
+</tr>
+</tbody>
+</table>
+
+                <span class="normal">panelGroup</span>
+                
+                    
+                        
+                    
+                     
+                <table cellpadding="0" cellspacing="0" width="600pt">
+<tbody>
+<tr class="rowOne">
+<td class="normal"><span style="color:#ff00ff;">Object One </span><span style="color:#ff9900;">Object Two</span></td>
+<td class="normal">Object Three</td>
+</tr>
+</tbody>
+</table>
+
+              <input type="hidden" name="com.sun.faces.VIEW" value="rO0ABXNyACBjb20uc3VuLmZhY2VzLnV0aWwuVHJlZVN0cnVjdHVyZRRmG0QclWAgAgAETAAIY2hpbGRyZW50ABVMamF2YS91dGlsL0FycmF5TGlzdDtMAAljbGFzc05hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMAAZmYWNldHN0ABNMamF2YS91dGlsL0hhc2hNYXA7TAACaWRxAH4AAnhwc3IAE2phdmEudXRpbC5BcnJheUxpc3R4gdIdmcdhnQMAAUkABHNpemV4cAAAAAF3BAAAAApzcQB+AABzcQB+AAUAAAANdwQAAAAQc3EAfgAAc3EAfgAFAAAAAXcEAAAACnNxAH4AAHB0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0VGV4dHB0AARfaWQyeHQAKGphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyaWRwdAAEX2lkMXNxAH4AAHNxAH4ABQAAAAF3BAAAAApzcQB+AABwcQB+AAxwdAAEX2lkNXh0AClqYXZheC5mYWNlcy5jb21wb25lbnQuaHRtbC5IdG1sT3V0cHV0TGlua3B0AARfaWQ0c3EAfgAAcHEAfgAMcHQABF9pZDZzcQB+AABzcQB+AAUAAAAEdwQAAAAKc3EAfgAAcHEAfgAMcHQABF9pZDhzcQB+AABwcQB+AAxwdAAEX2lkOXNxAH4AAHBxAH4ADHB0AAVfaWQxMHNxAH4AAHBxAH4ADHB0AAVfaWQxMXhxAH4ADnB0AARfaWQ3c3EAfgAAcHEAfgAOcHQABV9pZDEyc3EAfgAAcHEAfgAMcHQABV9pZDE0c3EAfgAAc3EAfgAFAAAABHcEAAAACnNxAH4AAHBxAH4ADHB0AAVfaWQxNnNxAH4AAHBxAH4ADHB0AAVfaWQxN3NxAH4AAHBxAH4ADHB0AAVfaWQxOHNxAH4AAHBxAH4ADHB0AAVfaWQxOXhxAH4ADnB0AAVfaWQxNXNxAH4AAHBxAH4ADnB0AAVfaWQyMHNxAH4AAHBxAH4ADHB0AAVfaWQyMnNxAH4AAHNxAH4ABQAAAAR3BAAAAApzcQB+AABwcQB+AAxwdAAFX2lkMjZzcQB+AABwcQB+AAxwdAAFX2lkMjdzcQB+AABwcQB+AAxwdAAFX2lkMjhzcQB+AABwcQB+AAxwdAAFX2lkMjl4cQB+AA5zcgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4cD9AAAAAAAAMdwgAAAAQAAAAAnQABmZvb3RlcnNxAH4AAHBxAH4ADHB0AAVfaWQyNXQABmhlYWRlcnNxAH4AAHBxAH4ADHB0AAVfaWQyNHh0AAVfaWQyM3NxAH4AAHBxAH4ADnB0AAVfaWQzMHNxAH4AAHBxAH4ADHB0AAVfaWQzMnNxAH4AAHNxAH4ABQAAAAJ3BAAAAApzcQB+AABzcQB+AAUAAAACdwQAAAAKc3EAfgAAcHEAfgAMcHQABV9pZDM1c3EAfgAAcHEAfgAMcHQABV9pZDM2eHQAKWphdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxQYW5lbEdyb3VwcHQABV9pZDM0c3EAfgAAcHEAfgAMcHQABV9pZDM3eHEAfgAOcHQABV9pZDMzeHQAI2phdmF4LmZhY2VzLmNvbXBvbmVudC5odG1sLkh0bWxGb3JtcHQABF9pZDB4dAAgamF2YXguZmFjZXMuY29tcG9uZW50LlVJVmlld1Jvb3RwcHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ1cQB+AF0AAAAEdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAXQAJGphdmF4LmZhY2VzLndlYmFwcC5DVVJSRU5UX1ZJRVdfUk9PVHEAfgBieHBwcHNyABFqYXZhLmxhbmcuQm9vbGVhbs0gcoDVnPruAgABWgAFdmFsdWV4cAFzcQB+AGMAcHB0AApIVE1MX0JBU0lDdAAcL2ZhY2VzL2ZhY2VzU21va2UvUGFuZWxzLmpzcHNyABBqYXZhLnV0aWwuTG9jYWxlfvgRYJww+ewCAARJAAhoYXNoY29kZUwAB2NvdW50cnlxAH4AAkwACGxhbmd1YWdlcQB+AAJMAAd2YXJpYW50cQB+AAJ4cP////90AAJVU3QAAmVudAAAdXEAfgBdAAAAAXVxAH4AXQAAAAJ1cQB+AF0AAAAWdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAXQAIGphdmF4LmZhY2VzLndlYmFwcC5DT01QT05FTlRfSURTc3EAfgAFAAAADXcEAAAAEHEAfgAPcQB+ABVxAH4AF3EAfgAicQB+ACRxAH4AJnEAfgAxcQB+ADNxAH4ANXEAfgBIcQB+AEpxAH4ATHEAfgBZeHhwdAAEX2lkMHEAfgBbcQB+AGRxAH4AZXQAEGphdmF4LmZhY2VzLkZvcm1wcHBwdAAhYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkcHBwcHBwcHBwcHBwcHBwcHB1cQB+AF0AAAANdXEAfgBdAAAAAnVxAH4AXQAAAB91cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAABcQB+AHJzcQB+AAUAAAACdwQAAAAKcQB+AA10AARfaWQzeHhwdAAJX2lkMDpfaWQxcQB+AA9xAH4AZHEAfgBldAAQamF2YXguZmFjZXMuR3JpZHBwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cIAAAABxAH4AZXQAATBxAH4Ag3QACHRpdGxlQmFyc3EAfgCAAAAAAXEAfgBkcHBwcHBwcHBwcHBwcHBwcHBwcHBwdAAFNjAwcHR1cQB+AF0AAAACdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQycQB+AA1xAH4AZHEAfgBldAAQamF2YXguZmFjZXMuVGV4dHBwdAAPUGFuZWxHcmlkIFRlc3RzcQB+AGRxAH4AZXBwcHVxAH4AXQAAAABwdXEAfgBdAAAAAnVxAH4AXQAAABx1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAXEAfgByc3EAfgAFAAAAAXcEAAAACnEAfgATeHhwdAAJX2lkMDpfaWQ0cQB+ABVxAH4AZHEAfgBldAAQamF2YXguZmFjZXMuTGlua3BwdAAOQ29udHJvbGxlci5qcGZwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB1cQB+AF0AAAABdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ1cQB+ABNxAH4AZHEAfgBlcQB+AI5wcHQADU5hdmlnYXRlIEhvbWVxAH4AZHEAfgBlcHQABm5vcm1hbHB1cQB+AF0AAAAAdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ2cQB+ABdxAH4AZHEAfgBlcQB+AI5wcHQAH0JvcmRlcmVkIFRhYmxlLCBCYWNrZ3JvdXAgY29sb3JxAH4AZHEAfgBlcHEAfgCicHVxAH4AXQAAAAB1cQB+AF0AAAACdXEAfgBdAAAAH3VxAH4AXQAAAAhzcQB+AEA/QAAAAAAADHcIAAAAEAAAAAFxAH4AcnNxAH4ABQAAAAR3BAAAAApxAH4AG3EAfgAdcQB+AB9xAH4AIXh4cHQACV9pZDA6X2lkN3EAfgAicQB+AGRxAH4AZXEAfgB/cHQAByNjMGMwYzBzcQB+AIAAAAABcQB+AGRxAH4Ag3EAfgCDcQB+AKJzcQB+AIAAAAACcQB+AGRwcHBwcHBwcHBwcHBwcHBwcHBwcHBxAH4AhnVxAH4AXQAAAAR1cQB+AF0AAAACdXEAfgBdAAAABnVxAH4AXQAAAAN1cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAAAeHB0AAlfaWQwOl9pZDhxAH4AG3EAfgBkcQB+AGVxAH4AjnBwdAAKT2JqZWN0IE9uZXEAfgBkcQB+AGVwcHB1cQB+AF0AAAAAdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAJX2lkMDpfaWQ5cQB+AB1xAH4AZHEAfgBlcQB+AI5wcHQACk9iamVjdCBUd29xAH4AZHEAfgBlcHBwdXEAfgBdAAAAAHVxAH4AXQAAAAJ1cQB+AF0AAAAGdXEAfgBdAAAAA3VxAH4AXQAAAAhzcQB+AEA/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMTBxAH4AH3EAfgBkcQB+AGVxAH4AjnBwdAAMT2JqZWN0IFRocmVlcQB+AGRxAH4AZXBwcHVxAH4AXQAAAAB1cQB+AF0AAAACdXEAfgBdAAAABnVxAH4AXQAAAAN1cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDExcQB+ACFxAH4AZHEAfgBlcQB+AI5wcHQAC09iamVjdCBGb3VycQB+AGRxAH4AZXBwcHVxAH4AXQAAAAB1cQB+AF0AAAACdXEAfgBdAAAAH3VxAH4AXQAAAAhzcQB+AEA/QAAAAAAADHcIAAAAEAAAAAFxAH4AcnNxAH4ABQAAAAF3BAAAAAp0AAVfaWQxM3h4cHQACl9pZDA6X2lkMTJxAH4AJHEAfgBkcQB+AGVxAH4Af3Bwc3EAfgCAgAAAAHEAfgBldAABNXEAfgDecHNxAH4AgIAAAABxAH4AZXBwcHBwcHBwcHBwcHBwcHBwcHBwcHB1cQB+AF0AAAABcHVxAH4AXQAAAAJ1cQB+AF0AAAAGdXEAfgBdAAAAA3VxAH4AXQAAAAhzcQB+AEA/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMTRxAH4AJnEAfgBkcQB+AGVxAH4AjnBwdAAWQWx0ZXJuYXRpbmcgUm93IENvbG9yc3EAfgBkcQB+AGVwcQB+AKJwdXEAfgBdAAAAAHVxAH4AXQAAAAJ1cQB+AF0AAAAfdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAXEAfgByc3EAfgAFAAAABHcEAAAACnEAfgAqcQB+ACxxAH4ALnEAfgAweHhwdAAKX2lkMDpfaWQxNXEAfgAxcQB+AGRxAH4AZXEAfgB/cHBzcQB+AICAAAAAcQB+AGVxAH4Ag3EAfgCDcQB+AKJzcQB+AICAAAAAcQB+AGVwcHBwcHBwcHBwcHBwcHB0AA5yb3dPbmUsIHJvd1R3b3BwcHBwcQB+AIZ1cQB+AF0AAAAEdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxNnEAfgAqcQB+AGRxAH4AZXEAfgCOcHBxAH4AvHEAfgBkcQB+AGVwcHB1cQB+AF0AAAAAdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxN3EAfgAscQB+AGRxAH4AZXEAfgCOcHBxAH4AxHEAfgBkcQB+AGVwcHB1cQB+AF0AAAAAdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxOHEAfgAucQB+AGRxAH4AZXEAfgCOcHBxAH4AzHEAfgBkcQB+AGVwcHB1cQB+AF0AAAAAdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQxOXEAfgAwcQB+AGRxAH4AZXEAfgCOcHBxAH4A1HEAfgBkcQB+AGVwcHB1cQB+AF0AAAAAdXEAfgBdAAAAAnVxAH4AXQAAAB91cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAABcQB+AHJzcQB+AAUAAAABdwQAAAAKdAAFX2lkMjF4eHB0AApfaWQwOl9pZDIwcQB+ADNxAH4AZHEAfgBlcQB+AH9wcHNxAH4AgIAAAABxAH4AZXEAfgDecQB+AN5wc3EAfgCAgAAAAHEAfgBlcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHVxAH4AXQAAAAFwdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQyMnEAfgA1cQB+AGRxAH4AZXEAfgCOcHB0AA5IZWFkZXIvRm9vdGVyc3EAfgBkcQB+AGVwcQB+AKJwdXEAfgBdAAAAAHVxAH4AXQAAAAJ1cQB+AF0AAAAfdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAnQAHmphdmF4LmZhY2VzLndlYmFwcC5GQUNFVF9OQU1FU3NxAH4ABQAAAAJ3BAAAAApxAH4ARXEAfgBCeHEAfgByc3EAfgAFAAAABHcEAAAACnEAfgA5cQB+ADtxAH4APXEAfgA/eHhwdAAKX2lkMDpfaWQyM3EAfgBIcQB+AGRxAH4AZXEAfgB/cHBzcQB+AICAAAAAcQB+AGVxAH4Ag3EAfgCDcQB+AKJzcQB+AIAAAAACcQB+AGRwdAAJZm9vdGVyQmFycHEAfgCEcHBwcHBwcHBwcHBwcHBwcHBxAH4AhnVxAH4AXQAAAAZ1cQB+AF0AAAACdXEAfgBdAAAABnVxAH4AXQAAAAN1cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDI2cQB+ADlxAH4AZHEAfgBlcQB+AI5wcHEAfgC8cQB+AGRxAH4AZXBwcHVxAH4AXQAAAAB1cQB+AF0AAAACdXEAfgBdAAAABnVxAH4AXQAAAAN1cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDI3cQB+ADtxAH4AZHEAfgBlcQB+AI5wcHEAfgDEcQB+AGRxAH4AZXBwcHVxAH4AXQAAAAB1cQB+AF0AAAACdXEAfgBdAAAABnVxAH4AXQAAAAN1cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDI4cQB+AD1xAH4AZHEAfgBlcQB+AI5wcHEAfgDMcQB+AGRxAH4AZXBwcHVxAH4AXQAAAAB1cQB+AF0AAAACdXEAfgBdAAAABnVxAH4AXQAAAAN1cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDI5cQB+AD9xAH4AZHEAfgBlcQB+AI5wcHEAfgDUcQB+AGRxAH4AZXBwcHVxAH4AXQAAAAB1cgAUW1tMamF2YS5sYW5nLk9iamVjdDsYv/tT5GvbygIAAHhwAAAAAXVxAH4AXQAAAAJxAH4AQnVxAH4AXQAAAAJ1cQB+AF0AAAAGdXEAfgBdAAAAA3VxAH4AXQAAAAhzcQB+AEA/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMjVxAH4ARHEAfgBkcQB+AGVxAH4AjnBwdAAGRm9vdGVycQB+AGRxAH4AZXBwcHVxAH4AXQAAAAB1cQB+AUkAAAABdXEAfgBdAAAAAnEAfgBFdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQyNHEAfgBHcQB+AGRxAH4AZXEAfgCOcHB0AAZIZWFkZXJxAH4AZHEAfgBlcHBwdXEAfgBdAAAAAHVxAH4AXQAAAAJ1cQB+AF0AAAAfdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAXEAfgByc3EAfgAFAAAAAXcEAAAACnQABV9pZDMxeHhwdAAKX2lkMDpfaWQzMHEAfgBKcQB+AGRxAH4AZXEAfgB/cHBzcQB+AICAAAAAcQB+AGVxAH4A3nEAfgDecHNxAH4AgIAAAABxAH4AZXBwcHBwcHBwcHBwcHBwcHBwcHBwcHB1cQB+AF0AAAABcHVxAH4AXQAAAAJ1cQB+AF0AAAAGdXEAfgBdAAAAA3VxAH4AXQAAAAhzcQB+AEA/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMzJxAH4ATHEAfgBkcQB+AGVxAH4AjnBwdAAKcGFuZWxHcm91cHEAfgBkcQB+AGVwcQB+AKJwdXEAfgBdAAAAAHVxAH4AXQAAAAJ1cQB+AF0AAAAfdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAXEAfgByc3EAfgAFAAAAAncEAAAACnEAfgBWcQB+AFh4eHB0AApfaWQwOl9pZDMzcQB+AFlxAH4AZHEAfgBlcQB+AH9wcHNxAH4AgIAAAABxAH4AZXEAfgCDcQB+AINxAH4AonNxAH4AgAAAAAJxAH4AZHBwcHBwcHBwcHBwcHBwcHQABnJvd09uZXBwcHBwcQB+AIZ1cQB+AF0AAAACdXEAfgBdAAAAAnVxAH4AXQAAAAN1cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAABcQB+AHJzcQB+AAUAAAACdwQAAAAKcQB+AFJxAH4AVHh4cHQACl9pZDA6X2lkMzRxAH4AVnEAfgBkcQB+AGV0ABFqYXZheC5mYWNlcy5Hcm91cHBwcHVxAH4AXQAAAAJ1cQB+AF0AAAACdXEAfgBdAAAABnVxAH4AXQAAAAN1cQB+AF0AAAAIc3EAfgBAP0AAAAAAAAx3CAAAABAAAAAAeHB0AApfaWQwOl9pZDM1cQB+AFJxAH4AZHEAfgBlcQB+AI5wcHQAC09iamVjdCBPbmUgcQB+AGRxAH4AZXQADmNvbG9yOiNmZjAwZmY7cHB1cQB+AF0AAAAAdXEAfgBdAAAAAnVxAH4AXQAAAAZ1cQB+AF0AAAADdXEAfgBdAAAACHNxAH4AQD9AAAAAAAAMdwgAAAAQAAAAAHhwdAAKX2lkMDpfaWQzNnEAfgBUcQB+AGRxAH4AZXEAfgCOcHBxAH4AxHEAfgBkcQB+AGV0AA5jb2xvcjojZmY5OTAwO3BwdXEAfgBdAAAAAHVxAH4AXQAAAAJ1cQB+AF0AAAAGdXEAfgBdAAAAA3VxAH4AXQAAAAhzcQB+AEA/QAAAAAAADHcIAAAAEAAAAAB4cHQACl9pZDA6X2lkMzdxAH4AWHEAfgBkcQB+AGVxAH4AjnBwcQB+AMxxAH4AZHEAfgBlcHBwdXEAfgBdAAAAAA==" />
+ <input type="hidden" name="_id0" value="_id0" /></form>
+        
+    </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>24 May 2004, 01:18:01.879 PM MDT</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>2</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>2</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/testRecorder-test/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/testRecorder-test/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+<?xml version="1.0"?>
+
+<!-- 
+================================================================
+
+  This project is a test of using the test recorder against a
+  Tomcat web application.  Below are targets that show how 
+  the test recorder runs against Tomcat for running a test suite 
+  against a running server, a test suite without the server running,
+  and a set of named tests against a running server.
+
+================================================================ 
+-->
+<project name="Beehive/NetUI/TestRecorder-webapp" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="../../../../beehive.properties"/>
+    <property file="../../ant/test.properties"/>
+    <property file="../../../ant/bootstrap.properties"/>
+    <property file="../../../ant/common.properties"/>
+
+    <property name="webapp.name" value="testRecorder-test"/>
+    <property name="testRecorder.config.name" value="${webapp.name}-config"/>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for building a webapp                                    -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="build" description="Build webapp">
+        <ant antfile="${test.dir}/ant/buildWebapp.xml" target="deploy.netui" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/testRecorder-test/${webapp.name}"/>
+            <property name="include.testrecorder" value="true"/>
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="test.file" location="${app.dir}/testRecorder-test/testRecorder/config/testRecorder-tests.xml"/>
+            <property name="config.file" location="${app.dir}/testRecorder-test/testRecorder/config/testRecorder-config.xml"/>
+            <property name="webapp.file" location="${app.dir}/testRecorder-test/testRecorder/config/testRecorder-webapp.xml"/>
+        </ant>
+
+        <ant antfile="${buildWebapp.ant}" target="build.webapp" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/testRecorder-test/${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="clean" description="Clean webapp">
+        <ant antfile="${test.dir}/ant/buildWebapp.xml" target="undeploy.netui" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/testRecorder-test/${webapp.name}"/>
+            <property name="include.testrecorder" value="true"/>
+        </ant>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for running test recorder test suites                    -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="playback" description="Playback a specified list of test recorder tests">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="playback" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+        </ant>
+    </target>
+
+    <target name="test.running" description="Playback the 'test' category to a running server">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" target="suite.callback" inheritAll="false">
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="suite.name" value="test"/>
+        </ant>
+    </target>
+
+    <target name="test" description="Run a test suite with full server start / stop support.">
+        <ant antfile="${test.dir}/ant/testRecorder.xml" inheritAll="false" target="server.test">
+            <property name="app.build.file" location="${app.dir}/testRecorder-test/build.xml"/>
+            <property name="waitfor.url" value="http://localhost:8080/${webapp.name}"/>
+            <property name="testRecorder.config.name" value="${testRecorder.config.name}"/>
+            <property name="suite.name" value="test"/>
+            <property name="drt.mode" value="true"/>
+        </ant>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for deploying the webapp on a server                     -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="deploy" description="Deploy webapp">
+        <ant antfile="${runTomcat.ant}" target="deploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+            <property name="webapp.root" value="${app.dir}/${webapp.name}/${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="undeploy" description="Undeploy webapp">
+        <ant antfile="${runTomcat.ant}" target="undeploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="redeploy" description="Redeploy webapp">
+        <ant antfile="${runTomcat.ant}" target="redeploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="ensure.deployed" description="Deploy webapp">
+        <echo>ensure.deployed is NYI</echo>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for starting / stopping a server                         -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="start" description="Start server">
+        <ant antfile="${runTomcat.ant}" target="start" inheritAll="false"/>
+    </target>
+
+    <target name="stop" description="Stop server">
+        <ant antfile="${runTomcat.ant}" target="stop" inheritAll="false"/>
+    </target>
+
+    <target name="usage">
+        <java fork="no" classname="org.apache.tools.ant.Main">
+            <arg line="-projecthelp"/>
+        </java>
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder-test/WEB-INF/web.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder-test/WEB-INF/web.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  Copyright 2004 The Apache Software Foundation
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+    version="2.4">
+
+    <description>NetUI Runtime POC</description>
+    <display-name>NetUI Runtime POC</display-name>
+
+    <filter>
+        <filter-name>PageFlowJspFilter</filter-name>
+        <filter-class>org.apache.beehive.netui.pageflow.PageFlowJspFilter</filter-class>
+    </filter>
+
+    <!-- Test Recorder Filter -->
+    <filter>
+        <filter-name>TestRecorderFilter</filter-name>
+        <filter-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter</filter-class>
+        <init-param>
+            <param-name>webapp</param-name>
+            <param-value>testRecorder-test</param-value>
+        </init-param>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>PageFlowJspFilter</filter-name>
+        <url-pattern>*.jsp</url-pattern>
+    </filter-mapping>
+
+    <filter-mapping>
+        <filter-name>TestRecorderFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <!-- Standard Action Servlet Configuration (with debugging) -->
+    <servlet>
+        <servlet-name>action</servlet-name>
+        <servlet-class>org.apache.beehive.netui.pageflow.PageFlowActionServlet</servlet-class>
+        <init-param>
+            <param-name>config</param-name>
+            <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/-global</param-name>
+            <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config--global.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>debug</param-name>
+            <param-value>2</param-value>
+        </init-param>
+        <init-param>
+            <param-name>detail</param-name>
+            <param-value>2</param-value>
+        </init-param>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+
+    <!-- Test Recorder Servlet (control channel) -->
+    <servlet>
+        <servlet-name>TestRecorderServlet</servlet-name>
+        <servlet-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet</servlet-class>
+    </servlet>
+
+    <!-- Struts Action Servlet Mappings -->
+    <!-- Note that because Struts takes the *last* mapping here as the extension to add to
+         actions posted from forms, we must have *.do come after *.jpf. -->
+    <servlet-mapping>
+        <servlet-name>action</servlet-name>
+        <url-pattern>*.jpf</url-pattern>
+    </servlet-mapping>
+
+    <servlet-mapping>
+        <servlet-name>action</servlet-name>
+        <url-pattern>*.do</url-pattern>
+    </servlet-mapping>
+
+    <!-- TestRecorder Control Servlet -->
+    <servlet-mapping>
+        <servlet-name>TestRecorderServlet</servlet-name>
+        <url-pattern>/testRecorder</url-pattern>
+    </servlet-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+
+    <error-page>
+        <error-code>500</error-code>
+        <location>/error.jsp</location>
+    </error-page>
+
+    <jsp-config>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-html.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-html.tld</taglib-location>
+        </taglib>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-databinding.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-databinding.tld</taglib-location>
+        </taglib>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-template.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-template.tld</taglib-location>
+        </taglib>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-datagrid.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-datagrid.tld</taglib-location>
+        </taglib>
+    </jsp-config>
+    
+</web-app>

Added: incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder-test/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder-test/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,20 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>POC NetUI</title>
+  </head>
+  <body>
+    <b>POC NetUI</b>
+    <br/>
+    <br/>
+    <% pageContext.setAttribute("message", "Hello World! -- a <netui:label>"); %>
+    <netui:label value="{pageContext.message}"/>
+    <br/>
+    End Communication
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<config xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <suffixList>
+        <suffix>jsp</suffix>
+        <suffix>jspx</suffix>
+        <suffix>do</suffix>
+        <suffix>jpf</suffix>
+        <suffix></suffix>
+    </suffixList>
+    <servletURI>testRecorder</servletURI>
+    <baseDirectory>@BASE_DIR@</baseDirectory>
+</config>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-tests.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-tests.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testDefinitions xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <categories>
+        <category>
+            <name>test</name>
+            <description>Test Recorder tests</description>
+        </category>
+        <category>
+            <name>drt</name>
+            <description>Test Recorder DRT tests</description>
+        </category>
+    </categories>
+    <tests>
+        <test>
+            <name>smoketest</name>
+            <description>smoketest</description>
+            <webapp>testRecorder-test</webapp>
+            <categories>
+                <category>test</category>
+                <category>drt</category>
+            </categories>
+        </test>
+    </tests>
+</testDefinitions>

Added: incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-webapp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/config/testRecorder-webapp.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<server xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <name>tomcat-testrecorder-test</name>
+    <hostname>localhost</hostname>
+    <port>8080</port>
+    <webapps>
+        <webapp>
+            <name>testRecorder-test</name>
+            <description>Test Recorder DRT Application</description>
+            <testMode>true</testMode>
+            <contextRoot>/testRecorder-test</contextRoot>
+            <testDefinitionsDirectory>@DOMAIN_DIR@/testRecorder-test/testRecorder/tests/</testDefinitionsDirectory>
+        </webapp>
+    </webapps>
+</server>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/tests/smoketest.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/testRecorder-test/testRecorder/tests/smoketest.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>smoketest</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>27 Jun 2004, 09:50:33.399 PM MDT</ses:startDate>
+   <ses:description>Test recorder smoke test.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/testRecorder-test/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>C8961247F34300BC16EC93B7EB7C6291</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=C8961247F34300BC16EC93B7EB7C6291</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>POC NetUI</title>
+  </head>
+  <body>
+    <b>POC NetUI</b>
+    <br/>
+    <br/>
+    
+    <span>Hello World! -- a &lt;netui:label&gt;</span>
+    <br/>
+    End Communication
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/testRecorder-test/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>C8961247F34300BC16EC93B7EB7C6291</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cache-control</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=C8961247F34300BC16EC93B7EB7C6291</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>pragma</ses:name>
+                  <ses:value>no-cache</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>POC NetUI</title>
+  </head>
+  <body>
+    <b>POC NetUI</b>
+    <br/>
+    <br/>
+    
+    <span>Hello World! -- a &lt;netui:label&gt;</span>
+    <br/>
+    End Communication
+  </body>
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>27 Jun 2004, 09:50:41.941 PM MDT</ses:endDate>
+   <ses:testCount>2</ses:testCount>
+</ses:recorderSession>

Added: incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<config xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <suffixList>
+        <suffix>jsp</suffix>
+        <suffix>jspx</suffix>
+        <suffix>do</suffix>
+        <suffix>jpf</suffix>
+        <suffix></suffix>
+    </suffixList>
+    <servletURI>testRecorder</servletURI>
+</config>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-tests.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-tests.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testDefinitions xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <categories>
+        <category>
+            <name>urlTemplates</name>
+            <description>urlTemplates</description>
+        </category>
+    </categories>
+    <tests>
+        <test>
+            <name>UrlTemplates</name>
+            <description>UrlTemplates</description>
+            <webapp>urlTemplates</webapp>
+            <categories>
+                <category>urlTemplates</category>
+            </categories>
+        </test>
+    </tests>
+</testDefinitions>

Added: incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-webapp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/config/testRecorder-webapp.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<server xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004">
+    <name>tomcat</name>
+    <hostname>localhost</hostname>
+    <port>8080</port>
+    <webapps>
+        <webapp>
+            <name>urlTemplates</name>
+            <description>Netui url templates web application</description>
+            <testMode>true</testMode>
+            <contextRoot>/urlTemplates</contextRoot>
+            <testDefinitionsDirectory>@DOMAIN_DIR@/urlTemplates/testRecorder/tests</testDefinitionsDirectory>
+        </webapp>
+    </webapps>
+</server>

Added: incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/tests/UrlTemplates.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/testRecorder/tests/UrlTemplates.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+
+  <sessionName>UrlTemplates</sessionName>
+  <tester>rich</tester>
+  <startDate>26 Mar 2004, 02:42:23.520 PM MST</startDate>
+  <description>Test URL templates using /WEB-INF/url-template-config.xml.</description>
+
+  <tests>
+  <test>
+    <testNumber>1</testNumber>
+
+    <request>
+
+      <protocol>HTTP</protocol>
+      <protocolVersion>1.1</protocolVersion>
+      <host>localhost</host>
+      <port>7001</port>
+      <uri>/urlTemplates/testUrlTemplates/testUrlTemplatesController.jpf</uri>
+      <method>GET</method>
+
+      <parameters>
+      </parameters>
+
+      <cookies>
+      </cookies>
+
+      <headers>
+        <header>
+          <name>Accept</name>
+          <value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1</value>
+        </header>
+        <header>
+          <name>Accept-Charset</name>
+          <value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+        </header>
+        <header>
+          <name>Accept-Encoding</name>
+          <value>gzip, deflate, x-gzip, compress, x-compress</value>
+        </header>
+        <header>
+          <name>Accept-Language</name>
+          <value>en-us,en;q=0.5</value>
+        </header>
+        <header>
+          <name>Connection</name>
+          <value>keep-alive, TE</value>
+        </header>
+        <header>
+          <name>Host</name>
+          <value>localhost:7001</value>
+        </header>
+        <header>
+          <name>Keep-Alive</name>
+          <value>300</value>
+        </header>
+        <header>
+          <name>TE</name>
+          <value>trailers, deflate, gzip, compress</value>
+        </header>
+        <header>
+          <name>User-Agent</name>
+          <value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 RPT-HTTPClient/0.3-3E</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.failMode</name>
+          <value>stop</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testID</name>
+          <value>-67265aa3:fb89054f29:-783a</value>
+        </header>
+        <header>
+          <name>testRecorder.playback.testNumber</name>
+          <value>1</value>
+        </header>
+      </headers>
+
+    </request>
+
+    <response>
+      <statusCode>200</statusCode>
+      <reason></reason>
+      <responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+    <title>URL Templates Test</title>
+  </head>
+  <body>
+    <a href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/urlTemplates/testUrlTemplates/begin.do?URLTEMPLATE=action%26"><i>begin action</i></a><br>
+    <a href="https://@NON_UNIQUE_HOST@:7002/urlTemplates/testUrlTemplates/secure.do?URLTEMPLATE=secure-action%26"><i>secure action</i></a><br>
+    <a href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/urlTemplates/testUrlTemplates/unsecure.do?URLTEMPLATE=action%26"><i>unsecure action</i></a><br>
+    <a href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/urlTemplates/testUrlTemplates/index.jsp?URLTEMPLATE=action%26">index.jsp</a><br>
+    <a href="https://@NON_UNIQUE_HOST@:7002/urlTemplates/testUrlTemplates/secure.jsp?URLTEMPLATE=secure-action%26">secure.jsp</a><br>
+    <a href="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/urlTemplates/testUrlTemplates/index.jsp?URLTEMPLATE=action%26foo=bar">/urlTemplates/testUrlTemplates/index.jsp?foo=bar</a><br>
+    <a href="https://@NON_UNIQUE_HOST@:7002/urlTemplates/testUrlTemplates/secure.jsp?URLTEMPLATE=secure-action%26">/urlTemplates/testUrlTemplates/secure.jsp?foo=bar</a><br>
+    <a href="http://www.bea.com?foo=bar">http://www.bea.com?foo=bar</a><br>
+    image.gif: <img src="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/urlTemplates/testUrlTemplates/image.gif?URLTEMPLATE=resource%26"><br>
+    /urlTemplates/testUrlTemplates/image.gif: <img src="http://@NON_UNIQUE_HOST@:@NON_UNIQUE_PORT@/urlTemplates/testUrlTemplates/image.gif?URLTEMPLATE=resource%26"><br>
+    secureImage.gif: <img src="https://@NON_UNIQUE_HOST@:7002/urlTemplates/testUrlTemplates/secureImage.gif?URLTEMPLATE=secure-resource%26"><br>
+    /urlTemplates/testUrlTemplates/secureImage.gif: <img src="https://@NON_UNIQUE_HOST@:7002/urlTemplates/testUrlTemplates/secureImage.gif?URLTEMPLATE=secure-resource%26"><br>
+    http://www.bea.com/content/images/bea_logo.gif?foo=bar: <img src="http://www.bea.com/content/images/bea_logo.gif?foo=bar"><br>
+  </body>
+</html>]]></responseBody>
+
+    </response>
+
+    <testResults>
+      <testStatus>fail</testStatus>
+
+    </testResults>
+  </test>
+
+  </tests>
+
+  <endDate>26 Mar 2004, 02:42:32.203 PM MST</endDate>
+  <sessionStatus>fail</sessionStatus>
+  <testCount>1</testCount>
+  <passedCount>0</passedCount>
+  <failedCount>1</failedCount>
+</recorderSession>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/Controller.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/Controller.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ * This is the default controller for a blank web application.
+ *
+ * @jpf:controller
+ * @jpf:view-properties view-properties::
+ * <!-- This data is auto-generated. Hand-editing this section is not recommended. -->
+ * <view-properties>
+ *     <pageflow-object id="action:begin.do">
+ *         <property name="x" value="60"/>
+ *         <property name="y" value="80"/>
+ *     </pageflow-object>
+ *     <pageflow-object id="page:index.jsp">
+ *         <property name="x" value="220"/>
+ *         <property name="y" value="80"/>
+ *     </pageflow-object>
+ *     <pageflow-object id="page:error.jsp">
+ *         <property name="x" value="220"/>
+ *         <property name="y" value="160"/>
+ *     </pageflow-object>
+ *     <pageflow-object id="forward:path#index#index.jsp#@action:begin.do@">
+ *         <property name="elbowsY" value="72,72,72,72"/>
+ *         <property name="elbowsX" value="96,140,140,184"/>
+ *         <property name="toPort" value="West_1"/>
+ *         <property name="fromPort" value="East_1"/>
+ *         <property name="label" value="index"/>
+ *     </pageflow-object>
+ *     <pageflow-object id="pageflow:/Controller.jpf"/>
+ * </view-properties>::
+ */
+@Jpf.Controller()
+@Jpf.ViewProperties(value = {
+    "<!-- This data is auto-generated. Hand-editing this section is not recommended. -->",
+    "<view-properties>",
+    "    <pageflow-object id='action:begin.do'>",
+    "        <property name='x' value='60'/>",
+    "        <property name='y' value='80'/>",
+    "    </pageflow-object>",
+    "    <pageflow-object id='page:index.jsp'>",
+    "        <property name='x' value='220'/>",
+    "        <property name='y' value='80'/>",
+    "    </pageflow-object>",
+    "    <pageflow-object id='page:error.jsp'>",
+    "        <property name='x' value='220'/>",
+    "        <property name='y' value='160'/>",
+    "    </pageflow-object>",
+    "    <pageflow-object id='forward:path#index#index.jsp#@action:begin.do@'>",
+    "        <property name='elbowsY' value='72,72,72,72'/>",
+    "        <property name='elbowsX' value='96,140,140,184'/>",
+    "        <property name='toPort' value='West_1'/>",
+    "        <property name='fromPort' value='East_1'/>",
+    "        <property name='label' value='index'/>",
+    "    </pageflow-object>",
+    "    <pageflow-object id='pageflow:/Controller.jpf'/>",
+    "</view-properties>"})
+public class Controller extends PageFlowController
+{
+    /**
+     * @jpf:action
+     * @jpf:forward name="index" path="index.jsp"
+     */
+@Jpf.Action(forwards = { @Jpf.Forward(name = "index", path = "index.jsp") })
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+}

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/src/global/Global.app
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/src/global/Global.app	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+package global;
+
+import org.apache.beehive.netui.pageflow.*;
+
+/**
+ * The Global page flow is used to define actions which can be invoked by any other
+ * page flow in a webapp. The "jpf:catch" annotation provides a global way to catch
+ * unhandled exceptions by forwarding to an error page.
+ *
+ * @jpf:catch type="Exception" method="handleException"
+ * @jpf:catch type="PageFlowException" method="handlePageFlowException"
+ */
+public class Global extends GlobalApp
+{
+   /**
+    * Sample global action that will return to the default Controller.jpf in
+    * the webapp root.
+    * @jpf:action
+    * @jpf:forward name="home" path="/Controller.jpf"
+    */
+    public Forward home()
+    {
+        return new Forward( "home" );
+    }
+
+    /**
+     * @jpf:exception-handler
+     * @jpf:forward name="errorPage" path="/error.jsp"
+     */
+    protected Forward handleException( Exception ex, String actionName,
+                                       String message, FormData form )
+    {
+        System.err.print( "[" + getRequest().getContextPath() + "] " );
+        System.err.println( "Unhandled exception caught in Global.app:" );
+        ex.printStackTrace();
+        return new Forward( "errorPage" );
+    }
+
+    /** 
+     * Handler for native page flow exceptions (e.g., ActionNotFoundException,
+     * which is thrown when an unknown page flow action is requested). This handler
+     * allows PageFlowExceptions to write informative error pages to the response.
+     * To use the standard exception-handler for these exceptions, simply remove
+     * this method and the "jpf:catch" annotation for PageFlowException.
+     *
+     * @jpf:exception-handler
+     */ 
+    public Forward handlePageFlowException( PageFlowException ex, String message,
+                                            String action, FormData form ) 
+        throws java.io.IOException
+    { 
+        ex.sendError( getRequest(), getResponse() ); 
+        return null; 
+    } 
+}

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/url-template-config.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/url-template-config.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template-config>
+    <!-- URL templates -->
+    <url-template name="default">
+        {url:scheme}111://{url:domain}:{url:port}/{url:prefix}/{url:path}?{url:queryString}
+    </url-template>
+    <url-template name="jpf-action">
+        http://{url:domain}:7001/{url:path}?URLTEMPLATE=action%26{url:queryString}
+    </url-template>
+    <url-template name="jpf-secure-action">
+        https://{url:domain}:7002/{url:path}?URLTEMPLATE=secure-action%26{url:queryString}
+    </url-template>
+    <url-template name="jpf-resource">
+        http://{url:domain}:7001/{url:path}?URLTEMPLATE=resource%26{url:queryString}
+    </url-template>
+    <url-template name="jpf-secure-resource">
+        https://{url:domain}:7002/{url:path}?URLTEMPLATE=secure-resource%26{url:queryString}
+    </url-template>
+    <jpf-url-templates>
+        <url-template-ref type="action" name="jpf-action"/>
+        <url-template-ref type="secure-action" name="jpf-secure-action"/>
+        <url-template-ref type="resource" name="jpf-resource"/>
+        <url-template-ref type="secure-resource" name="jpf-secure-resource"/>
+    </jpf-url-templates>
+</template-config>

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/web.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/WEB-INF/web.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+  <!DOCTYPE web-app PUBLIC
+    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+    "http://java.sun.com/dtd/web-app_2_3.dtd" >
+
+<!-- The web.xml file is a configuration file used to control the behavior of WebLogic server.
+In most cases, you will not need to modify this file. For more information on web.xml, please
+consult the Web.xml Deployment Descriptor Elements chapter of the "Developing WebLogic Server
+Applications" documentation on edocs.bea.com. -->
+
+
+<web-app>
+    <display-name>Workshop Application</display-name>
+
+    <filter>
+        <filter-name>TestRecorderFilter</filter-name>
+        <filter-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter</filter-class>
+        <init-param>
+            <param-name>webapp</param-name>
+            <param-value>urlTemplates</param-value>
+        </init-param>
+    </filter>
+
+    <filter>
+        <filter-name>PageFlowJspFilter</filter-name>
+        <filter-class>org.apache.beehive.netui.pageflow.PageFlowJspFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>TestRecorderFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <filter-mapping>
+        <filter-name>PageFlowJspFilter</filter-name>
+        <url-pattern>*.jsp</url-pattern>
+    </filter-mapping>
+
+    <servlet>
+        <servlet-name>TestRecorderServlet</servlet-name>
+        <servlet-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderServlet</servlet-class>
+    </servlet>
+
+    <!-- Standard Action Servlet Configuration (with debugging) -->
+    <servlet>
+        <servlet-name>action</servlet-name>
+        <servlet-class>org.apache.beehive.netui.pageflow.PageFlowActionServlet</servlet-class>
+        <init-param>
+            <param-name>config</param-name>
+            <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/-global</param-name>
+            <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config--global.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>debug</param-name>
+            <param-value>2</param-value>
+        </init-param>
+        <init-param>
+            <param-name>detail</param-name>
+            <param-value>2</param-value>
+        </init-param>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+
+    <!-- Struts Action Servlet Mappings -->
+    <!-- Note that because Struts takes the *last* mapping here as the extension to add to
+         actions posted from forms, we must have *.do come after *.jpf. -->
+    <servlet-mapping>
+        <servlet-name>action</servlet-name>
+        <url-pattern>*.jpf</url-pattern>
+    </servlet-mapping>
+
+    <servlet-mapping>
+        <servlet-name>action</servlet-name>
+        <url-pattern>*.do</url-pattern>
+    </servlet-mapping>
+
+    <!-- TestRecorder Control Servlet -->
+    <servlet-mapping>
+        <servlet-name>TestRecorderServlet</servlet-name>
+        <url-pattern>/testRecorder</url-pattern>
+    </servlet-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+
+    <error-page>
+        <error-code>500</error-code>
+        <location>/error.jsp</location>
+    </error-page>
+
+    <!-- Define the NetUI tag library TLDs -->
+    <taglib>
+        <taglib-uri>beehive-netui-tags-html.tld</taglib-uri>
+        <taglib-location>/WEB-INF/beehive-netui-tags-html.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>beehive-netui-tags-databinding.tld</taglib-uri>
+        <taglib-location>/WEB-INF/beehive-netui-tags-databinding.tld</taglib-location>
+    </taglib>
+
+    <taglib>
+        <taglib-uri>beehive-netui-tags-template.tld</taglib-uri>
+        <taglib-location>/WEB-INF/beehive-netui-tags-template.tld</taglib-location>
+    </taglib>
+
+    <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>secure - for UrlTemplates test</web-resource-name>
+        <url-pattern>/testUrlTemplates/secure.do</url-pattern>
+        <url-pattern>/testUrlTemplates/secure.jsp</url-pattern>
+        <url-pattern>/testUrlTemplates/secureImage.gif</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+      </user-data-constraint>
+    </security-constraint>
+
+    <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>unsecure - for UrlTemplates test</web-resource-name>
+        <url-pattern>/testUrlTemplates/unsecure.do</url-pattern>
+      </web-resource-collection>
+      <user-data-constraint>
+         <transport-guarantee>NONE</transport-guarantee>
+      </user-data-constraint>
+    </security-constraint>
+
+</web-app>

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/dataStructure.jspf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/dataStructure.jspf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,18 @@
+<%
+    class Info {
+	public String _test;
+	public String _href;
+	public String _description;
+	public String _coverage;
+
+	public Info(String test, String href, String description,
+		    String coverage)
+	{
+	    _test = test;
+	    _href = href;
+	    _description = description;
+	    _coverage = coverage;
+	}
+    }
+%>
+

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/error.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8" isErrorPage="true"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>Error</title>
+  </head>
+  <body>
+    <p>
+      An error has occurred:
+    </p>
+    <blockquote>
+      <netui:label value="{request.errorMessage}" defaultValue="" />
+      <br/>
+      <netui:exceptions showMessage="true" />
+    </blockquote>
+  </body>
+</netui:html>
+
+<!-- Some browsers will not display this page unless the response status code is 200. -->
+<% response.setStatus(200); %>

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,14 @@
+<%@ page import="java.net.URL" %>
+<% String _title = "URL Template Tests"; %>
+<%@ include file="dataStructure.jspf"%>
+<%
+    String context = request.getContextPath();
+
+    Info[] _testList = {
+	new Info("UrlTemplates", context + "/testUrlTemplates/testUrlTemplatesController.jpf",
+	 "Tests various URL templates on various tags.",
+	 "Tags, URL Templates"
+		 )
+    };
+%>
+<%@ include file="page.jspf"%>

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/page.jspf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/page.jspf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,71 @@
+<html>
+<head>
+  <title>NetUI BVT - <%= _title %></title>
+  <link rel="stylesheet" href="/netuiDRT/site/style.css">
+</head>
+<body topmargin="0" leftmargin="0" marginwidth="10" marginheight="10">
+<table class="header" width="100%">
+<tr>
+<td width="150" style="padding:4,0,0,4">
+  <img src="/netuiDRT/images/godzilla.gif" height="66" width="48"/>
+</td><td valign="top">
+<h1 class="title">NetUI BVTs - <%= _title %></h1>
+</td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<td valign="top">
+<a href="index.jsp">General Tests</a><br />
+<hr />
+<a href="#Bottom">Goto Bottom</a></br>
+</td><td>
+<span  style="background-color:white">
+<!-- Errors Table -->
+
+<table border="1" width="100%" cellspacing="0">
+<tr><th width="100pt">DRT</th>
+    <th width="60pt">Details</th>
+    <th width="60pt">Diff</th>
+    <th width="300pt">Description</th>
+    <th>Coverage</th>
+</tr>
+<%
+    for (int i=0;i<_testList.length;i++) {
+%>
+<tr>
+  <td><a href="<%= _testList[i]._href %>"><%= _testList[i]._test %></a></td>
+  <td><a href="/netuiDRT/testRecorder?mode=details&file=<%= _testList[i]._test %>">Details</a></td>
+  <td>
+<%
+    String s = "/testRecorder/testResults/" + _testList[i]._test + ".diff.xml";
+    
+    URL url = session.getServletContext().getResource(s);
+    if (url != null) {
+%>
+       <a href="/netuiDRT/testRecorder?mode=diff&file=<%= _testList[i]._test %>">Diff</a>
+<%
+    }
+    else {
+%>
+       &nbsp;
+<%
+    }
+%>
+  </td>
+  <td><%= _testList[i]._description %></td>
+  <td><%= _testList[i]._coverage %></td>
+</tr>
+
+<%
+    }
+%>
+<!-- The end of the Errors table-->
+</table>
+
+</table>
+</span>
+</td></tr>
+</table>
+<a name="Bottom">
+</body>
+</html>

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/image.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>URL Templates Test</title>
+  </head>
+  <body>
+    <netui:anchor action="begin"><i>begin action</i></netui:anchor><br>
+    <netui:anchor action="secure"><i>secure action</i></netui:anchor><br>
+    <netui:anchor action="unsecure"><i>unsecure action</i></netui:anchor><br>
+    <netui:anchor href="index.jsp">index.jsp</netui:anchor><br>
+    <netui:anchor href="secure.jsp">secure.jsp</netui:anchor><br>
+    <netui:anchor href="/urlTemplates/testUrlTemplates/index.jsp?foo=bar">/urlTemplates/testUrlTemplates/index.jsp?foo=bar</netui:anchor><br>
+    <netui:anchor href="/urlTemplates/testUrlTemplates/secure.jsp">/urlTemplates/testUrlTemplates/secure.jsp?foo=bar</netui:anchor><br>
+    <netui:anchor href="http://www.bea.com">
+        http://www.bea.com?foo=bar
+        <netui:parameter name="foo" value="bar"/>
+    </netui:anchor><br>
+    image.gif: <netui:image src="image.gif"/><br>
+    /urlTemplates/testUrlTemplates/image.gif: <netui:image src="/urlTemplates/testUrlTemplates/image.gif"/><br>
+    secureImage.gif: <netui:image src="secureImage.gif"/><br>
+    /urlTemplates/testUrlTemplates/secureImage.gif: <netui:image src="/urlTemplates/testUrlTemplates/secureImage.gif"/><br>
+    http://www.bea.com/content/images/bea_logo.gif?foo=bar: <netui:image src="http://www.bea.com/content/images/bea_logo.gif?foo=bar"/><br>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/secure.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/secure.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,13 @@
+<!--Generated by WebLogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<netui:html>
+  <head>
+    <title>URL Templates Test</title>
+  </head>
+  <body>
+    <netui:anchor action="unsecure">go back</netui:anchor><br>
+  </body>
+</netui:html>

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/secureImage.gif
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/testUrlTemplatesController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/urlTemplates/urlTemplates/testUrlTemplates/testUrlTemplatesController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+package testUrlTemplates;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
+/**
+ * @jpf:forward name="index" path="index.jsp"
+ */
+@Jpf.Controller(forwards = { @Jpf.Forward(name = "index", path = "index.jsp") })
+public class testUrlTemplatesController extends PageFlowController
+{
+    /**
+     * @jpf:action
+     */
+@Jpf.Action()
+    public Forward begin()
+    {
+        return new Forward( "index" );
+    } 
+
+    /**
+     * @jpf:action
+     */
+@Jpf.Action()
+    public Forward secure()
+    {
+        return new Forward( "index" );
+    }
+
+    /**
+     * @jpf:action
+     */
+@Jpf.Action()
+    public Forward unsecure()
+    {
+        return new Forward( "index" );
+    }
+}

Added: incubator/beehive/netui/test/webapps/webappBuild-test/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+
+<!-- 
+================================================================
+
+  This project is a test of using the Beehive webapp build
+  infrastructure.
+
+================================================================ 
+-->
+<project name="Beehive/NetUI/WebappBuild-webapp" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="../../../../beehive.properties"/>
+    <property file="../../ant/test.properties"/>
+    <property file="../../../ant/bootstrap.properties"/>
+    <property file="../../../ant/common.properties"/>
+
+    <property name="webapp.name" value="webappBuild-test"/>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for building a webapp                                    -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="build" description="Build webapp">
+        <ant antfile="${test.dir}/ant/buildWebapp.xml" target="deploy.netui" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/${webapp.name}/${webapp.name}"/>
+        </ant>
+
+        <ant antfile="${buildWebapp.ant}" target="build.webapp" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/${webapp.name}/${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="clean" description="Clean webapp">
+        <ant antfile="${test.dir}/ant/buildWebapp.xml" target="undeploy.netui" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/${webapp.name}/${webapp.name}"/>
+        </ant>
+
+        <ant antfile="${buildWebapp.ant}" target="clean.webapp" inheritAll="false">
+            <property name="webapp.dir" location="${app.dir}/${webapp.name}/${webapp.name}"/>
+        </ant>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for deploying the webapp on a server                     -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="deploy" description="Deploy webapp">
+        <ant antfile="${runTomcat.ant}" target="deploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+            <property name="webapp.root" value="${app.dir}/${webapp.name}/${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="undeploy" description="Undeploy webapp">
+        <ant antfile="${runTomcat.ant}" target="undeploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="redeploy" description="Redeploy webapp">
+        <ant antfile="${runTomcat.ant}" target="redeploy" inheritAll="false">
+            <property name="context.path" value="${webapp.name}"/>
+        </ant>
+    </target>
+
+    <target name="ensure.deployed" description="Deploy webapp">
+        <echo>ensure.deployed is NYI</echo>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for starting / stopping a server                         -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <target name="start" description="Start server">
+        <ant antfile="${runTomcat.ant}" target="start" inheritAll="false"/>
+    </target>
+
+    <target name="stop" description="Stop server">
+        <ant antfile="${runTomcat.ant}" target="stop" inheritAll="false"/>
+    </target>
+
+    <target name="usage">
+        <java fork="no" classname="org.apache.tools.ant.Main">
+            <arg line="-projecthelp"/>
+        </java>
+    </target>
+
+</project>

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/schemas/portfolio.xsd
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/schemas/portfolio.xsd	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://www.openuri.org/customerPortfolio"
+            xmlns:folio="http://www.openuri.org/customerPortfolio"
+            elementFormDefault="qualified">
+
+    <xsd:simpleType name="exchangeType">
+        <xsd:restriction base="xsd:string">
+            <xsd:enumeration value="nyse"/>
+            <xsd:enumeration value="nasdaq"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+    
+    <xsd:complexType name="stock">
+        <xsd:sequence>
+            <xsd:element name="symbol" type="xsd:string"/>
+            <xsd:element name="name" type="xsd:string"/>
+            <xsd:element name="price" type="xsd:double"/>
+            <xsd:element name="web" type="xsd:string"/>
+            <xsd:element name="shares" type="xsd:int"/>
+        </xsd:sequence>
+        <xsd:attribute name="exchange" type="folio:exchangeType" use="required"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="stocks">
+        <xsd:sequence>
+            <xsd:element name="stock" type="folio:stock" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:element name="portfolio">
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="stocks" type="folio:stocks" minOccurs="0" maxOccurs="1"/>
+            </xsd:sequence>
+        </xsd:complexType>
+    </xsd:element>
+
+</xsd:schema>

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/log4j.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/log4j.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+<!-- 
+  <appender name="NETUISYSLOGFILE" class="org.apache.log4j.RollingFileAppender">
+    <param name="File" value="c:/tmp/netui.log"/>
+-->
+  <appender name="NETUISYSLOGFILE" class="org.apache.log4j.ConsoleAppender">
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d{DATE} %-5p %-15c{1} [%x]: %m%n"/>
+    </layout>
+  </appender>
+
+  <!-- base for all netui server components -->
+  <category name="com.bea.wlw.netui">
+    <priority value="info"/>
+    <appender-ref ref="NETUISYSLOGFILE"/>
+  </category>
+
+  <!-- base for all netui server components -->
+  <category name="com.bea.wlw.netui.script">
+    <priority value="error"/>
+    <appender-ref ref="NETUISYSLOGFILE"/>
+  </category>
+
+</log4j:configuration>

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org/acme/beans/ProductBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/org/acme/beans/ProductBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,38 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.acme.beans;
+
+// java imports
+
+// internal imports
+
+// external imports
+import org.apache.beehive.netui.pageflow.FormData;
+
+/**
+ *
+ */
+public class ProductBean
+    extends FormData
+{
+    private String _name;
+
+    public String getName() {return _name;}
+    public void setName(String name) {_name = name;}
+}

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/testdata/portfolio.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/src/testdata/portfolio.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,17 @@
+<?xml version="1.0"?> 
+<portfolio xmlns="http://www.openuri.org/customerPortfolio">
+  <stocks>
+    <stock exchange='nasdaq'>
+        <symbol>FOO</symbol>
+        <name>FOO Inc.</name>
+        <price>14.35</price>
+        <shares>500</shares>
+    </stock>
+    <stock exchange='nasdaq'>
+        <symbol>BAR</symbol>
+        <name>BAR LLC</name>
+        <price>19.42</price>
+        <shares>400</shares>
+    </stock>
+  </stocks>
+</portfolio>
\ No newline at end of file

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/web.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/WEB-INF/web.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  Copyright 2004 The Apache Software Foundation
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+    version="2.4">
+
+    <description>NetUI Runtime POC</description>
+    <display-name>NetUI Runtime POC</display-name>
+
+    <filter>
+        <filter-name>PageFlowJspFilter</filter-name>
+        <filter-class>org.apache.beehive.netui.pageflow.PageFlowJspFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>PageFlowJspFilter</filter-name>
+        <url-pattern>*.jsp</url-pattern>
+    </filter-mapping>
+
+    <!-- Standard Action Servlet Configuration (with debugging) -->
+    <servlet>
+        <servlet-name>action</servlet-name>
+        <servlet-class>org.apache.beehive.netui.pageflow.PageFlowActionServlet</servlet-class>
+        <init-param>
+            <param-name>config</param-name>
+            <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>config/-global</param-name>
+            <param-value>/WEB-INF/.pageflow-struts-generated/jpf-struts-config--global.xml</param-value>
+        </init-param>
+        <init-param>
+            <param-name>debug</param-name>
+            <param-value>2</param-value>
+        </init-param>
+        <init-param>
+            <param-name>detail</param-name>
+            <param-value>2</param-value>
+        </init-param>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+
+    <!-- Struts Action Servlet Mappings -->
+    <!-- Note that because Struts takes the *last* mapping here as the extension to add to
+         actions posted from forms, we must have *.do come after *.jpf. -->
+    <servlet-mapping>
+        <servlet-name>action</servlet-name>
+        <url-pattern>*.jpf</url-pattern>
+    </servlet-mapping>
+
+    <servlet-mapping>
+        <servlet-name>action</servlet-name>
+        <url-pattern>*.do</url-pattern>
+    </servlet-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+
+    <error-page>
+        <error-code>500</error-code>
+        <location>/error.jsp</location>
+    </error-page>
+
+    <jsp-config>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-html.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-html.tld</taglib-location>
+        </taglib>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-databinding.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-databinding.tld</taglib-location>
+        </taglib>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-template.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-template.tld</taglib-location>
+        </taglib>
+        <taglib>
+            <taglib-uri>beehive-netui-tags-datagrid.tld</taglib-uri>
+            <taglib-location>/WEB-INF/beehive-netui-tags-datagrid.tld</taglib-location>
+        </taglib>
+    </jsp-config>
+    
+</web-app>

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/controls/hello/HelloWorld.java
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/controls/hello/HelloWorld.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,11 @@
+package controls.hello; 
+
+@org.apache.beehive.controls.api.bean.ControlInterface()
+public interface HelloWorld 
+{
+    public String sayHello();
+
+    public String getGreeting();
+
+    public String sayHelloTo(String name);
+}

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/controls/hello/HelloWorldImpl.jcs
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/controls/hello/HelloWorldImpl.jcs	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,24 @@
+
+package controls.hello; 
+
+@org.apache.beehive.controls.api.bean.ControlImplementation()
+public class HelloWorldImpl
+    implements HelloWorld
+{ 
+    static final long serialVersionUID = 1L;
+
+    public String sayHello()
+    {
+        return null;
+    }
+
+    public String getGreeting()
+    {
+        return sayHelloTo("Beehive");
+    }
+
+    public String sayHelloTo(String name)
+    {
+        return "Hello, " + name;   
+    }
+}

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,32 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ page import="org.acme.beans.ProductBean" %>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Beehive WebappBuild Test</title>
+  </head>
+  <body>
+    <b>Beehive WebappBuild Test</b>
+    <br/>
+    <br/>
+<% 
+ProductBean pb = new ProductBean();
+pb.setName("Test Widget 1");
+
+pageContext.setAttribute("product", pb);
+%>
+<br/>
+NetUI label: <netui:label value="{pageContext.product.name}"/><br/>
+JSP 2.0 EL: ${pageScope.product.name}<br/>
+    <br/>
+    ...End Communication...
+    <br/>
+    <netui:anchor href="usecontrol.jsp">Use Control</netui:anchor><br/>
+    <netui:anchor href="usexmlbean.jsp">Use XMLBean</netui:anchor><br/>
+    <netui:anchor href="jpfSmoke/JpfSmokeController.jpf">JPF Test</netui:anchor><br/>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/jpfSmoke/JpfSmokeController.jpf
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/jpfSmoke/JpfSmokeController.jpf	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+package jpfSmoke;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+public class JpfSmokeController extends PageFlowController
+{
+    @org.apache.beehive.controls.api.bean.Control()
+    private controls.hello.HelloWorldBean _hello;
+
+    @Jpf.Action(forwards={@Jpf.Forward(name="index", path="index.jsp")})
+    public Forward begin()
+    {
+        return new Forward( "index", "helloResult", _hello.getGreeting() );
+    }
+}

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/jpfSmoke/index.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/jpfSmoke/index.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Beehive WebappBuild JPF Smoke Test</title>
+  </head>
+  <body>
+    <h3>Beehive WebappBuild JPF Smoke Test</h3>
+    <br/>
+    HelloWorldBean.sayHello(): <b><netui:label value="{pageInput.helloResult}"/></b>
+    <br/>
+    <br/>
+    <netui:anchor action="begin">Do it again, Dad!</netui:anchor>
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/usecontrol.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/usecontrol.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Beehive WebappBuild / Custom Control Test</title>
+  </head>
+  <body>
+    <b>Beehive WebappBuild / Custom Control Test</b>
+    <br/>
+    <br/>
+<jsp:useBean id="helloBean" scope="request" class="controls.hello.HelloWorldBean"/>
+<br/>
+NetUI label: <netui:label value="{request.helloBean.greeting}"/><br/>
+JSP 2.0 EL: ${requestScope.helloBean.greeting}<br/>
+    <br/>
+    ...End Communication from the HelloWorld Beehive Control...
+  </body>
+</html>

Added: incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/usexmlbean.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/netui/test/webapps/webappBuild-test/webappBuild-test/usexmlbean.jsp	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ taglib uri="beehive-netui-tags-datagrid.tld" prefix="netui-datagrid"%>
+<%
+try
+{
+    java.io.InputStream is = pageContext.getServletContext().getResourceAsStream("WEB-INF/classes/testdata/portfolio.xml");
+    org.openuri.customerPortfolio.PortfolioDocument pd = org.openuri.customerPortfolio.PortfolioDocument.Factory.parse(is);
+    pageContext.setAttribute("stocks", pd.getPortfolio().getStocks().getStockArray());
+}
+catch(Exception e)
+{
+    e.printStackTrace();
+    out.write("exception: " + e.toString());
+}
+%>  
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Beehive WebappBuild / XMLBean Test</title>
+  </head>
+  <body>
+    <b>Beehive WebappBuild / XMLBean Control Test</b>
+    <br/>
+    <br/>
+<netui-datagrid:dataGrid dataSource="{pageContext.stocks}" name="portfolio">
+    <netui-datagrid:columns defaultSortable="true" defaultFilterable="false" sortAction="index.jsp" filterAction="index.jsp">
+        <netui-datagrid:literalColumn headerText="Symbol" value="{container.item.symbol}" sortExpression="symbol"/>
+        <netui-datagrid:literalColumn sortable="false" headerText="Price" value="{container.item.price}">
+            <netui:formatNumber pattern="$#,###,###.00" type="currency"/>
+        </netui-datagrid:literalColumn>
+    </netui-datagrid:columns>
+</netui-datagrid:dataGrid>
+    <br/>
+    <br/>
+  </body>
+</html>

Added: incubator/beehive/test/ant/buildWebapp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/test/ant/buildWebapp.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,156 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/Webapp Build" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+
+    <property name="netui.webappTemplate.dir" location="${os.BEEHIVE_HOME}/netui/ant"/>
+    <property name="tmp.sourcegen.dir" value=".tmpbeansrc"/>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Targets for deploying the NetUI runtime into a web application   -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <!-- params (location webapp.dir, [value include.testrecorder, value testRecorder.config.name]) -->
+    <target name="deploy.netui" description="Deploy the NetUI runtime into a webapp rooted at ${webapp.dir}">
+        <available property="webapp.dir.available" file="${webapp.dir}" type="dir"/>
+        <fail unless="webapp.dir.available" message="Can't find the webapp directory ${webapp.dir}"/>
+
+        <echo>Deploy NetUI to webapp rooted at: ${webapp.dir}</echo>
+
+        <ant dir="${netui.webappTemplate.dir}" antfile="${netui.webappTemplate.dir}/build.xml" 
+             target="deploy.netui.runtime" inheritAll="false">
+            <property name="webapp.dir" value="${webapp.dir}"/>
+        </ant>
+    </target>
+
+    <!-- params (location webapp.dir, [value include.testrecorder]) -->
+    <target name="undeploy.netui" description="Clean the NetUI runtime from a webapp rooted at ${webapp.dir}">
+        <echo>Deploy NetUI to webapp rooted at: ${webapp.dir}</echo>
+
+        <ant dir="${netui.webappTemplate.dir}" antfile="${netui.webappTemplate.dir}/build.xml" 
+             target="undeploy.netui.runtime" inheritAll="false">
+            <property name="webapp.dir" value="${webapp.dir}"/>
+        </ant>
+    </target>
+
+    <!-- ================================================================ -->
+    <!--                                                                  -->
+    <!-- Target for building a test web application                       -->
+    <!--                                                                  -->
+    <!-- The build process includes several steps:                        -->
+    <!-- - build src in WEB-INF/src into WEB-INF/classes                  -->
+    <!-- - build XSDs anywhere in the webapp into WEB-INF/classes         -->
+    <!-- - build all controls in the webapp                               -->
+    <!-- - build all JPFs in the webapp                                   -->
+    <!-- - copy all .properties files in WEB-INF/src to WEB-INF/classes   -->
+    <!-- - copy all .xml files in WEB-INF/src to WEB-INF/classes          -->
+    <!--                                                                  -->
+    <!-- ================================================================ -->
+    <!-- params (location webapp.dir) -->
+    <target name="build.webapp">
+        <available property="webapp.dir.available" file="${webapp.dir}" type="dir"/>
+        <fail unless="webapp.dir.available" message="Can't find the webapp directory ${webapp.dir}"/>
+
+        <!-- this is the classpath to include when building webapp sources -->
+        <path id="webapp.build.classpath">
+            <pathelement location="${webapp.dir}/WEB-INF/classes"/>
+            <fileset dir="${webapp.dir}/WEB-INF/lib">
+                <include name="*.jar"/>
+            </fileset>
+            <fileset dir="${tomcat.dir}/common/lib">
+                <include name="*.jar"/>
+            </fileset>
+        </path>    
+
+        <!-- 
+            this directory needs to get whacked before every build so 
+            that control interface repackagings don't cause stale
+            files to be compiled 
+          -->
+        <delete dir="${webapp.dir}/WEB-INF/${tmp.sourcegen.dir}" includeEmptyDirs="true"/>
+
+        <mkdir dir="${webapp.dir}/WEB-INF/classes"/>
+
+        <!-- XMLBean build -->
+        <taskdef name="xmlbeanbuild" classname="org.apache.xmlbeans.impl.tool.XMLBean" 
+                 classpath="${xbean.jar};${jsr173.jar}"/>
+        <!-- 
+            for schemas to be compiled in the webapp, they must reside in 
+            the WEB-INF/schemas directory.  this is an artifical limitation
+            as it's possible for them to exist anywhere below the webapp root
+            but the XMLBean schema compilation task doesn't seem to handle 
+            .java files correctly during compilation of XSDs (ie by ignoring them).  
+
+            @todo: Need to file an Apache bug for this.
+          -->
+        <xmlbeanbuild classpath="${xbean.jar};${jsr173.jar}" schema="${webapp.dir}/WEB-INF/schemas" 
+                      classgendir="${webapp.dir}/WEB-INF/classes" failonerror="true"/>
+
+        <!-- .java source build -->
+        <echo>========== Complie Java source in WEB-INF/src ==========</echo>
+        <javac srcdir="${webapp.dir}/WEB-INF/src" destdir="${webapp.dir}/WEB-INF/classes" 
+               classpathref="webapp.build.classpath"/>
+
+        <!-- this path is separate for now because it includes the velocity JARs used in the control compiler -->
+        <path id="controls.build.classpath">
+            <path refid="webapp.build.classpath"/>
+            <fileset dir="${beehive.dir}\external\velocity">
+                <include name="velocity*.jar"/>
+            </fileset>
+        </path>
+
+        <echo>netui-compiler.jar: ${netui-compiler.jar}</echo>
+        <echo>controls.jar: ${controls.jar}</echo>
+
+        <taskdef name="apt" classname="org.apache.beehive.controls.runtime.generator.AptTask" 
+                 classpath="${controls.jar};${netui-compiler.jar}" onerror="report"/>
+
+        <!-- Controls build -->
+        <!-- apt generates intermediate files Java files into a tmp directory; WEB-INF/${tmp.sourcegen.dir} here -->
+        <echo>========== Generate and compile controls ==========</echo>
+        <mkdir dir="${webapp.dir}/WEB-INF/${tmp.sourcegen.dir}"/>
+        <apt srcdir="${webapp.dir}" destdir="${webapp.dir}/WEB-INF/classes" gendir="${webapp.dir}/WEB-INF/${tmp.sourcegen.dir}"
+             classpathref="controls.build.classpath" srcExtensions="*.java,*.jcx,*.jcs">
+        </apt>
+
+        <!-- JPF build -->
+        <!-- apt generates intermediate files Java files into a tmp directory; WEB-INF/${tmp.sourcegen.dir} here -->
+        <path id="pageflow.build.classpath">
+            <path refid="webapp.build.classpath"/>
+            <fileset file="${netui-compiler.jar}"/>
+        </path>
+
+        <echo>========== Compile Page Flows ==========</echo>
+        <echo>TODO: when we move to subversion, get rid of the following hack move of Global.app out into the webapp.</echo>
+        <move todir="${webapp.dir}/global" file="${webapp.dir}/WEB-INF/src/global/Global.app" failOnError="false"/>
+        <apt srcdir="${webapp.dir}" destdir="${webapp.dir}/WEB-INF/classes" 
+             gendir="${webapp.dir}/WEB-INF/${tmp.sourcegen.dir}"
+             classpathref="pageflow.build.classpath" srcExtensions="*.app,*.jpf">
+        </apt>
+        <echo>TODO: when we move to subversion, get rid of the following hack move of Global.app back into WEB-INF/src.</echo>
+        <move todir="${webapp.dir}/WEB-INF/src/global" file="${webapp.dir}/global/Global.app" failOnError="false"/>
+
+	<echo>Copy all .properties files</echo>
+        <copy todir="${webapp.dir}/WEB-INF/classes">
+            <fileset dir="${webapp.dir}/WEB-INF/src" includes="**/*.properties"/>
+        </copy>
+
+	<echo>Copy all .xml files</echo>
+        <copy todir="${webapp.dir}/WEB-INF/classes/" failonerror="false">
+            <fileset dir="${webapp.dir}/WEB-INF/src" includes="**/*.xml"/>
+        </copy>
+
+    </target>
+
+    <target name="clean.webapp">
+        <available property="webapp.dir.available" file="${webapp.dir}" type="dir"/>
+        <fail unless="webapp.dir.available" message="Can't find the webapp directory ${webapp.dir}"/>
+
+        <delete dir="${webapp.dir}/WEB-INF/classes" includeEmptyDirs="true"/>
+        <delete dir="${webapp.dir}/WEB-INF/${tmp.sourcegen.dir}" includeEmptyDirs="true"/>
+    </target>
+
+</project>

Added: incubator/beehive/test/ant/runTomcat.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/test/ant/runTomcat.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,121 @@
+<?xml version="1.0"?>
+
+<project name="Beehive/NetUI/RunTomcatWebapps" default="usage" basedir=".">
+
+    <property environment="os"/>
+    <property file="${os.BEEHIVE_HOME}/beehive.properties"/>
+
+    <property name="catalina-ant.jar" location="${tomcat.dir}/server/lib/catalina-ant.jar"/>
+    <property name="catalina.username" value="manager"/>
+    <property name="catalina.password" value="manager"/>
+    <property name="default.tomcat-users.xml" value="${beehive.test.dir}/conf/tomcat-users.xml"/>
+
+    <target name="deploy" description="Deploy a webapp to a running Tomcat server">
+        <fail unless="context.path" message="Can't deploy webapp; the value ${context.path} was unspecified"/>
+        <fail unless="webapp.root" message="Can't deploy webapp; the value ${webapp.name} was unspecified"/>
+
+        <available property="webapp.available" file="${webapp.root}" type="dir"/>
+        <fail unless="webapp.available" message="The webapp at ${webapp.root} does not exist."/>
+
+        <property name="_url" value="file://${webapp.root}"/>
+        <echo>deploy webapp from ${_url} with context path ${context.path}</echo>
+
+        <taskdef name="tomcatdeploy" classname="org.apache.catalina.ant.DeployTask" classpath="${catalina-ant.jar}"/>
+        <tomcatdeploy path="/${context.path}" localWar="${_url}" username="${catalina.username}" password="${catalina.password}"/>
+    </target>
+
+    <target name="undeploy" description="Undeploy a webapp running on a Tomcat server">
+        <fail unless="context.path" message="Can't undeploy webapp; the value ${context.path} was unspecified"/>
+
+        <taskdef name="tomcatundeploy" classname="org.apache.catalina.ant.UndeployTask" classpath="${catalina-ant.jar}"/>
+        <tomcatundeploy path="/${context.path}" username="${catalina.username}" password="${catalina.password}"/>
+    </target>
+
+    <target name="redeploy" description="Redeploy a webapp already running on a Tomcat server">
+        <fail unless="context.path" message="Can't undeploy webapp; the value ${context.path} was unspecified"/>
+
+        <taskdef name="tomcatreload" classname="org.apache.catalina.ant.ReloadTask" classpath="${catalina-ant.jar}"/>
+        <tomcatreload path="/${context.path}" username="${catalina.username}" password="${catalina.password}"/>
+    </target>
+    
+    <target name="start" depends="ensure.tomcat" description="Start a Tomcat instance.">
+
+        <condition property="cmdline.options" value="">
+            <not><isset property="cmdline.options"/></not>
+        </condition>
+
+        <condition property="java.options" value="">
+            <not><isset property="java.options"/></not>
+        </condition>
+
+        <echo>startup.dir: ${tomcat.dir}/bin</echo>
+        <echo>cmdline.options: ${cmdline.options}</echo>
+        <echo>java.options: ${java.options}</echo>
+
+        <echo>Start Tomcat</echo>
+        <exec os="Windows 2000,Windows 2003,Windows XP" dir="${tomcat.dir}\bin" executable="cmd.exe">
+            <env key="JAVA_OPTS" value="${java.options}"/>
+            <arg line="/c startup.bat ${cmdline.options}"/>
+        </exec>
+        <exec os="Linux,SunOS,Solaris" dir="${tomcat.dir}/bin" executable="sh">
+            <env key="JAVA_OPTS" value="${java.options}"/>
+            <arg line="startup.sh ${cmdline.options}"/>
+       </exec>
+    </target>
+
+    <target name="start.with.shmem" depends="ensure.tomcat" description="Start a Tomcat instance.">
+
+        <condition property="cmdline.options" value="">
+            <not><isset property="cmdline.options"/></not>
+        </condition>
+
+        <condition property="java.options" value="">
+            <not><isset property="java.options"/></not>
+        </condition>
+
+        <echo>startup.dir: ${tomcat.dir}/bin</echo>
+        <echo>cmdline.options: ${cmdline.options}</echo>
+        <echo>java.options: ${java.options}</echo>
+
+        <echo>Start Tomcat</echo>
+        <exec os="Windows 2000,Windows 2003,Windows XP" dir="${tomcat.dir}\bin" executable="cmd.exe">
+            <env key="JAVA_OPTS" value="${java.options}"/>
+            <arg line="/c catalina.bat jpda start ${cmdline.options}"/>
+        </exec>
+        <exec os="Linux,SunOS,Solaris" dir="${tomcat.dir}/bin" executable="sh">
+            <env key="JAVA_OPTS" value="${java.options}"/>
+            <arg line="startup.sh jpda start ${cmdline.options}"/>
+       </exec>
+    </target>
+
+    <target name="stop" description="Stop the NetUI server">
+        <echo>Stop Tomcat in: ${tomcat.dir}</echo>
+        <exec os="Windows 2000,Windows 2003,Windows XP" dir="${tomcat.dir}\bin" executable="cmd.exe">
+            <arg line=" /c shutdown"/>
+        </exec>
+
+        <exec os="Linux,SunOS,Solaris" dir="${tomcat.dir}/bin" executable="sh">
+            <arg line="shutdown.sh"/>
+        </exec>
+    </target>
+
+    <target name="reset.config" description="Reset the Tomcat configuration to the 'default' test state">
+        <echo>Deploying a server configuration to Tomcat</echo>
+        <copy file="${default.tomcat-users.xml}" tofile="${tomcat.dir}/conf/tomcat-users.xml"/>
+    </target>
+
+    <target name="usage" description="">
+        <java fork="no" classname="org.apache.tools.ant.Main">
+            <arg line="-projecthelp"/>
+        </java>
+    </target>
+
+    <target name="ensure.tomcat">
+        <echo>Ensuring Tomcat Present in directory: ${tomcat.dir}</echo>
+        <available file="${tomcat.dir}" type="dir" property="tomcat.present"/>
+        <fail unless="tomcat.present" message="Could not find Tomcat installed in ${tomcat.dir}"/>
+
+        <antcall target="reset.config"/>
+    </target>
+
+</project>

Added: incubator/beehive/test/conf/tomcat-users.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/test/conf/tomcat-users.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='utf-8'?>
+<tomcat-users>
+  <role rolename="tomcat"/>
+  <role rolename="role1"/>
+  <role rolename="manager"/>
+  <user username="tomcat" password="tomcat" roles="tomcat"/>
+  <user username="both" password="tomcat" roles="tomcat,role1"/>
+  <user username="role1" password="tomcat" roles="role1"/>
+  <user username="manager" password="manager" roles="manager"/>
+</tomcat-users>

Added: incubator/beehive/tools/peanut/build.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/build.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,55 @@
+<project name="beehive-tools" default="usage" basedir=".">
+
+
+  <property environment="env"/>
+  
+  <!-- Important Directories -->
+  <property name="src.dir" value="${basedir}/src"/>
+  <property name="build.dir" value="${basedir}/build"/>
+  <property name="peanut.jar" value="peanut.jar"/>
+  <!-- TODO: fix this absolute pathname -->
+  <property name="junit.jar" location="junit.jar"/>
+
+  <path id="peanut.build.classpath">
+     <pathelement location="${junit.jar}"/>
+  </path>
+
+
+
+  <target name="usage">
+    <echo>
+rebuild                   rebuilds peanut.jar
+clean_peanut              deletes peanut build artifacts
+build_peanut              builds peanut.jar
+    </echo>
+  </target>
+
+  <target name="rebuild" depends="rebuild_peanut"/>
+  
+  <target name="rebuild_peanut"
+       depends="clean_peanut,build_peanut"/>
+
+  <!-- ========================= -->
+  <!-- builds peanut and packages it into a jar -->
+  <!-- ========================= -->
+  <target name="build_peanut">
+    <mkdir dir="${build.dir}"/>
+    <javac srcdir="${src.dir}"
+            destdir="${build.dir}"
+            failonerror="true"
+            verbose="false"
+            deprecation="true"
+            classpathref="peanut.build.classpath"
+            />
+     <jar basedir="${build.dir}" destfile="${peanut.jar}"/>
+   </target>
+   
+   <!-- ========================= -->
+   <!-- Cleans build artifacts -->
+   <!-- ========================= -->
+   <target name="clean_peanut">
+     <delete dir="${build.dir}"/>
+     <delete file="${peanut.jar}"/>
+   </target>
+
+</project>
\ No newline at end of file

Added: incubator/beehive/tools/peanut/junit.jar
==============================================================================
Binary file. No diff available.

Added: incubator/beehive/tools/peanut/peanut-root.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/peanut-root.xml	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,33 @@
+<project default="run">
+
+  <property environment="ENV"/>
+  
+    <!-- TODO: fix absolute pathname -->
+    <property name="peanut.jar" value="D:/p4/dev/sandbox/beehive-temp/tools/peanut/peanut.jar"/>
+    
+    <path id="peanut.run.classpath">
+       <pathelement location="${peanut.jar}"/>
+    </path>
+    
+    <taskdef name="test-suite-call"
+        classname="org.apache.beehive.peanut.TestSuiteCallTask"/>
+    <taskdef name="test-suite"
+        classname="org.apache.beehive.peanut.TestSuiteTask"/>
+    <taskdef name="test"
+        classname="org.apache.beehive.peanut.TestTask"/>
+    <taskdef name="test-metadata"
+        classname="org.apache.beehive.peanut.TestMetadataTask"/>
+    <taskdef name="junit"
+        classname="org.apache.beehive.peanut.junit.JUnitExecTask"/>
+        
+        
+        
+  <target name="run">
+    <echo message="test-suite: ${test-suite}"/>
+    <echo message="test.home: ${test.home}"/>
+    <echo message="peanut.home: ${peanut.home}"/>
+    <test-suite-call testfile="${test-suite}" toplevel="true"/>
+        
+  </target>
+
+</project>
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/Debug.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/Debug.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,23 @@
+package org.apache.beehive.peanut;
+
+
+public class Debug{
+  
+  public static int MSG_DEBUG = 0;
+  public static int MSG_INFORM = 1;
+  public static int MSG_WARNING = 2;
+  public static int MSG_ERROR = 3;
+  
+  public static int VISIBLE_LEVEL = MSG_INFORM;
+  
+  
+  public static void log( String s , int level)
+  {
+    if (level >= VISIBLE_LEVEL)
+      System.out.println(s);
+  }
+  public static void log( String s )
+  {
+    log(s, MSG_DEBUG);
+  }
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/NestedRuntimeException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/NestedRuntimeException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,87 @@
+package org.apache.beehive.peanut;
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+public class NestedRuntimeException
+  extends RuntimeException
+{
+  private Throwable th = null; //Could be null
+
+  public NestedRuntimeException()
+  {
+    this("no message");
+  }
+  
+  public NestedRuntimeException(String inMessage)
+  {
+    super(inMessage);
+  }
+
+  public NestedRuntimeException(Throwable in)
+  {
+    super();
+    th = in;
+  }
+
+  public NestedRuntimeException(Throwable inTh, String inMessage)
+  {
+    super(inMessage);
+    th = inTh;
+  }
+
+  public Throwable getNestedThrowable()
+  {
+    return th;
+  }
+
+  public String getMessage()
+  {
+    StringBuffer sb = new StringBuffer();
+    String message = super.getMessage();
+    if (message != null)
+      sb.append(message);
+    if(th != null && th.getMessage() != null) 
+    {
+      if(message != null)
+        sb.append(":  ");
+      sb.append(th.getMessage());
+    }
+    return sb.toString();
+  }
+
+  public void printStackTrace()
+  {
+    super.printStackTrace();
+    if(th != null) 
+    {
+      System.err.print(getHeader());
+      th.printStackTrace();
+    }
+  }
+  
+  public void printStackTrace(PrintWriter pw)
+  {
+    super.printStackTrace(pw);
+    if(th != null) 
+    {
+      pw.print(getHeader());
+      th.printStackTrace(pw);
+    }
+  }
+
+  public void printStackTrace(PrintStream ps)
+  {
+    super.printStackTrace(ps);
+    if(th != null) 
+    {
+      ps.print(getHeader());
+      th.printStackTrace(ps);
+    }
+  }
+
+  private String getHeader()
+  {
+    return "\n\nNested stacktrace follows:\n\n";
+  }
+}

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/PeanutTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/PeanutTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,150 @@
+package org.apache.beehive.peanut;
+
+import org.apache.tools.ant.taskdefs.Java;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.BuildException;
+
+import org.apache.beehive.peanut.result.logger.Logger;
+
+import java.io.File;
+import java.util.Map;
+import java.util.HashMap;
+import java.io.IOException;
+
+
+public class PeanutTask extends Java
+{
+  private Path runClassPath = null;
+  private String antClassName = "org.apache.tools.ant.Main";
+  private String TOP_LEVEL_BUILDFILE = "peanut-root.xml";
+  private String peanutHome = null;
+  private String testFile = null;
+  private Map attributeProps = new HashMap(); //temporary storage
+  private File testHome = new File(".");
+  
+  
+  
+  /*
+   * Sets the home directory of peanut
+   */
+  public void setPeanutHome( String f )
+  {
+    Debug.log("Entered PeanutTask.setPeanutHome(): " + f, Debug.MSG_DEBUG);
+    peanutHome = f;
+  }
+  
+  public void setTestFile( File f ) throws BuildException
+  {
+    if (f != null)
+    {
+      Debug.log("Entered PeanutTask.setTestFile(): " + f, Debug.MSG_DEBUG);
+      try{
+        testFile = f.getCanonicalPath();
+        Debug.log("canonicalPath: " + testFile, Debug.MSG_DEBUG);
+      }
+      catch (IOException ioe)
+      {
+        throw new BuildException("Error while processing the testfile");
+      }
+    }
+  }
+    
+    
+    
+  /**
+   *
+   * execute() method
+   *
+   */
+  public void execute()
+  {
+    
+    Debug.log("Entered PeanutTask.execute()");
+    if (peanutHome==null)
+      throw new BuildException("peanutHome attribute must be specified");
+    
+    try
+    {
+      addAntProperty(
+        "peanut.home",
+        new File(peanutHome).getCanonicalPath());
+      //set it locally for the AntProperties to work
+    }
+    catch (IOException ex)
+    {
+      throw new BuildException(
+        "Had problem resolving peanut.home property.",
+        ex,
+        getLocation());
+    }
+    
+    getProject().setProperty("peanut.home", peanutHome);
+    
+    
+    
+    String argString =
+      "run -emacs -f "
+      + peanutHome
+      + File.separator
+      + TOP_LEVEL_BUILDFILE;
+    addArguments(argString);
+    
+    
+    super.setClassname(antClassName);
+    
+    if (testFile != null)
+    addAntProperty("test-suite", testFile);
+    try{
+      addAntProperty("test.home", testHome.getCanonicalFile().getCanonicalPath());
+    }
+    catch (IOException ioe)
+    {
+      throw new BuildException("Had problem resolving test.home");
+    }
+    //super.setFork(new Boolean(true));
+    super.execute();
+  }
+  
+  
+  public void init()
+  {
+    super.init();
+    Debug.log("Entered PeanutTask.init()");
+  }
+  
+  
+  
+  private void addArgument(String value)
+  {
+    Commandline.Argument arg = createArg();
+    arg.setValue(value);
+  }
+
+  private void addArguments(String s)
+  {
+    Commandline.Argument arg = createArg();
+    arg.setLine(s);
+  }
+  
+  private void addAntPropertyWithPrecedence(String key, String value)
+  {
+    attributeProps.put(key, value);
+  }
+
+  /**
+   * This adds a name value pair as a -Dname=value argument on the
+   * Java command line.  Note that this goes <b>after</b> the
+   * main class, and is <b>not</b> a System property.
+   * 
+   * This is primarily used here to pass in Ant properties
+   *
+   *@param  name    The name of the new Ant property
+   *@param  value  The value of the new Ant property
+   */
+  private void addAntProperty(String key, String value)
+  {
+    addArgument("-D" + key + "=" + value);
+  }
+  
+}

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestAbortedException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestAbortedException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,10 @@
+package org.apache.beehive.peanut;
+
+
+
+public class TestAbortedException extends TestException {
+  public TestAbortedException() { super(); }
+  public TestAbortedException(String msg) { super(msg); }
+  public TestAbortedException(Throwable th) { super(th); }
+  public TestAbortedException(String msg, Throwable th) { super(msg, th); }
+}

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,16 @@
+package org.apache.beehive.peanut;
+
+import java.io.Serializable;
+
+import org.apache.beehive.peanut.NestedRuntimeException;
+
+
+public class TestException 
+  extends NestedRuntimeException 
+  implements Serializable {
+  public TestException() { }
+  public TestException(String msg) { super(msg); }
+  public TestException(Throwable th) { super(th); }
+  public TestException(String msg, Throwable th) { super(th, msg); }
+}
+

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestMetadataTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestMetadataTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,298 @@
+package org.apache.beehive.peanut;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import org.apache.tools.ant.Task;
+
+//import org.apache.regexp.RE;
+import org.apache.tools.ant.BuildException;
+
+import org.apache.beehive.peanut.util.CaseInsensitiveStringKey;
+import org.apache.beehive.peanut.util.PeanutUtils;
+
+/**
+ * All the metadata we care about. Ideally would be more easily extensible.
+ */
+public class TestMetadataTask extends Task
+{
+  private static final String DESCRIPTION = "description";
+  private static final String USAGE = "usage";
+  private static final String CR_LIST = "crlist";
+  private static final String TEST_LEVEL = "testlevel";
+  private static final String KNOWN_FAILURE = "knownFailure";
+  private static final String SSL_RESTRICTION = "ssl";
+  private static final String OS_RESTRICTION = "os";
+  private static final String CLIENT_TYPES = "client-types";
+  private static final String SECURITY_TYPE = "security-type";
+  private static final String JAVA_VERSION = "javaVersion";
+
+
+
+  
+  private String description = null;
+  private String status = "active";
+  private Collection frequencies = null;
+  private Collection miscInfo = null;
+
+  private Collection printSet = null;
+
+  private boolean hasRun = false;
+
+  // static helper methods
+  // ==========================================
+/*
+  private static boolean matchesSystemProperty(
+    String sysPropName,
+    String[] toMatch)
+  {
+    return TestMetadataTask.matchesSystemProperty(
+      sysPropName,
+      toMatch,
+      true,
+      false);
+  }
+
+  // package 
+  static boolean matchesSystemProperty(
+    String sysPropName,
+    String[] toMatch,
+    boolean useRegex)
+  {
+    return TestMetadataTask.matchesSystemProperty(
+      sysPropName,
+      toMatch,
+      useRegex,
+      false);
+  }
+
+  private static boolean matchesSystemProperty(
+    String sysPropName,
+    String[] toMatch,
+    boolean useRegex,
+    boolean isExcluded)
+  {
+    String valueToMatch = System.getProperty(sysPropName);
+    if (valueToMatch == null)
+      return false; // VALIDATION ERROR?
+    Collection matches = null;
+    if (useRegex)
+    {
+      // force regular expression, if it is not already one
+      String[] regexps = new String[toMatch.length];
+      for (int i = 0; i < toMatch.length; i++)
+      {
+        regexps[i] = turnIntoRegex(toMatch[i]);
+      }
+      matches =
+        GeneralUtil.getRegexMatches(
+          regexps,
+          new String[] { valueToMatch },
+          new NoopCollection(),
+          new NoopCollection(),
+          RE.MATCH_CASEINDEPENDENT);
+    }
+    else
+    {
+      for (int i = 0; i < toMatch.length; i++)
+      {
+        if (toMatch[i].equals(valueToMatch))
+          matches.add(toMatch[i]);
+      }
+    }
+
+    if (isExcluded)
+      return matches.isEmpty();
+    else
+      return !matches.isEmpty();
+  }
+*/
+  // simplistic, but should suffice
+  private static String turnIntoRegex(String s)
+  {
+    StringBuffer rtn = new StringBuffer(s);
+    if (!s.startsWith(".*"))
+      rtn.insert(0, ".*");
+    if (!s.endsWith(".*"))
+      rtn.append(".*");
+    return rtn.toString();
+  }
+
+  // metadata
+  // ==========================================
+
+  public void addConfiguredMisc(TextElement inMisc)
+  {
+    if (inMisc.getText() != null && inMisc.getText().trim().length() > 0)
+    {
+      Debug.log("TEST-META-DATA: adding misc element '" + inMisc.getText() + "'");
+      miscInfo = new HashSet();
+      PeanutUtils.parseStringToStrings(inMisc.getText().trim(), " ", miscInfo);
+    }
+  }
+
+  public void addConfiguredDescription(TextElement inDescription)
+  {
+    if (inDescription.getText() != null && inDescription.getText().trim().length() > 0)
+    {
+      Debug.log("TEST-META-DATA: adding description element '" + inDescription.getText() + "'");
+      description = inDescription.getText().trim();
+    }
+  }
+
+  public void addConfiguredFreq(TextElement inFrequencies)
+  {
+    if (inFrequencies.getText() != null
+      && inFrequencies.getText().trim().length() > 0)
+    {
+      Debug.log("TEST-META-DATA: adding frequencies element '" + inFrequencies.getText() + "'");
+      frequencies = new HashSet();
+      PeanutUtils.parseStringToStrings(
+        inFrequencies.getText().trim(),
+        " ",
+        frequencies);
+    }
+  }
+
+  public void addConfiguredStatus(TextElement inStatus)
+  {
+    if (inStatus.getText() != null && inStatus.getText().trim().length() > 0)
+    {
+      Debug.log("TEST-META-DATA: adding status element '" + inStatus.getText() + "'");
+      status = inStatus.getText().trim();
+    }
+  }
+  
+  public void addConfiguredOwner(TextElement owner)
+  {
+    Debug.log("WARNING: test-metadata task does not support the <owner> element.", Debug.MSG_WARNING);
+  }
+  public void addConfiguredDomain(TextElement domain)
+  {
+    Debug.log("WARNING: test-metadata task does not support the <domain> element.", Debug.MSG_WARNING);
+  }
+  public void addConfiguredOs(TextElement domain)
+  {
+    Debug.log("WARNING: test-metadata task does not support the <os> element.", Debug.MSG_WARNING);
+  }
+  public void addConfiguredServerMode(TextElement domain)
+  {
+    Debug.log("WARNING: test-metadata task does not support the <serverMode> element.", Debug.MSG_WARNING);
+  }
+  public void addConfiguredConversation(TextElement domain)
+  {
+    Debug.log("WARNING: test-metadata task does not support the <conversation> element.", Debug.MSG_WARNING);
+  }
+  public void addConfiguredDb(TextElement domain)
+  {
+    Debug.log("WARNING: test-metadata task does not support the <db> element.", Debug.MSG_WARNING);
+  }
+
+
+  //provide accessor for the filter to use
+
+
+  public Collection getFrequencies()
+  {
+    return frequencies;
+  }
+
+  public String getStatus()
+  {
+    return status;
+  }
+
+  public Collection getMiscInfo()
+  {
+  	return miscInfo;
+  }
+
+/*  protected boolean initialize()
+  {
+    boolean rtn = super.initialize();
+    try
+    {
+      if (!hasRun) //idempotent
+      {
+        hasRun = true;
+        //All this will do is take what nested objects we have, etc., 
+        //and log them to the console logger (System.out.println() for now),
+        //if a certain flag is set
+        setToPrint(); //go and get the properties, set the variables
+
+        if (printSet != null)
+        {
+          log("Test metadata:  " + "\n\n");
+          if (printSet.contains(DESCRIPTION) && description != null)
+            log(DESCRIPTION + "=" + description + "\n\n");
+          if (printSet.contains(USAGE) && usage != null)
+            log(USAGE + "=" + usage + "\n\n");
+          if (printSet.contains(CR_LIST) && crList != null)
+            log(CR_LIST + "=" + crList + "\n\n");
+          if (printSet.contains(KNOWN_FAILURE))
+            log(KNOWN_FAILURE + "=" + knownFailure);
+          if (printSet.contains(SSL_RESTRICTION))
+            log(SSL_RESTRICTION + "=" + sslRestriction + "\n\n");
+          if (printSet.contains(OS_RESTRICTION))
+            log(OS_RESTRICTION + "=" + osRestriction + "\n\n");
+          if (printSet.contains(CLIENT_TYPES) && clientTypes != null)
+            log(CLIENT_TYPES + "=" + clientTypes + "\n\n");
+          if (printSet.contains(TEST_LEVEL) && testLevels != null)
+            log(TEST_LEVEL + "=" + testLevels + "\n\n");
+          if (printSet.contains(SECURITY_TYPE) && securityType != null)
+            log(SECURITY_TYPE + "=" + securityType + "\n\n");
+        }
+      }
+    }
+    catch (NestedException ne)
+    {
+      throw new BuildException(ne.getMessage(), ne, getLocation());
+    }
+    return rtn;
+  }*/
+/*
+  private void setToPrint() throws AntProperties.AntPropertiesException
+  {
+    printSet = AntProperties.getTestInfo();
+  }
+*/
+  public static class TextElement
+  {
+    private String text;
+
+    public void addText(String inText)
+    {
+      text = inText;
+    }
+
+    public String getText()
+    {
+      return text;
+    }
+  }
+
+  public static class BooleanElement
+  {
+    private Boolean value = null;
+
+    public void setValue(String in)
+    {
+      value = new Boolean(PeanutUtils.parseBoolean(in.trim()));
+    }
+
+    public Boolean getValue()
+    {
+      return value;
+    }
+  }
+
+  
+  
+  
+  public void execute()
+  {
+    Debug.log("TEST-META-DATA: execute()"); 
+  }
+}

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestSuiteCallTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestSuiteCallTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,104 @@
+package org.apache.beehive.peanut;
+
+import java.io.File;
+
+import org.apache.beehive.peanut.util.AntUtils;
+import org.apache.beehive.peanut.util.PeanutUtils;
+import org.apache.beehive.peanut.result.logger.Logger;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.TaskContainer;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.Ant;
+import org.apache.tools.ant.types.CommandlineJava;
+import org.apache.tools.ant.types.Path;
+
+public class TestSuiteCallTask extends Task// implements TaskContainer
+{
+  //private String BAD_CHILD_TASK = "test-suite-call task only supports the nested task \"classpath\"";
+  private File testFile;
+  private Ant antTask = new Ant();
+  private boolean firstCall = true;
+  private boolean toplevel = false;
+  private File dir = null;
+  //private Task nestedClasspath = null;
+  //private CommandlineJava cmdl = new CommandlineJava();
+  
+  public void execute() throws BuildException
+  {
+    initAntTask();
+    initDirs();
+    
+    Debug.log("TEST-SUITE-CALL: Calling test file: " + testFile, Debug.MSG_DEBUG);
+    
+    
+    Logger l = Logger.getInstance("TestSuiteCallTask.execute()");
+    
+    antTask.perform();
+    if (toplevel)
+      l.printSummary();
+  }
+  
+  
+  /*
+   * Public setters for ant attributes
+   */
+  public void setTestFile(File s)
+  {
+    testFile = s;
+  }
+  
+  public void setDir(File f)
+  {
+    dir = f;
+  }
+  public void setToplevel( Boolean b )
+  {
+    toplevel = b.booleanValue();
+  }
+  
+  
+  private void initAntTask()
+  {
+    if (firstCall)
+    {
+      AntUtils.cloneTaskData(this, antTask);
+      antTask.setTaskName("ant");
+      firstCall = false;
+      antTask.setAntfile(testFile.toString());
+    }
+  }
+  
+  private void initDirs()
+  {
+    if (dir == null)
+    {
+      dir = new File(PeanutUtils.getDirectoryPath(testFile.toString()));
+    }
+    Debug.log("Setting ant dir to: " + dir.toString());
+    antTask.setDir(dir);
+  }
+  
+  
+  
+  
+  /*
+  public void addTask(Task nestedTask) throws BuildException
+  {
+    Debug.log("TEST-SUITE-CALL: Adding task '" + nestedTask.getTaskName() + "' to task '" + getTaskName() + "' classname: " + nestedTask.getClass().getName());
+    if (!nestedTask.getTaskName().equals("classpath"))
+      throw new BuildException(BAD_CHILD_TASK);
+    nestedClasspath = nestedTask;
+  }*/
+  
+  
+    /**
+     * Adds a path to the classpath.
+     *
+     * @return created classpath
+     *
+    public Path createClasspath() {
+        return cmdl.createClasspath(getProject()).createPath();
+    }
+     */
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestSuiteTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestSuiteTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,65 @@
+package org.apache.beehive.peanut;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.TaskContainer;
+import org.apache.tools.ant.BuildException;
+
+import org.apache.beehive.peanut.result.logger.Logger;
+
+import java.util.Vector;
+import java.util.Enumeration;
+
+
+
+public class TestSuiteTask extends Task implements TaskContainer
+{
+  private String testUnit = null;
+  
+  public void setTestUnit(String s)
+  {
+    // Need to validate s
+    testUnit = s;
+  }
+  
+  
+  
+
+  /** Optional Vector holding the nested tasks */
+  private Vector nestedTasks = new Vector();
+
+  /**
+   * Add a nested task to TestSuiteTask.
+   * <p>
+   * @param nestedTask  Nested task to execute TestSuiteTask
+   * <p>
+   */
+  public void addTask(Task nestedTask)
+  {
+    nestedTasks.addElement(nestedTask);
+  }
+  
+  public void addTestSuiteCall(Task t)
+  {
+    addTask(t);
+  }
+  
+  
+  /**
+   * Execute all nestedTasks.
+   *
+   * @throws BuildException if one of the nested tasks fails.
+   */
+  public void execute() throws BuildException
+  {
+    for (Enumeration e = nestedTasks.elements(); e.hasMoreElements();) {
+      Task nestedTask = (Task) e.nextElement();
+      
+      Logger l = Logger.getInstance("TestSuiteTask.execute()");
+      
+      Debug.log("TEST-SUITE: performing task '" + nestedTask.getTaskName() + "' on testUnit: " + testUnit);
+      
+      nestedTask.perform();
+    }
+  }
+
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/TestTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,109 @@
+package org.apache.beehive.peanut;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.TaskContainer;
+import org.apache.tools.ant.BuildException;
+
+import java.util.Vector;
+
+public class TestTask extends Task implements TaskContainer
+{
+  private String testName;
+  private Integer timeoutSeconds;
+  /*
+   * Vector that holds my nested tasks
+   */
+  private Vector nestedTasks = new Vector();
+  
+  
+  
+  /*
+   * Setters for ant properties
+   */
+  public void setName(String s)
+  {
+    testName = s;
+  }
+  public void setTimeoutSeconds(Integer i)
+  {
+    timeoutSeconds = i;
+  }
+  
+  
+  
+  
+
+
+  public void addTask(Task nestedTask)
+  {
+    //Debug.log("TEST: Adding task '" + nestedTask.getTaskName() + "' to task '" + getTaskName() + "' classname: " + nestedTask.getClass().getName());
+    nestedTasks.addElement(nestedTask);
+  }
+  
+  /*
+  public void addTask(TestMetadataTask nestedTask)
+  {
+    Debug.log("TEST: Adding metadatatask '" + nestedTask.getTaskName() + "' to task '" + getTaskName() + "'");
+    nestedTasks.addElement(nestedTask);
+  }*/
+  
+
+  
+  public void addTestMetadata(TestMetadataTask t)
+  {
+    
+    //Debug.log("addTestMetadata()!");
+    addTask(t);
+  }
+  
+  
+  
+  
+  
+  
+  public void execute() throws BuildException
+  {
+    
+    //Debug.log("\nTEST: executing test '" + testName + "'", Debug.MSG_INFORM);
+    
+    if (nestedTasks.size() == 2)
+    {
+      if ( ((Task)nestedTasks.get(0)).getTaskName().equals("test-metadata")
+         &&((Task)nestedTasks.get(1)).getTaskName().equals("junit")
+         )
+      {
+        
+        
+        Debug.log("TEST: running test-metadata");
+        Task t = (Task)nestedTasks.get(0);
+        
+        try{
+          t.perform();
+        }
+        catch(BuildException be)
+        {
+          System.out.print(be.toString());
+          be.printStackTrace();
+        }
+        
+        Task junit = (Task)nestedTasks.get(1);
+        try{
+          junit.perform(); 
+        }
+        catch(BuildException  be)
+        {
+          System.out.println("Error while running test.");
+          be.printStackTrace();
+        }
+        
+        
+        
+      }else{
+        throw new BuildException("The subelements of <test/> must be <test-metadata/> and <junit/>, in that order.");
+      }
+    }else{
+      throw new BuildException("<test/> element must have two sub elements: a <test-metadata/> and a <junit/> sub element.");
+    }
+    
+  }
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/JUnitExecTask.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/JUnitExecTask.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,191 @@
+package org.apache.beehive.peanut.junit;
+
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import org.apache.beehive.peanut.result.logger.Logger;
+import org.apache.beehive.peanut.util.PeanutUtils;
+import org.apache.beehive.peanut.result.logger.ResultLogger;
+
+public class JUnitExecTask extends Task
+{
+  private static String ERROR_MESSAGE = "Could not instantiate junit test ",
+    DELIMITER = ",",
+    TEST_METHOD_PREFIX = "test",
+    SUITE_METHOD_NAME = "suite";
+
+    
+    
+  /* Name of the JUnit Test class */
+  private String testClassName = null;
+  
+  /* List of method names (possibly set by ant) */
+  private String methodNamesAttribute = null;
+
+  // what we get after splitting up the methodNamesAttribute
+  private Collection parsedMethodNames = null;
+  
+  /*
+   * Public setters for ant
+   */
+  public void setTestclass( String s )
+  {
+    testClassName = s;
+  }
+  public void setMethodNames( String s )
+  {
+    methodNamesAttribute = s;
+  }
+  
+  
+  /*
+   * Public getters
+   */
+  public String getTestClassName()
+  {
+    return testClassName;
+  }
+  public String getMethodNames()
+  {
+    return methodNamesAttribute;
+  }
+  
+  private boolean methodNamesSet()
+  {
+    return methodNamesAttribute != null;
+  }
+  
+  
+  
+  
+  private JUnitRunner getLocalJUnitRunner()
+  {
+    return new JUnitRunner(
+      getTestClassName(),
+      parseMethodNames(),
+      new ResultLogger()
+      );
+  }
+  
+  
+  
+  public Collection getAllSubtestNames()
+  {
+    // if methodnames attribute is set, just return that
+    if (methodNamesSet())
+      return parseMethodNames();
+
+    // if we don't have a "public static Test suite()" method
+    // junit will give us all public void methods that start with test
+    // just use reflection to figure out the names
+    try
+    {
+      Class testClass =
+        Class.forName(
+          getTestClassName(),
+          true,
+          Thread.currentThread().getContextClassLoader());
+      if (!hasStaticTestMethod(testClass))
+      {
+        return getTestMethodNames(testClass);
+      }
+    }
+    catch (ClassNotFoundException ex)
+    {
+      // ignore, this is being handled by validate()	
+    }
+
+    // else get names from JunitRunner (need to invoke suite() method)
+    JUnitRunner runner = null;
+    try
+    {
+      runner = getLocalJUnitRunner();
+    }
+    catch (Throwable th)
+    {
+      // ignore, if it happens, will be handled by validate
+    }
+    if (runner == null || runner.hasProblem())
+      return null;
+
+    return runner.getSubtestNames();
+  }
+  
+  
+  private Collection parseMethodNames()
+  {
+    if (parsedMethodNames == null)
+    {
+      if (methodNamesSet())
+      {
+        parsedMethodNames = new ArrayList();
+        PeanutUtils.parseStringToStrings(
+          methodNamesAttribute,
+          DELIMITER,
+          parsedMethodNames);
+      }
+    }
+    return parsedMethodNames;
+  }
+
+  
+  /**
+   * Returns a List of all the test method names in class.
+   * (the public void testXXX methods)
+   */
+  private Collection getTestMethodNames(Class inClass)
+  {
+    try
+    {
+      Method[] methods = inClass.getMethods();
+      Collection rtn = new ArrayList(methods.length);
+      for (int i = 0; i < methods.length; i++)
+      {
+        Method m = methods[i];
+        if ((m.getName().indexOf(TEST_METHOD_PREFIX) == 0)
+          && (m.getParameterTypes().length == 0)
+          && (m.getReturnType() == void.class))
+        {
+          rtn.add(methods[i].getName());
+        }
+      }
+      return rtn;
+    }
+    catch (Exception ex)
+    {
+      return null;
+    }
+  }
+
+  private boolean hasStaticTestMethod(Class inClass)
+  {
+    try
+    {
+      Method m = inClass.getMethod(SUITE_METHOD_NAME, null);
+      return (Modifier.isStatic(m.getModifiers()));
+    }
+    catch (NoSuchMethodException ex)
+    {
+      return false;
+    }
+  }
+  
+  
+  
+  public void execute()
+  {
+    try{
+      getLocalJUnitRunner().run();
+    }
+    catch(NestedJUnitInitializationRuntimeException e)
+    {
+      Logger.getInstance().logProblem();
+      e.printStackTrace();
+    }
+  }
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/JUnitRunner.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/JUnitRunner.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,338 @@
+package org.apache.beehive.peanut.junit;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestResult;
+import junit.framework.TestSuite;
+import junit.runner.BaseTestRunner;
+import junit.runner.TestRunListener;
+
+import org.apache.beehive.peanut.result.logger.ResultLogger;
+import org.apache.beehive.peanut.TestAbortedException;
+import org.apache.beehive.peanut.Debug;
+import org.apache.beehive.peanut.util.PeanutUtils;
+
+public class JUnitRunner extends BaseTestRunner
+{
+  // These error messages should move into coconut-error-messages.xml
+  private static final String ASSIGNABLE_FROM_ERROR_MESSAGE =
+    "Test must inherit from junit.framework.TestCase or TestSuite if you use "
+      + "the optional method name argument";
+  private static final String NO_CONS_ERROR_MESSAGE =
+    "Test class must override String argument constructor from TestCase";
+
+  // if methodnames attr is set, we make sure those methods exist
+  // enabled by default
+  private boolean validateTestMethodNames = true;
+
+  // if an exception is thrown out of the junit test, 
+  // and its not a junit assertion failure, then we
+  // log an ABORT for it, by default
+  private boolean treatAllBadResultsAsFailure = false;
+
+  private String runFailedMessage = null;
+
+  private Test test = null;
+  private ResultLogger logger = null;
+  private Throwable filterThrowable = null;
+
+  private Collection failedTests = null;
+
+  public JUnitRunner(
+    String inClassName,
+    Collection inMethods,
+    ResultLogger inLogger)
+  {
+    this(inClassName, inMethods, inLogger, true, false);
+  }
+  
+  
+  public JUnitRunner(
+    String inClassName,
+    Collection inMethods,
+    ResultLogger inLogger,
+    boolean inValidateTestMethodNames,
+    boolean inTreatAllBadResultsAsFailure)
+  {
+    validateTestMethodNames = inValidateTestMethodNames;
+    treatAllBadResultsAsFailure = inTreatAllBadResultsAsFailure;
+    logger = inLogger;
+    test = getJunitTest(inClassName, inMethods);
+    Debug.log("JUnitRunner() className: '" + inClassName + "'");
+  }
+
+  
+  /*
+   * Main method that runs a junit test.
+   */
+  public void run() throws NestedJUnitInitializationRuntimeException
+  {
+    TestResult jTestResult = new TestResult();
+    jTestResult.addListener(this);
+    filterThrowable = new Exception();
+    Debug.log("runFailedMessage: " + PeanutUtils.deNull(runFailedMessage), Debug.MSG_DEBUG);
+    if (runFailedMessage != null)
+      throw new NestedJUnitInitializationRuntimeException(runFailedMessage);
+    if (test==null)
+      Debug.log("WARNING: test object is null.  We are about to blow up.", Debug.MSG_WARNING);
+    test.run(jTestResult);
+  }
+
+  
+  
+  // Callback implementations, work with junit 3.8.1
+  // ===================================================
+
+  public void testStarted(String testName)
+  {
+    logger.begin(getTestCaseName(testName));
+
+    // This is a temporary hack for knex testing
+    // A nice solution would be a published 
+    // callback interface for test events
+    // thanks 
+    System.setProperty("jwsv9", "false");
+  }
+
+  public void testEnded(String testName)
+  {
+    String testCaseName = getTestCaseName(testName);
+    // if this test did not fail, log an explicit success
+    if (!loggedFailureFor(testCaseName))
+    {
+      // flush the stream so we get everything that the test has written out
+      System.out.flush();
+      logger.success("", getTestCaseName(testName));
+    }
+  }
+
+  public void testFailed(int status, Test test, Throwable t)
+  {
+    String testCaseName = getTestCaseName(test);
+    storeFailedTestCaseName(testCaseName);
+    // flush the stream so we get everything that the test has written out
+    System.out.flush();
+    if (TestAbortedException.class.isAssignableFrom(t.getClass())
+      || (!treatAllBadResultsAsFailure && status == TestRunListener.STATUS_ERROR))
+    {
+      // we do not pass a summary message
+      logger.abort("", testCaseName, t, filterThrowable);
+    }
+    else
+    {
+      // we do not pass a summary message
+      logger.failure("", testCaseName, t, filterThrowable);
+    }
+  }
+
+  protected void runFailed(String message)
+  {
+    runFailedMessage = message;
+  }
+
+  // End junit 3.8.1 callback impls.
+  // ===================================================
+  // Callback implementations, additions for junt 3.7
+  // ===================================================
+
+  public void addError(Test test, Throwable th)
+  {
+    testFailed(TestRunListener.STATUS_ERROR, test, th);
+  }
+
+  public void addFailure(Test test, AssertionFailedError err)
+  {
+    testFailed(TestRunListener.STATUS_FAILURE, test, err);
+  }
+
+  public void endTest(Test test)
+  {
+    testEnded(test.toString());
+  }
+
+  public void startTest(Test test)
+  {
+    testStarted(test.toString());
+  }
+
+  // End junit 3.7 impls.
+  // ===================================================
+  public Collection getSubtestNames()
+  {
+    return getSubtestNames(test);
+  }
+
+  private Collection getSubtestNames(Test inTest)
+  {
+    Collection rtn = new ArrayList();
+    if (TestSuite.class.isAssignableFrom(inTest.getClass()))
+    {
+      Enumeration e = ((TestSuite)inTest).tests();
+      while (e.hasMoreElements())
+      {
+        //recusion. either this is a suite, or a test case.
+        rtn.addAll(getSubtestNames((Test)e.nextElement()));
+      }
+    }
+    else if (TestCase.class.isAssignableFrom(inTest.getClass()))
+    {
+      rtn.add(((TestCase)inTest).getName());
+    }
+    else
+    {
+      throw new NestedJUnitInitializationRuntimeException(
+        "Could not determine test case names for " + inTest.toString());
+    }
+    return rtn;
+  }
+
+  public boolean hasProblem()
+  {
+    return getRunFailedMessage() != null;
+  }
+
+  public String getRunFailedMessage()
+  {
+    return runFailedMessage;
+  }
+  
+  
+  /* This is important - not setting this to false expilcitly
+   * will cause Junit to create a new classloader instance for
+   * every class it loads, causing a OOM sooner or later.
+   * 
+   * @see junit.runner.BaseTestRunner#useReloadingTestSuiteLoader()
+   */
+  protected boolean useReloadingTestSuiteLoader()
+  {
+    return false;
+  }
+  
+  
+  private void storeFailedTestCaseName(String testCaseName)
+  {
+    getFailedTests().add(testCaseName);
+  }
+
+  private boolean loggedFailureFor(String testCaseName)
+  {
+    return getFailedTests().contains(testCaseName);
+  }
+  
+  private String getTestCaseName(Test test)
+  {
+    return getTestCaseName(test.toString());
+  }
+  
+  // ugly string hacking for now, can we get this from JUnit? 
+  // or just use reflection?
+  private String getTestCaseName(String fullTestName)
+  {
+    int parenIndex = fullTestName.indexOf('(');
+    return fullTestName.substring(0, parenIndex);
+  }
+
+  
+  private Test getJunitTest(String testClassName, Collection testMethodNames)
+  {
+    if (testMethodNames == null || testMethodNames.isEmpty())
+      return getTest(testClassName);
+    Class testClass = null;
+    try
+    {
+      testClass = loadSuiteClass(testClassName);
+    }
+    catch (Exception ex)
+    {
+      throw new NestedJUnitInitializationRuntimeException(ex);
+    } // If the methodName has been specified, the test must inherit
+    // from TestCase since we are expecting to use the TestCase(String)
+    // constructor to load the correct test for us.
+    if (!TestCase.class.isAssignableFrom(testClass)
+      && !TestSuite.class.isAssignableFrom(testClass))
+    {
+      throw new NestedJUnitInitializationRuntimeException(ASSIGNABLE_FROM_ERROR_MESSAGE);
+    }
+
+    TestSuite suite = new TestSuite();
+    // get the TestCase(String) constructor
+    Class[] parameterTypes = new Class[1];
+    parameterTypes[0] = String.class;
+    Constructor cons = null;
+    try
+    {
+      cons = testClass.getConstructor(parameterTypes);
+    }
+    catch (NoSuchMethodException ex)
+    {
+      throw new NestedJUnitInitializationRuntimeException(
+        ex,
+        NO_CONS_ERROR_MESSAGE);
+    }
+
+    if (validateTestMethodNames)
+    {
+      // this will throw an exception if any of the specified
+      // methods do not exist
+      checkTestMethodsExist(testClass, testMethodNames);
+    }
+
+    Object[] parameterObjs = new Object[1];
+    for (Iterator iter = testMethodNames.iterator(); iter.hasNext();)
+    {
+      parameterObjs[0] = iter.next();
+      try
+      {
+        Test t = (Test)cons.newInstance(parameterObjs);
+        suite.addTest(t);
+      }
+      catch (Exception ex)
+      {
+        throw new NestedJUnitInitializationRuntimeException(
+          ex,
+          "Unable to instantiate test class");
+      }
+    }
+    return suite;
+  }
+  
+  private void checkTestMethodsExist(
+    Class testClass,
+    Collection testMethodNames)
+  {
+    Collection methodsNotFound = new HashSet();
+    for (Iterator iter = testMethodNames.iterator(); iter.hasNext();)
+    {
+      String methodName = (String)iter.next();
+      // make sure that method actually exists
+      try
+      {
+        testClass.getMethod(methodName, null);
+      }
+      catch (NoSuchMethodException ex)
+      {
+        methodsNotFound.add(methodName);
+      }
+    }
+    if (!methodsNotFound.isEmpty())
+    {
+      throw new NestedJUnitInitializationRuntimeException(
+        "Could not find test method(s): " + methodsNotFound);
+    }
+  }
+  //lazy instantiation
+  private synchronized Collection getFailedTests()
+  {
+    if (failedTests == null)
+      failedTests = new HashSet();
+    return failedTests;
+  }
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/NestedJUnitInitializationRuntimeException.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/junit/NestedJUnitInitializationRuntimeException.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,27 @@
+package org.apache.beehive.peanut.junit;
+
+import org.apache.beehive.peanut.NestedRuntimeException;
+
+/**
+ * @author stoens
+ */
+public class NestedJUnitInitializationRuntimeException
+  extends NestedRuntimeException
+{
+  public NestedJUnitInitializationRuntimeException(String message)
+  {
+    super(message);
+  }
+
+  public NestedJUnitInitializationRuntimeException(Throwable th)
+  {
+    super(th);
+  }
+ 
+  public NestedJUnitInitializationRuntimeException(
+    Throwable th,
+    String message)
+  {
+    super(th, message);
+  }
+}

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/TestResult.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/TestResult.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,104 @@
+package org.apache.beehive.peanut.result;
+
+
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Map;
+
+
+
+public interface TestResult
+{
+  
+  /** Tells if the TestResult has a Throwable contained in it */
+  public boolean hasThrowable();
+  
+  /**
+   * Returns the first throwable associated with this result.
+   */
+  public Throwable getThrowable();
+  /** return true if this result represents something bad,
+   * FAILURE, SKIP, ABORT, SCRATCH, TIMEOUT, FRAMEABORT
+   */
+  public boolean isProblem ();
+  /** 
+   * return true if this is a SUCCESS result.
+   */
+  public boolean hasSucceeded();
+  /** return the timestamp */
+  //public Date getTimeStamp();
+  
+  /** return the duration */
+  //public Long getDuration();
+
+  /** return the output message */
+  public String getOutputMessage();
+  
+  /** return a more detailed output message, if available */
+  public String getDetails();
+
+  /** return the result info -- additional info about the result other
+      than its success/failure*/
+  public String getResultInfo();
+
+  /** return the path of the test */
+  public String getSourcePath();
+
+  public String getCustomPath();
+
+  /** return the test unit name */
+  public String getTestUnitName();
+
+  public String getCallingChain();
+
+  /** return the test name (test-point) */
+  public String getName();
+
+  /** return the test case name */
+  public String getTestCaseName();
+
+  public String getSubtestName();
+
+  /** return the review state this test is in */
+  public String getReviewState();
+  /** return the bug id associated with this test */
+  //public String getBugID();
+  /** return the comments for this test */
+  //public String getComments();
+  /** return the parameters accessed by this test */
+  public Map getParameters();
+  /** return an iterator of all the testresults contained in here */
+  public Iterator getInnerResultsIterator();
+
+  public String getErrorName();
+
+  //public Map getProcessOutput();
+  //public Map getProcessSummaryMap();
+  
+  //public Collection getMappedProcessNames();
+
+  //public String getCommandLine();
+  
+  /*
+   * @return Windows specific command line, if different from 
+   * regular command line. 
+   */
+  //public String getWinCommandLine();
+  
+  //public String getVerboseCommandLine();
+  
+  /*
+   * @return Windows specific command line, if different from
+   * regular command line. 
+   */
+  //public String getVerboseWinCommandLine();
+  
+  //public String getReplicationInfo();
+
+  //public String getFailureReplicationAntFile();
+
+ // public int getDebugLevel();
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/TestResultBean.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/TestResultBean.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,21 @@
+package org.apache.beehive.peanut.result;
+
+import java.util.Date;
+import java.util.Map;
+
+
+/**
+ * Holds TestResult information.
+ * <p>
+ * This only contains the setter() methods,
+ * and extends TestResult to get the getter() methods.
+ * 
+ * @author  Ugorji Dick-Nwoke ugorji.dick-nwoke@bea.com
+ * @version 1.0, Mar 3, 2001
+ */
+public interface TestResultBean extends TestResult
+{
+  /** sets the Throwable contained in it */
+  public void setThrowable(Throwable thr);
+  
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/Logger.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/Logger.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,88 @@
+package org.apache.beehive.peanut.result.logger;
+
+import org.apache.beehive.peanut.result.TestResult;
+import org.apache.beehive.peanut.Debug;
+
+import java.util.ArrayList;
+
+/**
+ * Logger is a singleton class.  Only once instance of it will ever be instantiated.  i hope
+ *
+ */
+public class Logger
+{
+  private static Logger _logger = null;
+  private static ArrayList results = new ArrayList();
+  public static int numTests = 0;
+  public static int numSuccess = 0;
+  
+  private static String _id;
+  
+  protected Logger()
+  {
+    Debug.log("==================LOGGER Created: " + _id, Debug.MSG_DEBUG);
+    Debug.log(this.getClass().getClassLoader().toString(), Debug.MSG_DEBUG);
+    Debug.log("Logger hashcode: " + System.identityHashCode((this.getClass()).getClassLoader()), Debug.MSG_DEBUG);
+  }
+  
+  public void log( String msg )
+  {
+    System.out.println(msg);
+  }
+  
+  /**
+   * Fetch a singleton
+   */
+  public static Logger getInstance()
+  {
+    return getInstance("[no id]");
+  }
+  public static Logger getInstance(String id)
+  {
+    if (_logger == null)
+    {
+      
+      _id = id;
+      _logger = new Logger();
+    }
+    else
+      Debug.log("==================Returning pre-made logger:" + _logger._id, Debug.MSG_DEBUG);
+    return _logger;
+  }
+  
+  
+  
+  public void log( TestResult tr )
+  {
+    numTests++;
+    if (!tr.isProblem())
+      numSuccess++;
+    results.add(tr);
+  }
+  
+  public void logProblem()
+  {
+    Debug.log("Logger.logProblem(" + _id + ")");
+    numTests++;
+  }
+  public void logSuccess()
+  {
+    Debug.log("Logger.logSuccess(" + _id + ")");
+    numTests++;
+    numSuccess++;
+  }
+  
+  public void printSummary()
+  {
+    System.out.println("--------------PEANUT----------------");
+    System.out.println("");
+    System.out.println("TEST RUN COMPLETED.");
+    System.out.println("");
+    if (numSuccess != numTests)
+      System.out.println("RUN HAD " + (numTests - numSuccess) + " FAILURE(S) AND " + numSuccess + " SUCCESS(ES)");
+    System.out.println("");
+    System.out.println("RAN " + numTests + " TESTS");
+    System.out.println("");
+    System.out.println("------------------------------------");
+  }
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/ResultLogger.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/ResultLogger.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,173 @@
+package org.apache.beehive.peanut.result.logger;
+
+import org.apache.beehive.peanut.util.PeanutUtils;
+import org.apache.beehive.peanut.Debug;
+
+public class ResultLogger
+{
+  private Logger logger = null;
+  
+  
+  public ResultLogger()
+  {
+    logger = Logger.getInstance("ResultLogger()");
+  }
+
+  
+  
+  /*private ResultHandler handler = null;
+
+  
+  private ResultHandler getResultHandler()
+  {
+    return handler;
+  }
+  */
+  
+  public void abort(
+    String message,
+    String subtestName,
+    Throwable th,
+    Throwable filterThrowable)
+  {
+    /*
+    ResultHelper.submitAbort(
+      getResultHandler(),
+      message,
+      subtestName,
+      th,
+      filterThrowable);
+    
+    logger.log("abort()");
+    logger.log("message: " + message);
+    logger.log("Throwable:" + th.toString());
+    logger.log("filterThrowable:" + filterThrowable.toString());
+    */
+    th.printStackTrace(System.out);
+    logger.log("--------------------------------");
+    logger.log("#ABORT '" + subtestName + "'");
+    logger.log("--------------------------------");
+    logger.log("");
+    logger.log("");
+    logger.logProblem();
+  }
+
+  public void begin(String subtestName)
+  {
+    //ResultHelper.submitBegin(getResultHandler(), subtestName);
+    
+    subtestName = PeanutUtils.deNull(subtestName);
+    logger.log("--------------------------------");
+    logger.log("#BEGIN: " + subtestName);
+    logger.log("--------------------------------");
+  }
+
+  public void debug(String message)
+  {
+    //ResultHelper.submitDebug(getResultHandler(), message);
+    message = PeanutUtils.deNull(message);
+    logger.log("#DEBUG: " + message);
+  }
+
+  public void success(String message)
+  {
+    //ResultHelper.submitSuccess(getResultHandler(), message);
+    message = PeanutUtils.deNull(message);
+    logger.log("--------------------------------");
+    logger.log("#SUCCESS: " + message);
+    logger.log("--------------------------------");
+    logger.log("");
+    logger.log("");
+    logger.logSuccess();
+  }
+
+  public void success(String message, String subtestName)
+  {
+    //ResultHelper.submitSuccess(getResultHandler(), message, subtestName);
+    message = PeanutUtils.deNull(message);
+    subtestName = PeanutUtils.deNull(subtestName);
+    logger.log("--------------------------------");
+    logger.log("#SUCCESS '" + subtestName + "'  " + message);
+    logger.log("--------------------------------");
+    logger.log("");
+    logger.log("");
+    logger.logSuccess();
+    
+  }
+
+  public void failure(String message, Throwable th)
+  {
+    //ResultHelper.submitFailure(getResultHandler(), message, th);
+    
+    message = PeanutUtils.deNull(message);
+    th.printStackTrace(System.out);
+    logger.log("--------------------------------");
+    logger.log("#FAILURE: " + message);
+    logger.log("--------------------------------");
+    logger.log("");
+    logger.log("");
+    logger.logProblem();
+  }
+
+  
+  public void failure(String message)
+  {
+    failure(message, (String)null);
+  }
+  public void failure(String message, String errorDetails)
+  {
+    failure(message, null, errorDetails, null, null);
+  }
+  public void failure(String message, String subtestName, Throwable th)
+  {
+    failure(message, subtestName, null, th, null);
+  }
+  public void failure(String message, String subtestName, Throwable th, Throwable filterThrowable)
+  {
+    failure(message, subtestName, null, th, filterThrowable);
+  }
+  public void failure(
+    String message,
+    String subtestName,
+    String errorDetails,
+    Throwable th,
+    Throwable filterThrowable)
+  {
+    /*
+    ResultHelper.submitFailure(
+      getResultHandler(),
+      message,
+      subtestName,
+      errorDetails,
+      th,
+      filterThrowable);
+    */
+    message = PeanutUtils.deNull(message);
+    subtestName = PeanutUtils.deNull(subtestName);
+    errorDetails = PeanutUtils.deNull(errorDetails);
+    
+    
+    th.printStackTrace(System.out);
+    logger.log("--------------------------------");
+    logger.log("#FAILURE '" + subtestName + "'");
+    logger.log("--------------------------------");
+    logger.log("");
+    logger.log("");
+    logger.logProblem();
+  }
+
+  public void inform(String message)
+  {
+    //ResultHelper.submitInform(getResultHandler(), message);
+    message = PeanutUtils.deNull(message);
+    logger.log("#INFORM: " + message);
+  }
+  
+  public void internal(String message)
+  {
+    //ResultHelper.submitInternal(getResultHandler(), message);
+    message = PeanutUtils.deNull(message);
+    logger.log("#INTERNAL: " + message);
+  }
+ 
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/SimpleLogger.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/result/logger/SimpleLogger.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,6 @@
+package org.apache.beehive.peanut.result.logger;
+
+public class SimpleLogger extends Logger
+{
+  
+}
\ No newline at end of file

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/AntUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/AntUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,232 @@
+package org.apache.beehive.peanut.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Location;
+import org.apache.tools.ant.Task;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class AntUtils
+{
+  public static final String ANT_PROP_PREFIX = "-D",
+    ANT_EQUALS = "=",
+    LOCATION_DELIMITER = ":";
+
+  /**
+   * Calls perform() on input Collection of Tasks
+   */
+  public static void perform(Collection tasks)
+  {
+    for (Iterator iter = tasks.iterator(); iter.hasNext();)
+    {
+      Task t = (Task)iter.next();
+      //System.out.println("ANTUTILS:  Calling perform on task:  "+t.getClass().getName());
+      t.perform();
+    }
+  }
+
+  public static String getSourcePath(Location location)
+  {
+    String path = location.toString().trim();
+    if (path.endsWith(":"))
+      path = path.substring(0, path.length() - 1);
+    return path;
+  }
+
+  public static String getLineNumber(Location location)
+  {
+    String path = location.toString().trim();
+    int afterNumColumnIndex = path.lastIndexOf(":");
+    int beforeNumColumnIndex = path.lastIndexOf(":", afterNumColumnIndex - 1);
+    return path.substring(beforeNumColumnIndex + 1, afterNumColumnIndex);
+  }
+
+/*  public static String getBuildfileName(Location location)
+  {
+    // Must hack this, parse the toString of the Location
+    String[] arr =
+      CoconutUtils.parseString(location.toString(), LOCATION_DELIMITER);
+
+    //System.out.println(CoconutUtils.arrayToString(arr," | "));
+
+    if (AntProperties.getAntVersion().startsWith("1.5"))
+    {
+      //System.out.println("FOO");
+      // Location looks like this:
+      // file:D:/weblogic/dev/tools/qa/blackhawk/deploy/examples/short-suite.xml:
+      if (arr.length == 4)
+        return arr[1]; //if on unix, no drive letter
+      else
+        //First one is drive letter, include the next
+        return arr[1] + LOCATION_DELIMITER + arr[2];
+    }
+    else
+    {
+      if (arr.length == 3)
+        return arr[0]; //if on unix, no drive letter
+      else
+        //First one is drive letter, include the next
+        return arr[0] + LOCATION_DELIMITER + arr[1];
+    }
+  }
+*/
+  public static void cloneTaskData(Task oldTask, Task newTask)
+  {
+    newTask.setProject(oldTask.getProject());
+    newTask.setOwningTarget(oldTask.getOwningTarget());
+    newTask.setLocation(oldTask.getLocation());
+    newTask.setRuntimeConfigurableWrapper(
+      oldTask.getRuntimeConfigurableWrapper());
+  }
+
+/*  public static void appendProperty(StringBuffer sb, String name, String value)
+  {
+    appendProperty(sb, name, value, new ArrayList());
+  }
+*/
+
+
+/*  public static void appendProperty(
+    StringBuffer sb,
+    String name,
+    String value,
+    Collection excludedPropNames)
+  {
+    if (!excludedPropNames.contains(name))
+    {
+      // the ordering of these ugly string replacements is important.
+      // first, convert all '\' to '/' to stuff runs fine on mks.
+      value = CoconutUtils.searchAndReplace(value, "\\", "/");
+      // second if value has '"', need to escape it
+	  value = CoconutUtils.searchAndReplace(value, "\"", "\\\"");
+      sb
+        .append(" ")
+        .append(ANT_PROP_PREFIX)
+        .append(name)
+        .append(ANT_EQUALS)
+        .append("\"")
+        // if value has '"', need to escape it
+        .append(value)
+        .append("\"");
+    }
+  }
+*/
+  public static Throwable unwrapBuildExceptions(Throwable t)
+  {
+    if (t instanceof BuildException)
+    {
+      BuildException be = (BuildException)t;
+      if (be.getException() != null)
+        return unwrapBuildExceptions(be.getException());
+      else
+        return t;
+    }
+    else
+      return t;
+  }
+
+/*  public static String appendProperty(String s, String name, String value)
+  {
+    StringBuffer sb = new StringBuffer(s);
+    appendProperty(sb, name, value);
+    return sb.toString();
+  }
+
+  public static void appendProperties(StringBuffer sb, Map properties)
+  {
+    appendProperties(sb, properties, new ArrayList());
+  }
+
+  public static void appendProperties(
+    StringBuffer sb,
+    Map properties,
+    Collection excludedPropNames)
+  {
+    for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();)
+    {
+      Map.Entry me = (Map.Entry)iter.next();
+      appendProperty(
+        sb,
+        (String)me.getKey(),
+        (String)me.getValue(),
+        excludedPropNames);
+    }
+  }
+
+  // returns Element -> name (String)
+  // same as getAllPropertyElementsByName, but inverse mapping
+  public static Map getAllPropertyElements(Document document)
+  {
+    Map ret = new OrderedMap();
+    NodeList nl = document.getDocumentElement().getChildNodes();
+    int length = nl.getLength();
+    for (int i = 0; i < length; i++)
+    {
+      Node node = nl.item(i);
+      if (node instanceof Element)
+      {
+        Element e = (Element)node;
+        if (e.getNodeName().equals("property"))
+        {
+          NamedNodeMap attrs = e.getAttributes();
+          Attr nameAttr = (Attr)attrs.getNamedItem("name");
+          if (nameAttr != null)
+          {
+            ret.put(e, nameAttr.getValue());
+          }
+        }
+      }
+    }
+    return ret;
+  }
+
+  // returns name (String) -> Element
+  //same as getAllPropertyElements, but inverse mapping
+  public static Map getAllPropertyElementsByName(Document document)
+  {
+    Map ret = new OrderedMap();
+    NodeList nl = document.getDocumentElement().getChildNodes();
+    int length = nl.getLength();
+    for (int i = 0; i < length; i++)
+    {
+      Node node = nl.item(i);
+      if (node instanceof Element)
+      {
+        Element e = (Element)node;
+        if (e.getNodeName().equals("property"))
+        {
+          NamedNodeMap attrs = e.getAttributes();
+          Attr nameAttr = (Attr)attrs.getNamedItem("name");
+          if (nameAttr != null)
+          {
+            ret.put(nameAttr.getValue(), e);
+          }
+        }
+      }
+    }
+    return ret;
+  }
+  
+  public static boolean buildListenerIsSupported()
+  {
+  	// we NPE in ant code if ant version < 1.5.2
+  	String version = AntProperties.getAntVersion();
+    if (version.startsWith("1.5"))
+      if (version.equals("1.5") || version.equals("1.5.1"))
+        return false;
+      else
+        return true;
+    else
+      return false;
+  }*/
+
+}

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/CaseInsensitiveStringKey.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/CaseInsensitiveStringKey.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,39 @@
+package org.apache.beehive.peanut.util;
+
+
+
+public class CaseInsensitiveStringKey
+{
+  private String s = null;
+  
+  public CaseInsensitiveStringKey(String inS)
+  {
+    s = inS;
+  }
+
+  public String getString()
+  {
+    return s;
+  }
+
+  public boolean equals(Object o)
+  {
+    if(o instanceof CaseInsensitiveStringKey)
+      return s.equalsIgnoreCase(((CaseInsensitiveStringKey)o).s);
+    else
+      return false;
+  }
+  
+  public int hashCode()
+  {
+    if(s!=null)
+      return s.toLowerCase().hashCode();
+    else
+      return 0;
+  }
+
+  public String toString()
+  {
+    return s;
+  }
+}

Added: incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/PeanutUtils.java
==============================================================================
--- (empty file)
+++ incubator/beehive/tools/peanut/src/org/apache/beehive/peanut/util/PeanutUtils.java	Fri Jul 16 17:06:19 2004
@@ -0,0 +1,120 @@
+package org.apache.beehive.peanut.util;
+
+import java.util.Collection;
+import java.util.StringTokenizer;
+
+public class PeanutUtils
+{
+  private static final String BOOLEAN_TRUE = "true";
+  private static final String BOOLEAN_FALSE = "false";
+  private static final String BOOLEAN_MESSAGE =
+    "This string needs to be either \"true\" or \"false\":  ";
+  
+  
+  public static String getDirectoryPath(String pathname)
+  {
+    int backwardInd = pathname.lastIndexOf("\\");
+    int forwardInd = pathname.lastIndexOf("/");
+    return pathname.substring(0, Math.max(backwardInd, forwardInd) + 1);
+  }
+  
+  
+  
+  /**
+   * Splits string using delimiter, returns Collection of Integers
+   */
+  public static void parseStringToIntegers(
+    String source,
+    String delimiter,
+    Collection inColl)
+  {
+    String[] arr = parseString(source, delimiter);
+    for (int i = 0; i < arr.length; i++)
+    {
+      inColl.add(new Integer(Integer.parseInt(arr[i])));
+    }
+  }
+  
+  
+  
+  /**
+   * Splits string using delimiter, returns Collection of Strings
+   */
+  public static void parseStringToStrings(
+    String source,
+    String delimiter,
+    Collection inColl)
+  {
+    String[] arr = parseString(source, delimiter);
+    for (int i = 0; i < arr.length; i++)
+    {
+      inColl.add(arr[i]);
+    }
+  }
+
+  
+  
+  
+  
+  
+  /**
+   * Splits string using delimiter, returns String array.
+   */
+  public static String[] parseString(String source, String delimiter)
+  {
+    StringTokenizer st = new StringTokenizer(source, delimiter);
+    String[] rtn = new String[st.countTokens()];
+    for (int count = 0; st.hasMoreTokens(); count++)
+    {
+      rtn[count] = st.nextToken().trim();
+    }
+    return rtn;
+  }
+  
+  
+  public static boolean parseBoolean(String s) throws ParsingException
+  {
+    String booleanString = s.trim();
+
+    if (booleanString.equalsIgnoreCase(BOOLEAN_TRUE))
+    {
+      return true;
+    }
+    else
+    {
+      if (booleanString.equalsIgnoreCase(BOOLEAN_FALSE))
+      {
+        return false;
+      }
+      else
+      {
+        throw new ParsingException(BOOLEAN_MESSAGE + s);
+      }
+    }
+  }
+  
+  
+  
+  public static String deNull( String s )
+  {
+    if (s == null)
+      s = new String("");
+    return s;
+  }
+  
+  
+  
+  
+  
+  
+  public static class ParsingException extends IllegalArgumentException
+  {
+    public ParsingException(String in)
+    {
+      super(in);
+    }
+  }
+  
+  
+  
+}
\ No newline at end of file